多维成员进行MDX过滤

时间:2015-06-19 14:25:15

标签: sql sql-server ssas mdx

问题

我需要创建一个报告,列出符合特定条件的多个帐户 - 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]

这种跨维过滤可以吗?

2 个答案:

答案 0 :(得分:3)

使用*符号代替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上进行交叉加入,则此表格会非常广泛,但这可能只是一个错字:

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]空为空....但是这个度量从不为空它总是等于1.所以下面没有{{ 1}}应该返回完全相同的结果:

Non Empty

所以在过滤方面你没有做任何事 - 你需要什么样的过滤?如果您使用多维数据集中的实际度量替换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]; 并使用NON EMPTY,那么您应该会看到更少的行:

[Measures].[Count]

答案 1 :(得分:0)

最后我最终使用过滤器作为我的列,并让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]