在 MDX 中对行轴和列轴交叉连接的度量进行排序

Sort measures where row and column axis are cross-joined in MDX

我有一个 table,其中行轴中有两个维度交叉连接,两个维度加上列轴中的度量交叉连接。例如:

我想对特定列的行进行排序,以图像为例我想对所有行进行排序,以便对 France -> apples -> avg_sales 下的行进行排序。例如:

当只有一堆度量作为列(没有交叉连接)和许多不同的维度在行轴上交叉连接时,我已经能够找到很多关于如何执行此操作的示例,但我无法找到任何地方如何解决这种特殊情况。

我尝试了如下操作:

SELECT CrossJoin(
        [Country].[Country].members,
        CrossJoin(
            [Product Category].[Product].members,
            {[avg_sales]}
          )
        ) on columns, 
        Order(
            Filter(
                CrossJoin(
                    [Date].[Year].Members,
                    [Date].[Month].Members
                ),
                NOT IsEmpty(avg_sales)
            ),
            CrossJoin(
                [Country].[Country].[France],
                CrossJoin(
                    [Product Category].[Product].[apples],
                    {[avg_sales]}
                )
            ),
            BDESC
            ) ON ROWS 
FROM [Main Cube]

但是 MDX Order() 函数签名不允许它,它抱怨说:

Mondrian Error: No function matches signature 'Order(<Set>, <Set>, <Symbol>)'

根据文档 https://mondrian.pentaho.com/documentation/mdx.php 只有两个功能:

<Set> Order(<Set>, <Value>, <Symbol>)
<Set> Order(<Set>, <Value>)

Order函数一定是这样的

 Order(
            Filter(
                CrossJoin(
                    [Date].[Year].Members,
                    [Date].[Month].Members
                ),
                NOT IsEmpty(avg_sales)
            ) *
            CrossJoin(
                [Country].[Country].[France],
                CrossJoin(
                    [Product Category].[Product].[apples],
                    {[avg_sales]}
                )
            ),
            BDESC

)

行轴上的这个 MDX 表达式可以解决问题:

ORDER(
   CrossJoin([Date].[Year].Members, [Date].[Month].Members), 
   ([Measures].[avg_sales], [Product Category].[Product].[apples]),
   BASC
)

如果您想按销售额对月份进行排序但仍将年份放在一起,那么您可以这样做:

ORDER(
   CrossJoin([Date].[Year].Members, [Date].[Month].Members), 
   [Date].[Year].CurrentMember.ORDERKEY,
   BASC,
   ([Measures].[avg_sales], [Product Category].[Product].[apples]),
   BASC
)

您甚至可以按所选国家/地区的平均销售额和列轴上的水果对行进行排序。

有 Pentaho EE 的免费试用版,其中包括 Mondrian 上的 OLAP 客户端(Pentaho Analyzer),可以生成这些类型的 MDX 表达式。您可以使用他们的数据源向导来加载您的数据、构建一些报告并研究 MDX 以了解如何使用 ORDER MDX 函数。

https://www.hitachivantara.com/en-us/products/data-management-analytics/lumada-dataops/data-integration-analytics/download-pentaho.html