【问题标题】:Designing a cube设计一个立方体
【发布时间】:2019-02-17 19:31:52
【问题描述】:
有人要求我创建我们的分析立方体并有一个设计问题。
我们出售“小部件”和“部件”来搭配这些小部件。每个订单都有很多小部件,有时还有几个部分。
我坚持的是——对我来说,订单是衡量标准中的事实。但是,小部件是什么?它们是维度吗?度量中的每个事实都将是订单的每个部分和小部件的条目。
那么,如果订单 123 有小部件 1、小部件 2 和部件 5,那么同一订单的度量中会有 3 个事实?对吗?
【问题讨论】:
标签:
ssas
data-warehouse
cube
dimensional-modeling
【解决方案1】:
在基本层面上,您可以将大多数事实视为交易或交易行项目。因此,例如,您可能有一个“销售”事实表,其中每条记录代表该销售中的一个行项目。每个事实记录都有表示度量的数字列和连接到维度表的其他列。这些维度的组合将描述该订单项。所以,在你的情况下,你可能有类似的东西:
1) 详细说明交易日期的“日期”维度
2) 一个“小部件”维度,详细说明在该交易中出售的小部件
3) 详细说明购买该商品的客户的“客户”维度(几乎可以肯定,同一客户会出现在此交易的每个订单项上)
4) ... 取决于您拥有的信息以及您要解决的业务问题。
现在,维度表包含更多详细信息。例如,您的小部件维度表可能包含小部件名称、颜色、制造商等内容。每次您的公司销售其中一个小部件时,事实表中的记录都会链接到该名称的同一维度记录、颜色、制造商等组合(即您不会在每次销售相同商品时创建新的维度记录——这是一对多的关系——每个维度记录可能有许多相关的事实记录)。
您的其他维度表会类似地描述它们的维度。例如,客户维度可能会给出客户的姓名、地址、...
因此,对您的问题的简短回答是,小部件可能是一个维度,项目和小部件可能(或可能不)实际上是相同的维度(在学校课堂上我怀疑它们是),并且您会该笔交易的 3 条事实记录。
【解决方案2】:
这可能与之前的答案相同,但是......
如果您尝试对“每个订单多个小部件”进行建模,则会遇到问题,因为您最终会得到多(订单事实)对多(小部件)关系。在多维数据集/星型模式设计中,多对多关系通常需要以某种方式建模为多对一。
因此,您要做的是尝试确定哪些特殊事物可以识别“订单”(而不是订单中的一堆小部件)。通常这只是订单日期、客户、订单号、税金等简单的东西
对此进行建模的示例方法是:
如果您有一个包含五个小部件的订单,您可以将其建模为一个包含五个记录的事实表,其中恰好有一个重复的小部件、客户、日期等
然后,您必须弄清楚如何将订单标题税额分配到五个记录。两个明显的解决方案是:
- 创建一个代表税收的小部件并将其添加为另一条记录
- 将税款分摊到 5 条记录上,可以是平均分配的,也可以按某些东西加权
对“零件”建模只是进一步扩展了这些概念。
了解最终用户想要看到的内容以及他们想要查看部件的原因非常重要。他们想按零件衡量什么,如何将较高级别的值(例如税收)分配给较低级别的零件(例如零件)。