Данная задача решается намного проще в версиях PBI Desktop, которые поддерживают Field Parameters.
Но в данном случае решение должно быть под RS.
1️⃣ Создаем требуемый справочник, который будет содержать названия всех недель и их порядок.
(у нас уже есть поле сортировки, полученное через RANKX, его и используем), а так же всех названий показателей. Это позволит там получить далее в столбцах матрицы нужные столбцы.
Matrix Columns =
UNION(
SELECTCOLUMNS(
ALLNOBLANKROW('Calendar'[ISO Week Sort],'Calendar'[ISO Week Name]),
"ISO Week Sort",[ISO Week Sort],
"Name","Qty "&UNICHAR(10)&[ISO Week Name]
),
CROSSJOIN(
ALLNOBLANKROW('Calendar'[ISO Week Sort]),
ROW("Name"," Sales Amount")
)
)
2️⃣ Добавляем название недель из Calendar в слайсер, а названия из столбца справочника в столбцы.
3️⃣ Пишем меру, проверяющую текущее название столбца и выводящую требуемый результат расчета.
Основное ограничение - у всех расчетов один тип данных, иначе каждому нужно назначать через функцию FORMAT, что приведет к типу TEXT:
Weeks Calc =
SWITCH(
LEFT(MAX('Matrix Columns'[Name]),4),
" Sal",CALCULATE([Sales Amount],TREATAS(VALUES('Matrix Columns'[ISO Week Sort]),'Calendar'[ISO Week Sort])),
"Qty ",CALCULATE(SUM(Sales[Quantity]),TREATAS(VALUES('Matrix Columns'[ISO Week Sort]),'Calendar'[ISO Week Sort]))
) -- пробел перед названием позволяет правильно сортировать название
👉🏻PBIX с детальным разбором во вложении👈🏻
RS Январь 22 + ( для облачной версии лучше использовать Fields Parameter)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍5❤1
1️⃣ Создаем 2 параметра: [А Class] и [C Сlass ] с диапазонами чисел от 0 до 100 включительно.
2️⃣ Создаем таблицу, которая в дальнейшем позволит выбирать нужные параметры без возможности выбрать их неверно, т.е. если мы выбиваем в параметре [A Class] значение 90, то второй параметр нам не даст выбрать значение менее 90+1 и наоборот.
Filter Table =
VAR gen1 =
SELECTCOLUMNS(
GENERATESERIES(
0,
100,
1
),
"1",
[Value]
)
VAR gen2 =
SELECTCOLUMNS(
GENERATEALL(
gen1,
VAR _1 = [1]
RETURN
GENERATESERIES(
_1+1,
100
)
),
"1",[1],
"2",[Value]
)
RETURN gen2
Суть такой таблицы - для каждого тек значения в первом столбце есть значения от текущее+1 до 100 включительно.
3️⃣ Связываем наши параметры с данной таблицей. [A Class] со столбцом 1, [C Class] со столбцом 2. Связи 1 ->* и двунаправленная фильтрация.
4️⃣ Добавляем параметры на страницу отчета и включаем влияние одного параметра на второй и наоборот.
5️⃣ Создаем через «Ввести данные» таблицу-справочник названия классов (текст) и их ID (целочисленные значения), далее включаем сортировку для класса по столбцу ID (но это не обязательно).
👉🏻PBIX во вложении👈🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🔥8👍5👀2
Такой расчет часто применяется для вывода текущего количества бонусных баллов клиента, в случае "сгорания" бонусов в определенную дату и начала нового процесса накопления.
Comulated From 0 =
VAR _LastZerroDate =
-- находим последнюю дату (относительно даты в текущем контексте), на которую значение равно 0
CALCULATE(
MAX('Fact'[date]),
'Fact'[count]=0,
Calendar[Date]<=MAX(Calendar[Date])
)
VAR _Dates =
-- находим список дат между последней датой с 0 результатом и датой в текущем контексте
DATESBETWEEN(
'Calendar'[Date],
_LastZerroDate,
-- последняя дата с 0 неизменна до следующего 0
MAX('Calendar'[Date])
-- дата окончания периода зависит от текущего контекста и нарастает
)
VAR _Result =
-- применяем список дат к нашему расчету
CALCULATE(
SUM('Fact'[count]),
_Dates
)
RETURN
IF(NOT ISBLANK(SUM(Fact[count])),_Result)
-- т.к. между датами с данными есть промежутки и накопительный отобразится для всех дат календаря, мы выводим результат для тех, когда есть данные
👉🏻PBIX во вложении👈🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥12❤3
Для обеспечения возможности сравнения различных месяцев по выбору пользователя и подсчета отклонения значений можно применять обычные функции Time Intellegence.
Однако, для отображения выбранного пользователем месяца в заголовке столбца матрицы, мы будем применять функционал Fields Parameters.
В PBIX файле я постарался максимально подробно и пошагово описать процесс разработки. Также, показал как работать с FP нестандартным способом - попробуйте развить это направление =)
👉🏻PBIX во вложении👈🏻
(Только для облачной версии! Для RS похожее решение тут: https://t.me/dax_pro/20)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52👍16❤2🤓2
This media is not supported in your browser
VIEW IN TELEGRAM
Все просто:
1️⃣ Файл - экспорт - PDF ( или просто Ctrl + P )
2️⃣ Открываем PDF в Wondershare PDFelement или аналогичной программе, которая может работать с Power Point
3️⃣ Экспортируем в Power Point
// да, не интерактивные графики, как в облачной версии. Но без потери качества.
Также, эта программа может из папки с PDF собрать все сразу в один ppt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Если хочется функционала Fields Parameters или группировать измерения без написания больших SWITCH () функций, то вы можете воспользоваться Calculation Groups механизмом.
‼️ Наиболее важные ограничения и предостережения:
🔴 это Группы расчета (Calculation Groups или CG) и создание/включения их в модели автоматически отключит встроенные механизмы агрегирования по столбцам таблиц (т.е. все меры нужно будет в дальнейшем писать руками);
🔴 CG влияют на вычисления в отчетах или замещают их, если их применять/использовать в модели неверно;
🔴 В дальнейшем, после создания, вы можете использовать только 2х уровневые иерархии расчетов в своих таблицах. Не больше.
🔴 Сворачивание иерархии до верхнего уровня в матрицах и визуалах с механизмом Drill-Down в полях с Calculation Groups также не будет отрабатывать.
👉🏻PBIX для разбора внутри👈🏻
✅ Замена FP на RS may 22 +
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29❤4
Ограничения:
1. Если в таблицах источников осей есть пустые строки, при создании справочника для осей методом Unpivot в PQ они будут удалены. Требуется перезаполнять пустоту на любое текстовое значение.
2. Такой подход "раздувает" модель и не рекомендуется в проектах с большим количеством уникальных в справочниках.
=============================
Дать возможность выбора конечному пользователю требуемой для анализа временной гранулярности с учетом следующих условий:
год – показывать все доступные годы;
квартал – только кварталы 2х последних лет от текущей (сегодня) даты;
месяц – последние 12 месяцев от текущей даты.
=============================
1. Создание вычисляемой таблицы с разной гранулярностью год-квартал-месяц в одном столбце.
2. Сортировка поля выбора гранулярности периодов по дополнительному целочисленному столбцу.
3. Создание связи 'Calendar' [Date] 1 <> * 'Periods For Select' [Date].
'Calendar' на стороне 1, наша 'Periods For Select' на стороне многие, но связь двунаправленная и неактивная (чтобы избежать массы проблем с другими расчетами сдвигов во времени по основному календарю).
В облачной версии можно было бы просто сделать связь многие ко многим и направление фильтра от 'Periods For Select' к 'Calendar', но версии RS не поддерживают такой тип связей в стандартной версии.
4. Написание меры для визуализаций с переключаемой осью, чтобы активировать связь:
Calculate (👉🏻PBIX во вложении👈🏻
....,
Userelationship(
'Calendar' [Date],
'Periods For Select' [Date]
)
)
✅ RS May 2022+
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥7❤2
This media is not supported in your browser
VIEW IN TELEGRAM
с помощью Field Parameters.
Довольно часто для решения UXUI задач требуется автоматически переключать оси графиков, минуя встроенный механизм Drill-down.
ЗАДАЧА
Автоматическое изменение гранулярности оси по условиям:
🔶 если выбран 1 месяц, то выводить ось по датам;
🔶 если выбрано несколько месяцев, изменить грануляцию оси на месяцы;
🔶 если выбрано несколько лет, изменить грануляцию оси на года.
======================================
Последовательность решения:
1. Формируем необходимую таблицу параметров через Новый параметр и выбираем поля из Календаря (Год-Месяц-Дата)
2. Помещаем поле [Month_Date_Axys] в ось нашего графика, а в Slicer поместим год и месяц из таблицы Calendar.
3. Пишем меру, которая будет проверять какой период выбран:
Filter =
VAR _countmonths = CALCULATE(COUNTROWS(VALUES('Calendar'[Month])),ALLSELECTED('Calendar'))
VAR _filter =
SWITCH(
TRUE(),
_countmonths=1,0,
_countmonths<13,1,
2
)
RETURN
COUNTROWS(
FILTER(
VALUES('Month_Date_Axys'[Month_Date Order]),
'Month_Date_Axys'[Month_Date Order]=_filter
)
)
4. Помещаем меру в панель фильтров на уровень визуального элемента и применяем TOPN =1 фильтрацию.
👉🏻PBIX с подробным описанием внутри👈🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍9❤1
Коллеги, нам важно вашем мнение!
Как вы относитесь к контенту этого канала:
Как вы относитесь к контенту этого канала:
Anonymous Poll
22%
Все читаю, разбираю и применяю в работе
42%
Частично применяю, интересно, жду еще
34%
Читаю, иногда разбираю, но пока не применяю
1%
Мне хочется получить информацию на другие темы, пришлю в комменты.
❤13🔥9🤓1