Это третья статья из серии: Серия DAX — изучите основы Power BI
3. Показатели и вычисляемые столбцы

В конце этой статьи у меня есть ссылка на мой GitHub, где вы можете найти одну пустую модель Power BI и одну полную модель с расчетом, который я сделал в этой статье.

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

Историю также можно найти здесь:
https://eliasnordlinder.com/power-bi/f/dax-series-3-measures-vs-calculated-columns-in-dax

Что такое вычисляемые столбцы?

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

Нажав кнопку «Новый столбец», вы сможете написать расчет для вычисляемого столбца в строке формул.
Ниже приведен расчет столбца «Общий объем продаж» в моем примере.

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

Что на самом деле происходит за кулисами для вычисления вычисляемого столбца в моем примере?

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

Сначала количество заказа умножается на цену за единицу (1 минус скидка) для строки 1. После этого количество умножается на цену за единицу (1 минус скидка) для строки 2 и так далее.

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

«Вычисляемые столбцы вычисляются один раз и сохраняются в таблице» Альберто Феррари

Позвольте мне подробнее описать эти концепции и их последствия для модели.

Что хорошего в вычисляемых столбцах

  • Легко понять

Поскольку вычисляемые столбцы рассчитываются «построчно» (в контексте строк), их более легко понять, чем измерения, особенно, если вы пришли из опыта работы с Excel.

Общий объем продаж, который я рассчитал ранее, можно рассчитать с помощью той же настройки в Excel, которая очень похожа на вычисляемый столбец.

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

  • Полезно в слайсерах

Одно полезное место для вычисляемых столбцов — слайсеры.
Если вы используете маленькую таблицу (‹ 5 миллионов строк), можно создать вычисляемые столбцы, например, для сегментов. (Для больших таблиц лучше подойдет специальная таблица сегментации, о которой я расскажу в статье 13. Динамические таблицы).

Пример ниже:

Вы можете разделить значения продаж по разным сегментам, а затем использовать их в качестве среза в своем отчете.

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

Плохие вещи о вычисляемых столбцах

  • Занимает место в оперативной памяти

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

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

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

Можно ли выполнять те же вычисления, не занимая оперативную память?

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

Ответ на это есть, и ответ на это Меры.

Что такое меры?

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

Давайте рассмотрим создание мер, а затем более подробно обсудим, что они из себя представляют. Самый простой способ создать меру — на главной ленте на странице «Отчет»:

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

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

Ниже я вставил меру вместе с ранее рассчитанным вычисляемым столбцом и некоторыми другими столбцами в качестве визуализации таблицы.

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

Хорошие вещи о мерах

  • Они не сохраняются в оперативной памяти.

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

Если вы можете иметь много показателей в модели Power BI, не используя много оперативной памяти.

  • Вычисление соотношения агрегатов

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

Это дает следующий результат

«Плохие» вещи о мерах

  • Трудно понять

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

Первое, что вы заметите, если сравните его с вычисляемым столбцом, — это СУММ. Это итератор, который я подробнее опишу в следующей главе. Но если коротко, то он делает то, что говорит рисунок справа, он перебирает каждую строку в определенной таблице (Продажи) и выполняет некоторую логику/выражение в этой таблице.

Если вы попытаетесь написать меру как вычисляемый столбец, вы получите эту ошибку:

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

Что означает Невозможно определить одно значение?
Давайте снова воспользуемся помощью богов DAX.
(Я не буду обсуждать обе части этого сообщения об ошибке, предоставленные Microsoft на самом деле в данном случае вводит в заблуждение и неправильно, но SQLBI обсуждает это более подробно в своем блоге)

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

Чтобы вызвать контекст строки, вы можете использовать итератор, такой как SUMX в приведенном выше примере. Давайте еще раз пройдемся по этому выражению:

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

Вывод

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

  • Вычисляемые столбцы занимают драгоценную оперативную память и физически хранятся в вашей модели, в то время как показатели рассчитываются во время запроса и физически не сохраняются в вашей модели.
  • Всегда используйте меры, если вы можете что-то выразить как с помощью вычисляемых столбцов, так и с помощью мер.
  • Меры сложнее изучить и понять, но награда за их изучение действительно велика.
  • Вы не можете использовать один и тот же синтаксис в вычисляемых столбцах и показателях, поскольку вычисляемые столбцы имеют наследуемый контекст строки, а показатели — нет. Например, используйте SUMX для вычисления выражения двух столбцов, DIVIDE для деления и т. д.

Дополнительные сведения о вычисляемых столбцах и показателях

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

использованная литература

Curbal
DAX Friday! № 46: В чем разница между вычисляемым столбцом и показателями в Power BI?

EnterpriseDNA
Видео на Youtube: Measures vs Calculated Columns — (1.5) Полное руководство по DAX для начинающих

Radacad
Видео на YouTube: Измерение против вычисляемого столбца в Power BI. Загадочный вопрос
Сообщение в блоге: «Измерение против вычисляемого столбца: загадочный вопрос? Нет!"

SQLBI
Видео на YouTube: Measures vs Calculated Columns
Публикация в блоге: Calculated Columns and Measures in DAX

Модели Power BI доступны на GitHub

Вы можете найти файлы Power BI для всех сообщений блога ниже:
https://github.com/EliasNo/DAX-Series

Внутри PowerBI-Datamodels вы можете найти папку 3. Показатели и вычисляемыестолбцы, где я разместил «Чистую версию» и «Ключ ответов» со всеми показателями и тому подобным, сделанным в этой статье.

Данные, использованные для этой статьи, можно найти здесь:
Измените параметр ниже, чтобы сохранить лист Excel, и вы также сможете преобразовать данные.

Вопросы или запросы

Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте отзыв или свяжитесь со мной в LinkedIn: www.linkedin.com/in/elias-nordlinder
Электронная почта: [email protected]

Всем удачной недели
//Элиас