2事实表和企业想要知道一个事实与另一个事实的总和的百分比

问题描述

我们的仓库中有2个事实表。
案例事实和突发事件事实。两者都有维度联接到日期维度以及其他各种项目

在我们的OLTP中,这两个表与每个案例事件都相关。因此,一个案例可以有多个事件。

OLTP表结构

  • 案例表CaseId(主键)
  • 地址
  • 等。

事件表

  • IncidentId(主要)
  • CaseId(“案例”表的外键)
  • IncidentType
  • 等。

案例是事件的1:n

问题是这样的: 该企业想知道IncidentType为“ X”的案例总数的百分比

在我们的仓库中,如果我们不将一个事实表连接到另一个事实表,那么我不确定哪种最好的处理方式。

我需要的基本数据:

  1. 在日期时间范围内需要不同的CaseId和IncidentType
  2. 然后需要事件类型计数(分子)
  3. 然后需要相同时间范围内的案例数(分母)
  4. 然后可以按州,地区,部门之类的其他任何东西分组。

如果本质上需要来自不同数据集市的2个数据点,则不确定如何处理仓库结构。

解决方法

这是数据仓库中的标准模式:正确的方法(在大多数情况下)是在2个单独的查询中检索数据,将2个结果集结合在一起(使用通用的,一致的维),然后结合查询结果集以获得最终答案。

对于您的具体示例,我建议:

查询1 :计算与事件表不同的CaseId(按任何必需的维度值分组)

查询2 :对事件表中的IncidentId进行计数,其中IncidentType =“ X”按任何必需的维值分组(如果一个案例可以有多个相同类型的事件以及您希望如何操作,则可能需要附加逻辑在您的计算中进行处理)。这些分组值需要与查询1中的值匹配。

查询3 :通过常见的“分组依据”字段将查询1的结果与查询2的结果结合在一起,然后将一个计数除以另一个就得出百分比

用SQL编写的确切方式取决于您的DBMS,但在大多数情况下,使用CTE可能是最简单的解决方案