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



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

[NFL Fact]

  • 季节(维度(
  • 团队(维度(
  • Coach(Dimension(
  • 花名册(维度,一对多,可以是与Coach相同的"人员"维度(
  • 获胜(国际(
  • 损失(Int(
  • 领带(国际(
  • 疯狂季后赛(布尔(
  • Won_Conference(布尔(
  • Won_超级碗(Bool(

在人类可读的形式中,数据的示例如下:

2019赛季
堪萨斯城酋长队
Andy Reid
执教,他们的名单上有Patrick MahomesTravis Kelce
在常规赛中取得12
4
0
使进入季后赛
赢得他们的联盟
赢下超级碗。

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


Season

  • 年份(键(
  • AFC冠军(字符串或维度链接?示例:"DAL"(
  • NFC冠军(字符串或维度链接?示例:"DAL"(
  • NFL冠军(字符串或维度链接?示例:"DAL"或应该是"2018 DAL"?(

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


Team

  • 代码(字符串,例如:"DAL"(
  • 季节(Int,示例:2018,key=代码+年份,示例:"2018 DAL"(
  • 会议(字符串,例如:"AFC"(
  • Division(字符串,例如:"South"(
  • Name(字符串,例如:"Dallas Cowboys"(
  • URL(字符串,例如:";https://nfl.com/dallas-cowboys"(

问题:我需要将关键字设置为Code+Year吗?或者我可以只使用Code吗?因为季节是从它所链接的事实表"派生"的?Season应该是Integer还是链接到Season维度?


Person(包括球员、教练等(

  • 姓名
  • 季节
  • 团队(?(
  • 职位
  • 年龄
  • 大学

问题:我需要在这里包括Team吗?还是因为团队已经从事实表中推断出来而不需要?这个季节也应该链接到这里吗?


对以上格式的任何建议都将非常有用,谢谢!

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

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

[团队]维度可能是缓慢变化类型-2(SCD-2(,因为您可能想要跟踪部门/会议等之间团队的变化,甚至是名称的变化。但要获得球队的季节性信息,你只需要加入[NFL事实]和[球队],所以不需要创建代码+年份键作为季节属性。

在你的例子中,[赛季]看起来不是一个维度,而是一个超过[NFL事实]的数据集市。因为[赛季]的每一行你都可以查询[NFL事实]。你可以从中获得AFC/NFC/NFL冠军+[团队]维度的会议属性。我建议用日期列表(年或YYYYMMDD或其他(而不是[季节]来创建[Date]维度。

[人物]你无法从[NFL事实]中获得。因为【NFL事实】中的最低粒度实际上是一支球队。因此,要管理球员/教练,你需要一个单独的事实表(因为明年球员可以转会到另一支球队等(。因此,这将是一个[个人]事实表,其中包含他们在特定年份效力的球队的代理密钥。这也意味着,教练/名册属性将成为这个新的[Perset]事实表的一部分,而不是如果[NLL fact],因为在您的示例中[NLL fact]只是收集球队统计数据。