Power BI должен иметь толстые или тонкие ветви в модели схемы звезды - PullRequest
3 голосов
/ 31 октября 2019

На этот вопрос нет удовлетворительного ответа. Пожалуйста, ответьте на этот вопрос или прокомментируйте.

Давайте рассмотрим следующую модель данных. У нас есть три измерения в нашей модели. Если вам нужно назвать их, будь то (A) продукт, (B) бренд, (C) регион. B является контейнером для A, поэтому это иерархия. Много продуктов в одном бренде. Таблицы, обозначенные как A, B, C, AB, ABC, являются мостовыми таблицами, которые содержат только уникальные значения.

Теперь вопросы:

  1. Нужна ли таблица мостов AB в следующей модели? Не могли бы мы соединить таблицы A и B напрямую с ABC.

  2. Является ли хорошей идеей создать декартово произведение для всех измерений в модели в виде Central Bridge Table ?

  3. Должны ли мы подключить таблицу бюджета с размерами AB, чтобы соединить AB или соединить ABC? В зависимости от того, каков ответ на первый вопрос.

  4. Как подключить рекламный стол к модели? Чтобы соединить ABC или специально созданную таблицу мостов BC и что соединить с ABC?

Теперь схема:

   +-------+
   |       |
   |  A    +-----+
   |       |     |
   +-------+     |
                 |
                 v
   +-------+  +--+----+      +--------+      +------------+
   |       |  |       |      |        |      | Sales      |
   |  B    +-->  AB   +----->|  ABC   +----->|   ABC      |
   |       |  |       |      |        |      |            |
   +-------+  +--+----+      +---+----+      +------------+
                                 ^
                                 |
   +-------+                     |           +------------+
   |       |                     |           | Budget     |
   |  C    +---------------------+           |   AB       |
   |       |                                 |            |
   +-------+                                 +------------+


                                             +------------+
                                             | Advertizing|
                                             |   BC       |
                                             |            |
                                             +------------+

Мост DAX.

Я люблю строить таблицы мостов в DAX, а не в M. Есть несколько причин для этого. Во-первых, это делается с помощью простого кода. Во-вторых, он вносит некоторую аккуратность в редактор запросов, потому что я вижу там только исходные таблицы (не мосты).

Таблицы мостов - DAX или M?

Таким образом, создание моста для измерения A выглядит следующим образом:

#A =
DISTINCT (
    UNION (
        TOPN ( 0, ROW ( "A", "Apple" ) ),
        DISTINCT ( Sales[A] ),
        DISTINCT ( Budget[A] ),
        DISTINCT ( Advertizing[A] )
    )
)

Мост для AB будетдекартово произведение таких созданных A и B:

AB =
CROSSJOIN (
    DISTINCT ( '#A'[A] ),
    DISTINCT ( '#B'[B] ),
    "A@B", COMBINEVALUES("@",'#A'[A], '#B'[B])
)

Обновление после получения первого ответа.

Я не хочу редактировать содержание моего вопросакак только щедрость началась. После первого ответа я понял, что иерархии пришли к моему вопросу случайно и отвлекли вас от того, что я хотел бы узнать. Вы можете забыть об иерархиях и рассматривать измерения A, B, C как независимые измерения.

Я хотел бы сосредоточиться на том, как построить схему типа «звезда», если у нас много независимых измерений и некоторых таблиц, скажем, словарей с joinразмеры. Например, у нас может быть бюджет продаж, определенный по региону и бренду, и рекламный бюджет, определенный product_color. Должны ли мы построить центральный мостовой стол, который имеет все размеры (декартово произведение ABC)? Или, в качестве альтернативы, должен ли стол центрального моста иметь толстые ветви с различными размерами? Во втором случае мы бы имели [AB] -> [ABC] <- [BC]. </p>

1 Ответ

4 голосов
/ 31 октября 2019

Обновлено 6 ноября 2019 г. согласно комментарию от OP

  1. Нужна ли таблица моста AB в следующей модели? Не могли бы мы подключить таблицы A и B напрямую к ABC.

Нет. Нет необходимости в мостовых таблицах, таких как AB и ABC. В такой модели, где имеется несколько таблиц фактов, рекомендуется создавать модель с несколькими звездными схемами . Просто установите прямые связи «один ко многим» между таблицами измерений и таблицами фактов, такими как A -> Sales, B -> Sales, A -> Budget и B -> Budget. Обратите внимание, что при просмотре каждой таблицы фактов таблица фактов и все связанные таблицы измерений образуют звездообразную схему.

star schema model

Является ли хорошей идеей создать декартово произведение для всех измерений в модели в виде таблицы центрального моста?

Нет. Он просто избыточен для декартова произведения всех таблиц измерений в одну большую таблицу измерений (будем называть «объединенной таблицей измерений»).

Таблица мостов между двумя измерениями, как правило, потребуется, когда существует множество ко многимсвязь между измерениями. Например, если 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, где упоминается, что таблица ссылок не являетсяЛучшая практика для обработки нескольких таблиц фактов.

...