是否可以在MDX中循环几个变量?我想基于3个条件过滤我的查询,每个条件包含2 * 2 * 3个变量。我正在寻找一种比改变WHERE子句12次更好的方法来制作12个表并最终一起追加。
这就是我想象的样子:
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)
我从一个错误的角度思考它,我用交叉连接解决了它(我之前从未听说过)。
这是一篇关于交叉连接的好文章: http://www.databasejournal.com/features/mssql/article.php/10894_3334631_3/MDX-Essentials-Basic-Set-Functions-The-CrossJoin-Function.htm