← Все курсы · Курс Power BI · Все руководства

Схема «звезда» в Power BI: почему одна плоская таблица не может ответить на вопрос

Фильтрация измерений, факты суммируются, а стрелки указывают в одну сторону. · Часть Analyst Prep Kit

К , аналитик данных · Опубликовано

К концу этой страницы вы сможете взглянуть на любую таблицу и сказать, принадлежит ли она модели как факт или измерение, построить отношения, которые обеспечивают работу фильтрации, и объяснить, почему форма имеет значение даже для шестнадцати строк. Результаты, полученные на основе наших данных: лампы являются самой маленькой линейкой продуктов по выручке, 1600 из 9890, и самой прибыльной с маржой 45,0% по сравнению с 36,4% у настольной. Плоский стол не может произнести это предложение.

Вот чем на самом деле заняться сегодня. Откройте вид модели и посчитайте стрелки. Если каждый стол напрямую соединяется с одним центральным столом и каждая стрелка указывает внутрь него, у вас есть звезда. Если таблицы объединяют другие таблицы в цепочку или две таблицы указывают друг на друга, ваши срезы будут работать неправильно.

Короткая версия: поместите вещи, которые вы считаете, в одну таблицу, поместите вещи, которые вы разрезаете, в отдельные таблицы и присоедините каждую из них к таблице подсчета. Затем фильтры передаются в одном направлении: из таблиц описания в таблицу подсчета.

Форма — это идея, поэтому она передает картину.

Three tables filtering one Four rounded boxes arranged around a centre. One larger, solid, dark-filled box sits in the middle of the picture and is labelled Orders. Three smaller, lighter boxes sit around it: one at the upper left labelled Date, one at the upper right labelled Products, and one directly below the centre labelled Reps. A line runs from each of the three outer boxes to the central box. Every one of those three lines carries a single arrowhead, and in all three cases the arrowhead is at the end that touches the central box, so all three arrows point inward toward the centre and none points outward. Beside each line, at the end nearest the outer box, sits a small numeral one, and at the end nearest the central box sits a small asterisk, marking one row on the outer side against many rows on the inner side. The overall arrangement reads as three points radiating from a single hub. 1 * 1 * 1 * Date Products Reps Orders
Три таблицы описания, одна таблица подсчета и три стрелки, указывающие в одну сторону. Единица и звездочка обозначают, какая сторона имеет одну строку для каждого значения, а какая — много. Ничто не связывает что-либо еще и ничего не указывает наружу, поэтому каждый срез в отчете ведет себя предсказуемо.
Что вы узнаете
  1. Факт или измерение, и как решает модель
  2. Плоский стол и вопрос, на который он не может ответить
  3. Разделение: что и куда
  4. Построение отношений и направление, которое имеет значение
  5. Снежинка: когда одно измерение привязывает другое
  6. Два свидания на одном столе: ролевые измерения
  7. Исключения, которые Майкрософт действительно рекомендует
  8. Полное до и после
  9. Крайние случаи, которые застают людей врасплох
  10. Почему это работает
  11. Использование этого на вашей собственной модели
  12. Все на одном экране
Каждое число на этой странице является реальным. Шестнадцать заказов и трехрядная таблица товаров — то же самое приспособление, которое используется в этих направляющих. Приведенные здесь правила моделирования основаны на собственных руководствах Майкрософт по звездообразной схеме, а не на привычке, и цитируются непосредственно в разделе «почему это работает». РАСЧЕТ и фильтрация контекста — это сопутствующая страница: эта посвящена форме, эта — тому, что находится поверх нее.

1. Факт или измерение, и как решает модель

Перед определениями: у вас есть таблица заказов и таблица продуктов. Прежде чем читать дальше, скажите, какой из них вы бы посчитали, а какой отрезали бы. Вы уже знаете ответ; слова — это то, что добавляет этот раздел.

Руководство Майкрософт разделяет каждую модельную таблицу на две части по заданиям.

Таблицы измерений описывают вещи. Продукты, люди, места, даты. У них есть ключевой столбец, который уникально идентифицирует каждую строку, а также столбцы, по которым вы хотите фильтровать и группировать. Они обычно небольшие. У нас три ряда.

Таблицы фактов фиксируют события. Заказы, транзакции, чтения, просмотры страниц. У них есть ключевые столбцы, указывающие на размеры, а также на суммы, которые вы складываете. Обычно они большие и продолжают расти. У нас шестнадцать рядов, и в год их будет шестнадцать тысяч.

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

Вот та часть, которая удивляет людей. В Power BI нет параметра, который бы объявлял таблицу той или иной. В руководстве прямо сказано: «Не существует свойства таблицы, которое разработчики моделей задавали бы для установки типа таблицы как измерения или факта. Фактически оно определяется отношениями модели». В частности, кардинальность: «Сторона «один» всегда представляет собой таблицу измерений, а сторона «многие» всегда является таблицей фактов».

Таким образом, тип — это не ярлык, который вы применяете. Это следствие того, как вы объединили вещи, а это значит, что вы установили правильные отношения. является получить модель правильно.

2. Плоский стол и вопрос, на который он не может ответить

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

ID заказаДата заказаПредставительРегионПродуктЕдиницыЦена за единицу товараВыручка
10012026-01-05Дана РейесСеверРабочий стол4220880
10022026-01-12Оуэн ПаркЮгСтул1085850
10032026-01-19Прия ШахВостокРабочий стол3220660
… еще тринадцать рядов, общий доход 9890 по 101 единице…

Никаких затрат нигде нет. Выручка указана в каждой строке, а затраты — ни в одной из них, поэтому с показателем прибыли не с чем работать. Это не недостаток данного конкретного экспорта; это нормальное состояние таблицы фактов. Затраты относятся к продуктам, а не к заказам, и повторение стоимости продукта в каждой строке заказа является именно тем дублированием, во избежание которого существует отдельная таблица.

Вот ответ, когда в модели присутствует таблица продуктов со столбцом стоимости.

ПродуктЕдиницыВыручкаСтоимость товараВаловая прибыльдопуск
Рабочий стол235,0603,2201,84036.4%
Стул383,2301,9761,25438.8%
Лампа401,60088072045.0%
Общий1019,8906,0763,81438.6%

Проверьте очередь вручную: 23 стола по стоимости 140 каждый — это 3220, а 5060 минус 3220 — 1840. И теперь вместо списка претензия. Лампы занимают последнее место по выручке и первое по рентабельности. Рейтинг выручки и рейтинг маржи ставят их на противоположные концы, и единственное, что стоит между этими двумя предложениями, — это вторая таблица и связь.

Скажите вслух, что должен сделать плоский стол, чтобы ответить на этот вопрос. Придется повторять стоимость всех шестнадцати строк. Тогда корректировка стоимости становится шестнадцатью правками вместо одной, и продукт, который в этом месяце ничего не продавался, полностью исчезает из модели.

3. Разделение: что и куда

Перед разделением: возьмите восемь столбцов плоской таблицы и отсортируйте их по категориям «описывает что-то» и «является событием или числом». Сделайте это, прежде чем читать дальше.

Вот где они приземляются.

ТаблицаТипСтрокиСтолбцы
Заказыфакт16, растетOrderID, OrderDate, Rep, Product, Units, UnitPrice, Revenue
Товарыизмерение3Продукт (ключ), Категория, Список цен, Стоимость
представителиизмерение4Представитель (ключ), регион
Датаизмерение365 в годДата (ключ), год, месяц, сортировка по месяцу, квартал

Два решения в этой таблице заслуживают объяснения, потому что именно в них люди ошибаются.

Регион перемещен в таблицу «Представители». По нашим данным, каждый представитель работает в одном регионе, поэтому регион описывает представителя, а не порядок. Если поместить его в таблицу фактов, оно повторится шестнадцать раз и позволит одному и тому же представителю появиться в двух регионах в разных строках, а это проблема качества данных, которую вы только что изобрели. Если представители могут со временем перемещаться между регионами, это медленно меняющееся измерение, и оно требует управления версиями, что является другой, более сложной проблемой.

Доход остался в таблице фактов, даже несмотря на то, что он равен единицам, умноженным на Цена за единицу товара. Это число, которое вы складываете, и это факт. И она намеренно сохраняется, а не просматривается, поскольку цена на день заказа не обязательно совпадает с сегодняшней прейскурантной ценой. Таблица фактов записывает то, что произошло; измерение записывает то, что истинно в данный момент.

Измерение даты — это то, о чем никто не сожалеет. Даже на данных за пять месяцев именно это делает показатели помесячных, годовых и предыдущих периодов вообще работоспособными по причинам, рассмотренным в DAX Временная аналитика.

4. Построение отношений и направление, которое имеет значение

Перед настройками: присоединяете Товары к Заказам по названию товара. Прежде чем читать дальше, предскажите, в какую сторону должны двигаться фильтры.

Из продуктов в заказы и только так. Выбор «Товары» в слайсере должен сократить заказы. Выбор заказа не должен сокращать список товаров. Каждое отношение имеет три параметра, и значения по умолчанию обычно верны.

ПараметрценитьПочему
МощностьОдин ко многимОдна строка на продукт, много заказов на продукт. Именно это делает Продукты измерением.
Направление перекрестного фильтраОдинокийФильтры товаров Заказы. Заказы не фильтруют Товары.
активныйДаАктивной может быть только одна связь между двумя таблицами. См. раздел шестой.

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

Затем в визуальных элементах делайте срезы по столбцам измерения, а не по таблице фактов. Оба работают в нашей модели, поскольку Продукт находится в обеих таблицах, и они ведут себя по-разному в тот момент, когда продукт существует без заказов. Нарезка по Products[Product] показывает его с пустой тактой; нарезка по Orders[Product] никогда не упоминает об этом. Один из них — это отчет, в котором может быть указано: «Эта строка ничего не продала», а другой — отчет, который незаметно теряет это значение.

Мое собственное правило наведения порядка: как только связи существуют, скройте ключевые столбцы таблицы фактов из представления отчета. Никто не должен выбирать между Orders[Product] и Products[Product] во время создания отчета, и скрытие одного из них удаляет выбор.

5. Снежинка: когда одно измерение цепляет другое

Перед формой: наши продукты имеют категории «Мебель» и «Освещение». Вы можете хранить категории в отдельной таблице, присоединенной к продуктам. Скажите, что за это можно купить и сколько это будет стоить.

Эта форма представляет собой Снежинка: измерение, нормализованное по нескольким таблицам, поэтому цепочка включает категорию, продукты, заказы вместо продуктов, заказов. Руководство Майкрософт прямо говорит о сделке: «Как правило, преимущества одной таблицы модели перевешивают преимущества нескольких таблиц модели», и в нем перечислены четыре конкретных затрат.

Последний — практический убийца. Используя «Категорию» в таблице «Продукты», вы можете построить иерархию и позволить пользователям переходить от «Мебели» к «Столу» в одном визуальном элементе. Если Категория находится в отдельной таблице, это вообще невозможно.

Так что сгладьте это: поместите «Категорию» в таблицу «Продукты» в виде столбца, именно так и построена наша трехстрочная таблица. Стоимость — это повторение слова «Мебель» дважды, что в таблице из трех строк ничего не значит, а в таблице товаров из трех тысяч строк все равно ничего.

Чек, по нашим данным: Мебель составляет 8290 выручки и Освещение 1600, и в сумме они составляют 9890. Эта группировка работает, поскольку Категория находится в измерении, к которому присоединена таблица фактов, на расстоянии одного шага.

6. Два свидания за одним столом: ролевые измерения

Перед проблемой: у заказов есть дата заказа и дата отгрузки, и вы хотите проанализировать их по любой из них. Предскажите, что произойдет, если вы присоедините таблицу дат к обоим столбцам.

Power BI создает обе связи и делает активной только одну. В руководстве четко указано ограничение: «Между двумя таблицами семантической модели Power BI может быть только одна активная связь. Все остальные связи должны быть неактивными». Измерение, используемое в нескольких подобных ролях, называется ролевое измерение.

Два способа справиться с этим, и второй — тот, который рекомендует Майкрософт.

Активируйте неактивную связь внутри конкретных мер. USERELATIONSHIP включает один на время одного ВЫЧИСЛЕНИЯ.

Revenue by Ship Date =
CALCULATE (
    [Total Revenue],
    USERELATIONSHIP ( 'Date'[Date], Orders[ShipDate] )
)

Он работает и не масштабируется. Вам нужен дубликат каждой роли меры для каждой даты, панель данных заполняется почти идентичными именами, и, как отмечается в руководстве, вы все равно «не можете создать визуальный элемент, отображающий продажи на дату заказа по отгруженным продажам», поскольку одновременно может быть активен только один путь.

Постройте вторую таблицу дат. Таблица дат отправки, клонированная с самого начала, каждая из которых имеет свою активную связь. Одна строка DAX создает его: Ship Date = 'Date'. Затем переименуйте столбцы так, чтобы они были самоописательными: «Год поставки», а не «Год», чтобы заголовок диаграммы читался правильно без редактирования. Стоимостью является дублирование таблицы измерений, а поскольку таблицы измерений небольшие, это редко вызывает беспокойство.

7. Исключения, которые Майкрософт действительно рекомендует

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

Есть ровно один общий, и знание его убережет вас от чрезмерной нормализации.

Вырожденные размеры. Номер заказа — это атрибут, по которому вы хотите фильтровать, и построение таблицы с одним столбцом только для его хранения приведет к добавлению таблицы и бесполезному загромождению панели данных. В руководстве это называется «исключением из ранее введенного правила, согласно которому не следует смешивать типы таблиц» и предлагается оставить это в таблице фактов. Наш ID заказа именно такой.

Еще три фигуры, которые стоит узнать, когда вы их встретите, все они задокументированы, ни одна из наших шестнадцати рядов не нужна:

Суррогатные ключи. Если в измерении нет ни одного уникального столбца, добавьте его. В Power Query это индексный столбец, объединенный с запросом фактов, поэтому его переносят обе стороны.

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

Таблицы фактов без фактов. Таблица, содержащая только ключи измерений, записывающая, что что-то произошло, или соединяющая два измерения в отношениях «многие ко многим». Если продавец может принадлежать к нескольким регионам, рекомендуется использовать эту связующую таблицу.

Теперь представьте себе список таблиц вашей собственной модели. Какие таблицы существуют потому, что что-то действительно имеет свою структуру, а какие — потому, что исходная система экспортировала их отдельно?

Полное до и после

Оба раза одно и то же требование: доход и маржа по продуктам и по месяцам, с разрезами по региону и категории.

До

Model:  One table, Orders, 16 rows x 8 columns. Everything imported as exported.
Slicer: Orders[Region], Orders[Product]
Margin: not possible, there is no cost column anywhere

Он рендерится, и это тупик. Маржу вообще невозможно рассчитать. Временной интеллект не работает, потому что нет таблицы дат. Товар, на который в этом месяце не было заказов, исчезает из каждого слайсера. А корректировка стоимости, когда столбец стоимости в конечном итоге вставляется, составляет шестнадцать правок с шестнадцатью шансами опечатки.

после

Tables:  Orders (fact, 16 rows)
         Products (dimension, 3 rows: Product, Category, ListPrice, Cost)
         Reps     (dimension, 4 rows: Rep, Region)
         Date     (dimension, CALENDARAUTO)

Relationships, all one-to-many, single direction, into Orders:
         Products[Product] -> Orders[Product]
         Reps[Rep]         -> Orders[Rep]
         'Date'[Date]      -> Orders[OrderDate]

Total Revenue = SUM ( Orders[Revenue] )
Cost of Goods = SUMX ( Orders, Orders[Units] * RELATED ( Products[Cost] ) )
Gross Profit  = [Total Revenue] - [Cost of Goods]
Margin %      = DIVIDE ( [Gross Profit], [Total Revenue] )

Выпадают четыре таблицы, три взаимосвязи, четыре показателя и цифры из второго раздела: 9890 выручки, 6076 затрат, 3814 прибыли, 38,6% маржи, при этом лампы составляют 45,0%. RELATED — это то, что распространяется на отношения от многих сторон к одной стороне, и здесь это работает именно потому, что отношения существуют и указывают правильный путь. Срезы по «Категории» и «Региону» теперь фильтруют все, а коррекция стоимости составляет одну ячейку.

