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 事实表和企业想知道一个事实占另一事实的百分比的主要内容,如果未能解决你的问题,请参考以下文章

什么是ODS?还有什么是事实表和维度表啊?希望高手指教~

Pentaho Kettle 是不是创建维度表和事实表

事实表和维度表

没有FK时如何找到维度表和事实表之间的关系?

数据库——事实表和维度表

在Cognos中事实表的概念和维表的概念是啥