我应该合并事实表的列以使其更窄,还是应该通过大量列使其对用户更友好?

Posted

技术标签:

【中文标题】我应该合并事实表的列以使其更窄,还是应该通过大量列使其对用户更友好?【英文标题】:Should I combine the columns of a fact table to make it more narrow, or should I keep it more user friendly with a lot of columns? 【发布时间】:2017-01-23 12:15:57 【问题描述】:

我有一个显示 KPI 结果的事实表。有几个 KPI,其中一些具有相似的输出。

我目前的专栏是这样的:

KPI_ID, DOCUMENT_ID, TRUE_FALSE_FLAG1, TRUE_FALSE_FLAG2, DURATION_3, DURATION_4

因此,对于 1 号 KPI(真假输出),最后三列将是 NULL 值。我应该结合TRUE_FALSE_FLAG1TRUE_FALSE_FLAG2 吗?什么是最佳实践?

总共有 18 列,其中 12 列是真/假标志或“天数”(整数)形式的持续时间。

picture of the two alternatives

编辑: KPI 3 可能是“问题持续时间”,您会遇到一堆问题,每个问题都有一个 documentID,表示为一行。 Dur_3 就像 5 天、3 天、10 天等。KPI 4 将是“订购维修后的修复延迟”,答案仍然是整数天。但与 KPI 3 完全无关。

报告可能是“修复的平均延迟”。所以大致从 KPI_ID = 3 按 KPI_ID 分组的表中选择 AVG()。

【问题讨论】:

由于没有关于列含义的领域知识,第二种选择对我来说看起来更好。 Gordon Linoff:KPI 3 可能是“问题持续时间”,您会遇到一堆问题,每个问题都有一个 documentID,表示为一行。 Dur_3 就像 5 天、3 天、10 天等。KPI 4 将是“订购维修后的修复延迟”,答案仍然是整数天。但与 KPI 3 完全无关。报告可能是“修复的平均延迟”。所以大致从 KPI_ID = 3 按 KPI_ID 分组的表中选择 AVG()。 只要每个 KPI 都只有 True/False,或者只有一个持续时间要报告,您最好使用备选方案 2。如果任何 KPI 有可能需要存储多个值,那么您想考虑备选方案 1 或备选方案 1 和备选方案 2 之间的内容。您说“有 18 列,其中 12 列是真/假标志或“天数”(整数)形式的持续时间。其他 6 列是什么。这似乎与此有关。 @fredskogsBI 。 . .听起来标志实际上代表了不同的维度,这就是我喜欢第二种解决方案的原因。 Josh F:谢谢您的回复。其他六列只是元数据,例如 INSERT_DATE 和 UPDATE_DATE,以及其他一些不相关的列。我已经制作了 ETL,这样 KPI 就不需要将值存储在多个列中。那是; KPI 不需要同时存储 T/F 和持续时间。 【参考方案1】:

根据您的最新评论,您最好使用备选方案 2。具体而言,只要每个 KPI 仅是真/假,并且只有一个要存储的持续时间,您最好使用备选方案 2。

编辑:使用备选方案 2,每个 KPI 可以存储一个真/假值和一个持续时间值

【讨论】:

以上是关于我应该合并事实表的列以使其更窄,还是应该通过大量列使其对用户更友好?的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏 DefaultTableModel 中的特定列以使其在表中显示?

SELECT * 真的比只选择需要的列花费更多的时间吗?

矩阵中要删除的最少列以使其按行按字典顺序排序

Pandas:如何比较导入的 csv 文件的列以确保它们相同?

合并列以删除 NA,但优先考虑特定替换

重写有状态代码以使其更干