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] })
所以现在我获得了三年内每个市场的年度至今总和。现在我想在上面提到的小组中进一步分解这个总数。
当你说“我过滤查询”你的意思是你想看到你的结果不太行设置,或者你想要的数字的减少(相同的行)? –
嗨,我已经把它降到了8行(这是每个市场和每年 - 2015年,2016年和2017年的总和),但现在我想要进一步“钻取”它,可以这么说,通过添加正如我在帖子中所述的那些条件。到目前为止,我能想到的唯一的事情就是添加WHERE Condition1 = ABC,Condition2 = Direct,Condition3 = B2B,并且在所有条件中重复此操作,并在完成时将每个表格添加到一起,但这似乎是乏味,所以我认为这一定是更好的方法。所以基本上我想要更多的行,查看收入在不同条件下的分布情况 – joddm
我想我需要查看您尝试过的MDX,然后我可能会提供建议。 (但我可能不会!) –