reporting - 2 事实表和企业想知道一个事实占另一事实的百分比
问题描述
我们的仓库中有 2 个事实表。
CaseFacts 和 IncidentFacts。两者都有维度连接到日期维度和其他各种项目
在我们的 OLTP 中,这 2 个表作为案例的每个事件相关联。所以一个案例可以有多个事件。
OLTP 表结构
- 案例表 CaseId(主键)
- 地址
- ETC..
事故表
- 事件 ID(主要)
- CaseId(案例表的外键)
- 事件类型
- ETC..
案例是 1:n 到事件
问题是:企业想知道 IncidentType 为“X”的总案例的百分比
在我们的仓库中,如果我们不将一个事实表连接到另一个事实表,我不确定处理这个问题的最佳方法是什么。
我需要的基本数据:
- 日期时间范围需要不同的 CaseId 和 IncidentType
- 然后需要事件类型计数(分子)
- 然后需要同一时间范围内的案例数(分母)
- 然后可以按其他任何内容进行分组,例如州,地区,部门..
如果本质上需要来自不同数据集市的 2 个数据点,不确定如何处理仓库结构。
解决方案
这是数据仓库中的标准模式:正确的方法(在大多数情况下)是在 2 个单独的查询中检索数据,将 2 个结果集连接在一起(使用通用、一致的维度),然后查询这个组合的结果集以得到最终答案。
对于您的具体示例,我建议:
查询 1:从按任何所需维度值分组的事件表中计算不同的 CaseId
查询 2:从事件表中计算 IncidentId,其中 IncidentType = "X" 按任何所需的维度值分组(如果一个案例可以有多个相同类型的事件以及您希望在计算中如何处理它,则可能需要额外的逻辑)。这些分组值需要与查询 1 中的值匹配。
查询 3:通过常见的“分组依据”字段将查询 1 结果连接到查询 2 结果,并将一个计数除以另一个以获得百分比
您将如何在 SQL 中编写此代码取决于您的 DBMS,但在大多数情况下,使用 CTE 可能是最简单的解决方案
推荐阅读
- mysql - 两个用户同时运行一个事务?
- url - Pjax 错误更改 url 然后发生服务器错误
- rxjs - @ngrx 选择器并行发射两次
- storybook - @storybook/addon-info 和 @material-ui/core 的问题
- gitlab - 如何在 gitlab 中推送到新创建的项目
- c++ - 读取 UNICODE_STRING 的缓冲区时访问冲突
- java - Swagger API 中声明为不需要的 QueryParam
- php - 警告:mysqli_fetch_row() 期望参数 1 为 mysqli_result,给定 null
- php - 如何在 URL 中添加参数以在同一页面上显示不同的内容?
- visual-studio-app-center - Xamarin UItest 是否支持本地?还是现在只适用于应用中心?