MDX查询以过滤度量值的维度

时间:2013-07-11 10:49:10

标签: sql-server mdx

如果度量值不存在于该维度上,我想过滤掉维度,但我有一些包含一些原始数据的度量,即Infinity,1。#NN。 我正在使用NON EMPTY(),但它没有正确过滤数据,因为如果所有指标都为空,则过滤维度但在我的情况下,它也会获取“无限”维度:

Mdx查询:

SELECT
{ 
 [Measures].[1],
 [Measures].[2],
 [Measures].[3]
} DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS

, NON EMPTY Hierarchize (
 {
  DrilldownLevel ( { [Roles].[Dimension].[All] } )
 }
) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
, [Roles].[Roster Role].[Roster Role].[Roster Role - Enterprise]
, [Roles].[Roster Role].[Roster Role].[Roster Role - Group] ON ROWS
FROM [Cuve]
WHERE ( [Dates].[Calendar].[Calendar Year].&[2013], [Markets].[Market].&[1], [Areas].  [Area].&[8], [Roles].[Enterprise Role].&[2] )

我不能NONEMPTY(),因为如果任何度量标准为null,则删除维度,而如果所有都为null,则删除。

我希望我可以过滤掉维度,即度量值不是整数(例如,“无穷大”或其他数据),或者通过NOT IN()类型函数过滤掉它。

由于

1 个答案:

答案 0 :(得分:2)

首先,听起来你在测量的计算中除以0。如果可以,我会重写它们以返回null,其中分母为0。 这看起来像是:

IIF([Measures].[denominator] = 0, Null, [Measures].[Numerator/[Measures].[Denominator])

然后你可以使用Filter。我不太确定我对你的立方体结构有足够的了解来编写你的查询,但尝试这样的事情:

Select {
[Measures].[1], 
[Measures].[2], 
[Measures].3]} on COLUMNS, 
{ Filter([Roles].[Dimension].[Dimension].members, CoalesceEmpty([Measures].[1],[Measures].[2],[Measures].[3], 0) <> 0)
* ({[Roles].[Roster Role].[Roster Role].[Roster Role - Enterprise], [Roles].[Roster Role].[Roster Role].[Roster Role - Group]})} on ROWS
FROM [Cuve]
WHERE ( [Dates].[Calendar].[Calendar Year].&[2013], [Markets].[Market].&[1], [Areas].  [Area].&[8], [Roles].[Enterprise Role].&[2] )