Урок 21 · 8 мин чтения

SVG в Power BI: графика прямо в ячейках

Инлайн-бары, спарклайны и KPI-карточки в таблице без сторонних визуалов — через SVG в DAX-мере.

Иногда нужна графика внутри таблицы: мини-бар рядом с цифрой, спарклайн тренда, иконка-индикатор. Сторонние визуалы для этого ставить не хочется. Решение — нарисовать SVG прямо в DAX-мере. У нас этому посвящён подробный разбор в блоге и генератор SVG-мер; здесь — суть и принципы.

Как это работает

Мера возвращает строку — data URI с SVG-картинкой:

Бар = "data:image/svg+xml;utf8,<svg ...>...</svg>"

Дальше у меры выставляется категория данных Image URL (Column tools → Data category → Image URL). В таблице/матрице Power BI рисует это как изображение. Размер картинки тянется по строке.

Минимальный пример — data bar

Бар =
VAR _W = DIVIDE ( [Выручка], [Макс выручка] ) * 100
RETURN
    "data:image/svg+xml;utf8," &
    "<svg xmlns='http://www.w3.org/2000/svg' width='100' height='16'>" &
    "<rect width='100' height='16' rx='3' fill='%23E9ECF3'/>" &
    "<rect width='" & _W & "' height='16' rx='3' fill='%233B52D5'/>" &
    "</svg>"

Бар, пропорциональный значению: серая дорожка + цветная заливка по доле от максимума.

Цвета через %23

В data:...;utf8, символ # в hex-цвете обязательно кодируется как %23 (#3B52D5%233B52D5). Иначе data URI рвётся и картинка не появляется. Это причина №1, почему «SVG не отображается».

Что можно нарисовать

  • data bar — мини-полоса в ячейке;
  • спарклайн — линия тренда по категории (через CONCATENATEX собираете точки);
  • KPI-карточка — значение + дельта со стрелкой и цветом по знаку;
  • иконки-индикаторы — ▲/▼, светофор, прогресс к цели;
  • bullet — факт + норма в одном глифе.

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

utf8 или base64

Два способа упаковать SVG в data URI:

  • utf8 (;utf8,) — читаемо, но требует кодировать спецсимволы (#%23, иногда </>);
  • base64 (;base64,) — кодируете весь SVG в base64; не нужно вручную экранировать, но строка нечитаема и длиннее.

Для динамических мер (где значения подставляются из DAX) удобнее utf8 — проще собирать конкатенацией.

Тонкости и границы

  • Размер. Картинка маленькая (ячейка таблицы) — рисуйте компактно, крупный текст не влезет.
  • Экранирование. Кавычки в SVG берите одинарные ('), чтобы не конфликтовать с двойными кавычками DAX-строки.
  • Производительность. Мера-картинка считается на каждую строку — на больших таблицах следите за нагрузкой.
  • Не замена дашборду. SVG-меры хороши для компактных индикаторов в таблицах, а не для основных визуалов страницы.
Когда брать SVG-меры

Нужна графика внутри таблицы/матрицы без зоопарка custom-визуалов — SVG в мере идеально: data bar, спарклайн, KPI-карточка, иконки. Для полноценных графиков на холсте — обычные визуалы.

Что дальше

Инлайн-графику освоили. Дальше в курсе — DAX-паттерны (ABC/Парето, retention, остатки, TopN) и затем экспертные темы. Курс пополняется.

SVG-мера возвращает корректный код, но картинка в таблице не появляется. Самая частая причина?
В data:...;utf8, цвета пишутся как %23RRGGBB, иначе URI ломается. Плюс мере нужно выставить категорию данных Image URL, чтобы Power BI рисовал строку как изображение.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43