为足球分析建模 OLAP 多维数据集

Posted

技术标签:

【中文标题】为足球分析建模 OLAP 多维数据集【英文标题】:Modeling an OLAP cube for Football analysis 【发布时间】:2020-11-18 21:19:33 【问题描述】:

我想按赛季对 NFL 橄榄球数据进行基本分析。例如,我想要的Fact 是:

[NFL Fact]

季节(维度) 团队(维度) 教练(维度) 名册(维度,一对多,可以是与教练相同的“人员”维度) 胜利(智力) 损失(内部) 关系(内部) Made_Playoffs(布尔) Won_Conference(布尔) Won_Superbowl(布尔)

数据示例以人类可读的形式如下所示:

2019 赛季 堪萨斯城酋长队团队 由 Andy Reid 指导 他们的名单上有 Patrick MahomesTravis Kelce、... 有 12 场胜利 和 4 损失 和 0 在常规赛中打平 进入季后赛 并赢得他们的会议 并赢得了超级碗。

如果上面是我们的事实表,维度如何建模?这是我的第一次尝试:


Season

年份(键) AFC Champion(字符串或维度链接?示例:“DAL”) NFC Champion(字符串或维度链接?示例:“DAL”) NFL Champion(字符串或维度链接?示例:“DAL”还是应该是“2018 DAL”?)

问题:AFC/NFC/NFL Champion 应该是字符串吗?还是应该引用Team 维度?为什么要选择一个而不是另一个?


Team

代码(字符串,例如:“DAL”) 季节(Int,例如:2018,key = code+year,例如:“2018 DAL”) 会议(字符串,例如:“AFC”) 除法(字符串,例如:“South”) 姓名(字符串,例如:“达拉斯牛仔队”) 网址(字符串,例如:“https://nfl.com/dallas-cowboys”)

问题:我是否需要将键设为 Code+Year,或者我可以只使用 Code,因为季节是从它链接到的 Fact 表中“派生”出来的? Season 应该是整数还是指向季节维度的链接?


Person(包括球员、教练等)

姓名 季节 团队 (?) 位置 年龄 大学

问题:我需要在此处包含Team,还是不需要因为团队已经从事实表中推断出来?赛季也应该在这里链接吗?


对上述格式的任何建议都会很有帮助,谢谢!

【问题讨论】:

【参考方案1】:

我不擅长 NFL 橄榄球,但可以为您提供如何管理实体和创建关系的基本思路。

首先将事实表视为所有维度之间的主要管理器和连接器。

[Team] 维度可能是 Slowly Changes Type-2 (SCD-2),因为您可能想要跟踪部门/会议等之间团队的变化,甚至名称变化。但要获取球队的赛季信息,您只需加入 [NFL Fact] 和 [Team],因此无需创建 Code+Year 键作为赛季属性。

您的示例中的 [Season] 看起来不是维度,而是 [NFL Fact] 上的数据集市。因为 [Season] 的每一行都可以查询 [NFL Fact]。可以获得AFC/NFC/NFL Champion + [Team]维度的Conference属性。我建议使用日期列表(年份或 YYYYMMDD 或其他)而不是 [Season] 创建 [Date] 维度。

[Person] 你无法从 [NFL Fact] 中得到。因为 [NFL Fact] 中的最低粒度实际上是一个团队。因此,要管理球员/教练,您需要一个单独的事实表(因为明年球员可以转移到另一支球队等)。因此,这将是 [Persons] 事实表,其中包含他们在给定年份效力的团队的代理键。这也意味着如果 [NFL Fact],Coach/Roster 属性将成为这个新 [Persons] 事实表的一部分,因为在您的示例中 [NFL Fact] 仅用于收集球队统计数据。

【讨论】:

以上是关于为足球分析建模 OLAP 多维数据集的主要内容,如果未能解决你的问题,请参考以下文章

Excel 多维数据集 - OLAP?

使用 C# 对 SQL Server OLAP 多维数据集进行单元测试

OLAP 多维数据集 - PHP 和 MongoDB

如何为 OLAP 多维数据集部署 Oracle 维度表

sql查询聚合与聚合和查询OLAP多维数据集的区别

如何理解 S3 或 Cassandra 中的 OLAP 多维数据集?