Расчет недельных продаж с помощью DAX в LuckyTemplates
В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.
Я собираюсь показать вам, как добавить параметр в функцию M в вашем запросе таблицы дат . Этот пример основан на вопросе, заданном на . Вы можете посмотреть полное видео этого урока в нижней части этого блога.
Вопрос был о том, как переключить нумерацию 1-го дня недели с 0 на 1 . Обратите внимание, что это не меняет фактическое начало рабочего дня. В этой таблице дат началом недели всегда будет понедельник. Это просто относится к понедельнику как к дню 1, а не к дню 0.
Этот процесс не обязательно сложен, но вам необходимо базовое понимание того, как устроен язык M. Если вы являетесь участником LuckyTemplates, вы можете пройти . Введение затрагивает тему.
Оглавление
М-функция и расширенная таблица дат
Позвольте мне начать с Power Query . Я уже скопировал здесь функцию таблицы дат .
Я получил функцию M из категории M Code Showcase на форуме LuckyTemplates . Код находится в разделе .
Если я открою расширенный редактор , это код.
Там много М-кода, который может отвлекать.
Создание тестового запроса
Поскольку внутри функции М происходит слишком много всего, я начну с нового пустого запроса .
Я назову этот тестовый запрос .
Далее я собираюсь открыть Расширенный редактор .
Поскольку я собираюсь создать функцию, я добавлю пару круглых скобок и удалю там весь код по умолчанию.
Чтобы запустить функцию, я объявлю необязательный параметр .
Далее я собираюсь добавить переменную. Я назову эту переменную WDStartNum , поскольку она будет обозначать начальный номер дня недели. Мне также нужно объявить его тип, поэтому я наберу число .
Я объявляю тип для предотвращения ошибок. Если я просто оставлю его как любой тип, это означает, что он может передавать таблицу или значение даты, а не просто передавать числа.
Следующим шагом является добавление предложения let и предложения in .
В предложении let мне нужно имя переменной. Поэтому я назову эту переменную WDStart .
Теперь мне нужно проверить, был ли пройден WDStartNum . Если он пройдет, он не будет равен null . Итак, я собираюсь объявить, что если WDStartNum не равен нулю, я хочу, чтобы возвращалось значение .
Что касается предложения in, я хочу, чтобы тот же шаг был пройден. Поэтому я просто добавлю туда WDStart , как мы назвали нашу переменную ранее в предложении let.
Как только я нажму «Готово», функция будет создана. Итак, я попытаюсь передать значение через эту функцию.
Я собираюсь попробовать ввести букву «а».
Помните, что ранее я объявил, что значение должно быть числом. Поскольку он распознает, что введенное мной значение не соответствует этому требованию, он не позволит мне ввести этот параметр.
Так что я собираюсь удалить это и просто оставить место пустым.
Как только я нажимаю Invoke, он возвращает значение 0.
Возвращаясь к моему исходному запросу, в нем говорится, что если значение не равно нулю, следует вернуть WDStartNum. Если он равен нулю, то должен быть возвращен 0.
Так что 0 правильно.
На этот раз я попытаюсь передать значение, изменив число в TestQuery. Действительно, он возвращает «1», когда я нажимаю Enter.
Теперь позвольте мне попытаться пройти 2020 год в TestQuery. Как только я нажимаю Enter, он также возвращает 2020.
Очевидно, я не хочу, чтобы это произошло. Поскольку мне нужно значение, представляющее начало недели, я хочу, чтобы отображалось либо 0, либо 1. Это означает, что мне нужно создать еще один тест, чтобы увидеть, является ли введенное число 0 или 1. Для этого я могу использовать функцию List.Contains .
Использование List.Contains
Я создал пустой запрос и ввел List.Contains без скобок.
Как только я нажимаю ввод, я вижу документацию по этой функции.
List.Contains указывает, содержит ли список значение.
Поэтому в качестве первого параметра требуется список, а затем добавляется значение. Если это значение найдено внутри списка, оно возвращает true. В противном случае он вернет false.
Я снова открою расширенный редактор , чтобы внести необходимые изменения в свой запрос.
Вместо того, чтобы проверять, не равно ли значение null, я буду использовать List.Contains .
Теперь я дам список значений, которые будут применяться к этой функции.
Я буду использовать фигурные скобки в качестве инициализатора списка. Внутри этих фигурных скобок я поставлю 0, 1. Я добавлю запятую после закрытия этой скобки.
В качестве второго параметра я буду использовать WDStartNum. Затем я добавлю закрывающую скобку.
С учетом этого это означает, что 0 или 1 должны дать мне WDStartNumber. Если помещается что-либо, кроме 0 или 1, я должен получить результат 0.
Позвольте мне проверить это, вставив 2020 в TestQuery. Как и ожидалось, это возвращает «0» (ноль).
Это потому, что значения 2020 нет в списке.
Добавление параметра в М-функцию
Теперь, когда я уверен, что код работает, я наконец-то могу поместить его в реальную таблицу дат и М-функцию. Я открою расширенный редактор и скопирую логику .
Затем я перейду к запросу таблицы дат.
Я открою исходную функцию M через расширенный редактор .
Затем я вставлю туда свой код. Давайте удостоверимся, что в конце строки есть запятая.
Далее я выделю и скопирую имя параметра .
Затем я добавлю этот параметр сюда .
Обратите внимание, что сначала я должен добавить запятую в конец существующей строки, а затем объявить этот параметр необязательным . Затем я могу поместить WDStartNum и добавить тип .
Я добавил параметр, а также внедрил логику. Но мне также нужно убедиться, что я получу ожидаемые результаты. Итак, я собираюсь найти строку кода, описывающую день недели.
Затем я добавлю + WDStart .
Я нажму Готово , чтобы закрыть редактор. Затем я собираюсь вызвать запрос.
В качестве StartDate я укажу 1 января 2020 года, а в качестве EndDate я буду использовать 31 декабря 2020 года.
Я буду использовать «7» в качестве месяца начала финансового года, затем я поставлю «0» в качестве WDStartNum.
Я нажму на Invoke. Теперь у меня есть таблица дат.
Я переименую его, чтобы его можно было легко идентифицировать.
Сейчас проверю результаты.
Это моя колонка DayOfWeek .
Это показывает, что понедельник вернулся как 0.
Возвращаясь к вопросу на форуме, мне нужно изменить число начала недели на 1 вместо 0. Поэтому я просто изменю это в мере.
Когда я нажимаю ввод, понедельник будет днем 1 вместо дня 0.
Глядя на диапазон чисел, теперь он работает от 1 до 7 вместо 0 до 6.
Что произойдет, если я передам нулевое значение?
Затем DayOfWeek для понедельника просто возвращается к 0.
Использование функции M для создания расширенной таблицы дат LuckyTemplates
Руководство для начинающих по коду M в LuckyTemplates
Настройка динамической даты начала и окончания для таблиц дат Power Query
Заключение
Вот как вы можете добавить дополнительный параметр прямо в функцию M в запросе таблицы дат. Процесс совсем не сложный, как я уже упоминал ранее. Пока у вас есть исходный код М-кода, оттуда достаточно просто.
Опять же, вы всегда можете просмотреть курс Advanced Data Transformations & Modeling в Online, если у вас нет опыта работы с M-кодами.
Всего наилучшего,
Мелисса
***** Изучаете LuckyTemplates? *****
В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.
Что такое self в Python: примеры из реального мира
Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.
В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.
В этом учебном пособии рассказывается, как использовать технику многопоточных динамических визуализаций для создания аналитических сведений из динамических визуализаций данных в ваших отчетах.
В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.
Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.
Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.
В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.
Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.