0

我想在具有以下属性的维度之间创建交集:

客户编号 | 客户级别 | 日期从 | 日期至

第1234章 1 级 | 01.01.2018 | 31.12.2018

第1234章 2 级 | 01.01.2019 | 31.05.2019

以及如下的度量组:

购买的产品 | 购买日期

廉价啤酒 | 01.06.2018

廉价啤酒 | 01.04.2019

实际上,我一直坚持定义适合我的目的的关系。我考虑过重新定义维度表,这样我就有这样的表,而不是第一行的时间间隔:

客户编号 | 客户级别 | 等级日期

第1234章 1 级 | 01.01.2018

第1234章 1 级 | 02.01.2018

…</p>

第1234章 1 级 | 31.12.2018

但是,如果我有 600k 客户的表,并且我想定义“直到世界末日”的时间关系,那么表的大小将太大。

最后,我希望将同一客户 (ID = 1234) 分配到级别 1 和 Jun-18 以及级别 2 和 Apr-19。我想请您帮我如何构建维度表(或确认我的是否正确)以及如何在 Visual Studio 中定义时间关系,以便考虑到从购买日期开始的客户级别。

4

1 回答 1

0

好吧,我看到了两种可能的方法来完成您的任务。

  1. 当客户级别分配不变时,将您的客户主数据拆分为间隔,为该间隔分配客户 ID 并在事务数据中引用它。就像你的例子一样

    客户编号 | 客户级别 | 日期从 | 日期至
    12341 | 1 级 | 01.01.2018 | 31.12.2018
    12342 | 2 级 | 01.01.2019 | 31.05.2019

    优点- 在 SSAS 方面易于实施,在 SSAS 的数据量相对较小。
    缺点- 所有 ID 逻辑都必须在 ETL 级别实现。分析属性的结构是固定的。

  2. 从客户维度中删除客户级别并制作单独的客户级别 Dim。您将获得相同的客户表和客户级别表

    客户级别 ID | 客户级别名称
    1 | 1 级
    2 | 2级

    然后 - 在 Customer Dim、Customer Level Dim 和 Date Dim 之间创建 M2M 关系。为此 - 添加具有以下结构的度量组

    客户编号 | 客户级别 ID | 日期 ID
    1234 | 1 | 01.01.2018

    在这个度量组上 - 命名它Customer Level Date Bridge- 定义计数度量。然后,在 SSDT 中多维数据集设计器的 Dimension Usage 选项卡上 - 您可以将 Purchase Measure Group 的 Customer Level Dim (假设它与 Date 和 Customer 维度有直接关系)设置为带有 bridge 的 M2M 维度Customer Level Date BridgeMS Docs上有关此的更多详细信息。

    优点- M2M 方法非常灵活。顾名思义,您可以在客户与其级别之间进行更多的 1-1 直接分配。例如,您可以将客户分成具有一些交叉点的​​组。
    缺点- 它需要建立一个桥接表并在关系间隔内为每个日期填充一条记录。它可能对 ETL、立方体大小和立方体处理产生影响。

于 2019-04-14T07:27:35.240 回答