SSAS Cube设计 - MDX非常慢

时间:2013-08-20 10:25:05

标签: ssas mdx cube cross-join microstrategy

我正忙着用这个撕掉我的头发。我有一个有1个事实和大约9个维度的立方体。事实表中只有大约120k行,所以它绝不是一个大数据库。

问题在于,使用我正在使用的报告软件(Microstrategy),它生成的MDX会抓取所有数据并将其用作数据源(而不是在操作报告时生成MDX)。 无论哪种方式,当添加几个字段时,查询很快就会变得无法使用,并且实际上内存不足。我怀疑它与我的立方体设计有关。

首先,它对所有属性进行交叉连接,即使它们位于同一维度上,就好像它没有意识到它们之间存在关系一样。

我在BIDS中使用了属性关系(尽可能使关系变得僵硬),但这似乎没有任何区别。

生成的MDX如下所示。我没有自定义MDX的选项,但我确定我没有告诉它关系是正确的。

我试过在Microstrategy支持网站上发帖,没有太多的快乐。

非常感谢任何帮助。

由于

WITH SET AS '{[Dim Date].[Date].[Date].AllMembers}'
...
(all my dimensions appear here)
...
select {[Measures].[Total Purchases], [Measures].[New Cards Issued], [Measures].[New     Applications Received], [Measures].[New Applications Declined], [Measures].[New     Applications Approved], [Measures].[New Accounts Activated]} on columns,
non empty CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(C  ROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN(CROSSJOIN([dim0_select_members], [dim1_select_members]), [dim2_select_members]), [dim3_select_members]), [dim4_select_members]), [dim5_select_members]), [dim6_select_members]), [dim7_select_members]), [dim8_select_members]), [dim9_select_members]), [dim10_select_members]), [dim11_select_members]), [dim12_select_members]), [dim13_select_members]), [dim14_select_members]), [dim15_select_members]), [dim16_select_members]), [dim17_select_members]) on rows
from [Cards_Transactions]

1 个答案:

答案 0 :(得分:2)

如果你能详细说明你的需求,那将是件好事。

是针对最终用户还是开发人员? 您是否希望允许用户在mdx多维数据集上执行自助服务? 他们查询的数据是否需要生效(更新到现在),或者可以更新到前一个小时\天......?

有两种方法可以连接到MSTR中的MDX源。

一种方法是 - 直接连接通过导入数据接口。

用这种方式 - mstr根据您的动态选择生成mdx查询。这就是为什么在Visual Insight中将某些属性拖动到屏幕之前使用一些过滤器很重要的原因。

第二个选项是connect MSTR to the MDX cube at the schema level。 它读取多维数据集定义并创建多维数据集中存在的属性和指标。它还允许您将MDX属性映射到项目属性,以强制实施安全筛选器。 这样你就可以构建常规报告(你也可以使用提示和过滤器......),你可以从mdx立方体构建i-cubes。

您可能会发现第二个选项更适合您的需求。

由于您的MDX立方体非常小,我建议您创建一个i-cube +增量刷新报告来更新它(例如 - 使用今天的数据每5分钟更新一次)。