Расчет недельных продаж с помощью DAX в LuckyTemplates
В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.
В этом руководстве рассматривается выбор или фильтрация определенной даты в отчетах данных LuckyTemplates . Материал, использованный в этом руководстве, взят с . Вы узнаете, как решить проблему и поймете используемые методы. Вы можете посмотреть полное видео этого урока в нижней части этого блога.
Оглавление
Общие сведения об отчете данных в LuckyTemplates
Это образец отчета с данными, который будет использоваться. Он состоит из одного визуала таблицы и двух слайсеров.
Цель состоит в том, чтобы выбрать дату в столбце «Дата» на слайсере. Это означает, что после выбора даты в слайсере визуализация таблицы покажет предыдущие дни с интервалом в 7 дней. В этом примере данные, выбранные в срезе даты, — 12 мая 2007 г.
Таблица должна показать предыдущую с разницей в 7 дней между датами.
Вам также необходимо создать параметр «что если» , чтобы динамически отображать количество дат на основе выбора. Если вы выберете 3 , визуальная таблица должна отображать только 3 даты.
Воссоздание таблицы и визуализаций
Первый шаг — создать параметр «что если» . В рабочем столе LuckyTemplates перейдите на вкладку «Моделирование» и выберите «Новый параметр» .
Добавьте имя к параметру и установите Тип данных на Целое число . Затем установите минимальное, максимальное, приращение и значения по умолчанию, как показано на изображении ниже. Добавьте слайсер на страницу, установив флажок.
После того, как вы нажмете OK, будет создан слайсер. Преобразуйте слайсер в список, нажав кнопку раскрывающегося списка и выбрав Список.
Следующее, что нужно сделать, это создать дублированную таблицу дат, которая будет использоваться как отсоединенная таблица дат. Перейдите в редактор запросов Power и продублируйте Dates .
Затем переименуйте дубликат DisDate и нажмите «Закрыть и применить».
Загрузка таблиц дат и срезов в LuckyTemplates
После загрузки дублированной таблицы в модель LuckyTemplates создайте срез со столбцом дат из отключенной таблицы дат. Откройте таблицу DisDate и перетащите Date на холст.
Затем превратите визуализацию в слайсер.
После этого измените формат слайсера на List . Тогда визуализация будет выглядеть так.
Затем продублируйте слайсер и измените поле данных на столбец «Дата» из таблицы «Даты».
Выбор даты в слайсере «Даты» ограничит количество видимых строк таблицы «Продажи» в матрице. Если вы выберете 14 марта 2005 г., в матрице будет отображаться только эта дата.
Результат и мера не будут работать, если вы используете эту настройку. Причина в том, что еще до того, как мера начнет работать, доступ к матрице уже отфильтрован. Для этих отфильтрованных значений вы не сможете генерировать даты с интервалами.
Создание мер для слайсеров выбора
Вам нужно создать настройку дат, которая не фильтрует матрицу напрямую, когда выбор помещается над срезом. Фильтрация матрицы должна осуществляться через код DAX , а не непосредственно из слайсеров. Таким образом, если вы выберете дату из слайсера DisDate, в матрице не произойдет никаких изменений.
Это происходит потому, что таблица DisDate не имеет отношения к таблице Dates. Вот почему отключенная таблица необходима.
Удалите срез с таблицей Dates и создайте первую меру. Мера извлечет значение, выбранное из среза «Даты для показа». Первая переменная, которую вам нужно создать, это ValuesToShow . Затем приравняйте его к значению Dates To Show и введите RETURN , чтобы вернуть выбранные значения.
Перетащите эту меру в матрицу. Если вы выберете 6 в слайсере «Даты для показа», столбец «Мера» в матрице также даст 6.
Затем создайте еще одну переменную, которая будет получать дату отключения, выбранную в слайсере.
После этого вы увидите значение, выбранное в слайсере DisDate, показанном в столбце «Мера».
Создание вычисляемой таблицы
Создайте список дат с интервалом в 7 дней, начиная с выбранной даты в слайсере. Затем убедитесь, что матрица будет генерировать количество дней на основе выбора среза «Даты для показа». Для этого сначала нужно создать вычисляемую таблицу .
Вычисляемая таблица помогает визуализировать, как даты генерируются в коде DAX. Перейдите в представление данных и нажмите «Новая таблица».
Введите переменную SelectedDate и приравняйте ее к функции DATE . Затем введите дату в скобках. Затем создайте еще одну переменную, которая будет указывать количество дат, которые вы хотите отобразить в матрице. Введите DatesToShow и приравняйте его к количеству дат.
После этого создайте еще одну переменную, которая будет генерировать список дат с интервалом в 7 дней. Введите DatesList и используйте функцию GENERATESERIES . — это функция, которая генерирует список чисел, передавая несколько аргументов.
В качестве первого аргумента введите SelectedDate – (DatesToShow * 7) в качестве начального значения. Затем введите SelectedDate в качестве конечного значения. В качестве последнего аргумента введите 7 для значения приращения или интервала между датами. После этого закройте функцию и введите RETURN и DateList .
Затем вы можете увидеть таблицу, содержащую семь значений, начиная с 5 мая и обратно с шагом семь.
Теперь вы заметите, что он создал слишком много дат, чем вам нужно. В исходном образце отчета последней датой, показанной с теми же параметрами «Даты для отображения» и «Дата», было 31 марта.
Чтобы исправить это, вы можете либо изменить значение переменной DatesToShow на 5, либо вычесть 1 из 6. В этом примере 1 вычитается из 6.
После этого вы увидите, что значения заканчиваются 31 марта.
Вставка дат в контекст фильтра
Затем вам нужно использовать и вставить эти даты в контекст фильтра даты. Вам также необходимо рассчитать сумму продаж в контексте фильтра. Итак, скопируйте синтаксис GENERATESERIES и вернитесь к своей мере.
Добавьте в меру новую переменную и введите DatesToShow . Затем приравняйте эту переменную к синтаксису GENERATESERIES . Измените переменные внутри синтаксиса с SelectedDate на DisSelectedDate и DatesToShow на ValuesToShow .
Наконец, создайте переменную для результата. Приравняйте его к функции CALCULATE над Total Sales и DatesToShow, чтобы ввести все даты, полученные из синтаксиса GENERATESERIES , в контекст фильтра. После этого введите Result в функцию RETURN .
Теперь вы увидите, что в матрице не отображаются даты, которые запрашивает код DAX. Если вы введете в матрицу показатель Total Sales, вы увидите, что код возвращает саму сумму Sales.
Проблема с мерой заключается в том, что дата, созданная в синтаксисе GENERATESERIES , имеет происхождение данных с отключенной таблицей дат. Это означает, что таблица Date не связана с таблицей Sales. Вот почему, когда список дат применялся в контексте фильтра, он не включал таблицу «Продажи».
Вам нужно использовать функцию для создания виртуальных отношений и применения контекста фильтра.
Использование TREATAS для исправления даты в матрице LuckyTemplates
Вам необходимо обрабатывать значения, полученные из синтаксиса GENERATESERIES , как если бы они были частью исходной таблицы Date. По сути, это создание родословной со столбцом Date таблицы Date, которая находится в модели данных.
Поэтому в переменной Result введите TREATAS после таблицы Total Sales и укажите аргументы. В качестве первого аргумента укажите столбец или таблицу, которая не имеет связи. В этом случае используется столбец DatesToShow .
В качестве второго аргумента укажите столбец, с которым вы хотите сопоставить происхождение столбца в первом аргументе. В этом примере используется столбец «Дата» из таблицы «Даты».
Однако даже с исправлениями в коде столбец Measure в матрице по-прежнему не будет отображать правильные значения при использовании слайсера. Вы также можете заметить, что значения внутри столбца повторяются.
Проблема заключается в том, как был написан код. TREATAS применяет все значения к контексту фильтра, а переопределяет существующий контекст фильтра на выбранную дату со всеми значениями, полученными из функции GENERATESERIES .
Использование функции KEEPFILTERS в TREATAS
Чтобы убедиться, что фильтр внедряется в фильтр без переопределения существующего контекста фильтра, вам нужно использовать функцию KEEPFILTERS . изменяет семантику фильтрации CALCULATE .
Введите KEEPFILTERS перед функцией TREATAS и подтвердите измерение.
Теперь вы увидите, что значения в столбце «Мера» не повторяются.
Если вы развернете месяцы май и апрель, вы увидите, что значения в столбце «Показатель» равны значениям в столбце «Общий объем продаж».
Удалите показатель Total Sales из матрицы и выберите число в срезе Dates To Show. Затем вы увидите эквивалентное количество дат, отображаемых в матрице.
Устранение проблем с отсутствующими датами в матрице LuckyTemplates
Другая проблема с этим отчетом заключается в том, что когда вы выбираете 8 в слайсере DatesToShow , матрица не изменяется.
Если вы выберете 9 в слайсере, матрица покажет только 8 дат. Вы также заметите, что 17 марта отсутствует в списке дат.
Причина в том, что в некоторые дни в таблице «Дата» нет соответствующих транзакций в таблице «Продажи». Таким образом, мера возвращает пустое значение для этих дат. Поскольку он возвращает пустое значение, код, выполняющийся за матрицей, удаляет пустые строки из результата.
Затем LuckyTemplates использует возвращенный результат для заполнения матрицы. Так как некоторые дни возвращаются пустыми, вы не можете видеть Продажи и записи этих дней в матрице.
Если вы хотите показать что-то за дни без продаж в ваших данных, вернитесь к показателю и удалите синтаксис CALCULATE .
Использование DAX для устранения пропущенной даты в LuckyTemplates
Создайте линию передачи данных, написав TREATAS в столбцах DatesToShow и Date таблицы Dates . Затем проверьте, все ли даты, возвращаемые функцией TREATAS , включены в контекст фильтра.
Оттуда разделите выполнение на несколько переменных. Измените имя переменной с Result на CreateDataLineage , чтобы показать, что она хранит результат TREATAS .
Затем создайте еще одну переменную, которая будет содержать все даты, видимые в контексте фильтра, поступающего из матрицы. Введите VisibleDate в качестве имени переменной и используйте в столбце Date .
Следующее, что нужно сделать, это создать столбец по результату функции TREATAS , который будет содержать сумму продаж. Напишите DatesWithSales в качестве имени переменной и используйте вместо переменной CreateDataLineage .
Внутри функции создайте новый столбец и назовите его « Сумма продаж» с мерой «Общий объем продаж» в контексте строки, чтобы инициировать переход контекста.
После этого создайте переменную, которая будет проверять, включены ли в контекст фильтра все даты, хранящиеся в переменной DatesWithSales . Введите IsDateInFilterContext в качестве имени переменной и используйте функцию .
Оттуда напишите DatesWithSales в качестве первого аргумента функции. Затем введите Dates[Date] IN VisibleDate в качестве второго аргумента, чтобы проверить, включена ли дата, содержащаяся в таблице DatesWithSales , в переменную VisibleDate .
Последняя переменная, которую вам нужно создать, это Result . Используйте функцию для переменной IsDateInFilterContext . Напишите [@Sales Amount] + 0 , чтобы включить дни, которые ранее не были включены.
После всего этого вы увидите в матрице недостающую дату — 17 марта.
Использование +0 в исходной мере
На предыдущих шагах показано, как построить меру, чтобы включить все даты, для которых нет транзакций в таблице фактов. Теперь, если вы используете + 0 в исходной мере, которую вы создали, все значения в столбце «Мера» будут равны 0.
Причина в том, что переменная Result содержит либо пустое значение, либо значение Sales. Таким образом, если вы добавите 0, вы замените пробел на 0. Помните, что сводные столбцы удаляют пустые строки из набора данных. Верните их в LuckyTemplates, чтобы они могли отображать только ограниченные строки, а не пробелы.
Но поскольку добавляется 0, итоговый столбец вынужден сохранять строки. Затем он возвращает таблицу, содержащую все даты, существующие в таблице «Даты», и показывает ноль везде, где это применимо, или когда она пуста.
По этой причине вам нужно переписать меру таким образом, чтобы вам нужно было только добавить 0 к датам, которые видны в контексте фильтра и включены в переменную DatesToShow .
Соединители Power Automate: число, текст и дата, время,
расширенная таблица дат, функция Power Query M
Power Query LuckyTemplates | Создание новых записей на основе полей даты
Заключение
Чтобы создать отчет с данными, который позволяет выбрать конкретную дату в матрице LuckyTemplates , необходимо использовать вычисляемые таблицы и функции DAX . Функции и меры DAX должны быть написаны таким образом, чтобы можно было легко получить результаты.
В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.
Что такое self в Python: примеры из реального мира
Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.
В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.
В этом учебном пособии рассказывается, как использовать технику многопоточных динамических визуализаций для создания аналитических сведений из динамических визуализаций данных в ваших отчетах.
В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.
Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.
Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.
В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.
Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.