Visualisations
September 9, 2021

Пользовательский формат данных

В PowerBI есть два понятия, которые относятся к данным - это тип и формат.

От правильного типа данных столбца зависит эффективность хранения ваших данных, а также правильность и удобство использования в выражениях DAX.

А формат данных влияет на то, как мы видим или представляем значения в наших отчетах.

Определять типы данных я рекомендую ДО загрузки данных в модель на уровне источника или в редакторе Power Query, если вы загружаете из неструктурированного файла. Хотя PowerBI позволяет переопределить тип данных и не посредственно в модели. Для это необходимо: Выделить нужный столбец -> Перейти на вкладку "Средства работы со столбцами" - раздел "Структура"

Определение типа столбца в модели данных

На этой же вкладке "Средства работы со столбцами" мы можем задать формат столбца:

По умолчанию Формат столбца равен Типу столбца

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

Выражение меры возвращает число
Результат меры - текст

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

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

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

Мера имеет формат десятичного числа с тремя знаками после запятой

Но нам бы хотелось, чтобы здесь же отображались единицы измерения. Конечно, можно это сделать в подписи карточки, или в пояснительном заголовке. А если это будет не карточка, а таблица или матрица? И в них будет ни одна мера, а несколько? Можно было бы воспользоваться функцией FORMAT или конкатенацией, но такой способ имеет недостаток - на выходе мы получим текстовое значение, которое НЕЛЬЗЯ использовать в диаграммах (диаграммы в значениях принимают только числа).

С помощью конкатенации получаем текстовую строку

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

Чтобы задать пользовательский формат, в "окошко" формата необходимо ввести специальные символы, которые используются в масках форматов:

0 (ноль) - одно обязательное знакоместо (разряд). Часто используется, если необходимо добавить к числу "ведущий" ноль или указать количество знаков после запятой. Например, номер месяца необходимо отображать всегда как двузначное число. Тогда, если применить маску 00, то для месяцев меньше 10 получится 01, 02 и так далее. Если же килограммы 78,249 необходимо отображать только с одним знаком после запятой, то нужно применить маску 0.0 (разделитель десятичных чисел - точка) - получится 78,2.
# (решетка) - одно необязательное знакоместо. Нет числа - ничего не выводится.
,(запятая) - разделитель групп разрядов по три между тысячами, миллионами, миллиардами и т.д. Например: выручка составила 657000000 (шестьсот пятьдесят семь миллионов), задав маску #,0 получим 657 000 000, добавим одну запятую после ноля #,0, и получим 657 000, ещё одну запятую #,0,, и 657 и так далее.

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

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

Отдельные спецсимволы существуют для даты и времени:

Y - год, М - месяц, D - день, h - часы, m - минуты, s - секунды - различное их сочетание и повторение меняет формат отображения даты и времени. Единственное, в отличии от Excel, в PowerBI нет формата продолжительности времени, т.е. нельзя получить значение 48:25 - сорок восемь часов двадцать пять минут.

Приведу пример наиболее часто используемых пользовательских форматов в виде таблицы:

Часто используемые маски форматирования

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

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

К сожалению, уже при написании статьи, понял, что CG не работают с форматом дат - или я просто не разобрался как передать строку форматирования для дат и времени. Поэтому "по старинке" воспользовался функцией FORMAT. А для чисел очень удобно пользоваться настроечной таблицей:

Настроечная таблица

Файл пример можно скачать по ссылке.