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替换为任何其他值,结果是好的.
只是用
[FailureReason].CurrentMember IS [FailureReason].[FailureReason].&[127]
代替
[FailureReason].CurrentMember = [FailureReason].[FailureReason].&[127]
它会起作用.
更新:几个提示:
也没有必要使用SUM函数,因为你只能定义元组,这对于服务器来说已经足够了:([FailureReason].[FailureReason].[All],[Measures].[Count])
sumitem在ImpactFinal计算中检查除以零的度量是非常合理的.因为一旦应用了某些过滤器,这可能会导致将此度量和报告中的错误归零.
如果你有一个机会,不仅可以查询,但更新的立方体,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和纠正的总数.
请告诉我,如果它不起作用,我已在我的数据库上测试过,一切正常.
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |