2

Каким образом размерный адрес моделирует требования к логическому ИЛИ-фильтру?Размерное моделирование для логической ИЛИ-фильтрации

Например, допустим измерение Customer с атрибутами HomeAddressId и BillingAddressId. Оба поля указывают на измерение Address. Некоторые бизнес-пользователи будут заботиться только о домашнем адресе, другие будут заботиться только о платежном адресе, но некоторые пользователи хотят отфильтровать результаты, например, «все клиенты с биллинговым или домашним адресом в Техасе».

Другой пример: измерение «Контакт» может иметь атрибуты Email1 и Email2, но фильтрация почти всегда будет на обоих полях, а не на том или ином.

ответ

3

Псевдоним подход, основанный на

В этом подходе, Address таблица измерения будет совмещенным, как HomeAddress и BillAddress и ID от обоих из этих двух таблиц будут связаны с HomeAddressId и BillingAddressId столбцов Customer таблицы соответственно. В этом шаблоне проектирования, когда вы задать вопрос, как это,

всех клиентов с счетов или домашний адрес в Техасе

Это будет перевести на запрос, как это:

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' 

Псевдонимы будут идеально определены на уровне отчетности (например, Universe в SAP Business Objects) или слое запроса.

мост Таблица подход

При таком подходе вы будете создавать новую таблицу моста, чтобы сохранить соотношение между Customer и Address по типам. Этот подход не является «мерным» подходом как таковой, но может быть использован в размерном моделировании в виде Таблица фактов без фактов.

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

Запрос в таком подходе будет иметь форму,

SELECT DISTINCT Customer.* 
FROM Customer, CustomerAddress, Address 
WHERE Customer.ID = CustomerAddress.CustomerID 
AND Address.ID = CustomerAddress.AddressID 
AND Address.Name = 'Texas' 

Этот подход более применим в тех случаях, когда необходимо проанализировать связь между клиентами, принадлежащими к одному адресу.

Не уверен, что вы искали это точно, но надеемся, что ответ будет полезен для вашей визуализации и дизайна.

Смежные вопросы