2 事实表和企业想知道一个事实占另一事实的百分比
Posted
技术标签:
【中文标题】2 事实表和企业想知道一个事实占另一事实的百分比【英文标题】:2 Fact tables and business wants to know percent of total of one fact to another fact 【发布时间】:2020-09-01 03:15:05 【问题描述】:我们的仓库中有 2 个事实表。 CaseFacts 和 IncidentFacts。两者都有维度连接到日期维度和其他各种项目
在我们的 OLTP 中,这 2 个表作为一个案例的每个事件相关联。所以一个案例可以有多个事件。
OLTP 表结构
案例表 CaseId(主键) 地址 等等..事件表
IncidentId(主要) CaseId(Cases 表的外键) 事件类型 等等..案例与事件的比例为 1:n
问题是这样的: 企业想知道 IncidentType 为“X”的总案例的百分比
在我们的仓库中,如果我们不将一个事实表连接到另一个事实表,我不确定最好的处理方法是什么。
我需要的基本数据:
-
在日期时间范围内需要不同的 CaseId 和 IncidentType
然后需要事件类型计数(分子)
然后需要同一时间范围内的案例数(分母)
然后可以按其他任何内容进行分组,例如州、地区、部门..
如果本质上需要来自不同数据集市的 2 个数据点,不确定如何处理仓库结构。
【问题讨论】:
【参考方案1】:这是数据仓库中的标准模式:正确的方法(在大多数情况下)是在 2 个单独的查询中检索数据,将 2 个结果集连接在一起(使用通用、一致的维度),然后查询这个组合结果集得到最终答案。
对于您的具体示例,我建议:
查询 1:从按任何所需维度值分组的事件表中计算不同的 CaseId
查询 2:从事件表中计算 IncidentId,其中 IncidentType = "X" 按任何所需的维度值分组(如果一个案例可以有多个相同类型的事件以及您想要的方式,则可能需要额外的逻辑在您的计算中处理这个问题)。这些分组值需要与查询 1 中的值匹配。
查询 3:通过常见的“分组依据”字段将查询 1 结果与查询 2 结果连接,并将一个计数除以另一个得到百分比
具体如何在 SQL 中编写取决于您的 DBMS,但在大多数情况下使用 CTE 可能是最简单的解决方案
【讨论】:
谢谢尼克。我很欣赏快速反馈。这就是我的想法,但我质疑是否有我没有想到的替代方案。谢谢以上是关于2 事实表和企业想知道一个事实占另一事实的百分比的主要内容,如果未能解决你的问题,请参考以下文章