2017-08-02 86 views
0

是否可以循环MDX中的多个变量?我想根据3个条件过滤我的查询,每个条件包含2 * 2 * 3个变量。我正在寻找一种更好的方式,而不是将12次WHERE子句改为12次,最后一起追加。MDX:循环遍历变量并填充表格

这就是我想象它会是什么样子:

Market 2015 2016 2017 Condition1 Condition2 Condition3 
Market 1 $$ $$ $$  ABC  Direct  B2B 
Market 1 $$ $$ $$  ABC  Direct  B2C 
Market 1 $$ $$ $$  ABC  Direct  Other 
Market 1 $$ $$ $$  ABC  Trade  B2B 
Market 1 $$ $$ $$  ABC  Trade  B2C 
Market 1 $$ $$ $$  ABC  Trade  Other 
Market 1 $$ $$ $$  DEF  Direct  B2B 
Market 1 $$ $$ $$  DEF  Direct  B2C 
Market 1 $$ $$ $$  DEF  Direct  Other 
Market 1 $$ $$ $$  DEF  Trade  B2B 
Market 1 $$ $$ $$  DEF  Trade  B2C 
Market 1 $$ $$ $$  DEF  Trade  Other 
     ... 

编辑:这是我的查询(可能不是最佳的,因为我在MDX总小白):

WITH 
SET [Market1] AS (
    [Market].[Market].[Market].&[103], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    )) 


SET [Market2] AS (
    [Market].[Market].[Market].&[106], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[192], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[157]} 
    )) 


SET [Market3] AS {(
    [Market].[Market].[Market].&[102], 
    EXCEPT({[Source Currency].[Source Currency Code].[All].children}, 
     {[Source Currency].[Source Currency Code].[EUR], 
     [Source Currency].[Source Currency Code].[USD]}), 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[112], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[309]}) 
    ), 
    (
    [Market].[Market].[Market].&[102], 
    [Source Currency].[Source Currency Code].[EUR], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[186] 
    )} 


SET [Market4] AS { 
    ([Market].[Market].[Market].&[105], 
    [Source Currency].[Source Currency Code].[All]), 
    ([Market].[Market].[Market].&[102], 
    [Source Currency].[Source Currency Code].[USD])} 

SET [Market5] AS {(
    [Market].[Market].[Market].&[102], 
    [Source Currency].[Source Currency Code].[EUR], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[112], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[186], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[139], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[180], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[188], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[234], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[269], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[291], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[185], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[195], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[203], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[253], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[283], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[243] 
     })), 
    (
    [Market].[Market].[Market].&[102], 
    [Source Currency].[Source Currency Code].[GBP], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[309] 
    ), 
    (
    [Market].[Market].[Market].&[103], 
    [Source Currency].[Source Currency Code].[All], 
    {[Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    ), 
    (
    [Market].[Market].[Market].&[106], 
    [Source Currency].[Source Currency Code].[All], 
    {[Agency].[Nationality - Consortium - Agency].[Nationality].&[192], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[157]} 
    )} 

SET [Market6] AS {(
    [Market].[Market].[Market].&[102], 
    [Source Currency].[Source Currency Code].[All], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[112] 
    ), 
    ([Market].[Market].[Market].&[102], 
    [Source Currency].[Source Currency Code].[EUR], 
    {[Agency].[Nationality - Consortium - Agency].[Nationality].&[139], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[180], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[188], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[234], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[269], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[291], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[185], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[195], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[203], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[253], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[283], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[243] 
    })} 

SET [Market7] AS (
    [Market].[Market].[Market].&[104], 
    EXCEPT({[Agency].[Market - Agency].[Agency].ALLMEMBERS}, 
     {[Agency].[Market - Agency].[Agency].&[155861]} 
    )) 

SET [Market8] AS (
    [Market].[Market].[Market].&[104], 
    [Agency].[Market - Agency].[Agency].&[155861] 
) 

SET [YTD2015] AS (
[Departure Date].[Year].&[2015], 
StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718 - 731)) + "]") 
) 

SET [YTD2016] AS (
[Departure Date].[Year].&[2016], 
StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718 - 365)) + "]") 
) 

SET [YTD2017] AS (
[Departure Date].[Year].&[2017], 
StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]") 
) 

MEMBER [Market].[Market].[Market1] AS 
SUM([Market1], [Measures].[Price]) 

MEMBER [Market].[Market].[Market2] AS 
SUM([Market2], [Measures].[Price]) 

MEMBER [Market].[Market].[Market3] AS 
SUM([Market3], [Measures].[Price]) 

MEMBER [Market].[Market].[Market4] AS 
SUM([Market4], [Measures].[Price]) 

MEMBER [Market].[Market].[Market5] AS 
SUM([Market5], [Measures].[Price]) 

MEMBER [Market].[Market].[Market6] AS 
SUM([Market6], [Measures].[Price]) 

MEMBER [Market].[Market].[Market7] AS 
SUM([Market7], [Measures].[Price]) 

MEMBER [Market].[Market].[Market8] AS 
SUM([Market8], [Measures].[Price]) 

MEMBER [Market].[Market].[Grand Total] AS 
SUM([Market].[Market].[All], [Measures].[Price]) 

SELECT {[YTD2015], [YTD2016], 
     [YTD2017]} ON COLUMNS, 
    {[Market].[Market].[Market1], [Market].[Market].[Market2], 
    [Market].[Market].[Market3], [Market].[Market].[Market4], 
    [Market].[Market].[Market5], [Market].[Market].[Market6], 
    [Market].[Market].[Market7], [Market].[Market].[Market8], 
    [Market].[Market].[Grand Total]} ON ROWS 
FROM [Booking] 
WHERE ({ [Travel Type].[Travel Type].&[101], 
     [Travel Type].[Travel Type].&[102], 
     [Travel Type].[Travel Type].&[103] }) 

所以现在我获得了三年内每个市场的年度至今总和。现在我想在上面提到的小组中进一步分解这个总数。

+0

当你说“我过滤查询”你的意思是你想看到你的结果不太行设置,或者你想要的数字的减少(相同的行)? –

+0

嗨,我已经把它降到了8行(这是每个市场和每年 - 2015年,2016年和2017年的总和),但现在我想要进一步“钻取”它,可以这么说,通过添加正如我在帖子中所述的那些条件。到目前为止,我能想到的唯一的事情就是添加WHERE Con​​dition1 = ABC,Condition2 = Direct,Condition3 = B2B,并且在所有条件中重复此操作,并在完成时将每个表格添加到一起,但这似乎是乏味,所以我认为这一定是更好的方法。所以基本上我想要更多的行,查看收入在不同条件下的分布情况 – joddm

+0

我想我需要查看您尝试过的MDX,然后我可能会提供建议。 (但我可能不会!) –

回答