MDX如何使用CASE检查级别值

问题描述 投票:-1回答:2

我是BI和MDX的新手,需要这样做。我的维度看起来像这样:

<Dimension name="JobDim">
    <Hierarchy name="Job" hasAll="true" primaryKey="jobID">
        <Table name="JobDim" schema="dw"/>
        <Level name="Job Code" column="jobCode" type="String" uniqueMembers="false"/>
    </Hierarchy>
    <Hierarchy name="Job Status" hasAll="true" primaryKey="jobID">
        <Table name="JobDim" schema="dw"/>
        <Level name="Job Status" column="status" type="String" hideMemberIf="IfBlankName"/>
    </Hierarchy>
</Dimension>

我有一个计算的度量,我需要根据“作业状态”设置此度量的值,因此如果作业是“完成”,则将度量设置为100,否则将其值设置为200(要使用的值)更复杂但是出于这个例子的目的,这已经足够了)。我正在使用这样的东西:

    <CalculatedMember name="Earned Revenue" dimension="Measures" formatString="$#,###.00;($#,###.00)" aggregator="sum">
        <Formula>case [JobDim.Job Status].CurrentMember
                    when [JobDim.Job Status].[Complete] then 100
                    else 200
                 end
        </Formula>
    </CalculatedMember>

我尝试过上面代码的不同变体,但似乎都没有用(有些甚至会在我尝试运行报告时导致崩溃)。过去任何人都做过这样的事情可以给我一个答案吗?

case mdx
2个回答
0
投票

你需要根据某种衡量标准来评估该元组。请记住,在MDX中,评估是针对级别/聚合结果而不是逐行进行的。

从您的描述看起来,Job Status应该是级别Job Code的属性,而不是级别。

在您的架构上尝试以下操作:

<Dimension name="JobDim"> <Hierarchy name="Job" hasAll="true" primaryKey="jobID"> <Table name="JobDim" schema="dw"/> <Level name="Job Code" column="jobCode" type="String" uniqueMembers="false"> <Property name="Job Status" column="status" type="String"/> </Level> </Hierarchy> </Dimension>

并根据您的计算量度

<CalculatedMember name="Earned Revenue" dimension="Measures" formatString="$#,###.00;($#,###.00)" aggregator="sum"> <Formula>case [JobDim.Job Status].CurrentMember.Properties("Job Status") when "Complete" then 100 else 200 end </Formula> </CalculatedMember>


0
投票

如果可能的话,最好使用IIF而不是CASE,因为它通常更快。假设[JobDim.Job Status].[Complete]是您的立方体中的成员,那么IS运算符应该可以使用:

IIF( 
     [JobDim.Job Status].CurrentMember
                    IS [JobDim.Job Status].[Complete]
     ,100
     ,200
)
© www.soinside.com 2019 - 2024. All rights reserved.