1

我使用以下(简化的)星型方案作为 SSAS OLAP 多维数据集的数据源: 在此处输入图像描述

在我的多维数据集中,我有度量 [Days],它只包含每个日期的“1” - 这只是获取一段时间内天数的一种简洁方法,对于计算每日平均值等很有用。显然,这个度量是与 Shop- 和 Employee- 维度无关。

现在,例如,我使用以下 MDX 查询:

SELECT { [SalesAmount], [Days] } on 0,
    { [Shop].[Shop].[Shop].members } on 1
FROM
    [MyCube]
WHERE
    ( [Shop].[Country].[USA], [Calendar].[Month].&[201406] )

这将返回美国所有商店的列表,包括 2014 年 6 月的销售额以及 6 月的天数。它按预期工作,性能很棒。

现在说,我想要相同的列表,但除了商店之外,我还想按员工拆分销售额。自然,我将员工维度与商店维度交叉:

SELECT { [SalesAmount], [Days] } on 0,
    { [Shop].[Shop].[Shop].members * 
      [Employee].[Employee].[Employee].members } on 1
FROM
    [MyCube]
WHERE
    ( [Shop].[Country].[USA], [Calendar].[Month].&[201406] )

这有两个问题:首先,当跨越这两个(潜在的)大维度时,性能会受到很大影响。NULL其次,对于所有与美国商店无关的员工,我获得了很多销售金额 = 的记录。如果我删除 [Days] 度量,我会得到预期的结果,但我需要该度量来计算日平均值等。

我正在寻找替代方法来模拟我的立方体,以避免这个问题。也就是说,当我通过 Shop-dimension 过滤我的事实表时,我只想要显示 Employee-dimension 中的相关记录(因此这篇文章的标题,因为 Employee 和 Shop 维度通过事实表相关联)。

我曾考虑将 Shop 和 Employee 维度合并为一个“组织”维度,但这会产生多个问题:首先,一名员工可能在多个商店工作,并且随着时间的推移,隶属关系可能会发生变化。

注意:我不是在寻找替代的 MDX 解决方案,因为我的最终用户使用各种前端工具,他们无法控制生成的 MDX。在我看来,这个问题应该在多维建模中解决,而不是在前端。建模技术和参考文献将不胜感激。

4

2 回答 2

0

我不确定您的解决方案是否是这种情况,但在我使用像您的度量这样的度量的情况下Days,计算几个计算度量是必要的,但最终用户没有必要查看Days度量本身。因此,仅使度量不可见就可以解决您的问题:

factSales由于用户无法在普通客户端工具中选择度量,因此查询将不包含在您的表中没有共同记录的员工和商店组合的记录。NON EMPTY如果客户端工具在行上使用,至少这是正确的,大多数工具默认情况下都会这样做。而且由于结果集要小得多,它也应该更快地到达客户端工具,大概解决了性能问题。

在计算度量的表达式中应注意在没有数据时将结果保持为 NULL。如何做到这一点将取决于您定义的措施。

而且您应该知道,只要用户能够手动输入 MDX 表达式,即使该度量不可见,他们也可以使用该度量。多维数据集中提供了一个不可见的度量,并且可以在 MDX 查询中使用。它只是没有在许多客户端工具显示的度量列表中列出。但是如果用户故意使用Days度量,因为他们知道它在那里并且他们知道度量的名称,因此可以在 MDX 表达式中输入它,他们应该意识到他们需要以一种避免问题的方式设计他们的 MDX你有。无论如何,这些用户都是“超级用户”。

于 2014-07-07T18:42:24.133 回答
0

如果您可以在可以避免跨越 2 个独立维度的商店下有员工。我相信这将提高性能。

于 2014-07-07T13:37:52.077 回答