Ssas 缺乏上下文的度量

Ssas 缺乏上下文的度量,ssas,mdx,olap,Ssas,Mdx,Olap,我正在努力使衡量标准counttopromos与上下文相关。 目前,它正在计算TopX中所有元组的计数。与我运行的AdWrks版本相比,这是14 如何将当前年份的上下文强制添加到度量值CountTopPromos WITH SET FullSet AS NonEmpty ( [Date].[Calendar].[Calendar Year].MEMBERS * [Promotion].[Promotion].MEMBERS

我正在努力使衡量标准
counttopromos
与上下文相关。
目前,它正在计算
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];
与
设全套为
非空
(
[日期][日历][日历年].成员
* 
[晋升][晋升].成员
,[Measures]。[经销商订单数量]
) 
将TopX设置为
生成
(
[日期][日历][日历年].成员
,最高
(
[日期][日历].CurrentMember
* 
摘录
(
全套
,[促销][促销]
)
,90
,[Measures]。[经销商订单数量]
)
) 
成员[措施][CountTopPromos]为

计数(TopX)/由于在定义轴之前对集合进行计算(请参见),如果使用命名集合
TopX
,则无法将行上下文带入计算中。但是,您可以将其定义复制到
[Measures].[counttopromos]
的定义中,将
[Date].[Calendar].[Calendar Year]替换为
[Date].[Calendar]。当前成员

  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]
          )
        ) 

并且会得到同样的结果。

另一个非常漂亮的选择:

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

你的要求是什么?我知道你想在行上显示“所有时间的TopX”。但应该采取什么措施?我假设您不希望包含行上下文,因为这样计数将始终为1.0到1.0,因此,请使用一个度量值,该度量值表示多少of@FrankPl我同意OP有点含糊。我已经编辑过了,希望现在更准确些。+1谢谢弗兰克。是的,我需要记住概念上的执行顺序。只是想到了另一个可能的解决方案,这是相当优雅的-已张贴在下面-你认为呢?