DataWarehouse - 具有不同粒度/维度度量的事实表

Posted

技术标签:

【中文标题】DataWarehouse - 具有不同粒度/维度度量的事实表【英文标题】:DataWarehouse - Fact Tables with different granularity / Dimension measures 【发布时间】:2017-01-17 01:30:15 【问题描述】:

我有以下格式的数据。

RoadAccidents (pk_accidentIdentifier) 与关系 1..*Vehicles(fk_accidentIdentifier, ordinalNumber) -> 自然 PK(复合)和代理,它只是一个 rowID)。

ordinalumber 只是一个用于遍历发生事故的车辆的数字。

--Sample Row
Accident001, 1, [list of attributes of a vehicle] -- 1st car involved in an inc
Accident001, 2, [list of attributes of a vehicle] -- 2nd car involved in an inc

Vehicles1..* 与表Casualties 的关系与车辆与RoadAccidents 的连接方式相同 含义:

Casualties (Compound PK: (fk_vehicleID, casualtyOrdinalNumber)

--Sample Row:
Vehicle001, 1, [list of attributes of a casualty] -- 1st casualty involved in inc
Vehicle001, 2, [list of attributes of a casualty] -- 2st casualty involved in inc

所以关系如下。

RoadAccidents 1..* Vehicles 1..* Casualties

此外,表RoadAccidents 已经聚合了numberOfVehiclesInvolvednumberOfCasualties 的度量。

fact tables 有 3 种(可能更多)方法

    RoadAccident -> Vehicles -> Casualties 上的两个 JOINS -> 删除具有聚合数字的列 -> 将属性提取到各个维度。松散的聚合数据 -> 没有有意义的度量 -> 在 SQL Server Data Tools 中创建度量。

    有 3 个事实表。 FactRoadAccidentFactVehiclesCollisionFactCasaultiesInvInCollision

我面临的问题:事实表不应该直接通过外键链接。因此,我可以提取维度,例如。

DimRoadAccident *..1 DimRoadAccidentLocation 
DimRoadAccident` *..1 DimWeatherConditions

事实表如下所示:

FactAccident (fk_DimRoadAccidentPK, measure_numberOfVehicles, measure_numberOfCasualties)。

采用这种方法。 VehiclesCasualties 的事实表将只是一个代理 FK,其 id 为 VehicleCasualty。唯一的衡量标准是行数,即Vehicles 的数量或Casualties 的数量。

    只保留 1 个事实表

FactAccident (fk_DimRoadAccidentPK, measure_numberOfVehicles, measure_numberOfCasualties)。

将维度链接到DimRoadAccident 1..* DimVehicle 1..* DimCasualty,并在数据工具中创建层次结构,并可能在维度上创建一些新的半加法度量。

你会建议什么方法?

【问题讨论】:

这里有一个非常相似的问题(甚至可能基于相同的数据集?),我对此的回答可能会对您有所帮助:***.com/q/40774305/3964881。如果您仍然卡住,我会写一个更详细的答案,因为您在这里提供的信息比其他帖子更多。在决定您的事实表或维度表是什么之前,请考虑数据的最低粒度。一旦你了解了最低粒度,事实和维度就会变得更加明显。 谢谢你的回答乔,确实是同一个数据集。我在下面的帖子中的评论中提到了数据的粒度。 【参考方案1】:

使用 Bridge 表。当您具有多对多关系时,将使用桥接表。看这里http://www.kimballgroup.com/2012/02/design-tip-142-building-bridges/

【讨论】:

桥接表不一定是这个问题的答案。 Kimball Group 对桥接表的看法:“同样,如果您的设计充满了桥接表来捕获多值维度关系,则您需要回到绘图板上。您可能对事实表的粒度有问题。 " (kimballgroup.com/2003/10/fistful-of-flaws) 他们的这篇文章还讨论了桥接表的问题和替代方案:kimballgroup.com/2014/05/… - 主要的一点是,没有一个通用的解决方案来处理多对多的情况。但是他们在所有的写作中都非常清楚,您必须首先确保您拥有正确的纹理 - 所以这应该是第一个看的地方,并且只有在绝对必要。 这真的被认为是多对多的关系吗?在我看来,就数据之间的逻辑连接而言,这些是纯粹的 1..*。唯一的区别是 Accidents 非规范化表(原始数据)还保存了已经聚合的度量值。车辆和没有。伤亡人数。 我可以通过有两列接受伤亡和车辆的值 0,1 并将它们用作衡量标准,从而将粮食事实表带入来标记伤亡/车辆。但是,在这种情况下,最好在 MS Data Tools 中创建维度的半加法度量。

以上是关于DataWarehouse - 具有不同粒度/维度度量的事实表的主要内容,如果未能解决你的问题,请参考以下文章

如何对链接到具有不同粒度级别的多个事实的维度表进行建模?

合并来自不同粒度维度的数据

数据仓库中重要的数据模型 大神都在用

BigQuery - DataWarehouse 的维度表设计?

pandas使用resample进行不同粒度下的时间特征重构实战:构建时间维度统计特征

两个层次相同但粒度不同的事实表