慢速MDX查询包含2个或更多相同维度的级别时

时间:2015-08-14 14:24:17

标签: mdx olap mondrian

我在蒙德里安有一个Dimension,有以下级别:

- 尺寸 - 按分钟计时

- 等级 - 小时

- 等级 - 分钟

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

更重要的是,如果我将维度复制为2,因此每个维度都有一个级别,那么查询也需要几秒钟。

单级查询:

pager

查询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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

“为什么”我不确定。

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

尝试使用交叉联接来利用自动存在行为&同时移动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];