我是 Kimball 维度建模的新手,我无法解决如何对这种情况进行建模。我期待您的帮助。
商业案例:我们公司每天将我们的设备(即卡车、挖掘机……也称为资产)和员工(操作资产)租赁给不同客户的项目。每天早上,在搬出之前,我们都会进行测试,以确保我们的员工和资产达到工作标准。我们将这些测试称为合规性测试。
我们收集有关合规性测试的数据,现在我想将这些数据建模为维度和事实,以方便我们制作 Tableau 报告。该报告将按客户和项目分组,并将显示通过/失败测试的数量。报告可以按日期范围过滤。示例:
筛选:
Date = 2023-01-01
客户 | 项目 | 全部测试通过 | 总测试失败 |
---|---|---|---|
C1 | 你好 | 10 | 0 |
C1 | 再见 | 9 | 1 |
当点击报告行时,它将展开详细信息,如下所示:
客户 | 项目 | 测试类型 | 测试子类型 | 姓名(资产/员工) | 状态 |
---|---|---|---|---|---|
C1 | 你好 | 员工 | 水测试 | 安娜 | 通过了 |
C1 | 你好 | 员工 | 水测试 | 鲍勃 | 通过了 |
C1 | 你好 | 员工 | 酒精测试 | 鲍勃 | 通过了 |
C1 | 你好 | 资产 | 油测试 | 卡车01 | 失败 |
C1 | 你好 | ... | .... | ...... | ...... |
我很难想出一个合适的模型来促进专栏
Name (asset / employee)
。这是我原来的架构:
综合事实测试结果
dim_date:标准日期维度
dim_project:每个客户每个项目一行。架构:
dim_test_subtype:每个测试子类型一行。架构:
dim_employee:每个员工一行。架构:
dim_asset:每个资产一行。架构:
此设置的问题是我无法在报告中包含包含员工或资产名称的列。我正在考虑创建另一个包含员工和资产名称的混合维度,并将其密钥放入事实表中,如下所示。
事实
日期_id | 项目_id | 测试子类型_id | hybrid_id | 测试通过计数 |
---|---|---|---|---|
20230101 | 1 | 1 | 1 | 1 |
dim_hybrid
hybrid_id | 目标类型 | 名字 |
---|---|---|
1 | 员工 | 安娜 |
2 | 员工 | 鲍勃 |
3 | 资产 | 卡车01 |
这可以解决问题,但我想知道这是否是最佳做法?看起来很乱。而且混合维度很可能不会被重用。
您需要运行两个查询,一个针对资产,一个针对员工,然后将结果合并在一起