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

时间:2012-01-20 17:30:35

标签: sql sql-server tsql sql-server-2012 ssas

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

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

1 个答案:

答案 0 :(得分: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)

...那么你需要使用两种方法中的一种来区分“客户类型”(Shipper,Consignee,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)