关于如何在星型模式中对许多半布尔属性进行建模的问题

Posted

技术标签:

【中文标题】关于如何在星型模式中对许多半布尔属性进行建模的问题【英文标题】:Questions on how to model many semi-boolean attributes in a star schema 【发布时间】:2017-04-20 20:41:05 【问题描述】:

在一个星型模式的维度中对 37 个不同的属性/“检查点”(可以分级为通过/失败/不适用)进行建模的最佳方法是什么,其中事实表中的每一行都是被分级的通信有问题的检查站?

TL;DR:

我开发了一个星型模式模型,其中事实表中的每一行都是一个单一的通信。这些通信经过一系列分级“检查”(例如“按时发布”、“正确的电子邮件主题”、“正确复制 XYZ 内容”等),每项检查都可以被分级为“通过”、“未通过”、或“不适用”。

不同类型的沟通在不同的检查集上进行评分(例如,一种沟通类型只能在三张检查中评分,其余为“不适用”,而另一种沟通在 19 次检查中评分)。共有 37 个唯一检查。

我已经建立了一个“CommunicationGrading”类型 2 缓慢变化的维度,以便于报告哪些“检查”通信得分最差。该维度有 37 列,每个属性一列,每一行是属性的排列以及它们可以收到的分数(通过/失败/NA)。当一个新的排列可用时添加一个新行 - 不幸的是,填充所有可能的排列会返回数百万行,而这种方式小于 100 行,开销要少得多。我创建了 37 个单独的度量来汇总错过 37 个单独“检查”中每一个的通信的数量。

我可以在 PBI 中快速构建一个树形图,将 37 个度量拖到那里,查看错过每个“检查”的通信总数,并确定本月有 X 个通信错过了 Y 个检查点。当我想将视觉对象用作切片器时,问题就出现了(例如,在树形图上选择一个检查/平铺以查看在树形图下方的表格中检查时遗漏了哪些单个通信)或确定给定切片的前 N ​​个“检查”数据的。

据我所知,问题是因为我使用了 37 个不同的属性和度量,而不是一个属性和一个度量(我可以将单个度量拖到 Values 中,将包含所有检查的单个属性/列拖到 Group树状图视觉对象中的字段)。问题是,我对如何最好地建模这个/分级维度感到困惑。是否需要将维度缩减为仅两列,一列用于检查,另一列用于检查的可能分数,然后创建一个桥接表来处理 M:M 关系?其他想法?

【问题讨论】:

【参考方案1】:

您的维度(实现为垃圾维度 - 谷歌的东西)是一种方法,但如果沿着这条路走,我会将其分解为相关检查点的多个维度,以大量减少每个维度中的排列。也不清楚为什么这需要是第 2 类 - 您是否需要跟踪此维度的历史?

但是,我建议探索的一种方法是在每个检查点为每个通信的分数设置一个新事实 - 您可以有一个维度的成绩结果(通过、失败、不适用)和每个检查点的一个维度(即只是检查点描述)。它还可以让您依靠这一事实,而不必拥有 37 种不同的措施。如果需要保留一些汇总信息,您可能希望在沟通层面保留事实,但这取决于您的要求。

【讨论】:

感谢富人的回复!关于 Type-2 SCD,我的意思是我根据需要添加行,而不是用所有可能的排列填充维度。我对所有术语还是有点陌生​​,所以我为混淆道歉!如果我理解正确,您建议将通信事实表的粒度从每次通信的新事实降低到每次通信的每个检查点的新事实,对吗?这不是我以前考虑过的事情,但我认为这应该可行。谢谢! 啊,是的,Type 2 SCD 是一种历史跟踪技术,而不是行即来技术。不用担心,术语并不重要,重要的是想法。是的,我建议为通信中每个检查点的每个结果使用更低/更详细的粒度。这可能并不理想,但值得一试。

以上是关于关于如何在星型模式中对许多半布尔属性进行建模的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在关系数据库中进行继承建模?

如何在维度模式中对 OLTP 审计表进行建模?

如何在数据库设计中对属性单元进行建模?

星型架构[事实 1:n 维度]...如何?

星型模式建模 - 多对多

需要维度建模帮助 - 平面表到星型模式