我们的仓库里有两个事实表
案例事实和偶发事件事实。两者都有迄今为止的维度连接和其他各种项目
在我们的OLTP中,这两个表作为一个案例的每个偶发事件而相关。因此,一个案例可能有多个偶发事件。
OLTP表结构
- 案例表CaseId(主键(
- 地址
- 等等
事件表
- IncidentId(主要(
- CaseId(案例表的外键(
- IncidentType
- 等等
事件的情况为1:n
问题是:企业想要知道IncidentType为"0"的总病例的百分比;X〃;
在我们的仓库里,如果我们不将一个事实表连接到另一个,我不确定处理这个问题的最佳方法是什么。
我需要的基本数据:
- 日期时间范围需要不同的CaseId和IncidentType
- 然后需要事件类型计数(分子(
- 则需要相同时间范围内的病例数(分母(
- 然后可以按州、地区、部门等其他任何单位分组
如果基本上需要来自不同数据集市的2个数据点,则不确定该如何处理仓库结构。
这是数据仓库的标准模式:正确的方法(在大多数情况下(是在两个单独的查询中检索数据,将两个结果集连接在一起(使用通用、一致的维度(,然后查询这个组合的结果集以获得最终答案。
对于您的具体示例,我建议:
查询1:根据任何所需维度值对事件表中不同的CaseId进行计数
查询2:从偶发事件表中计数IncidentId,其中IncidentType=";X〃;按任何所需的维度值分组(如果一个案例可能有多个相同类型的事件,以及您希望在计算中如何处理,则可能需要额外的逻辑(。这些分组值需要与查询1中的值相匹配。
查询3:按常用的"查询1"结果与查询2结果连接;分组依据";字段,并将一个计数除以另一个计数以获得百分比
在SQL中如何写这篇文章取决于您的DBMS,但在大多数情况下,使用CTE可能是最简单的解决方案