首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDX查询运行缓慢,但仅在特定排列下

MDX查询运行缓慢,但仅在特定排列下
EN

Stack Overflow用户
提问于 2011-12-06 06:20:02
回答 2查看 1.4K关注 0票数 0

我正在以编程方式生成以下格式的MDX查询:

代码语言:javascript
复制
WITH 
    MEMBER [Measures].[MTD] AS
        SUM ({[Time].[Calendar].[Date].&[2011-11-01T00:00:00]:[Time].[Calendar].[Date].&[2011-11-30T00:00:00]
        * {[Dimension1].[Dimension1].[Val1]}
        * {[Dimension2].[Dimension2].[Val2]}
        * {[Dimension3].[Dimension3].[Val3]}
        * {{[Dimension4].[Dimension4].[XXXX],[Dimension4].[Dimension4].[DBS],[Dimension4].[Dimension4].[FD],[Dimension4].[Dimension4].[GSCFDASIA],[Dimension4].[Dimension4].[FDEM],[Dimension4].[Dimension4].[DX],[Dimension4].[Dimension4].[OSWP],[Dimension4].[Dimension4].[OOO],[Dimension4].[Dimension4].[CFD]}}
        * {-{[Dimension5].[Dimension5].[SELI],[Dimension5].[Dimension5].[SELE],[Dimension5].[Dimension5].[MRDN],[Dimension5].[Dimension5].[WCSG],[Dimension5].[Dimension5].[NEWB],[Dimension5].[Dimension5].[VASS]}}
        }, [Measures].[Trade Count])

正如您所看到的,这是一种创建维值交集的简单方法,并且已经很好地工作了一段时间。

最近,我重写了多维数据集,从使用具有多个属性的单个维度表,改为对每个维度使用单独的表(出于处理性能的原因)。

问题是,当我同时使用Dimension4和Dimension5进行过滤时,它突然变得非常慢!如果我注释掉dimension4和5,查询将花费第二个时间..如果我取消注释Dimension4查询需要40秒..如果我取消对Dimension5行的注释,查询将花费8分钟。

通过ID字段(int)将维度连接到度量

该维度有238个值

如果我做一个简单的查询:

对MyCube中的行选择列计数,{-{Dimension5.Dimension5.SELI,Dimension5.Dimension5.SELE,Dimension5.Dimension5.MRDN,Dimension5.Dimension5.WCSG,Dimension5.Dimension5.NEWB,Dimension5.Dimension5.VASS}}

查询耗时sub秒。这是关于多个维度的组合(顶部),这使得它变得如此缓慢。不知道如何排除故障。

值得注意的是,我的多维数据集有13个分区,而我在设置分区时没有设置“分区聚合”步骤。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-23 06:04:36

经过大量的尝试和错误,我让我的查询在6分钟内处理完(从3.5小时开始)。

有两件事让我可以这样优化它:

1.在日期范围内使用月/年成员,而不是日期

之前:

代码语言:javascript
复制
SUM ({[Time].[Calendar].[Date].&[2011-11-01T00:00:00]:[Time].[Calendar].[Date].&[2011-11-30T00:00:00]

之后

代码语言:javascript
复制
SUM ({[Time].[Month].&[2011-11-01T00:00:00]

这是个大事件。由于OLAP将每个日期成员视为单独的实体,因此它将范围内的所有日期与所有其他筛选器进行交叉联接。在我的例子中,我想要一个完整的月份或完整的一年,所以不需要日期范围。

2.将所有公共过滤器(在所有成员中)放入公共WHERE子句

在我的例子中,我有相当多的成员共享相同的过滤器。简单地将它们放在查询的底部,将速度又提高了40%。

最后,我的查询从4小时变成了6.5分钟。我可以通过在我的多维数据集定义中添加适当的聚合来进一步加快速度。但还没到那部分。

票数 1
EN

Stack Overflow用户

发布于 2011-12-06 23:56:07

你能试试这个版本吗?:

代码语言:javascript
复制
 WITH 
   MEMBER [Measures].[MTD] AS
    SUM ({[Time].[Calendar].[Date].&[2011-11-01T00:00:00]:[Time].[Calendar].[Date].&[2011-11-30T00:00:00]
    * {{[Dimension4].[Dimension4].[XXXX],[Dimension4].[Dimension4].[DBS],[Dimension4].[Dimension4].[FD],[Dimension4].[Dimension4].[GSCFDASIA],[Dimension4].[Dimension4].[FDEM],[Dimension4].[Dimension4].[DX],[Dimension4].[Dimension4].[OSWP],[Dimension4].[Dimension4].[OOO],[Dimension4].[Dimension4].[CFD]}}
    * {-{[Dimension5].[Dimension5].[SELI],[Dimension5].[Dimension5].[SELE],[Dimension5].[Dimension5].[MRDN],[Dimension5].[Dimension5].[WCSG],[Dimension5].[Dimension5].[NEWB],[Dimension5].[Dimension5].[VASS]}}
    }, ([Measures].[Trade Count],[Dimension1].[Dimension1].[Val1],[Dimension2].[Dimension2].[Val2],[Dimension3].[Dimension3].[Val3])  )

Dimension5前面的-是个错误吗?

它使交叉连接变得更小,并将单个值放入元组中。如果这能提高性能,那就是好问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8392723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档