Крайние случаи, которые застают людей врасплох

Шесть, каждая из которых стоила кому-то дня.

Дублирующиеся ключи на стороне измерения. Power BI отказывается создавать связь «один-ко-многим», если сторона «один» не уникальна, а в сообщении об ошибке указывается ограничение, а не строка, вызывающая нарушение. Найдите дубликат с помощью быстрой группы, прежде чем предположить, что связь невозможна.

Пустые клавиши на фактической стороне. Заказы, в которых отсутствует товар, объединяются в пустую строку измерения. Итоговое значение по-прежнему согласовывается, а пустая строка на визуальном элементе — это модель, сообщающая вам о проблеме с качеством данных, а не ошибка, которую нужно скрыть.

Двунаправленная фильтрация повсюду. Он решает одну визуальную проблему и создает неоднозначность для движка. Собственный список модификаторов фильтров Майкрософт включает в себя CROSSFILTER для изменения направления внутри одной меры, что почти всегда является лучшим инструментом, чем изменение его в отношениях.

Смешанное уровень детализации в одной таблице фактов. Строки заказов и заголовки заказов в одной таблице дважды учитывают все суммированные данные. В руководстве четко указано, что «таблицы фактов всегда загружают данные с единообразной структурой». Один ряд означает одно и то же во всем.

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

Моделирование одного плоского экспорта, потому что это один плоский экспорт. Форма отправленного вам файла — это факт о системе отправителя, а не о вашей модели. Power Query существует для его изменения, и Power Query это тот же инструмент, выполняющий ту же работу в Эксель.

Почему это работает

Схема «звезда» — это нормализация, применяемая с определенной точкой остановки. Реляционная модель Кодда отделяет сущности от связей между ними, так что каждый факт записывается один раз, что делает корректировку стоимости одним редактированием вместо шестнадцати (Кодд, 1970, Коммуникации ACM, 13(6), 377–387). Многомерное моделирование останавливает нормализацию на шаг ниже полностью нормальной формы, сохраняя каждое измерение в одной широкой таблице, поскольку читаемость запросов и распространение фильтров имеют большее значение в аналитической модели, чем хранилище. Отчет Кимбалла является каноническим, и именно поэтому словарный запас на этой странице стандартен для всех инструментов (Кимбалл & Росс, 2013, Инструментарий хранилища данных, 3-е издание, Уайли; монография, а не журнальная статья).

Все, что здесь характерно для Power BI, — это документированное поведение, а не предпочтения. Правило, согласно которому тип таблицы определяется кардинальностью отношений, разделением фильтрации и группировки по сравнению с суммированием, четырьмя ценами снежинки, ограничением одной активной связи, исключением вырожденного измерения и требованием согласованной степени детализации, — все это цитируется выше из руководства Майкрософт по звездообразной схеме для Power BI. Эту страницу стоит прочитать полностью; это кратчайший путь к пониманию того, почему модели, которые хорошо выглядят в виде таблицы, ведут себя в отчете странно.

Одно замечание о том, почему эта страница продолжает просить вас предсказать, прежде чем показывать ответ. Попытка дать ответ до того, как вы увидите правильный, достоверно повышает, насколько хорошо сохраняется правильный ответ, даже если попытка неверна (Бисра, Лю, Несбит, Салими и Винн, 2018, Обзор педагогической психологии, 30(3), 703–725). Результаты по лампам не меняются, поскольку вас попросили сначала найти недостающий столбец.

Использование этого на вашей собственной модели

Восстановление унаследованной модели с нуля редко бывает правильным решением. Вместо этого сделайте это по порядку.

  1. Откройте вид модели и посчитайте стрелки. Каждая таблица должна достигать таблицы фактов за один переход, и каждая стрелка должна указывать на нее.
  2. Сначала добавьте таблицу дат если его нет. Это самое ценное изменение практически в любой модели.
  3. Извлеките описательные столбцы из таблицы фактов. по одному, начиная с того, который появляется в большинстве слайсеров. Это происходит постепенно, и каждый шаг поддается тестированию.
  4. Установить все отношения в одном направлении и возвращайтесь к обоим только тогда, когда этого требует конкретный визуальный элемент, и вы проверили, что еще сдвинулось.
  5. Скрыть ключевые и описательные столбцы таблицы фактов из представления отчета, поэтому разработчики отчетов могут выбрать только копию измерения.

