📜  Excel DAX-使用时间智能

📅  最后修改于: 2020-12-01 04:53:08             🧑  作者: Mango


您已在“了解时间智能”一章中了解了DAX强大的功能“时间智能”。在本章中,您将学习如何在各种情况下使用DAX时间智能功能。

DAX时间智能功能包括-

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

  • 具有标准日期间隔的功能,可让您比较月份,年份或季度之间的值。

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

  • 帮助您处理期初和期末余额的功能。

计算累计销售额

您可以使用DAX时间智能功能来创建用于计算累计销售额的公式。以下DAX函数可用于计算期末余额和期初余额-

CLOSINGBALANCEMONTH(,[]) -在当前上下文中计算该月最后一天的表达式。

OPENINGBALANCEMONTH(,[]) -在当前上下文中,在月份的第一天评估表达式。

CLOSINGBALANCEQUARTER(,[]) -计算当前上下文中该季度最后一个日期的表达式。

OPENINGBALANCEQUARTER(,[]) -在当前上下文中计算季度的第一个日期的表达式。

CLOSINGBALANCEYEAR(<表达式>,<日期>,[<过滤器>],[<年末日期>]) -在当前上下文中计算一年中最后一天的表达式。

OPENINGBALANCEYEAR(<表达式>,<日期>,<过滤器>],[]) -在当前上下文中计算年份的第一天的表达式。

您可以使用以下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() -返回一个表,该表包含当前上下文中基于date列中的第一个日期的上个月所有日期的列。

  • PREVIOUSQUARTER() -返回一个表,该表包含当前上下文中基于dates列中的第一个日期的上一个季度的所有日期的列。

  • PREVIOUSYEAR(]) -返回一个表,该表包含上一年度所有日期的列,并给出当前上下文中dates列中的最后一个日期。

您可以使用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比较与指定时间段平行的时间段内的总和。

PARALLELPERIOD(<日期>,<间隔数>,<间隔>)

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

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

Previous Year Sales: = CALCULATE ( 
   SUM (West_Sales[SalesAmount]), PARALLELPERIOD (DateTime[DateKey],-1,year)
) 

计算运行总计

您可以使用以下DAX时间智能功能来计算运行总计或运行总计。

  • TOTALMTD(,[]) -计算当前上下文中当月的表达式的值。

  • TOTALQTD(]) -在当前上下文中,计算截至当前季度的日期的表达式的值。

  • TOTALYTD(<表达式>,<日期>,[<过滤器>],[<年末日期>]) -计算当前上下文中表达式的年初至今值。

您可以使用DAX函数创建以下计算字段,以计算指定时间段在西部地区的销售连续营业总额-

月运行总和:= TOTALMTD(总和(West_Sales [SalesAmount]),DateTime [DateKey])

季度运行总和:= TOTALQTD(总和(WestSales [SalesAmount]),DateTime [DateKey])

年度运行总和:= TOTALYTD(总和(WestSales [SalesAmount]),DateTime [DateKey])

计算自定义日期范围内的值

您可以使用DAX时间情报功能检索自定义的日期集,您可以将其用作执行计算的DAX函数的输入,以创建跨时间段的自定义聚合。

DATESINPERIOD(<日期>,<开始日期>,<间隔时间>,<间隔>) -返回一个表,该表包含以开始日期开始并持续指定的间隔时间的日期列。

DATESBETWEEN(<日期>,<开始日期>, ) −返回一个表,该表包含一列日期,该日期以start_date开始,一直持续到end_date。

DATEADD() -返回一个包含一列日期的表,该日期从当前上下文中的日期开始在时间上向前或向后移动指定的间隔数。

FIRSTDATE() -返回当前上下文中指定日期列的第一个日期。

LASTDATE() -返回当前上下文中指定日期列的最后一个日期。

您可以使用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公式,用于创建一个计算字段,该字段获取针对当前上下文在西部地区进行销售的第一个日期。

= FIRSTDATE (WestSales [SaleDateKey]) 
  • DAX公式,用于创建一个计算字段,该字段获取针对当前上下文在西部地区进行销售的最后日期。

= LASTDATE (WestSales [SaleDateKey]) 
  • DAX公式,用于计算当前上下文中的日期之前一年的日期。

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