Excel DAX – 使用时间智能
Excel DAX – 使用时间智能
您已经在“理解时间智能”一章中了解了 DAX 强大的时间智能功能。在本章中,您将学习如何在各种场景中使用 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 函数在指定时间为产品库存创建以下计算字段 –
月份开始库存值:= 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] )
季末库存值:= CLOSINGBALANCEQUARTER ( 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 (<dates>, <year_end_date>]) – 在当前上下文中,给定日期列中的最后一个日期,返回一个包含前一年所有日期列的表。
您可以使用 DAX 函数创建以下计算字段,用于计算指定时间段内西部地区的销售额总和以进行比较 –
上个月销售额:= 计算 ( SUM (WestSales[SalesAmount]), PREVIOUSMONTH (DateTime [DateKey]) )
上一季度销售额:= 计算 ( SUM (WestSales[SalesAmount]), PREVIOUSQUARTER (DateTime [DateKey]) )
上一年的销售额:= 计算 ( SUM (WestSales[SalesAmount]), PREVIOUSYEAR (DateTime [DateKey]) )
比较平行时间段的值
您可以使用 DAX 时间智能函数 PARALLELPERIOD 来比较与指定时间段平行的时间段内的总和。
PARALLELPERIOD (<dates>, <number_of_intervals>, <interval>)
此 DAX 函数返回一个表,其中包含一列日期,表示与指定日期列中的日期平行的时间段,在当前上下文中,日期在时间上向前或向后移动了多个间隔。
您可以创建以下计算字段来计算西部地区上一年的销售额 –
上一年的销售额:= 计算 ( 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 开始并继续指定 number_of_intervals 的日期列。
DATESBETWEEN (<dates>, <start_date>,
DATEADD (<dates>,<number_of_intervals>,<interval>) – 返回一个包含一列日期的表,从当前上下文中的日期向前或向后移动指定的时间间隔数。
FIRSTDATE (<dates>) – 返回指定日期列的当前上下文中的第一个日期。
LASTDATE (<dates>) – 返回指定日期列的当前上下文中的最后一个日期。
您可以使用 DAX 函数创建以下 DAX 公式,用于计算指定日期范围内西部地区的销售额总和 –
-
用于计算 2016 年 7 月 17 日之前 15 天销售额的 DAX 公式。
计算 ( SUM (WestSales[SalesAmount]), DATESINPERIOD (DateTime[DateKey], DATE(2016,17,14), -15, day) )
-
DAX 公式,用于创建计算 2016 年第一季度销售额的计算字段。
= 计算 ( SUM (WestSales[SalesAmount]),DATESBETWEEN (DateTime[DateKey], DATE (2016,1,1), DATE (2016,3,31)) )
-
DAX 公式创建一个计算字段,用于获取当前上下文中西部地区进行销售的第一个日期。
= FIRSTDATE (WestSales [SaleDateKey])
-
DAX 公式创建一个计算字段,用于获取当前上下文中西部地区进行销售的最后日期。
= 最后日期(WestSales [SaleDateKey])
-
DAX 公式计算当前上下文中日期之前一年的日期。
= DATEADD (DateTime[DateKey],-1,year)