2017-04-23 137 views
3

我是MDX查询的新手,并且在SSAS中工作。我有两个适合工作的查询,但我希望他们的输出组合在一个单一的结果。这两个查询在由where子句选择的城市中有所不同,但它们都来自同一个立方体并使用相同的度量。MDX:结合不同标准的输出

A_to_B:供应商城市A到消费者B市

SELECT { [Measures].[Quantity - Transactions] } ON COLUMNS, 
     { [Tb Product].[Name].[Name].ALLMEMBERS } ON ROWS 
FROM [Cube] 
WHERE ([Tb Supplier].[City].&[A], 
     [Tb Consumer].[City].&[B]) 

B_to_A:供应商B城到消费城市一个

SELECT { [Measures].[Quantity - Transactions] } ON COLUMNS, 
     { [Tb Product].[Name].[Name].ALLMEMBERS } ON ROWS 
FROM [Cube] 
WHERE ([Tb Supplier].[City].&[B], 
     [Tb Consumer].[City].&[A]) 

是否有这些查询的输出方式按照产品并排生产,像这样?在SQL中,我会使用FULL OUTER JOIN,但我无法弄清MDX中的等价物。

 
|   | A_to_B | B_to_A | 
| ProductA |  10 |  2 | 
| ProductB | 100 |  0 | 
| ProductC |  0 |  99 | 

回答

3

只需将你在哪里报表列:

With 

Member [Tb Supplier].[City].[B2A] as 
Aggregate([Tb Supplier].[City].&[B], [Tb Consumer].[City].&[A]) 

Member [Tb Supplier].[City].[A2B] as 
Aggregate([Tb Supplier].[City].&[A], [Tb Consumer].[City].&[B]) 

Select 
    {[Tb Supplier].[City].[A2B],[Tb Supplier].[City].[B2A]} on 0 
From [Cube] 
Where ([Measures].[Quantity - Transactions]) 
+1

如果您还将'[Measures]。[Quantity - Transactions]'移到WHERE子句中,它会更整齐吗? – whytheq

+0

完美无缺。 ;) –

+0

编辑之后是否“完美”? ;) – whytheq

1

我测试了这个剧本,它抛出一个异常:

Select 
{[Measures].[Quantity - Transactions]} * 
{ 
    ([Tb Supplier].[City].&[B], [Tb Consumer].[City].&[A]), 
    ([Tb Supplier].[City].&[A], [Tb Consumer].[City].&[B]) 
} on 0, 
{[Tb Product].[Name].[Name].AllMembers} on 1 
From [Cube] 

你可能为了团结两个元创建计算成员:

SELECT 
    {[Measures].[Internet Sales Amount]} 
    * 
    { 
     {[Geography].[Geography].[Country].&[United States] * [Product].[Category].&[1]} 
    ,{[Geography].[Geography].[Country].&[France] * [Product].[Category].&[3]} 
    } ON 0 
,{[Date].[Calendar].[Date].&[20070801]} ON 1 
FROM [Adventure Works]; 

此消息:

查询(5,7)函数需要参数为1的 参数的元组集表达式。使用了一个字符串或数字表达式。

这是因为您需要使交叉连接的任一侧具体为一个集合 - 没有额外的括号它不知道这一点并引发异常。

所以这是脚本的“完美”的版本:

SELECT 
    {[Measures].[Internet Sales Amount]} 
    * 
    { 
     {[Geography].[Geography].[Country].&[United States]} * {[Product].[Category].&[1]} 
    ,{[Geography].[Geography].[Country].&[France]} * {[Product].[Category].&[3]} 
    } ON 0 
,{[Date].[Calendar].[Date].&[20070801]} ON 1 
FROM [Adventure Works]; 

我宁愿措施移动到WHERE子句,也摆脱一些多余的括号:

SELECT 
    { 
     {[Geography].[Geography].[Country].&[United States]} 
    * 
     {[Product].[Category].&[1]} 
    , 
     {[Geography].[Geography].[Country].&[France]} 
    * 
     {[Product].[Category].&[3]} 
    } ON 0 
,[Date].[Calendar].[Date].&[20070801] ON 1 
FROM [Adventure Works] 
WHERE 
    [Measures].[Internet Sales Amount]; 

翻译成你的立方体:

SELECT 
    { 
    {[Tb Supplier].[City].&[B]} * {[Tb Consumer].[City].&[A]} 
    , 
    {[Tb Supplier].[City].&[A]} * {[Tb Consumer].[City].&[B]} 
    } ON 0 
,[Tb Product].[Name].[Name].ALLMEMBERS ON 1 
FROM [Cube] 
WHERE 
    [Measures].[Quantity - Transactions]; 
+0

啊,对了,谢谢你的改正!我已经更新了我的答案。也可以使用[*] [([D1],[H1]。[M1],[D2],[H2]。[M2]),([D1],[H1]。[M2],[D2] ,[H 2] [M1])}。 –

0

建立在别人,这里是一个零代替空s输出。

With 

Member [Tb Supplier].[City].[B2A] as 
Aggregate([Tb Supplier].[City].&[B], [Tb Consumer].[City].&[A]) 

Member [Tb Supplier].[City].[A2B] as 
Aggregate([Tb Supplier].[City].&[A], [Tb Consumer].[City].&[B]) 

Member [Measures].[Quantity_Transactions] as 
    Iif(IsEmpty([Measures].[Quantity - Transactions]), 
    0, 
    [Measures].[Quantity - Transactions]) 

SELECT 
    { [Measures].[Quantity_Transactions] } * 
    { [Tb Supplier].[City].[B2A], 
     [Tb Supplier].[City].[A2B] } on COLUMNS 
    , [Tb Product].[Name].[Name].ALLMEMBERS ON ROWS 
FROM [Cube] 
相关问题