MDX相当复杂的排序

时间:2014-02-19 13:18:44

标签: sorting ssas mdx

我找不到方法,如何对查询进行排序,这是一个简单的查询:

SELECT {[Measures].[IB]}
       ON COLUMNS,
       {[Dim_Product_Models_new].[PLA].members }  *   
       {[Dim Dates_new].[Date Full].&[2013-02-01]:[Dim Dates_new].[Date Full].&[2014-01-01]}
       ON ROWS
  FROM [cub_dashboard_spares]

根据想法,我会在12个月内得到6个PLA的结果(总共72行),但它会按照字母顺序排列在PLA上。

我需要的是根据上个月的衡量标准对PLA进行排序(在本案例中为2014-01-01)。

是否有任何方法可以执行此任务,以便保持灌浆(PLAs,2013-02至2013-12的日期),但只有我的PLA的顺序不同。 (上个月最高衡量标准的PLA将是第一名,依此类推)

非常感谢您提供任何帮助

2 个答案:

答案 0 :(得分:1)

交叉连接上的订单功能应保留第一组的初始顺序,因此反转元组的顺序将完成工作:

 SELECT 
  { 
    [Measures].[IB] 
  } ON COLUMNS, 
  order( 
{[Dim Dates_new].[Date Full].&[2013-02-01]:[Dim Dates_new].[Date Full].&[2014-01-01]} * 
{[Dim_Product_Models_new].[PLA].members } , 
[Measures].[IB], 
desc 
) ON ROWS 
FROM [cub_dashboard_spares]

如果要保留列标签的外观,可以使用AW框中以下示例中的generate函数:

SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,Generate
  (
    {[Customer].[Country].&[Australia]:[Customer].[Country].&[United Kingdom]}
   ,(
      Order
      (
        [Date].[Calendar Year].[Calendar Year].MEMBERS
       ,(
          [Customer].[Country].CurrentMember
         ,[Measures].[Internet Sales Amount]
        )
       ,DESC
      )
     ,[Customer].[Country].CurrentMember
    )
  ) ON 1
FROM [Adventure Works];

菲利普,

答案 1 :(得分:1)

使用Order函数将排序集放在行上。如果要在每个层次结构级别内进行排序,但仍希望在子级之前获取父级(如单个属性成员之前的ALL),则此函数的第三个参数为DESC,如果您愿意,则为BDESC在所有级别排序。

SELECT {[Measures].[IB]}
       ON COLUMNS,
       Order({[Dim_Product_Models_new].[PLA].members },
            ([Measures].[IB], [Dim Dates_new].[Date Full].&[2014-01-01]),
            DESC)
       *   
       {[Dim Dates_new].[Date Full].&[2013-02-01]:[Dim Dates_new].[Date Full].&[2014-01-01]}
       ON ROWS
  FROM [cub_dashboard_spares]