我是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>
我尝试过上面代码的不同变体,但似乎都没有用(有些甚至会在我尝试运行报告时导致崩溃)。过去任何人都做过这样的事情可以给我一个答案吗?
你需要根据某种衡量标准来评估该元组。请记住,在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>
如果可能的话,最好使用IIF
而不是CASE
,因为它通常更快。假设[JobDim.Job Status].[Complete]
是您的立方体中的成员,那么IS
运算符应该可以使用:
IIF(
[JobDim.Job Status].CurrentMember
IS [JobDim.Job Status].[Complete]
,100
,200
)