Иногда нужна графика внутри таблицы: мини-бар рядом с цифрой, спарклайн тренда, иконка-индикатор. Сторонние визуалы для этого ставить не хочется. Решение — нарисовать 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>"
Бар, пропорциональный значению: серая дорожка + цветная заливка по доле от максимума.
В 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-меры хороши для компактных индикаторов в таблицах, а не для основных визуалов страницы.
Нужна графика внутри таблицы/матрицы без зоопарка custom-визуалов — SVG в мере идеально: data bar, спарклайн, KPI-карточка, иконки. Для полноценных графиков на холсте — обычные визуалы.
Что дальше
Инлайн-графику освоили. Дальше в курсе — DAX-паттерны (ABC/Парето, retention, остатки, TopN) и затем экспертные темы. Курс пополняется.