当 MDX 查询包含同一维度的 2 个或更多级别时,速度较慢

Slow MDX query when it contains 2 or more levels of the same dimension

我在蒙德里安中有一个具有以下级别的维度:

-维度 - 按分钟计算时间

--等级-小时

--等级-分钟

如果我使用单个级别进行查询,则需要几秒钟的时间来处理。但是,如果我将两个级别都添加到查询中,查询将花费半个小时。

此外,如果我将维度复制为 2,这样每个维度都有一个级别,查询也将花费几秒钟。

单级查询:

WITH
SET [~COLUMNS] AS
    {[Event].[Event].[Event Name].Members}
SET [~ROWS] AS
    {[Time by Minute].[Time by Minute].[Minute].Members}
SELECT
NON EMPTY [~COLUMNS] ON COLUMNS,
NON EMPTY [~ROWS] ON ROWS
FROM [spdoc views]

具有 2 个级别的查询:

 WITH
    SET [~COLUMNS] AS
        {[Event].[Event].[Event Name].Members}
    SET [~ROWS] AS
        Hierarchize({{[Time by Minute].[Time by Minute].[Hour].Members}, {[Time by Minute].[Time by Minute].[Minute].Members}})
    SELECT
    NON EMPTY [~COLUMNS] ON COLUMNS,
    NON EMPTY [~ROWS] ON ROWS
    FROM [spdoc views]

知道为什么会发生这种情况吗?

"Why"我不确定。

您可以尝试多种方法来加快查询速度。

尝试使用交叉连接来利用自动存在的行为,并将 Hierarchize 移到 SELECT

 WITH
    SET [~COLUMNS] AS
        {[Event].[Event].[Event Name].Members}
    SET [~ROWS] AS
        [Time by Minute].[Time by Minute].[Hour].Members
      * [Time by Minute].[Time by Minute].[Minute].Members
  SELECT
    NON EMPTY [~COLUMNS] ON COLUMNS,
    NON EMPTY Hierarchize([~ROWS]) ON ROWS
  FROM [spdoc views];

更好的方法是将 NonEmpty 应用于集合 [~ROWS]。你有可以用来衡量的措施吗?:

 WITH
    SET [~COLUMNS] AS
        {[Event].[Event].[Event Name].Members}
    SET [~ROWS] AS
      NonEmpty(
        [Time by Minute].[Time by Minute].[Hour].Members
      * [Time by Minute].[Time by Minute].[Minute].Members
      , [Measures].[SomeMeasureInCube]
      ) 
 SELECT
    NON EMPTY [~COLUMNS] ON COLUMNS,
    NON EMPTY Hierarchize([~ROWS]) ON ROWS
  FROM [spdoc views];

这基本上是因为蒙德里安:

Mondrian 的关键性能优化之一是使用 native.crossjoin。但是,由于两个级别都属于同一维度,因此无法执行它。因此,解决方案是在多个维度中将级别分开,因为它们将成为同一组的一部分。