Excel DAX - 使用时间智能

您已经在"了解时间智能"一章中了解了DAX强大功能时间智能.在本章中,您将学习如何在各种场景中使用DAX时间智能函数.

DAX时间智能函数包括 :

  • 可帮助您从数据中检索日期或日期范围的函数,这些函数用于计算相似期间的值.

  • 使用标准日期间隔的函数,允许您比较月,年或季度的值.

  • 检索第一个和最后一个的函数指定期间的日期.

  • 帮助您处理期初和期末余额的函数.

计算累计销售额

您可以使用DAX时间智能功能创建计算累计销售额的公式.以下DAX函数可用于计算收盘和期初余额 :

CLOSINGBALANCEMONTH(<expression>,< date>,[< 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函数和减号在指定时间为产品库存创建以下计算字段;

 
月份开始库存值:= OPENINGBALANCEMONTH(
 SUMX(ProductInventory,ProductInventory [UnitCost] * ProductInventory [UnitsBalance]),DateTime [DateKey] 
)


 
月末库存值:= CLOSINGBALANCEMONTH (
 SUMX(ProductInventory,ProductInventory [UnitCost] * ProductInventory [UnitsBalance]),DateTime [DateKey] 
)


 
季度开始库存值:= OPENINGBALANCEQUARTER(
 SUMX ProductInventory,(ProductInventory [UnitCost] * ProductInventory [UnitsBalance]),DateTime [DateKey] 
)


 
季末库存值:= CLOSINGBALANCEQUA RTER(
 SUMX(ProductInventory,ProductInventory [UnitCost] * ProductInventory [UnitsBalance]),DateTime [DateKey] 
)


 
年度开始库存值:= OPENINGBALANCEYEAR(
 SUMX(ProductInventory,ProductInventory [UnitCost] * ProductInventory [UnitsBalance]),DateTime [DateKey] 
)


 
年末存货价值:= CLOSINGBALANCEYEAR( 
 SUMX(ProductInventory,ProductInventory [UnitCost] * ProductInventory [UnitsBalance]),DateTime [DateKey] 
)

比较不同的值时间段

DAX支持的默认时间段是月,季和年.

您可以使用以下DAX时间智能功能进行比较不同时期的总和.

  • PREVIOUSMONTH(< dates>) : 返回一个表,其中包含上一个月中所有日期的列,基于当前上下文中日期列中的第一个日期.

  • PREVIOUSQUARTER(< dates>) : 返回一个表,其中包含上一季度所有日期的列,基于当前上下文中日期列中的第一个日期.

  • PREVIOUSYEAR(< date>,< year_end_date>]) : 返回一个表,其中包含上一年中所有日期的列,给定当前上下文中日期列中的最后一个日期.

您可以创建以下计算字段,用于在指定时间段内计算西部地区的销售总额,以便进行比较,方法是使用DAX函数 : 去;

 
上个月销售:= CALCULATE(
 SUM(WestSales [SalesAmount]),PREVIOUSMONTH(DateTime [DateKey])
)


 
上一季度销售额:= CALCULATE(
 SUM(WestSales [SalesAmount]),PREVIOUSQUARTER(DateTime [DateKey])
)


 
上一年销售额:= CALCULATE ( 
   SUM (WestSales[SalesAmount]), PREVIOUSYEAR (DateTime [DateKey])
)

比较并行时间段内的值

您可以使用DAX时间智能功能PARALLELPERIOD来进行补偿是与指定时间段平行的时间段内的总和.

PARALLELPERIOD(< dates>,< number_of_intervals>,< interval>)

此DAX函数返回一个表,该表包含一列日期,表示与当前上下文中指定日期列中的日期平行的句点,日期向前或向后移动了多个间隔.

您可以创建以下计算字段来计算上一年在西部地区的销售额 :

 
上一年度销售额: = CALCULATE(
 SUM(West_Sales [SalesAmount]),PARALLELPERIOD(DateTime [DateKey], -  1,year)
)

计算运行总计

您可以使用以下DAX时间智能函数来计算运行总计或运行总和.

  • TOTALMTD(<expression>,< date>,[< filter>]) : 在当前上下文中评估当月的表达式的值.

  • TOTALQTD(< expression>,< dates>,<filter>]) : 在当前上下文中评估当前季度中日期的表达式的值.

  • TOTALYTD(< expression>,<日期>,[< 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开头的日期列,并继续指定的number_of_intervals.

DATESBETWEEN(< dates>,< start_date>, : 返回一个表,其中包含以start_date开头并持续到end_date的日期列.

DATEADD(< dates>,< number_of_intervals>,< interval> ) : 返回一个表,其中包含一列日期,按时间向前或向后移动当前上下文中日期的指定间隔数.

FIRSTDATE(< dates>) : 返回指定日期列的当前上下文中的第一个日期.

LASTDATE(< dates>) : 返回指定日期列的当前上下文中的最后一个日期.

您可以创建以下DAX公式,用于计算指定日期范围内西部地区的销售总额,使用DAX函数 :

  • DAX公式计算2016年7月17日之前15天的销售额.

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公式创建一个计算字段,获取在西部进行销售的第一个日期当前背景下的gion.

 
 = FIRSTDATE(WestSales [SaleDateKey])

  • DAX公式创建一个计算字段,获取西部地区销售的最后日期对于当前上下文.

 
 = LASTDATE(WestSales [SaleDateKey])

  • DAX公式,用于计算当前上下文中日期之前一年的日期.

 
 = DATEADD(DateTime [DateKey], -  1,year)