我对MDX和SSAS一般都很陌生。我正在尝试以一个很好的表格形式获取所有度量和日期。如下所示:
╔═════════╦══════╦═══════╗
║ Measure ║ Date ║ Value ║
╠═════════╬══════╬═══════╣
║ Meas1 ║ D1 ║ 3 ║
║ Meas1 ║ D2 ║ 8 ║
║ Meas1 ║ D3 ║ 9 ║
║ Meas2 ║ D1 ║ 7 ║
║ Meas2 ║ D2 ║ 4 ║
╚══...════╩═══..═╩═══...═╝
我想过在行轴上进行交叉连接,但不确定要在列轴上放置什么。
有什么建议吗?
答案 0 :(得分:4)
您可以在列轴上放置您未使用的任何层次结构的默认成员。如果你有你的立方体e。 G。层次结构[Geography].[City]
,其默认成员为[Geography].[City].&[All]
,您的查询可能如下所示:
SELECT [Geography].[City].&[All]
ON COLUMNS,
{ [Measures].[Meas1], [Measures].[Meas2] }
*
{ [Date].[Month].[D1], [Date].[Month].[D2], [Date].[Month].[D3] }
ON ROWS
FROM [YourCube]
实际上,问题是MDX中的轴必须处于正确的顺序,如果不包含之前的所有轴,则查询中不能有任何轴。并且由于列轴是第二个(编号为1,因为编号从列轴开始为0),列轴必须在那里。所以问题是你必须将一个非空集放入列轴。并且由于始终存在一个隐式切片器轴,其中包含查询中未提及的所有层次结构的默认成员(通常是All
成员),此解决方案的想法是将任意这些任意移动到列轴在不改变结果的情况下使它成为非空集 - 如果你使用了e,就会发生这种情况。 G。 [Geography].[City].Members
,因为这些价值会按城市细分显示。
如果您希望将度量和日期放入列轴,这将更加容易,因为这是第一个轴。然后查询可能就是:
SELECT { [Measures].[Meas1], [Measures].[Meas2] }
*
{ [Date].[Month].[D1], [Date].[Month].[D2], [Date].[Month].[D3] }
ON COLUMNS
FROM [YourCube]
如果您不需要这些值,您可以在列上使用空集:
SELECT {}
ON COLUMNS,
{ [Measures].[Meas1], [Measures].[Meas2] }
*
{ [Date].[Month].[D1], [Date].[Month].[D2], [Date].[Month].[D3] }
ON ROWS
FROM [YourCube]
但是,你只需拥有行标题,而不是列中的值列。
请注意,查询可以包含MDX概念中的零个,一个,两个,三个或更多个轴。大多数客户端工具(包括SSMS)都难以显示具有两个以上轴的结果集。但这是对客户端工具的限制,而不是对MDX的限制。