想象一个事实表,其中包含一个时间段(例如1小时)内的度量值总和。
Start Date | Measure 1 | Measure 2
-------------------------------------------
2018-09-08 00:00:00 | 5 | 10
2018-09-08 00:01:00 | 12 | 20
理想情况下,我们希望保持谷物的质量,以使每行恰好1小时。但是,每一行都引用了可能会“破坏”纹理的尺寸。例如:
Start Date | Measure 1 | Measure 2 | Dim 1
---------------------------------------------------
2018-09-08 00:00:00 | 5 | 10 | key 1
2018-09-08 00:01:00 | 12 | 20 | key 2
尺寸值可能会改变为一小时的30分钟,在这种情况下,以上内容可能会不准确,应这样表示:
Start Date | Measure 1 | Measure 2 | Dim 1
---------------------------------------------------
2018-09-08 00:00:00 | 5 | 10 | val 1
2018-09-08 00:00:30 | 5 | 10 | val 2
2018-09-08 00:01:00 | 12 | 20 | val 2
在我们的方案中,需要使用至少5个维键对数据进行切片,例如:
sum(measure1) where dim1 = x and dim2 = y..
此要求是否有设计模式?我曾经考虑过“定期快照”,但是我从没有阅读过有关尺寸更改时这种行拆分的信息。
我只能看到两个选项:
选项2是当前的解决方案,可以达到目的,但难以维护。有没有更好的方法可以做到这一点,或者有其他选择?
通过一个实际示例,该系统在生产环境中记录生产数据,因此数据类似于:
Line | Date | Crew | Product | Running Time (mins)
-----------------------------------------------------------------------
Line 1 | 2018-09-08 00:00:00 | Crew A | Product A | 60
如前所述,工作人员,产品或任何其他维度在一个小时内可能会多次更改。
答案 0 :(得分:0)
由于您显然想报告每小时数据,因此不需要拆分事实表的时间部分,但是应该有两条记录,每个维度值一个。如果这是事务性事实表的汇总,则加载小时表的过程应按每个维键将每个记录分组。因此,在上面的示例中,您应该有两个小时的记录,如下所示:
Start Date | Measure 1 | Measure 2 | Dim 1
---------------------------------------------------
2018-09-08 00:00:00 | 5 | 10 | val 1
2018-09-08 00:01:00 | 5 | 10 | val 1
2018-09-08 00:01:00 | 12 | 10 | val 2
您还需要考虑其他措施,并确保将它们全部放入正确的存储区(值1或值2)中。我在示例中将它们平均分配。
现在,如果按小时1和Dim 1值2进行切片,您将只看到12(小数1),如果按小时1进行切片,将值1调为1,您将仅看到5,并且如果仅在第一个小时的时间片上,您将看到17。
请记住,您的谷物是由每个维度的级别定义的,而不仅仅是时间维度。 HTH。