Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

В этом сообщении блога мы собираемся рассмотреть вопрос, который был задан на форуме LuckyTemplates, и использовать технику LuckyTemplates на языке DAX для его решения. Если вы хотите продолжить и загрузить файлы, просто посетите форум LuckyTemplates и перейдите по . Вы можете посмотреть полное видео этого урока в нижней части этого блога.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Чтобы объяснить сценарий, который мы собираемся рассмотреть, у нас есть простая таблица в качестве примера. В первом столбце у нас финансовый уровень 1 . Во втором столбце у нас есть дата с именем Completed. В последнем столбце у нас есть комбинация финансового уровня и даты завершения, которую мы назовем Revenue .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Затем у нас есть слайсер для даты и имени клиента .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Что мы хотим сделать для определенного периода времени, так это определить три верхних даты, которые не равны нулю. И затем в этих трех главных датах мы хотим определить финансовый уровень.

В первой версии меры я перечислил даты, которые меньше 29.04.2021, когда у нас есть некоторый доход.

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

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Оглавление

Моделирование данных

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

Обратите внимание, что таблица Customer не очень важна, потому что она используется только внутри слайсера.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Показатель дохода рассчитывается в таблице данных. Категория «Работа» содержит финансовый уровень, который у нас есть в матрице. Затем мы используем столбец Date из таблицы Date в нашем слайсере.

Версия 1

Давайте избавимся от всего с матрицы и начнем с нуля. Я собираюсь создать новую меру и назвать ее V1, потому что это будет первая версия. Мы также рассмотрим два других варианта.

Подготовка контекста фильтра

Первое, что мы собираемся сделать, это получить все значения финансового уровня из контекста фильтра. Мы создадим и назовем ее FinancialLevelInFilterContext .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Чтобы получить значения из контекста фильтра, мы собираемся использовать в таблице категорий вакансий, которая содержит столбец финансового уровня. Затем нам нужно создать еще одну переменную и назвать ее Result . Затем напишите и тоже закройте.

В первом аргументе у нас есть выбор над срезом даты. В этих датах мы хотим определить даты, которые не имеют 0 и имеют хотя бы некоторый доход.

Если вы хотите получить доступ ко всем датам, выбранным в этом слайсере, нам нужно использовать для таблицы Date.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

И поскольку у нас есть финансовый уровень в матрице, нам также нужно убедиться, что мы удаляем это конкретное значение из контекста фильтра. Мы можем использовать над категорией Job, а затем написать Financial Level 1.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

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

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

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

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

Имя этой переменной будет FinancialLevelAndDatesWithRevenue . Код этой переменной будет над предыдущей переменной. Затем мы создадим виртуальный столбец, который будет Revenue, чтобы инициировать переход контекста. Итак, для каждой строки этой переменной мы присвоили доход.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Эта таблица содержит доход, который также равен нулю. Нам нужно отфильтровать эти строки с нулем. Для этого мы можем создать еще одну переменную и назвать ее RemoveZeroes .

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

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

А затем мы собираемся получить дату из переменной RemoveZeroes . Для этого мы можем создать еще одну переменную и назвать ее KeepOnlyDates .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Я могу использовать , чтобы избавиться от повторяющихся дат, возвращаемых .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Далее мы собираемся определить три лучшие даты в порядке убывания. Мы будем использовать другую переменную и назовем ее Last3Dates , а затем воспользуемся .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Затем мы будем использовать для последних трех дат в столбце даты, а затем использовать разделитель.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Давайте перетащим нашу недавно созданную меру внутрь этой матрицы. Результат, который мы получаем: 31.03.2021, 04.07.2021 и 04.02.2021. Это означает, что наша мера работает.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Вернемся к редактору и избавимся от части RETURN CONCATENATEX. Чтобы получить эти последние три даты, мы можем проверить, какие строки из переменной RemoveZeroes на самом деле являются частью этих последних трех дат.

И для этого мы создадим еще одну переменную DatesInLast3Dates и используем функцию FILTER для RemoveZeroes . Это вернет таблицу, состоящую из категории работы и даты.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Мы суммируем столбец дохода, который мы создали в этой таблице. Давайте вернем SUMX для DatesInLast3Dates, а затем суммируем столбец дохода.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

При таком расчете мы получаем только одно значение для каждой строки, потому что мы удалили категорию «Работа» из контекста фильтра.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

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

Это отфильтрует даты в переменной DatesInLast3Dates . Затем я верну SUMX в контексте IsInFilter и суммирую столбец дохода.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Как только мы нажмем Enter , вы увидите, что мы получаем тот же результат, что и в начале.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Проверка результата вычисления LuckyTemplates на языке DAX

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

Давайте создадим копию кода, который мы написали до сих пор. Я просто скопирую часть, выделенную ниже, вернусь, чтобы создать новую таблицу, и вставлю выделенный код. Мы не будем утруждать себя именованием этой таблицы, так как она нам неинтересна.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

