【问题标题】:MDX query to order (and topfilter) results after/with a crossjoinMDX 查询以在交叉连接之后/使用交叉连接对结果进行排序(和顶级过滤器)
【发布时间】:2016-10-02 12:07:36
【问题描述】:

我想在包含交叉连接的 MDX 查询中订购一组结果。

我有以下度量和维度:

  • [措施].[开始]
  • [框架].[框架名称]
  • [框架].[路径名称]

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

我已经成功地输出了一个完整的结果列表:

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

创建以下示例输出:

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

【问题讨论】:

    标签: ssas mdx cross-join


    【解决方案1】:

    您是否偶然发现了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

    【讨论】:

    • 谢谢!我没有找到那个有用的功能。它可以满足我的需要。
    【解决方案2】:

    为了提高效率,最好在使用 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]; 
    

    【讨论】:

    • 只是好奇 - 这如何更有效?缓存在这里完全没有区别。其次,您可以使用Head 而不是TopCount,。这在性能方面会更好一些。
    • @SouravA 我不确定它是否自 2008R2 以来已修复,但一般的经验法则是 不要使用 TopCount 的第三个参数 ...在此之前订购手:有序集随后将存储在立方体空间中的固定单元格数组中,TopCount 确切知道在哪里查找:如果您需要,我可以找到参考资料?
    • @SouravA 我可能对 Rank 函数感到困惑。在这里:sqlblog.com/blogs/mosha/archive/2006/03/14/ranking-in-mdx.aspx Mosha 在帖子末尾说 “在 MDX 中表达这个查询计划的方法是创建一个命名集。MDX 中的命名集始终是静态的,即它们在上下文中进行评估它们是在其中定义的(请注意,静态并不意味着物化,例如 CrossJoin 可以是完全静态的,但它永远不会物化)。哈希索引是建立在静态集之上的。" .. . 天气这也可以帮助 TopCount - 也许
    • @SouravA - 请就这个非问题发表你的意见 - 我已否决并标记为关闭:stackoverflow.com/questions/37251060/…。我们需要开始对 mdx 问题进行更多监管,因为它似乎是非问题和模糊垃圾的垃圾场。
    • 同意这一点。已投票结束该问题。
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 2012-01-22
    • 1970-01-01
    • 2012-12-31
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多