多维设计中略微相关的尺寸

Posted

技术标签:

【中文标题】多维设计中略微相关的尺寸【英文标题】:Slightly related dimensions in multidimensional design 【发布时间】:2014-07-04 11:38:32 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

以上是关于多维设计中略微相关的尺寸的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库架构以及多维数据模型的设计

移动端界面设计之尺寸篇

Andriod界面设计的分辨率和尺寸适配全攻略 转载

作为前端你必须知道的iPhoneX适配

在多维数据集设计中接近操作期间的混合粒度日期维度

多维数据集分区:DSV 设计器中的事实表只是多维数据集分区之一吗?