Excel DAX - использование логики операций со временем
Вы узнали о мощной функции DAX Time Intelligence в главе - Understanding Time Intelligence. В этой главе вы узнаете, как использовать функции логики операций со временем DAX в различных сценариях.
Функции анализа времени DAX включают в себя -
- Функции, помогающие извлекать из данных даты или диапазоны дат, которые используются для расчета значений за аналогичные периоды. 
- Функции, которые работают со стандартными интервалами дат, чтобы вы могли сравнивать значения по месяцам, годам или кварталам. 
- Функции, извлекающие первую и последнюю дату указанного периода. 
- Функции, помогающие работать с начальным и конечным сальдо. 
Расчет совокупных продаж
Вы можете использовать функции анализа времени DAX для создания формул для расчета совокупных продаж. Следующие функции DAX можно использовать для расчета конечного и начального сальдо:
CLOSINGBALANCEMONTH (<expression>,<dates>, [<filter>]) - Оценивает выражение в последний день месяца в текущем контексте.
OPENINGBALANCEMONTH (<expression>,<dates>, [<filter>]) - Оценивает выражение в первое число месяца в текущем контексте.
CLOSINGBALANCEQUARTER (<expression>,<dates>, [<filter>]) - Оценивает выражение на последнюю дату квартала в текущем контексте.
OPENINGBALANCEQUARTER (<expression>,<dates>, [<filter>]) - Оценивает выражение на первую дату квартала в текущем контексте.
CLOSINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>]) - Оценивает выражение в последний день года в текущем контексте.
OPENINGBALANCEYEAR (<expression>, <dates>, <filter>], [<year_end_date>]) - Оценивает выражение в первую дату года в текущем контексте.
Вы можете создать следующие вычисляемые поля для инвентаризации продукта в указанное время, используя следующие функции DAX:
Month Start Inventory Value: = OPENINGBALANCEMONTH ( 
   SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)Month End Inventory Value: = CLOSINGBALANCEMONTH ( 
   SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)Quarter Start Inventory Value: = OPENINGBALANCEQUARTER ( 
   SUMX ProductInventory, (ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)Quarter End Inventory Value: = CLOSINGBALANCEQUARTER ( 
   SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)Year Start Inventory Value: = OPENINGBALANCEYEAR ( 
   SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)Year End Inventory Value: = CLOSINGBALANCEYEAR ( 
   SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey]
)Сравнение значений за разные периоды времени
По умолчанию DAX поддерживает периоды времени: месяцы, кварталы и годы.
Вы можете использовать следующие функции аналитики времени DAX для сравнения сумм за разные периоды времени.
- PREVIOUSMONTH (<dates>) - Возвращает таблицу, содержащую столбец всех дат за предыдущий месяц на основе первой даты в столбце дат в текущем контексте. 
- PREVIOUSQUARTER (<dates>) - Возвращает таблицу, содержащую столбец всех дат за предыдущий квартал на основе первой даты в столбце дат в текущем контексте. 
- PREVIOUSYEAR (<dates>, <year_end_date>]) - Возвращает таблицу, содержащую столбец всех дат предыдущего года с учетом последней даты в столбце дат в текущем контексте. 
Вы можете создать следующие вычисляемые поля для расчета суммы продаж в Западном регионе в указанные периоды времени для сравнения с помощью функций DAX:
Previous Month Sales: = CALCULATE ( 
   SUM (WestSales[SalesAmount]), PREVIOUSMONTH (DateTime [DateKey])
)Previous Quarter Sales: = CALCULATE ( 
   SUM (WestSales[SalesAmount]), PREVIOUSQUARTER (DateTime [DateKey])
)Previous Year Sales: = CALCULATE ( 
   SUM (WestSales[SalesAmount]), PREVIOUSYEAR (DateTime [DateKey])
)Сравнение значений за параллельные периоды времени
Вы можете использовать функцию аналитики времени DAX PARALLELPERIOD для сравнения сумм за период, параллельный указанному периоду времени.
ПАРАЛЛЕЛЬНЫЙ ПЕРИОД (<даты>, <число_интервалов>, <интервал>)
Эта функция DAX возвращает таблицу, содержащую столбец дат, представляющий период, параллельный датам в указанном столбце дат в текущем контексте, причем даты сдвинуты на несколько интервалов вперед или назад во времени.
Вы можете создать следующее вычисляемое поле для расчета продаж за предыдущий год в Западном регионе -
Previous Year Sales: = CALCULATE ( 
   SUM (West_Sales[SalesAmount]), PARALLELPERIOD (DateTime[DateKey],-1,year)
)Расчет промежуточных итогов
Вы можете использовать следующие функции анализа времени DAX для расчета промежуточных итогов или промежуточных сумм.
- TOTALMTD (<expression>,<dates>, [<filter>]) - Оценивает значение выражения за месяц до даты в текущем контексте. 
- TOTALQTD (<expression>,<dates>, <filter>]) - Оценивает значение выражения для дат в квартале до даты в текущем контексте. 
- TOTALYTD (<expression>,<dates>, [<filter>], [<year_end_date>]) - Оценивает значение выражения с начала года до даты в текущем контексте. 
Вы можете создать следующие вычисляемые поля для расчета текущей суммы продаж в Западном регионе в указанные периоды времени, используя функции DAX:
Текущая сумма за месяц: = TOTALMTD (SUM (West_Sales [SalesAmount]), DateTime [DateKey])
Промежуточная сумма за квартал: = TOTALQTD (SUM (WestSales [SalesAmount]), DateTime [DateKey])
Текущая сумма за год: = TOTALYTD (SUM (WestSales [SalesAmount]), DateTime [DateKey])
Расчет значения для настраиваемого диапазона дат
Вы можете использовать функции аналитики времени DAX для получения настраиваемого набора дат, который можно использовать в качестве входных данных для функции DAX, выполняющей вычисления, для создания настраиваемых агрегатов по периодам времени.
DATESINPERIOD (<dates>, <start_date>, <number_of_intervals>, <interval>) - Возвращает таблицу, содержащую столбец дат, который начинается с start_date и продолжается в течение указанного числа_интервалов.
DATESBETWEEN (<dates>, <start_date>, 
       
DATEADD (<dates>,<number_of_intervals>,<interval>) - Возвращает таблицу, содержащую столбец дат, сдвинутых вперед или назад во времени на указанное количество интервалов от дат в текущем контексте.
FIRSTDATE (<dates>) - Возвращает первую дату в текущем контексте для указанного столбца дат.
LASTDATE (<dates>) - Возвращает последнюю дату в текущем контексте для указанного столбца дат.
Вы можете создать следующие формулы DAX для расчета суммы продаж в Западном регионе за указанный диапазон дат с помощью функций DAX:
- Формула DAX для расчета продаж за 15 дней до 17 июля 2016 г. 
CALCULATE ( 
   SUM (WestSales[SalesAmount]), DATESINPERIOD (DateTime[DateKey], DATE(2016,17,14), -15, day)
)- Формула DAX для создания вычисляемого поля, которое вычисляет продажи за первый квартал 2016 года. 
= CALCULATE (
   SUM (WestSales[SalesAmount]),DATESBETWEEN (DateTime[DateKey], DATE (2016,1,1), DATE (2016,3,31))
)- Формула DAX для создания вычисляемого поля, которое получает первую дату совершения продажи в западном регионе для текущего контекста. 
= FIRSTDATE (WestSales [SaleDateKey])- Формула DAX для создания вычисляемого поля, которое получает последнюю дату совершения продажи в западном регионе для текущего контекста. 
= LASTDATE (WestSales [SaleDateKey])- Формула DAX для вычисления дат, которые на год раньше дат в текущем контексте. 
= DATEADD (DateTime[DateKey],-1,year)