Если у вас под рукой есть бумага, один дополнительный рисунок стоит пяти минут. Нарисуйте свою собственную модель в виде прямоугольников и стрелок по памяти, затем откройте вид модели и сравните. Таблицы, которые вы забыли, обычно не фильтруются, а стрелки, которые вы нарисовали неправильно, обычно вызывают ошибку, которую вы преследовали.

Подробнее об этом и еще что-нибудь подобное. Все инструкции находятся в одном месте на индекс направляющих: SQL, Python, Excel, Power BI и связанные с ними рабочие привычки.

Все на одном экране

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

ИдеяЧто это значит
Таблица размеровОписывает вещи. Включает фильтрацию и группировку. Маленький, по одному ряду на вещь.
Таблица фактовЗаписывает события. Позволяет суммировать. Большой и растущий.
Кто определяет типНичего вы не установили. Мощность отношений имеет значение. Одна сторона — это размер.
ФормаКаждое измерение на один шаг от таблицы фактов, каждая стрелка направлена ​​внутрь.
МощностьОдин ко многим, от измерения к факту.
Направление перекрестного фильтраОдинокий, по умолчанию. И то, и другое создает двусмысленность. Вместо этого используйте CROSSFILTER в мере.
Чего не может плоский столДопуск. Колонки затрат нет, и ей негде жить.
Находка разблокируетЛампы: последнее место по выручке (1600 из 9890), первое место по рентабельности (45,0%).
RELATEDОхватывает отношения от многих сторон к одной стороне.
СнежинкаИзмерение, связанное между таблицами. Четыре документально подтвержденных затрат, включая отсутствие межтабличной иерархии.
ролевое измерениеДата заказа и дата отправки. Активной может быть только одна связь.
USERELATIONSHIPАктивирует неактивный элемент внутри одной меры. Не масштабируется.
Вторая таблица датРекомендуемое исправление. Ship Date = 'Date', затем переименуйте его столбцы.
Вырожденное измерениеНомер заказа остается в таблице фактов. Документированное исключение.
Постоянное уровень детализацииОдна строка означает одно и то же. Смешение заголовков и строк приводит к двойному счету.
Разрезать по размеруНи копия таблицы фактов, ни члены без фактов не исчезнут.
Единственная привычка, которую следует сохранить. Каждый столбец, описывающий что-либо, находится в измерении, а каждое слагаемое число — в таблице фактов. Если вы не уверены, что это за столбец, спросите, поместили бы вы его когда-нибудь в срез. Если да, то он принадлежит измерению. Если модель сломалась так, как это не описано на этой странице, существует общая проблема. шлейф диагностики на предмет застревания.

Еще одна мысль, и мне бы искренне хотелось услышать ответы других людей. Первая модель, которую я построил, представляла собой один плоский экспорт с сорока столбцами, и она работала до тех пор, пока кто-то не потребовал маржу, после чего уже некуда было указывать стоимость. На какой вопрос не может ответить ваша текущая модель, и является ли это недостающим показателем или отсутствующей таблицей?

Ссылки

Одна плоская таблица работает до тех пор, пока два фильтра не означают разные вещи.

Power BI для аналитиков это 187 страниц, звездообразная схема построена таблица за таблицей, и чего вам стоит плохая модель в каждом визуальном изображении после.

Power BI для аналитиков, 19 долларов США →
Потренируйтесь в этом на модели перед собой.

тот Курс Power BI дает вам повторения: таблицы для сортировки по фактам и измерениям, карточки с информацией о мощности и направлении фильтрации, а также вопросы, которые задают вам вопрос, какой столбец к какому принадлежит, прежде чем появится ответ. Теперь вы владеете методом; комплект - это практика. Ничего устанавливать, учетная запись не требуется.

Откройте комплект Power BI →