3

一般来说,我对 MDX 和 SSAS 很陌生。我正在尝试以漂亮的表格形式获取所有度量和日期。所以像:

╔═════════╦══════╦═══════╗
║ Measure ║ Date ║ Value ║
╠═════════╬══════╬═══════╣
║  Meas1  ║   D1 ║     3 ║
║  Meas1  ║   D2 ║     8 ║
║  Meas1  ║   D3 ║     9 ║
║  Meas2  ║   D1 ║     7 ║
║  Meas2  ║   D2 ║     4 ║
╚══...════╩═══..═╩═══...═╝

我想在行轴上做一个交叉连接,但不知道在列轴上放什么。

有什么建议么?

4

1 回答 1

4

您可以将未使用的任何层次结构的默认成员放在列轴上。如果您的多维数据集中有一个层次结构[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查询中未提及的所有层次结构的默认成员(通常是成员),因此该解决方案的想法是将这些中的任意一个移动到列轴以使其成为非在不改变结果的情况下设置空集 - 如果您使用 eg 就会发生这种情况[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 的限制。

于 2013-10-08T17:12:30.443 回答