Основы Time Intelligence в DAX для Power BI: год до даты, квартал до даты, месяц до даты

Tags: Time Intelligence, Power BI, DAX

Анализ времени (Time Intelligence) является важной частью многих BI-решений. В этой статье мы сперва объясним, что такое анализ времени и каковы требования для настройки вычислений учета времени, а затем расскажу о функциях и выражениях DAX, которые помогают получить представление, такое как сравнение по годам, сравнение по годам и т. д.

Необходимое условие

Для запуска примеров из этой статьи вам понадобится набор данных AdventureWorksDW. и таблица, которую мы используем, - это только одна таблица: FactInternetSales для загрузки в Power BI.

 

Что такое Time Intelligence?

Функции Time Intelligence в DAX представляют собой набор функций, которые дают вам представление о измерениях даты и времени. Большая часть анализа по дате и времени относится к этой категории, например; год к дате, квартал к дате, месяц к дате, расчеты за тот же период прошлого года и т. д. Все эти расчеты имеют одно общее измерение: измерение даты/времени.

Перед использованием функций DAX

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

Измерение даты, приемлемое для функций анализа времени DAX, должно:

  • иметь одну запись в день;
  • начинаться с минимальной даты в поле даты или раньше и заканчиваться максимальной датой в поле даты или позже.
  • не пропускать ни одной даты (если нет продаж на 1 января, эта дата все же должна быть в этой таблице. Это одна из причин, по которой вам нужна отдельная таблица дат)

Откуда получить измерение даты?

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

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

Год до даты: TotalYTD

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

TotalYTD( <expression>, <dates>, [<filter>], [<year end date>])

 

Первые два параметра являются обязательными:

  • Expression: выражение, которое применяет агрегацию значения
  • dates: поле даты измерения даты.

В нашем примере мы вычисляем сумму поля SalesAmount в FactInternetSales. Таким образом, выражение будет следующим: Sum(FactInternetSales[SalesAmount]).

Для поля даты, так как мы используем измерение даты по умолчанию; при вводе имени поля даты (в данном случае OrderDate из FactInternetSales) у вас будет возможность выбрать поле из этой таблицы (помните, что поле даты является таблицей дат позади сцены, Power BI создает измерение даты по умолчанию для каждое поле даты) выберите поле .[Date]. Это подразумевает поле даты в таблице дат по умолчанию.

 

Таким образом, в результате вот выражение для расчета “год до даты”: (Обратите внимание, что это показатель, а не столбец)

 

1

2

3

4

Sales YTD = TOTALYTD(

               SUM(FactInternetSales[SalesAmount]),

               FactInternetSales[OrderDate].[Date]

)

и пример вывода будет следующим:

 

Как вы можете видеть, показатель Sales YTD представляет собой накопленные значения всех дат до начала года (для получения правильного результата вы должны иметь OrderDate в визуале, и его следует упорядочить по возрастанию OrderDate). На приведенном выше рисунке показан расчет по каждому дню, если мы удалим день из визуального элемента (вы можете удалить его из раздела «Fields» визуального элемента),

 

затем вы можете рассчитать год до даты на месячном уровне, как показано ниже:

 

Как вы можете видеть на скриншоте выше, расчет “год до даты” за каждый месяц - это совокупный объем продаж за все месяцы до этого (с января того года).

Год до даты. Другой подход: DatesYTD

TotalYTD является одним из методов расчета годовой стоимости. Есть другой способ, который может быть полезен в более сложных выражениях DAX, когда вы хотите объединить несколько критериев фильтрации вместе. Таким образом, используется функция DatesYTD в сочетании с функцией Calculate. DatesYTD - это функция, которая принимает только два параметра, один из которых является необязательным;

DatesYTD(<dates>, <year end date>)

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

Вот как работает расчет с функцией DatesYTD;

1

2

3

4

5

6

Sales YTD Method 2 = CALCULATE(

   SUM(FactInternetSales[SalesAmount]),

   DATESYTD(

       FactInternetSales[OrderDate].[Date]

   )

)

 

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

Фискальный или финансовый год до даты

Рассчитать календарный год до даты было легко, как насчет фискального или финансового расчета? у нас есть функция для них? Нет. Однако есть параметр, который можно добавить в выражение и который делает расчет фискальным. Параметр <year end date> является необязательным параметром, который мы не использовали в предыдущем примере. Если вы не назначите значение для этого параметра, будет использоваться значение по умолчанию, равное 31 декабря каждого года. Если вы хотите указать значение для этого параметра, вот пример того, как вы можете это сделать:

 

2

3

4

5

Sales YTD Fiscal = TOTALYTD(

               SUM(FactInternetSales[SalesAmount]),

               FactInternetSales[OrderDate].[Date],

               "06/30"

)

Как вы можете видеть по структуре, которую мы предоставили, дата окончания года была месяц/день. Есть также несколько других опций, которые вы можете использовать, например, 06-30, 6/30, 30 июня или 30 июня. Все, что разрешает сценарий месяц/день.Ррекомендуется использовать формат месяца/дня. Значение «06/30» в качестве параметра означает, что конец финансового года наступает 30 июня каждого года, а результатом будет 1 июля года. Вот выходные данные, поскольку вы можете видеть, что расчет перезапускается в июле каждого года вместо календарного года до даты, которая начинается с января.

 

Подход очень похож, если вы хотите использовать подход DatesYTD, вот код:

3

4

5

6

7

Sales YTD Fiscal Method 2 = CALCULATE(

   SUM(FactInternetSales[SalesAmount]),

   DATESYTD(

       FactInternetSales[OrderDate].[Date],

       "06/30"

   )

)

Расчет за квартал до даты: TotalQTD

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

1

2

3

4

Sales QTD = TOTALQTD(

               SUM(FactInternetSales[SalesAmount]),

               FactInternetSales[OrderDate].[Date]

)

Как видите, в этом расчете накапливаются значения продаж до конца каждого квартала.

Расчет за квартал до даты: DatesQTD

Подобно DatesYTD, есть также функция для DatesQTD, которую можно использовать точно так же. Вот код для нее:

 

1

2

3

4

5

6

Sales QTD Method 2 = CALCULATE(

   SUM(FactInternetSales[SalesAmount]),

   DATESQTD(

       FactInternetSales[OrderDate].[Date]

   )

)

Расчет месяца до даты: TotalMTD

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

1

2

3

4

Sales MTD = TOTALMTD(

               SUM(FactInternetSales[SalesAmount]),

               FactInternetSales[OrderDate].[Date]

)

 

И вывод (обратите внимание, что вы можете проверить его лучше, когда у вас есть ДЕНЬ на визуальном элементе, чтобы увидеть, как происходит накопление);

 

Расчет месяца до даты: DatesMTD

Тот же самый подход может быть применен для DatesMTD, как показано ниже:

2

3

4

5

6

Sales MTD Method 2 = CALCULATE(

   SUM(FactInternetSales[SalesAmount]),

   DATESMTD(

       FactInternetSales[OrderDate].[Date]

   )

)

Больше функций?

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



No Comments

Add a Comment