我在蒙德里安有一个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]
为什么会出现这种情况的任何想法?
答案 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];