Ssas MDX获取一段时间内前三名成员的平均值

Ssas MDX获取一段时间内前三名成员的平均值,ssas,mdx,average,query-performance,Ssas,Mdx,Average,Query Performance,我正在尝试向多维数据集中添加一个经过计算的度量值。它应该计算特定成员(作为参数发送)前三名子成员的平均分数。 我设法找到了正确的号码,但查询要花很长时间 谁能帮我改进一下吗? 以下是MDX查询中的计算: with member AVG_Score_Top3 AS Avg( Head( Order( [OrganizationUnits].[OrganizationUnit Hierarchy].current

我正在尝试向多维数据集中添加一个经过计算的度量值。它应该计算特定成员(作为参数发送)前三名子成员的平均分数。 我设法找到了正确的号码,但查询要花很长时间

谁能帮我改进一下吗? 以下是MDX查询中的计算:

with member AVG_Score_Top3  
 AS Avg(
         Head(
               Order(
                 [OrganizationUnits].[OrganizationUnit Hierarchy].currentMember.children
                 ,score
                 ,BDESC
                )
                ,3
          )
          ,Score
       )
   select  AVG_Score_Top3 on 0,
   [Period].[Periods].[Month Name].members on 1
   from [MyCube]
   where ( [Period].[Year].&[2013],[OrganizationUnits].[OrganizationUnit Heirarchy].[Customer].&[6])
非常感谢您在advanced

中的帮助,我将替换您

Head(
     Order(
           [OrganizationUnits].[OrganizationUnit Heirarchy].currentMember.children
          ,score
          ,BDESC
          )
    ,3
    )


您是否可以删除WHERE子句并将axis(1)的内容替换为:

看看性能是否有所改善(如果结果相同,因为有时度量组会扩大范围)


Philip,

事实上,我从TOPCOUNT开始的时候比我写的要慢。分数的定义是什么?也许这是主要的性能杀手?我会在许多其他不同的计算中使用分数度量。我的假设是,问题是围绕顺序函数的,所描述的查询是您的实际语句,并且速度很慢,还是实际语句比显示的更复杂?我不希望一个单一订单或Topcount的查询会“永远持续”。是的。这正是问题所在。我曾尝试将成员的顺序声明为set,并在该集合上运行avg,这大大提高了性能。但是这个数字出现了错误-没有正确计算所有日期我只是在AdventureWorks上运行了以下内容,而且速度很快(一秒钟):
会员平均销售额Top3为平均值(TopCount([Customer].[Customer Geography].CurrentMember.Children,3,[Measures].[Internet Sales Amount]),[Measures].[Internet Sales Amount])在0上选择{AVG_Sales_Top3},在[Adventure Works]的[Customer].[Customer Geography].[State Province].[CA].[US]
上选择子代([Date].[Calendar].[Calendar Year].[2006],[Date].[Calendar].[Month]),在[Adventure Works的[Customer].[State Geography].[CA].[US].[US].上选择1原因。
TopCount(
          [OrganizationUnits].[OrganizationUnit Heirarchy].currentMember.children
         ,3
         ,score
        )
exists( [Period].[Periods].[Month Name].members,
        (   [Period].[Year].&[2013],
            [OrganizationUnits].[OrganizationUnit Heirarchy].[Customer].&[6]    ),
        'ScoreMeasureGroupName'
    )