使用mxd和ssas 2012的基于层次结构级别的条件计算

时间:2017-07-05 14:29:34

标签: sql-server ssas mdx hierarchy

我正在尝试基于层次结构级别执行一些条件逻辑。 在我的ssas cube中,我定义了以下层次结构:

    • 工作小组
      • 员工

我想创建一个计算成员“效率”

DIVIDE([Measures].[A], [Measures].[B])

但仅限于员工级别。对于所有其他级别,我需要将员工排除在哪里

[Measures].[c] = 1

我不确定如何实现这一点,我希望有人可以帮助我。

提前致谢!

编辑我当前的代码是这样的。问题是成员不会在子团队和团队级别上进行过滤

    case when [Organigram].[Hierarchy].Currentmember.level IS [Organigram].[Hierarchy].[Employee] 
        then DIVIDE([Measures].[a] , [Measures].[b])
        else 
           case when [Measures].[c] = 0
               then DIVIDE([Measures].[a] , [Measures].[b])
               else NULL 
           end
    END,

1 个答案:

答案 0 :(得分:0)

继续@whytheq的评论

使用WITH MEMBER创建新度量,并在其中使用IIF测试。在你将第二个IIF嵌套在那里以检查[Measures].[c]之前,首先正确地运行这样的工作......

WITH MEMBER [Measures].[Efficiency] 
AS 'IIF(
   [Organigram].[Hierarchy].Currentmember.level IS [Organigram].[Hierarchy].[Employee], 
   [Measures].[a] / [Measures].[b], 
   NULL
)'
SELECT 
{[Organigram].[NameOfLevel].members} ON ROWS, 
{[Measures].[Efficiency]} ON COLUMNS 
FROM [CubeName] 

一旦简单的查询工作,逐渐添加一点点就会变得更复杂。

您还可以使用.LevelName.LevelDepth属性查看您所处的级别。这可能会使您的MDX更短,更易读,也可能不会。