【问题标题】:Measure lacking context测量缺乏上下文
【发布时间】:2014-11-14 13:03:11
【问题描述】:

我正在努力强制措施 CountTopPromos 与上下文相关。
目前它正在计算TopX所有元组的计数。针对我正在运行的 AdWrks 版本,这是 14。

如何将当前年份的上下文强制到度量 CountTopPromos

WITH 
  SET FullSet AS 
    NonEmpty
    (
        [Date].[Calendar].[Calendar Year].MEMBERS
      * 
        [Promotion].[Promotion].MEMBERS
     ,[Measures].[Reseller Order Count]
    ) 
  SET TopX AS 
    Generate
    (
      [Date].[Calendar].[Calendar Year].MEMBERS
     ,TopPercent
      (
          [Date].[Calendar].CurrentMember
        * 
          Extract
          (
            FullSet
           ,[Promotion].[Promotion]
          )
       ,90
       ,[Measures].[Reseller Order Count]
      )
    ) 
  MEMBER [Measures].[CountTopPromos] AS 
    Count(TopX)                  //<<<<<<<<<<<< CONTEXT LACKING HERE  <<<<<<<
SELECT 
  NON EMPTY 
    {[Measures].[CountTopPromos]} ON 0
 ,{TopX} ON 1
FROM [Adventure Works];

目前它返回以下内容:

我希望 CountTopPromos 在年份的上下文中,因此所需的输出如下:

【问题讨论】:

  • 您的要求是什么?我了解您想在行上显示“始终保持 TopX”。但是应该采取什么措施呢?我假设您不想包含行上下文,因为这样计数将始终为 1.to s 所以,但使用一个度量多少
  • @FrankPl 同意 OP 有点含糊。我已经编辑过,希望现在更准确。

标签: ssas mdx olap


【解决方案1】:

由于在定义轴之前评估集合(请参阅my answer to this question),因此如果使用命名集合TopX,则无法将行上下文纳入计算。但是,您可以将其定义复制到 [Measures].[CountTopPromos] 的定义中,将 [Date].[Calendar].[Calendar Year].MEMBERS 替换为 [Date].[Calendar].CurrentMember

  MEMBER [Measures].[CountTopPromos] AS 
    Count(    
        Generate
        (
          [Date].[Calendar].currentMember
         ,TopPercent
          (
              [Date].[Calendar].CurrentMember
            * 
              Extract
              (
                FullSet
               ,[Promotion].[Promotion]
              )
           ,90
           ,[Measures].[Reseller Order Count]
          )
        ) 
    ) 

提供您想要的结果。并且 - 因为 Generate 会在这里循环遍历一个成员 - 你也可以省略它:

  MEMBER [Measures].[CountTopPromos] AS 
    Count(    
         TopPercent
          (
              [Date].[Calendar].CurrentMember
            * 
              Extract
              (
                FullSet
               ,[Promotion].[Promotion]
              )
           ,90
           ,[Measures].[Reseller Order Count]
          )
        ) 

会得到同样的结果。

【讨论】:

  • +1 谢谢坦率。是的,我需要记住概念上的执行顺序。刚刚想到了另一种非常优雅的可能解决方案 - 在下面发布 - 你怎么看?
【解决方案2】:

另一个相当漂亮的替代方案:

MEMBER [Measures].[CountTopPromos] AS 
  Count
  (
    Intersect
    (
      {
        [Date].[Calendar].CurrentMember * [Promotion].[Promotion].MEMBERS
      }
     ,TopX
    )
  ) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2012-01-07
    • 2018-11-23
    • 2021-05-12
    • 2013-06-13
    相关资源
    最近更新 更多