在使用交叉连接之后的MDX查询到订单(和顶部过滤器)结果

时间:2016-06-02 16:18:56

标签: ssas mdx cross-join

我想在MDX查询中订购一组结果,其中还包括交叉连接。

我有以下措施和尺寸:

  • [措施]。[开始]
  • [框架]。[框架名称]
  • [Framework]。[Pathway Name]

我想创建一个(对应的)Framework和Pathway名称列表,这些名称对应于[Measures]的前25个数字。[Starts]。

我设法使用以下方法输出完整的结果列表:

select [Measures].[Starts] on COLUMNS,
NON EMPTY CrossJoin(
Hierarchize({DrilldownLevel({[Framework].[Pathway Name].Children})}), 
Hierarchize({DrilldownLevel({[Framework].[Framework Name].Children})})
) on ROWS
from [DataCube] 

创建以下示例输出: example table required

但是,我需要按降序对起点进行排序(最好只保留前25个结果)。我几乎尝试了一切,但都失败了。谷歌搜索没有找到任何结果。

2 个答案:

答案 0 :(得分:0)

您是否偶然发现TopCount功能?

select [Measures].[Starts] on COLUMNS,
NON EMPTY 
    TopCount
        (
        CrossJoin
            (
            Hierarchize({DrilldownLevel({[Framework].[Pathway Name].Children})}), 
            Hierarchize({DrilldownLevel({[Framework].[Framework Name].Children})})
            ), 
        25, 
        [Measures].[Starts]
        ) on ROWS
from [DataCube] 

这里是msdn link

H2H

答案 1 :(得分:0)

为了提高效率,最好在使用TopCount函数之前订购该集:

WITH 
SET [SetOrdered] AS
  ORDER(
     {DrilldownLevel([Framework].[Pathway Name].Children)} 
    *{DrilldownLevel([Framework].[Framework Name].Children)}
    ,[Measures].[Starts]
    ,BDESC
  )
SET [Set25] AS
  TOPCOUNT(
     [SetOrdered]
    ,25
  )
SELECT 
  [Measures].[Starts] on 0,
NON EMPTY 
  [Set25] on 1
FROM [DataCube];