如果事实表的列根据记录类型连接到不同的维度,如何对事实表进行建模?

问题描述 投票:0回答:1

我是 Kimball 维度建模的新手,我无法解决如何对这种情况进行建模。我期待您的帮助。

商业案例:我们公司每天将我们的设备(即卡车、挖掘机……也称为资产)和员工(操作资产)租赁给不同客户的项目。每天早上,在搬出之前,我们都会进行测试,以确保我们的员工和资产达到工作标准。我们将这些测试称为合规性测试。

我们收集有关合规性测试的数据,现在我想将这些数据建模为维度和事实,以方便我们制作 Tableau 报告。该报告将按客户和项目分组,并将显示通过/失败测试的数量。报告可以按日期范围过滤。示例:

筛选:

Date = 2023-01-01

客户 项目 全部测试通过 总测试失败
C1 你好 10 0
C1 再见 9 1

当点击报告行时,它将展开详细信息,如下所示:

客户 项目 测试类型 测试子类型 姓名(资产/员工) 状态
C1 你好 员工 水测试 安娜 通过了
C1 你好 员工 水测试 鲍勃 通过了
C1 你好 员工 酒精测试 鲍勃 通过了
C1 你好 资产 油测试 卡车01 失败
C1 你好 ... .... ...... ......

我很难想出一个合适的模型来促进专栏

Name (asset / employee)
。这是我原来的架构:

综合事实测试结果

  • 业务流程:进行合规性测试
  • Grain:每个员工/资产每天每次测试一行
  • 架构:
    • date_id(连接到dim_date.date_id)
    • project_id(连接到dim_project.project_id)
    • test_subtype_id(连接到dim_test_subtype.test_subtype_id)
    • employee_id(连接到dim_employee.employee_id)
    • asset_id(连接到dim_asset.asset_id)
    • 测试通过计数

dim_date:标准日期维度

dim_project:每个客户每个项目一行。架构:

  • 项目_id
  • 项目名称
  • 客户名称

dim_test_subtype:每个测试子类型一行。架构:

  • 测试子类型_id
  • 测试子类型名称
  • 测试类型名称

dim_employee:每个员工一行。架构:

  • 员工_id
  • 员工姓名
  • ...其他属性

dim_asset:每个资产一行。架构:

  • 资产_id
  • 资产名称
  • ...其他属性

此设置的问题是我无法在报告中包含包含员工或资产名称的列。我正在考虑创建另一个包含员工和资产名称的混合维度,并将其密钥放入事实表中,如下所示。

事实

日期_id 项目_id 测试子类型_id hybrid_id 测试通过计数
20230101 1 1 1 1

dim_hybrid

hybrid_id 目标类型 名字
1 员工 安娜
2 员工 鲍勃
3 资产 卡车01

这可以解决问题,但我想知道这是否是最佳做法?看起来很乱。而且混合维度很可能不会被重用。

data-warehouse dimensional-modeling
1个回答
0
投票

您需要运行两个查询,一个针对资产,一个针对员工,然后将结果合并在一起

© www.soinside.com 2019 - 2024. All rights reserved.