我有一个事实[Orders]和一个客户维度[Customers]。这两者之间有三种关系,因为订单可以有三种类型的客户发货人、收货人、收款人。因此,反过来,当我试图通过客户维度中的客户id和名称浏览数据,并试图提取事实上的订单属性时,多维数据集无法确定它应该根据三个属性中的哪一个拼接数据。
我基本上只是想找出处理这种情况的最佳方法。显然,我可以规范化该表,并创建三个特定于我在上面指定的类型的赋值表,这将减轻问题。我只是想知道是否有一种方法可以在不改变sql数据库中表结构的情况下在多维数据集中做到这一点。
有几种方法可以处理DimCustomer和FactOrders之间的关系,因此这取决于数据建模的方式。。。
如果FactOrders有3个字段,每个字段都链接回DimCustomer,如下所示。。。
FactOrder
ShipperKey (FK)
ConsigneeKey (FK)
BillToKey (FK)
DimCustomer
CustomerKey (PK)
那么您将在SSAS数据库中为客户提供3个维度。您可以通过角色扮演(将1个维度添加到多维数据集3次)或作为3个单独的维度来实现这些维度。后者允许更用户友好的命名约定。
另一方面,如果您的FactOrders表只有1个字段链接到DimCustomer,如下所示。。。
FactOrder
CustomerKey (FK)
DimCustomer
CustomerKey (PK)
然后,您需要使用两种方法中的一种来区分"客户类型"(发货人、收货人、收货方)。。。
方法1:在DimCustomer表中创建一个CustomerType字段,并使其成为SSAS项目中客户维度的一个属性。。。
FactOrder
CustomerKey (FK)
DimCustomer
CustomerKey (PK)
CustomerType
方法2:创建一个新的维度表(DimCustomerType)并将其添加到多维数据集中。。。
FactOrder
CustomerKey (FK)
CustomerTypeKey (FK)
DimCustomer
CustomerKey (PK)
DimCustomerType
CustomerTypeKey (PK)