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