Time Intelligence в DAX: как динамически выбирать начальный период

Time Intelligence в DAX: как динамически выбирать начальный период

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

У нас есть интересный сценарий для вас сегодня. Недавно это всплывало пару раз на форуме LuckyTemplates. Что люди хотели сделать, так это взять визуальный элемент (который может быть линейным графиком или гистограммой) и динамически изменять его в зависимости от даты начала. Вы можете посмотреть полное видео этого урока в нижней части этого блога.

Time Intelligence в DAX: как динамически выбирать начальный период

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

Оглавление

Примеры сценариев Time Intelligence в DAX

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

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

Time Intelligence в DAX: как динамически выбирать начальный период

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

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

Time Intelligence в DAX: как динамически выбирать начальный период

Использование смещений для анализа времени в DAX

Одна из вещей, над которой мы будем работать, это смещения . Смещения в расширенной таблице дат рассчитываются динамически. Каждый раз, когда отчет либо обновляется, либо открывается, он проходит через M-код. Например, в месячном смещении текущему месяцу присваивается значение 0, предыдущему месяцу — -1, а двум месяцам назад — -2. Заглядывая в будущее, он присваивает следующему месяцу +1, а двум месяцам в будущем +2.

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

Использование смещений означает использование непрерывного ряда чисел, в котором возврат на месяц назад всегда равен -1, а переход на месяц вперед всегда равен +1, независимо от того, в какой части года вы находитесь.

Реализация стратегии резиновой уточки для анализа времени в DAX

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

Time Intelligence в DAX: как динамически выбирать начальный период

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

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

Сбор смещений с даты начала

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

А затем мы хотим сдвинуть это смещение вперед на 12 месяцев, а затем смотреть только на даты, которые находятся в пределах этого набора смещений. Позвольте мне показать вам, как это выглядит в DAX.

Расчет месячного диапазона

Это наша мера для Within Range Monthly , где мы выбираем наш год (который мы собрали из несвязанной таблицы годов) и наш месяц (который мы собрали из несвязанной таблицы месяцев).

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

Time Intelligence в DAX: как динамически выбирать начальный период

Вычисление смещений начального и конечного месяцев

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

Time Intelligence в DAX: как динамически выбирать начальный период

С этого момента мы можем взять смещение конечного месяца , которое равно смещению начального месяца + 11 месяцев.

Time Intelligence в DAX: как динамически выбирать начальный период

А затем мы смотрим на каждую выбранную дату и определяем, попадает ли она в смещение начального месяца и смещение конечного месяца. если он попадает в этот период, мы даем ему 1, а если нет, мы даем ему 0.

Time Intelligence в DAX: как динамически выбирать начальный период

Если мы вернемся к просмотру месяца в нашем визуальном элементе, мы увидим визуальный элемент «В пределах диапазона» , который мы установили равным единице. Таким образом, он показывает только те месяцы в пределах смещения от начала до конца. Например, если мы нажмем на февраль, мы увидим февраль-январь.

Time Intelligence в DAX: как динамически выбирать начальный период

Расчет недельного диапазона

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

Time Intelligence в DAX: как динамически выбирать начальный период

Но если мы нажмем на другие годы в срезе года, мы увидим 52-ю неделю, в то время как у некоторых есть 53-я неделя, что создает много проблем. Из этого примера видно, что проблема начинает проявляться.

У нас есть начальный период 2020 года и 15-я неделя , но конечный период — 2021 год и 13-я неделя вместо 2021 года и 14-й недели .

Time Intelligence в DAX: как динамически выбирать начальный период

Если мы вернемся к 1-й неделе, то увидим, что она начинается хорошо, но заканчивается на 52-й неделе. Если мы посмотрим здесь на расчет 53-й недели, максимальное количество недель для 2020 и 2021 годов составляет 53 недели. Это не сработает для еженедельной детализации.

Time Intelligence в DAX: как динамически выбирать начальный период

Давайте посмотрим, что мы можем сделать, чтобы заставить эту работу работать. Нам нужно исправить расчет DAX прямо здесь, в этой части:

Time Intelligence в DAX: как динамически выбирать начальный период

Это связано с тем, что в некоторых случаях 51 является правильным, когда в году всего 52 недели, но для года, в котором 53 недели, этот последний период будет исключен. Это именно то, что мы видели в динамическом изображении за несколько недель, где при расчете был удален последний период в 2020 и 2021 годах.

Чтобы исправить это, мы переходим к показателю « В пределах диапазона еженедельно неправильно» , который на самом деле выглядит проще, чем предыдущая мера. У нас была начальная мера смещения, и мы рассчитали максимальное смещение. Затем мы убрали фильтр дат, а затем наложили фильтр на выбранную неделю и выбранный год с расчетом, что это приведет к правильному смещению.

Time Intelligence в DAX: как динамически выбирать начальный период

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

Но если мы вернемся к ISO WeekNumber , мы увидим, что год и номер недели не определяют однозначно недельное смещение в этом первом периоде.

Time Intelligence в DAX: как динамически выбирать начальный период

Я придумал пуленепробиваемый способ сделать это. Вы можете использовать MIN, но имеет смысл создать эту меру смещения Week1 . Чтобы получить смещение недели 1, мы имеем дело со неделей 2, потому что она никогда не делится. Независимо от того, 52 или 53 недели в году, вторая неделя остается неизменной.

Time Intelligence в DAX: как динамически выбирать начальный период

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

Еженедельный расчет в пределах диапазона

А затем мы возвращаемся к нашему еженедельному показателю «В пределах диапазона» и пишем оператор IF, в котором, если количество урожая относится к неделе 1, мы вычисляем смещение первой недели. Если это не неделя 1, мы просто вычисляем смещение начальной недели, как мы это делали в предыдущем ежемесячном расчете.

Time Intelligence в DAX: как динамически выбирать начальный период

И тогда смещение конечной недели будет смещением начала недели + максимальный номер недели, который может быть либо 52, либо 53. Затем мы просто вычтем 1, чтобы не удваивать начальное смещение.

Time Intelligence в DAX: как динамически выбирать начальный период

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

Затем мы поместим еженедельную меру в пределах диапазона на панель фильтра. Все проверяется и выглядит точно.

Time Intelligence в DAX: как динамически выбирать начальный период

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

Заключение

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

Если вам понравился контент, описанный в этом руководстве, не забудьте подписаться на телеканал LuckyTemplates. У нас есть огромное количество контента, который постоянно выходит от меня и ряда создателей контента, и все они посвящены улучшению того, как вы используете LuckyTemplates и Power Platform.


Что такое 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 для своих бизнес-отчетов.

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать