SSAS -> 多维数据集浏览/查询 -> 与另一个维度具有三个关系的维度,检索数据时遇到问题



我有一个事实[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)

最新更新