Обновлено 6 ноября 2019 г. согласно комментарию от OP
- Нужна ли таблица моста AB в следующей модели? Не могли бы мы подключить таблицы A и B напрямую к ABC.
Нет. Нет необходимости в мостовых таблицах, таких как AB
и ABC
. В такой модели, где имеется несколько таблиц фактов, рекомендуется создавать модель с несколькими звездными схемами . Просто установите прямые связи «один ко многим» между таблицами измерений и таблицами фактов, такими как A -> Sales
, B -> Sales
, A -> Budget
и B -> Budget
. Обратите внимание, что при просмотре каждой таблицы фактов таблица фактов и все связанные таблицы измерений образуют звездообразную схему.
Является ли хорошей идеей создать декартово произведение для всех измерений в модели в виде таблицы центрального моста?
Нет. Он просто избыточен для декартова произведения всех таблиц измерений в одну большую таблицу измерений (будем называть «объединенной таблицей измерений»).
Таблица мостов между двумя измерениями, как правило, потребуется, когда существует множество ко многимсвязь между измерениями. Например, если Customer
может принадлежать нескольким Category
, потребуется таблица моста Customer Category
. Сценарий, представленный OP, не является сценарием использования таблицы мостов.
Недостатки таблицы объединенных измерений:
Требуется дополнительное хранение данных. Если A
, B
, C
имеют 100, 100 и 1000 строк соответственно, в таблице размерности соединения будет 10 миллионов строк. Предположим, что если вы повернулись позже, чтобы добавить новое измерение с 100 строками, число рядов измерения будет равно 1 миллиарду! Это неэкономично.
Это требует дополнительных вычислений. Когда мы хотим, чтобы Sales
отфильтровывался по A
, движок сначала должен сканировать таблицу размеров соединений. чтобы извлечь строки, которые соответствуют отфильтрованному значению A
, которое потенциально может быть огромным числом строк, механизм сканирует таблицу фактов Sales
с ключом взаимосвязи, который содержится в извлеченных строках таблицы объединенного измерения. Это может работать только тогда, когда размер измерений очень мал, а таблица фактов очень велика. Но во многих случаях производительность будет отчаянной.
Это неуместное представление бизнес-данных. Я думаю, что это самый большой недостаток. В вашей модели Budget
определяется только в гранулярности размеров A
и B
. Глупо думать о Budget
, который принадлежит экземпляру C
. Однако, чтобы установить связь между таблицей размеров соединения и Budget
, нам нужно настроить Budget
, чтобы связать его с конкретным экземпляром C
.
Должны ли мы подключить таблицу бюджета с размерами AB, чтобы соединить AB или соединить ABC? В зависимости от того, каков ответ на первый вопрос.
Budget
должно быть напрямую связано с A
и B
. Потому что гранулярность Budget
- это каждая A
и B
в вашей модели.
Как подключить рекламный стол к модели? Чтобы соединить ABC или специально созданную таблицу мостов BC и что соединить с ABC?
Установить отношения B -> Advertising
и C -> Advertising
.
BTW,на самом деле в вашей модели нет отношения «многие ко многим». Может быть несколько Sales
записей, связанных с Product
, но каждая Sales
запись имеет только одну Product
, поэтому взаимосвязь между Product
и Sales
является "один ко многим". То же самое относится и к другим отношениям в модели.
Это было бы лучше описать как «несколько таблиц фактов с разной гранулярностью».
Добавлено 6 ноября 2019 г. какза комментарий от ОП
Похоже, что OP не понимает, как обрабатывать несколько таблиц фактов с различной степенью детализации. Я полагаю, что OP извлечет выгоду из этой статьи Марко Руссо, но я попытаюсь обобщить суть здесь.
По сути, представленные модели OP могут быть упрощены до модели звездной схемы, гдетаблицы фактов Sales
, Budget
и Advertising
будут размещены в центре различных звездочек.
Проблема заключается в том, что некоторые таблицы измерений являются общими для разных таблиц фактов, в то время как некоторые измерения не являются общими. ,Например, размеры A
и B
совместно используются Sales
и Budget
, тогда как C
относится только к Sales
. Давайте подумаем, что мы сравниваем Sales
и Budget
. Когда мы детализируем отчет по C
, какое значение должно появиться в Budget
? Ответ может варьироваться в зависимости от бизнеса, но здесь давайте подумаем, что мы ожидаем, что Budget
будет пусто , потому что у нас нет Budget
, определенного на уровне каждого C
.
Общепринятым подходом для такого сценария является проверка контекста фильтра в показателе и возвращаемого значения только тогда, когда он отфильтрован по релевантным измерениям. Например, вычислять общую сумму Budget
только в том случае, если в текущем контексте нет фильтра C
.
[Total Budget] :=
IF (
NOT ( ISFILTERED ( 'C' ) ),
SUM ( 'Budget'[Amount] )
)
Ссылки
Добавлено 11 ноября 2019
Анализ данных с помощью Power BI и Power Pivot для Excel Подробно описывает шаблоны и передовые методы моделирования данных.
Понимание схемы типа звезда и важность для Power BI Иллюстрирует особенности и преимущества схемы типа «звезда». Кроме того, в нем перечислены другие распространенные шаблоны моделирования.
Наилучший способ работы с таблицами из нескольких фактов Тема вопросов и ответов на форуме сообщества Microsoft Power BI, где упоминается, что таблица ссылок не являетсяЛучшая практика для обработки нескольких таблиц фактов.