Добавляем жизни в таблицы и матрицы Power BI. Часть 1 -индикаторы на основе мер с категориями данных

Всем привет!

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

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

В этой части рассмотрим способ добавления индикаторов в матрицу/таблицу без задействования внешних изображения?

Дано: Матрица, в которой показаны сравнение продаж с прошлым годом в разрезе штатов и городов. Шеф просит добавить индикаторы.

Решение: Шаг 1. Добавляем меру, которая в зависимости от входных условий возвращает изображение в формате svg нужного цвета.

KPI_simple =
//Укажите меру. на основании которой будет определяться цвет
VAR SourceMeasure = [%Total_with_Tax_PY_Var] //Здесь можно изменить цвета индикатора.
// Можно указывать как HEX-коды.
// так и названия цветов на английском - red. yerllow. green и т.тд.
VAR Color =
    SWITCH (
        TRUE ();
        SourceMeasure < 0"#cc3232";
        SourceMeasure < 0,25"#e7b416";
        "#99c140"
    )
VAR Size = 30 // определяет размер SVG изображения в пикселях
//Формируем SVG -изображение
VAR Output_circle = "data:image/svg+xml;utf8," & "<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='" & Size & "' height='" & Size & "'>" & "<circle cx='" & Size / 2 & "' cy='" & Size / 2 & "' r='" & Size / 2 & "' fill='" & Color & "' stroke='none' stroke-width='3'/>" & "</svg>"
RETURN
    /*Логику HASONEVALUE стоит подкорректировать в случае.
если планируется использовать матрицу с промежуточными итогами.
Внутри HASONEVALUE должен присутсвовать столбец.
который находится на нижнем уровне иерархии.
В противном случае вместо кружка в подитогах будет отображаться код SVG элемента*/
    IF (
        HASONEVALUE ( 'Cities'[City] )
&& SourceMeasure <> BLANK ();
        Output_circle;
        BLANK ()
    )

Шаг 2. Кликаем на созданную меру, на вкладке «Моделирование» находим пункт «Категория данных», выбираем «URL-адрес изображения».


Шаг 3. Добавляем меру в матрицу

 

 

 

 

 

 

 

 

Более сложная мера, которая возвращает разные изображения для разных состояний:

KPI_3_position =
//Укажите меру. на основании которой будет определяться цвет
VAR SourceMeasure = [%Total_with_Tax_PY_Var] //Здесь можно изменить цвета индикатора.
// Можно указывать как HEX-коды.
// так и названия цветов на английском - red. yerllow. green и т.тд.
VAR Color =
    SWITCH (
        TRUE ();
        SourceMeasure < 0"#cc3232";
        SourceMeasure < 0,25"#e7b416";
        "#99c140"
    )
VAR Size = 30 // определяет размер SVG изображения в пикселях
//Формируем SVG -изображение
VAR Circle = "<circle cx='" & Size / 2 & "' cy='" & Size / 2 & "' r='" & Size / 2 & "' fill='" & Color & "' stroke='none' stroke-width='3'/>"
VAR Rect = "<rect width='" & Size & "' height='" & Size & "' fill='" & Color & "' />"
VAR Triangle = "<polygon points='0.0 " & Size / 2 & "." & Size & "." & Size & ".0' fill='" & Color & "'/>"
VAR Shape_ =
    SWITCH (
        TRUE ();
        SourceMeasure < 0Triangle;
        SourceMeasure < 0,25Rect;
        Circle
    ) //Задаем логику выбора изображения в зависимости от состояния показателя
VAR Output = "data:image/svg+xml;utf8," & "<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='" & Size & "' height='" & Size & "'>" & Shape_ & "</svg>"
RETURN
    /*Логику HASONEVALUE стоит подкорректировать в случае.
если планируется использовать матрицу с промежуточными итогами. 
Внутри HASONEVALUE должен присутсвовать столбец.
который находится на нижнем уровне иерархии. 
В противном случае вместо кружка в подитогах будет отображаться код SVG элемента*/
    IF (
        HASONEVALUE ( 'Cities'[City] )
            && SourceMeasure <> BLANK ();
        Output;
        BLANK ()
    )

 

Скачать пример можно здесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.