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
Vehicles
与1..*
与表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
已经聚合了numberOfVehiclesInvolved
和numberOfCasualties
的度量。
fact tables
有 3 种(可能更多)方法
RoadAccident -> Vehicles -> Casualties
上的两个 JOINS -> 删除具有聚合数字的列 -> 将属性提取到各个维度。松散的聚合数据 -> 没有有意义的度量 -> 在 SQL Server Data Tools 中创建度量。
有 3 个事实表。 FactRoadAccident
、FactVehiclesCollision
、FactCasaultiesInvInCollision
我面临的问题:事实表不应该直接通过外键链接。因此,我可以提取维度,例如。
DimRoadAccident *..1 DimRoadAccidentLocation
DimRoadAccident` *..1 DimWeatherConditions
事实表如下所示:
FactAccident
(fk_DimRoadAccidentPK, measure_numberOfVehicles, measure_numberOfCasualties
)。
采用这种方法。 Vehicles
和 Casualties
的事实表将只是一个代理 FK,其 id 为 Vehicle
或 Casualty
。唯一的衡量标准是行数,即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 的维度表设计?