代码之家  ›  专栏  ›  技术社区  ›  lechbrush

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

  •  0
  • lechbrush  · 技术社区  · 9 年前

    我在蒙德里安有一个维度,级别如下:

    -维度-时间(按分钟)

    --级别-小时

    --级别-分钟

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

    此外,如果我将维度复制为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]
    

    具有两个级别的查询:

     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]
    

    你知道为什么会这样吗?

    2 回复  |  直到 9 年前
        1
  •  1
  •   lechbrush    9 年前

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

    蒙德里安的关键性能优化之一是使用native.crosjoin。但是,由于两个级别属于同一维度,因此无法执行此操作。因此,一个解决方案是在多个维度上分离级别,当它们将成为同一集合的一部分时。

        2
  •  0
  •   whytheq    9 年前

    “为什么”我不确定。

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

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