为特定值MDX查询设置0

Gas*_*n G 1 sql ssas mdx cube sql-server-2008

我一直在寻找答案,但我没有找到任何答案.对不起,如果答案已在其他地方给出.

这是我的问题:

我有一个计算成员,即项目数(当前成员)除以项目总数(sumitem).

with 
member 
    sumitem
as 
    SUM ([FailureReason].[FailureReason].[All],[Measures].[Items])
member
    Impact
as
    [Measures].[Items]/[Measures].[SumItem]
Run Code Online (Sandbox Code Playgroud)

但对于我的维度FailureReason的特定成员,Impact的结果必须为0.所以我尝试添加这个:

member
    ImpactFinal
as
    iif ([FailureReason].CurrentMember = [FailureReason].[FailureReason].&[127], 
        0, 
        Impact
    )   
Run Code Online (Sandbox Code Playgroud)

我选择这样的数据:

select 
    {[Measures].[Items],
     ImpactFinal
     } on columns, 
    [FailureReason].members on rows 
from 
    NoOTAR
Run Code Online (Sandbox Code Playgroud)

但是,不是仅为此特定成员获取0,此维度的每个成员的ImpactFinal等于0.奇怪的是,如果我将0替换为任何其他值,结果是好的.

Ale*_*hik 5

只是用

[FailureReason].CurrentMember IS [FailureReason].[FailureReason].&[127]

代替

[FailureReason].CurrentMember = [FailureReason].[FailureReason].&[127]

它会起作用.

更新:几个提示:

  1. 也没有必要使用SUM函数,因为你只能定义元组,这对于服务器来说已经足够了:([FailureReason].[FailureReason].[All],[Measures].[Count])

  2. sumitemImpactFinal计算中检查除以零的度量是非常合理的.因为一旦应用了某些过滤器,这可能会导致将此度量和报告中的错误归零.

  3. 如果你有一个机会,不仅可以查询,但更新的立方体,SCOPE ([FailureReason].[FailureReason].&[127],[Measures].[Impact])THIS = 0是不是因为性能的额外成员更好.

祝你好运!

更新以修复总计:

如果总数不应该是FailureReason 127,您可以用以下方法替换您的措施:

member Impact
as
iif ([FailureReason].[FailureReason].CurrentMember is [FailureReason].[FailureReason].&[127],
        0,
        [Measures].[Items]
    )

member ImpactFinal
as 
iif ([FailureReason].[FailureReason].CurrentMember is [FailureReason].[FailureReason].[All]
    ,[Measures].[Items]-([FailureReason].[FailureReason].&[127],[Measures].[Items])
    ,[Measures].[Impact])/[Measures].[SumItem]
Run Code Online (Sandbox Code Playgroud)

但是我有另一个解决方案,它更具可读性:

member v2_ImpactUncountableFailure
as
iif ([FailureReason].[FailureReason].CurrentMember.Level.Ordinal=0
or 
[FailureReason].[FailureReason].CurrentMember is [FailureReason].[FailureReason].&[127]

,([FailureReason].[FailureReason].&[127],[Measures].[Items])
,null)

member v2_ImpactFinal
as
([Measures].[Items]-[Measures].[v2_ImpactUncountableFailure])
/
([FailureReason].[FailureReason].[All],[Measures].[Items])
Run Code Online (Sandbox Code Playgroud)

仅使用此两项措施,而不是措施设定sumitem,Impact,ImpactFinal.第一个将显示失败的结果-127和总数.第二个从清洁的未过滤措施中减去它,所以最后我们有干净的成员,归零失败-127和纠正的总数.

请告诉我,如果它不起作用,我已在我的数据库上测试过,一切正常.