MDX如何使用CASE检查级别值

时间:2017-07-03 21:23:47

标签: case mdx

我是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>

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

IIF( 
     [JobDim.Job Status].CurrentMember
                    IS [JobDim.Job Status].[Complete]
     ,100
     ,200
)