用于布尔OR过滤的维度建模

时间:2014-01-20 07:42:53

标签: data-warehouse business-intelligence dimension dimensional-modeling

维度建模如何解决布尔-OR过滤要求?

例如,假设维度Customer包含属性HomeAddressIdBillingAddressId。这两个字段都指向Address维度。一些商业用户只关心家庭住址,其他人只关心帐单地址,但有些用户希望过滤结果,例如“所有在德克萨斯州有账单或家庭住址的客户”。

另一个例子:“联系人”维度可能包含属性Email1Email2,但过滤几乎总是在两个字段上,而不是一个或另一个。

1 个答案:

答案 0 :(得分:3)

基于别名的方法

在此方法中,Address维度表的别名为HomeAddressBillAddress,这两个表中的ID将链接到{{1}分别是HomeAddressId表的{}和BillingAddressId列。在这种设计模式中,当你提出这样的问题时,

  

所有在德克萨斯州有账单或家庭住址的客户

它会转换为这样的查询:

Customer

别名将在报告层中理想定义(例如 SAP Business Objects 中的SELECT Customer.* FROM Customer LEFT OUTER JOIN Address HomeAddress ON Customer.HomeAddressId = HomeAddress.Id LEFT OUTER JOIN Address BillAddress ON Customer.BillingAddressId = BillAddress.Id WHERE HomeAddress.Name = 'Texas' OR BillAddress.Name = 'Texas' )或查询图层。

桥牌表方法

在此方法中,您将创建一个新的桥表,以根据类型存储UniverseCustomer之间的关系。这种方法不是“维度”方法,但可以用无事实事实表的形式用于维度建模。

Address

此方法中的查询将采用

形式
CustomerID   |  Type  | AddressID
-----------------------------------
1            |  Home  | 10
2            |  Home  | 20
2            |  Bill  | 30
3            |  Home  | 10
3            |  Bill  | 40

这种方法更适用于需要分析属于同一地址的客户之间关系的情况。

不确定您是否正在寻找这个,但希望答案对您的可视化和设计有所帮助。