И мы можем просто написать RETURN DatesInLast3Dates . Если я нажму Confirm , мы получим таблицу, но мы знаем, что на самом деле она пока не возвращает правильный результат, потому что нам действительно нужно имитировать поведение слайсера.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Мы можем обернуть этот код внутри CALCULATETABLE и сделать отступ для всего. В последней части я напишу, что дата должна быть больше или равна 2021-03-15 и что имя клиента должно быть равно DHL Supply Chain .

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

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

Другие вычисления LuckyTemplates на языке DAX

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

Версия 2

На этот раз мы не будем полагаться на функции VALUES и FILTER, поэтому избавимся от них. Мы удалим возвращаемый результат, а также последнюю переменную, которую мы создали внутри CALCULATE. Затем мы преобразуем CALCULATE в CALCULATETABLE.

И вместо того, чтобы возвращать скалярное значение, на этот раз мы собираемся вернуть DatesInLast3Dates . Это вернет ту же CALCULATETABLE, которую мы сделали ранее. Мы собираемся использовать функцию РАСЧЕТ, и в первом аргументе мы собираемся вычислить меру дохода и внедрить РАСЧЕТНУЮ ТАБЛИЦУ в качестве контекста фильтра.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Как только я внесу его в матрицу, вы увидите, что мы возвращаем одно и то же общее значение для каждой ячейки.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Использование функции KEEPFILTERS

На данный момент мы знаем, что расчет за сценой работает правильно, но как мы можем знать наверняка, что для каждой ячейки мы сообщаем значение только для этого финансового уровня?

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

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

После того, как мы нажмем «Подтвердить», мы увидим, что мы сообщаем правильное значение для каждой ячейки и что и версия 1, и версия 2 возвращают правильное значение.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Так как же это работает? Таблица CALCULATE вернет уровень технического обслуживания , затем аренда , внешний сервис и запасные части . Функция создаст пересечение между обслуживанием и этой таблицей.

Аренда создаст начальный контекст фильтра, затем CALCULATETABLE вернет все значения категории «Работа». Тогда будет пересечение между Rental и таблицей, возвращаемой CALCULATETABLE. Мы собираемся вернуть таблицы или строки только для этой части проката.

И наконец, когда мы вводим SUMMARIZE в контекст фильтра, функция CALCULATE будет вычислять доход только от аренды. Тот же процесс происходит для каждой строки.

Версия 3

Давайте рассмотрим другой способ вычисления того же вычисления с использованием языка DAX LuckyTemplates. Давайте создадим копию показателя версии 2 и создадим еще один показатель. Мы собираемся назвать эту версию 3.

Идея этого расчета заключается в том, что, поскольку мы вычисляем доход с помощью функции РАСЧЕТ, нам не нужно использовать часть ДОБАВИТЬ КОЛОНЦЫ, потому что мы дублируем одно и то же внутри и вне функции РАСЧЕТ. Вместо этого мы можем просто написать, что Revenue не должен быть равен 0.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Как только я нажму «Подтвердить», нам нужно убедиться, что код работает, поэтому давайте перетащим меру внутрь матрицы.

Вы можете видеть, что код фактически возвращает одно и то же значение для каждой ячейки.

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

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

Учебное пособие по LuckyTemplates по языку DAX на обратном TOPN

Заключение

В этом руководстве мы узнали, как использовать сложную логику перемещения назад во времени от конечной даты, чтобы определить три самые важные даты. Основываясь на этом методе LuckyTemplates на языке DAX, мы смогли вычислить доход и показать только те значения, которые существуют в контексте фильтра. Это все на данный момент в этом уроке.

Leave a Comment

Расчет недельных продаж с помощью DAX в LuckyTemplates

Расчет недельных продаж с помощью DAX в LuckyTemplates

В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.

Что такое self в Python: примеры из реального мира

Что такое self в Python: примеры из реального мира

Что такое self в Python: примеры из реального мира

Как сохранить и загрузить файл RDS в R

Как сохранить и загрузить файл RDS в R

Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.

Продемонстрируйте идеи с помощью метода многопоточных динамических визуализаций в LuckyTemplates

Продемонстрируйте идеи с помощью метода многопоточных динамических визуализаций в LuckyTemplates

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

Введение в фильтрацию контекста в LuckyTemplates

Введение в фильтрацию контекста в LuckyTemplates

В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.

Лучшие советы по использованию приложений в онлайн-службе LuckyTemplates

Лучшие советы по использованию приложений в онлайн-службе LuckyTemplates

Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.

Анализ изменений маржи прибыли с течением времени — аналитика с LuckyTemplates и DAX

Анализ изменений маржи прибыли с течением времени — аналитика с LuckyTemplates и DAX

Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.

Идеи материализации кэшей данных в DAX Studio

Идеи материализации кэшей данных в DAX Studio

В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.

Бизнес-отчетность с использованием LuckyTemplates

Бизнес-отчетность с использованием LuckyTemplates

Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.