0

目前面临一个问题,我正在尝试为 Web 应用程序创建登录利用率报告。为了稍微描述一下报告,我们系统中的用户被标记了关于用户的不同元数据。例如,我可能被标记为“纽约市”和“软件工程师”,而其他用户可能被标记为不同的位置和职位。利用率报告基本上如下:

  1. 时间段(季度)
  2. 登录总数
  3. 唯一登录
  4. 总用户
  5. “参与百分比”(唯一登录/总用户)

问题是,报告需要有点动态。我需要能够应用职位和位置的任意组合,并让每个数字都反映应用的元数据。时间段还需要能够轻松调整以支持每周、每月和每年。理想情况下,我可以在 Redshift 中创建一个视图,允许我们的 BI 软件用户在他们认为合适的时候运行此报告。

我的问题是,设计数据模型来支持这份报告的理想策略是什么?我目前有一个原子事实表,其中包含使用此模式的所有登录:

  • 用户身份
  • 登录ID
  • 登录时间戳
  • 职称组 ID(职称的 MD5 散列以支持多值)
  • 位置组 ID(位置的 MD5 哈希以支持多值)

事实表允许我轻松编写查询以汇总总计(登录 ID 计数)和唯一(用户 ID 的不同计数)。

如何补充我必须包含总用户数的数据?我目前有最好的方法吗?

4

1 回答 1

0

属性之间的分层、固定深度的多对一 (M:1) 关系通常被非规范化或折叠到扁平维度表中。如果您的职业生涯大部分时间都在为事务处理系统设计实体关系模型,那么您需要抵制将 M:1 关系标准化或雪花化为更小的子维度的本能倾向;维度非规范化是维度建模中的游戏名称。

在单个维度表中表示多个 M:1 关系是相对常见的。一对一的关系,如与产品代码关联的唯一产品描述,也在维度表中处理。有时会在事实表中解决多对一的关系,例如详细维度表有数百万行并且其汇总属性经常变化的情况。但是,应该谨慎使用事实表来解决 M:1 关系。

在您的情况下,我建议您使用以下设计作为解决方案:

在此处输入图像描述

于 2021-03-01T14:48:29.690 回答