database-design - SCD 类型 2 维度 - 如何在单个类别下获取多个值版本
问题描述
对于具有 SCD 类型 2 并且仍然能够按最新值对事实进行分组的最佳实践是什么?如何在 Power BI 端忽略 COUNTRY 更改(马其顿和 N. Macedonia 应该是同一类别)按国家/地区分组?
假设在下面的示例中,我想保留 POPULATION 更改的历史记录,但仍然能够通过 COUNTRY 忽略更改对指标进行分组。
例子
方面:
SR | COUNTRY (SCD1) | POPULATION (SCD2) | START_DATE | END_DATE
1 Macedonia 100,000 | 2001-09-03 | 2015-07-01
2 Macedonia 110,000 | 2015-07-01 | 2019-07-01
3 N. Macedonia 110,000 | 2019-07-01 | NULL
事实表:
SR | METRIC_1 | METRIC_2
1 | 10 | 100
1 | 20 | 110
2 | 30 | 120
3 | 40 | 130
现在我想得到以下报告:
COUNTRY | SUM(METRIC_1)
Macedonia 100 # SR key 3 was taken into account despite COUNTRY value is different!
解决方法
我们找到的解决方案 - 将某些列作为 SCD 2 处理,但在 ETL 转换期间覆盖其他列(将它们作为 SCD 1 处理)
SR | COUNTRY (SCD1) | POPULATION (SCD2)
1 N. Macedonia 100,000 # old COUNTRY value was overwritten
2 N. Macedonia 110,000 # old COUNTRY value was overwritten
3 N. Macedonia 120,000
这是处理这种情况的常见做法吗?还是有更好的方法?也许添加另一个组列顶部维度?
解决方案
推荐阅读
- java - 如何在java中存储对象并稍后检索它们?
- dart - 尝试遍历列表并在颤动中创建小部件时会创建一个空小部件
- java - 从带有参数的shellscript调用java
- java - 如何在不创建对它的引用的情况下实例化会话范围的 bean?
- angular - Azure Application Insights 实现 angular6
- amazon-web-services - 使用 Lambda 将新创建的主键值发送回应用程序
- ios - 将 JSON 数据导出到文本字段的问题
- bash - 当我们的代码在 bash 中执行时,如何在命令提示符中显示加载状态?
- google-cloud-platform - DataProc Presto 会自动拾取新节点吗?
- c# - 子字符串问题 - 输入字符串的格式不正确