我进行了搜索和搜索,找不到应该相当简单的答案。
我有一个维度的员工层次结构。员工有积分(在事实表中)。当我将层次结构拖到行上时,我可以很容易地看到正确求和的点。问题在于,根据工作代码判断员工的不同,这不一定与层次结构中的级别相对应。
例如,我有项目工程师Is。他们根据个人观点进行评判。我可以将Name拉到行上,按作业代码过滤,并将点放入度量中,我确切地知道用户想看到的内容。
项目工程师IIs是一个不同的故事。他们根据TEAM积分进行评判。我将名称拉到行上,按作业代码过滤,我需要一个计算的度量来总结属于它们的所有点,就像我将层次结构拖到行上一样。问题是我似乎无法将Name或EmployeeID与层次结构相关联以获得该团队价值。事实上,我甚至无法获取Employee ID主键,因为它隐藏在父子层次结构下。我必须抓住它的副本。
我如何达到这个要求?我已经尝试了很多不同的MDX(我不是专家的语言),但关键的块似乎是我无法根据行值获得层次结构成员。就好像它们完全不相关,事实上,我知道我的密钥副本只涉及层次结构中的一个且只有一个特定成员。出于这个原因,我也认为它可能不是MDX,因为维度属性/关系/属性可能需要更改。
请帮忙!如果有任何问题我可以回答有关立方体或要求的问题,请告诉我。
更新:我已使用桥接表和多对多关系设置维度,如以下链接所述:http://www.sqlbi.com/wp-content/uploads/The_Many-to-Many_Revolution_2.0.pdf(第70页)。我没有提及它,因为我认为它没有是相关的,它覆盖了问题。我这样设置是因为既有正式的层次结构,也有非正式的层次结构。从概念上讲,我不明白它是如何重要的,因为父子关系正是你所期望的 - 有一个父字段对应一个键值。
答案 0 :(得分:0)
我能够解决这个问题。
我使用以下MDX来创建一个命名集,基本上给了我以前无法获得的内容 - 父子层次结构的实际叶子成员,而不是它的副本。
DESCENDANTS([Vw Dim Employee Hierarchies].[PIDH Name].&[37Informal]
, [Vw Dim Employee Hierarchies].[PIDH Name].Levels.Count - 1
, LEAVES)
成员37Informal是非正式层次结构的根,我指定了底层,而leaves选项返回根成员和指定级别之间层次结构的所有叶级成员。
然后我可以通过将命名集中每个成员的值与层次结构中的父成员进行比较来创建我需要的“TeamPoints”计算成员。如果它是同一个名字,那么我总结了他的观点以及他所有的兄弟姐妹的观点。如果没有,我只是回复了他的观点。代码如下:
CASE WHEN [Vw Dim Employee Hierarchies].[PIDH Name].CurrentMember.Parent.Name =
[Vw Dim Employee Hierarchies].[PIDH Name].CurrentMember.Name
THEN SUM(
{[Vw Dim Employee Hierarchies].[PIDH Name].CurrentMember.Siblings
* UNION({[Vw Dim Employee Hierarchies].[Job Code].&[ENGOPROF]}
, {[Vw Dim Employee Hierarchies].[Job Code].&[PROJENG]}
, {[Vw Dim Employee Hierarchies].[Job Code].&[INTRNENG]})}
, [Measures].[Points])
ELSE [Measures].[Points]
END
密钥实际上是命名集。没有它,我无法从行的层次结构中获取所有叶节点,我需要计算成员才能在CurrentMember的上下文中正确评估。