我想在具有以下属性的尺寸之间创建交集:
客户编号|客户级别|起始日期|截止日期
1234 | 1级| 01.01.2018 | 2018年12月31日
1234 | 2级| 01.01.2019 | 2019年5月31日
还有一个度量值组,如下所示:
已购买的产品|购买日期
廉价啤酒| 01.06.2018
廉价啤酒| 01.04.2019
实际上,我坚持定义适合自己目的的关系。我考虑过重新定义维度表,以便代替第一行的时间间隔,而有了这样的表:
客户编号|客户级别|层级日期
1234 | 1级| 01.01.2018
1234 | 1级| 02.01.2018
...
1234 | 1级| 2018年12月31日
但是如果我的桌子有60万个客户,并且我想定义一个“直到世界末日”的时间关系,那么桌子的大小将太大。
最后,我希望将同一个客户(ID = 1234)分配给1级和6月18日以及2级和19年4月。我想请您帮我如何建立尺寸表(或确认我的正确),以及如何在Visual Studio中定义时间关系,以便考虑购买日期之后的客户级别。
答案 0 :(得分:0)
好吧,我看到两种可能的方法来完成您的任务。
在“客户级别”分配不变的情况下,将“客户”主数据拆分为多个间隔,为该间隔分配“客户ID”,然后在“交易数据”中进行参考。就像您的示例
客户ID |客户级别|起始日期|约会日期
12341 | 1级| 01.01.2018 | 2018年12月31日
12342 | 2级| 01.01.2019 | 2019年5月31日
专家-易于在SSAS端实现,而在SSAS上的数据量相对较小。
缺点-所有ID逻辑必须在ETL级别实施。分析属性的结构是固定的。
从“客户维度”中删除“客户级别”,并进行单独的“客户级别”点心。您将使用
获得相同的客户表和客户级别表客户级别ID |客户级别名称
1 | 1级
2 | 2级
然后-在Customer Dim,Customer Level Dim和Date Dim之间创建M2M关系。为此,请添加具有以下结构的度量值组
客户ID |客户级别ID |日期ID
1234 | 1 | 01.01.2018
在此度量值组上-命名为Customer Level Date Bridge
-定义计数度量值。然后,在SSDT中的多维数据集设计器的“维度使用情况”选项卡上,您可以将购买度量值组的“客户级别Dim”(假设它与“日期”和“客户维度”有直接关系)设置为带有桥Customer Level Date Bridge
的M2M维度。有关MS Docs的更多详细信息。
优点-M2M方法非常灵活。顾名思义,您可以在客户及其级别之间进行1-1以上的直接分配。例如,您可以将客户划分为具有某些交叉点的组。
缺点-它需要建立一个桥接表,并为关系间隔内的每个日期填充一条记录。它可能会影响ETL,多维数据集大小和多维数据集处理。