我使用以下(简化的)星型方案作为 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。在我看来,这个问题应该在多维建模中解决,而不是在前端。建模技术和参考文献将不胜感激。