Пространственное моделирование - Запросы без фактов

Я создаю размерную модель о "системе записи звонков" для службы VoIP. Я приведу небольшой пример, чтобы показать мой вопрос.

Предположим, у меня есть факт, представляющий один звонок. И у меня есть измерение, называемое клиентом, и другое, называемое провайдером. (сделайте вид, что есть другие измерения, такие как, конечно, Дата и т. д.)

(Dimension)Client ---> (Fact)Call <--- (Dimension)Provider

Благодаря этому я смогу увидеть, сколько звонков сделал клиент или сколько звонков было отправлено через провайдера, а также другие вопросы.

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

Итак, возникает вопрос. Как я могу создать запрос: Какие клиенты есть у каждого провайдера?

Кажется, это запрос, который находится между двумя измерениями. Я не могу упомянуть тот факт, что, если клиент никогда не использовал службу, он не попадет в таблицу фактов вызовов, и он не приложится к этому запросу "Клиенты на одного провайдера".

Я думал сам с собой, что одним из способов сделать это было бы создание Role-Playing-Dimension, представления измерения Client и добавление его непосредственно в измерение Provider, просто для выполнения таких запросов. Это было бы что-то вроде этого:

(Dimension)Client ---> (Fact)Call <--- (Dimension)Provider <--- (Dimension)View Client

Конечно, при таком подходе пользователь должен быть очень осторожным, чтобы не использовать это измерение View Client с таблицей фактов, поскольку оно будет дублировать строки фактов.

Итак, это одна из ситуаций, когда мне нужно использовать известные таблицы фактов без фактов?

Какой правильный способ сделать это?

Спасибо!

1 ответ

Ролевые измерения следует использовать, когда вы "перерабатываете" измерение, которое будет использоваться несколько раз в одной и той же таблице фактов (например, Дата вызова, Дата обслуживания и т. Д.).

Это не похоже на то, что вы ищете. Вместо этого, если отношение действительно одно ко многим, я бы просто добавил идентификатор поставщика непосредственно в измерение клиента (не нужно представление или что-либо еще), с учетом того, что это отношение не имеет ничего общего с фактами.

По сути, думайте о "провайдере", как о атрибуте, привязанном к клиенту, когда дело доходит до такого рода запросов.

Однако может показаться, что вы хотите быть уверены в том, что между клиентами и поставщиками нет связи "многие ко многим" (клиент может использовать несколько поставщиков, а поставщик может иметь несколько клиентов). Отношение "многие ко многим" моделируется пространственно как таблица фактов. Ваша таблица фактов может быть снимком текущего момента времени с историей или без нее. Нужны всего две колонки, Client а также Provider, Если вы хотите вести учет отношений между клиентом и провайдером по какому-то таймфрейму, просто добавьте отметку даты.

Обратите внимание, что факт без фактов будет работать и для моделирования отношения один-много (и если модель изменится на бэкэнде, ваш ETL уже готов)

Другие вопросы по тегам