按多个维度成员进行 MDX 过滤

MDX filtering by multiple dimension members

问题

我需要创建一个报告,其中将列出许多符合特定条件的帐户 - simulationDatestatisticPeriodregion

现在我的查询如下所示:

WITH MEMBER [Measures].[Count] as 1
SELECT [Measures].[Count] ON COLUMNS,
NON EMPTY 
Crossjoin(
[Account].[Account Number].ALLMEMBERS,
{[simulationDate].[day].&[10010101]},
{[statisticPeriod].[period].&[201201]},
{[region].[code].&[SO]}
)
ON COLUMNS
FROM [myWH]

这个跨维度过滤可以吗?

使用 * 表示法而不是 Crossjoin 函数稍微现代一些:

WITH 
  MEMBER [Measures].[Count] AS 1 
SELECT 
  [Measures].[Count] ON COLUMNS
 ,NON EMPTY 
      [Account].[Account Number].ALLMEMBERS*
      {[simulationDate].[day].&[10010101]}*
      {[statisticPeriod].[period].&[201201]}*
      {[region].[code].&[SO]} ON COLUMNS
FROM [myWH];

我假设您的自定义度量 [Measures].[Count] 只是一个占位符?

如果您在 COLUMNS 上进行交叉连接,则此 table 将非常宽,但这可能只是一个错字:

WITH 
  MEMBER [Measures].[Count] AS 1 
SELECT 
  [Measures].[Count] ON COLUMNS, 
  NON EMPTY 
      [Account].[Account Number].ALLMEMBERS*
      {[simulationDate].[day].&[10010101]}*
      {[statisticPeriod].[period].&[201201]}*
      {[region].[code].&[SO]} ON ROWS
FROM [myWH];

您已在行交叉连接前添加关键字 NON EMPTY。这告诉处理器排除任何空行 - [Measures].[Count] 为空......但是这个度量是 never 空它总是等于 1。所以下面没有 Non Empty 应该 return 完全相同的结果:

WITH 
  MEMBER [Measures].[Count] AS 1 
SELECT 
  [Measures].[Count] ON COLUMNS, 
      [Account].[Account Number].ALLMEMBERS*
      {[simulationDate].[day].&[10010101]}*
      {[statisticPeriod].[period].&[201201]}*
      {[region].[code].&[SO]} ON ROWS
FROM [myWH];

因此,就过滤而言,您没有做任何事情 - 您需要什么样的过滤?如果您将 [Measures].[Count] 替换为多维数据集的实际度量并使用 NON EMPTY,那么您应该看到更少的行:

SELECT 
  [Measures].[ReplaceWithActualMeasure] ON COLUMNS, 
  NON EMPTY
      [Account].[Account Number].ALLMEMBERS*
      {[simulationDate].[day].&[10010101]}*
      {[statisticPeriod].[period].&[201201]}*
      {[region].[code].&[SO]} ON ROWS
FROM [myWH];

最后我最终使用过滤器作为我的列,并让 NON EMPTY 子句负责过滤:

SELECT 
 NON EMPTY 
    {[simulationDate].[day].&[10010101]} *
    {[statisticPeriod].[period].&[201201]} *
    {[region].[code].&[SO]}
 ON COLUMNS,
 NON EMPTY
    [Account].[Account Number].ALLMEMBERS 
 ON ROWS
FROM [myWH]