【问题标题】:using scope with calculated member将范围与计算成员一起使用
【发布时间】:2013-09-12 17:51:20
【问题描述】:

我的计算成员有问题。每当此成员涉及计算或查询时,它都会花费大量时间来执行。我正在尝试缩短执行时间。 我必须从成员中删除 IIF 条件并开始使用范围。

CREATE Member CurrentCube.[Measures].[AvgAmount]  as
IIF(ISLeaf([Customer].[ParentCustomer].currentmember),
    [Measures].[Value], 
    (SUM([CCube^Customer].[ParentCustomer].CURRENTMEMBER.CHILDREN) /
     COUNT([Customer].[ParentCustomer].CURRENTMEMBER.CHILDREN))
   ) , 
Format_String = "#.0000000;-#.0000000;0;0",
Non_Empty_Behavior = [Measures].[Amout];

我在这里创建了 [ParentCustomer] 的客户层次结构。我想查看父客户下所有子级的平均数量,但是当我查看其中没有任何子级的子级时,应该只显示 [Measures].[Amout]。

提前致谢

问候, 山姆

【问题讨论】:

    标签: ssas mdx cube


    【解决方案1】:

    根据您的问题,我假设您真的想要孩子的平均值,而不是所有叶级后代的平均值。后者可以按如下方式实现:

    在客户维度表上创建一个新的度量值组,该度量值组具有一个度量值“客户计数”,该度量值将被实现为计数 - 或您的客户维度作为比单个客户更精细的粒度 - 客户的 countdistinct钥匙或类似的东西。 然后只需将您的度量定义为

    CREATE Member CurrentCube.[Measures].[AvgAmount]  as
        [Measures].[Value] / [Measures].[customer count], 
    Format_String = "#.0000000;-#.0000000;0;0",
    Non_Empty_Behavior = [Measures].[Amout];
    

    这假设 [Measures].[Value] 的聚合被定义为 sum 或半加性聚合之一,但不是 maxmin 或类似的东西。

    但是,我从您的问题中假设这不是您想要的。相反,您希望查看每个级别的孩子的平均值。我假设[Customer].[ParentCustomer] 是标准用户层次结构,而不是父子层次结构。然后,标题中建议的方法,使用SCOPE,将起作用。假设您的[Customer].[ParentCustomer] 层次结构中有三个级别:

    • (隐式定义的)所有级别,仅包含All 成员
    • 级别A,由维度的属性A构建
    • level B,叶层,由维度的属性B构建

    然后,在关于 [Measures].[Value] 聚合的类似假设下,您可以如下定义 AvgAmount 度量:

    // create the measure as it is correct for level B:
    CREATE Member CurrentCube.[Measures].[AvgAmount]  as
        [Measures].[Value], 
    Format_String = "#.0000000;-#.0000000;0;0",
    Non_Empty_Behavior = [Measures].[Amout];
    
    // overwrite the definition for level A:
    SCOPE([Customer].[ParentCustomer].[A].Members);
        [Measures].[AvgAmount] =  [Measures].[Value] / (EXISTING [Customer].[B].[B].Members).Count
    END SCOPE;
    
    // overwrite the definition for the ALl level:
    SCOPE([Customer].[ParentCustomer].&[All]);
        [Measures].[AvgAmount] =  [Measures].[Value] / (EXISTING [Customer].[A].[A].Members).Count
    END SCOPE;
    

    这种使用 SCOPE 的方法不适用于父子层次结构,但你不写你有一个,我只是假设你没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2019-04-12
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2017-01-30
      相关资源
      最近更新 更多