0

我有一个事实 [Orders] 和一个客户维度 [Customers]。这两者之间存在三种关系,因为 Orders 可以拥有三种类型的客户。: 托运人,收货人,提单。因此,反过来,当我尝试通过客户维度中的客户 ID 和名称浏览数据并尝试提取订单属性时,多维数据集无法确定应该使用三个属性中的哪一个来拼接数据。

我基本上只是想找出处理这种情况的最佳方法。显然,我可以规范化该表并创建三个特定于我在上面指定的类型的分配表,这将缓解问题。我只是想知道是否有一种方法可以在多维数据集中执行此操作而无需更改 sql 数据库中表的结构。

4

1 回答 1

3

有几种方法可以处理 DimCustomer 和 FactOrders 之间的关系,因此这取决于您如何对数据进行建模......

如果 FactOrders 有 3 个字段,每个字段都链接回 DimCustomer,如下所示...

FactOrder
  ShipperKey (FK)
  ConsigneeKey (FK)
  BillToKey (FK)

DimCustomer
  CustomerKey (PK)

...那么您最终将在 SSAS 数据库中为客户提供 3 个维度。您可以通过角色扮演(将 1 个维度添加到您的多维数据集 3 次)或作为 3 个单独的维度来实现这些维度。后者允许更用户友好的命名约定。

另一方面,如果您的 FactOrders 表只有一个链接到 DimCustomer 的字段,如下所示...

FactOrder
  CustomerKey (FK)

DimCustomer
  CustomerKey (PK)

...然后您需要使用两种方法中的一种来区分“客户类型”(发货人、收货人、BillTo)...


方法 1:在您的 DimCustomer 表中创建一个 CustomerType 字段,并使其成为您 SSAS 项目中客户维度中的属性...

FactOrder
  CustomerKey (FK)

DimCustomer
  CustomerKey (PK)
  CustomerType

方法 2:创建一个新的维度表 (DimCustomerType) 并将其添加到您的多维数据集...

FactOrder
  CustomerKey (FK)
  CustomerTypeKey (FK)

DimCustomer
  CustomerKey (PK)

DimCustomerType
  CustomerTypeKey (PK)
于 2012-01-26T20:54:49.917 回答