DAX具有重要而强大的功能,称为时间智能.时间智能使您能够编写DAX公式,这些公式引用数据透视表中使用的时间段.
DAX具有35个时间智能功能,专门用于聚合和比较数据.但是,这些DAX函数对您需要理解的数据有一些限制,并谨慎使用以避免错误.
为什么时间智能使DAX强大?
时间智能功能可以处理不断变化的数据,具体取决于您在数据透视表和Power View可视化中选择的上下文.如您所知,大多数数据分析涉及时间段内的数据汇总,比较各个时间段的数据值,了解趋势并根据未来预测做出决策.
例如,您可能希望将产品过去一个月的销售额总和,并将总计与会计年度中其他月份的总计进行比较.这意味着,您必须使用日期作为在特定时间段内对销售交易进行分组和汇总的方法.
这是您可以观察DAX的力量的地方.您可以使用DAX时间智能功能定义计算字段,以帮助您随时间分析数据,而无需更改数据透视表中的日期选择.这使您的工作更轻松.此外,您可以构建任何其他方式都无法实现的数据透视表.
DAX时间智能函数的要求
DAX时间智能函数有一定的要求.如果不满足这些要求,您可能会收到错误或者可能无法正常工作.因此,您也可以将这些要求称为规则或约束.以下是某些DAX时间智能函数要求/规则/约束 :
您需要在数据中有一个日期表模型.
日期表必须包含DAX认为是Date列的列.您可以按照所需的方式命名列,但它应符合以下条件:o日期列应包含一组连续的日期,这些日期涵盖分析数据的时间段中的每一天.
每个日期必须在日期列中存在一次且仅一次.
您不能跳过任何日期(例如,您不能跳过周末日期).
DAX时间智能功能仅适用于标准日历,并假设年初为1月1日,年末为12月31日,每年的月份和每个月的日期为一个日历年.
但是,您可以为不同的财政年度自定义标准日历.在使用任何时间智能函数之前验证上述要求是一种很好的做法.
有关日期表及其在DAX公式中的用法的更多详细信息,请参阅教程=数据建模与本教程库中的DAX.
DAX时间智能函数 - 类别
DAX时间智能函数可分为以下几种;
返回单个日期的DAX函数.
返回日期表的DAX函数.
在一段时间内评估表达式的DAX函数.
返回单个日期的DAX函数
此类别中的DAX函数返回单个日期.
此类别中有10个DAX函数 :
Sr.No. | DAX功能&返回值 |
---|---|
1 | FIRSTDATE(Date_Column) 返回当前上下文中Date_Column中的第一个日期. |
2 | LASTDATE(Date_Column) 返回当前上下文中Date_Column中的最后一个日期. |
3 | FIRSTNONBLANK(Date_Column,Expression) 返回表达式为非的第一个日期-blank值. |
4 | LASTNONBLANK(Date_Column,Expression) 返回表达式具有非空值的最后日期. |
5 | STARTOFMONTH(Date_Column) 返回当前上下文中一个月的第一个日期. |
6 | ENDOFM ONTH(Date_Column) 返回当前上下文中一个月的最后一个日期. |
7 | STARTOFQUARTER(Date_Column) 返回当前上下文中一个季度的第一个日期. |
8 | ENDOFQUARTER(Date_Column) 返回当前上下文中四分之一的最后日期. |
9 | STARTOFYEAR(Date_Column,[YE_Date]) 返回当前上下文中一年的第一个日期. |
10 | ENDOFYEAR(Date_Column,[YE_Date]) 返回当前上下文中一年的最后一个日期. |
返回日期表的DAX函数
DAX此类别中的函数返回日期表.这些函数主要用作DAX函数的SetFilter参数 - CALCULATE.
此类别中有16个DAX函数.这些DAX函数中的八(8)个是"前一个"和"下一个"函数.
"previous"和"next"函数以当前上下文中的日期列开始,并计算上一个或下一个日期,月份,季度或年份.
"previous"函数从当前上下文中的第一个日期开始向后工作,"下一个"函数从当前上下文中的最后一个日期开始向前移动.
"previous"和"next"函数以单列表的形式返回结果日期.
Sr.No. | DAX功能&返回值 |
---|---|
1 | PREVIOUSDAY(Date_Column) 返回一个表,其中包含所有日期的列,表示当前上下文中Date_Column中第一个日期之前的日期. |
2 | NEXTDAY(Date_Column) 返回一个表,其中包含第二天所有日期的列,基于当前上下文中Date_Column中指定的第一个日期./p> |
3 | PREVIOUSMONTH(Date_Column) 返回一个表,该表包含上个月所有日期的列,基于当前上下文中Date_Column中的第一个日期./p> |
4 | NEXTMONTH(Date_Column) 返回一个表,其中包含下个月所有日期的列,基于第一个日期在当前上下文的Date_Column中. |
5 | PREVIOUSQUARTER(Date_Column) 返回一个表,其中包含上一季度所有日期的列,基于第一个日期在当前上下文的Date_Column中. |
6 | NEXTQUARTER(Date_Column) 返回一个表,其中包含下一季度所有日期的列,基于第一个日期在当前上下文中的Date_Column中指定. |
7 | PREVIOUSYEAR(Date_Column,[YE_Date]) 返回一个表,其中包含上一年所有日期的列,给出当前上下文中Date_Column的最后一个日期. |
8 | NEXTYEAR(Date_Column,[YE_Date]) 返回一个包含一列的表根据当前上下文中Date_Column中的第一个日期,明年的所有日期. |
四(4)个DAX函数计算一段时间内的一组日期.这些函数使用当前上下文中的最后一个日期执行计算.
Sr.No . | DAX功能&返回值 |
---|---|
1 | DATESMTD(Date_Column) 返回一个表,其中包含当前上下文中当月的日期列. |
2 | DATESQTD(Date_Column) 返回一个表,其中包含当前上下文中当前季度的日期列. |
3 | DATESYTD(Date_Column,[YE_Date]) 返回一个表,其中包含当前上下文中当前年份的日期列. |
4 | SAMEPERIODLASTYEAR(Date_Column) 返回一个表,其中包含从当前上下文中指定的Date_Column中的日期开始一年后移位的日期列. 注意 : 去; SAMEPERIODLASTYEAR要求当前上下文包含一组连续的日期. 如果当前上下文不是连续的日期集,则SAMEPERIODLASTYEAR将返回错误. |
四(4)个DAX函数是用于从当前上下文中的日期集转换到新的日期集.
这些DAX函数比以前的函数更强大.
DAX函数 - DATEADD,DATESINPERIOD和PARALLELPERIOD从当前上下文移动一些时间间隔.间隔可以是日,月,季度或年,分别由关键词 - DAY,MONTH,QUARTER和YEAR表示.
例如:
向后移动2天.
移动提前5个月.
从今天开始提前一个月.
Go回到去年的同一季度.
DAX函数 - DATESBETWEEN计算指定开始日期和结束日期之间的日期集.
如果函数参数 - 间隔数(整数值)为正,则转移为正向如果是负数,则向后移动.
Sr.No. | DAX功能&返回值 |
---|---|
1 | DATEADD(Date_Column,Number_of_Intervals,Interval) 返回一个表,其中包含一列日期,按时间向前或向后移动日期中指定的间隔数在当前的背景下. |
2 | DATESINPERIOD(Date_Column,Start_Date,Number_of_Intervals,Interval) 返回一个表,其中包含以start_date开头的日期列并继续指定的number_of_intervals. |
3 | PARALLELPERIOD(Date_Column,Number_of_Intervals,Interval) 返回一个表,其中包含一列日期,表示与指定日期平行的句点当前上下文中的Date_Column,日期在时间上向前或向后移动了多个间隔. |
4 | DATESBETWEEN(Date_Column,Start_Date,End_Date) 返回一个表,其中包含以start_date开头并持续到end_date的日期列. |
评估一段时间内表达式的DAX函数
DAX此类别中的函数计算指定时间段内的表达式./p>
此类别中有九(9)个DAX函数 :
三(3)此类别中的DAX函数可用于评估指定时间段内的任何给定表达式.
Sr.No. | DAX功能&返回值 |
---|---|
1 | TOTALMTD(Expression,Date_Column,[SetFilter]) 在当前上下文中计算当月日期的表达式值. |
2 | TOTALQTD (Expression,Date_Column,[SetFilter]) 在当前上下文中计算当前季度中日期的表达式值. |
3 | TOTALYTD(表情,Date_Column,[SetFilter],[YE_Date]) 在当前上下文中评估当前年份中日期的表达式值 |
此类别中的六(6)个DAX函数可用于计算期初余额和期末余额.
任何期间的期初余额与结算期间的期初余额相同balanc上一期间的e.
期末余额包括期末的所有数据,而期初余额不包括当前期间的任何数据期间.
这些DAX函数始终返回针对特定时间点计算的表达式的值.
我们关心的时间点始终是日历期间最后一个可能的日期值.
期初余额基于上一期间的最后日期,而期末余额基于当前期间的最后日期.
当前期间始终由当前日期背景中的最后一个日期决定.
Sr.No. | DAX功能&返回值 |
---|---|
1 | OPENINGBALANCEMONTH(Expression,Date_Column,[SetFilter]) 在当前上下文中计算月份第一个日期的表达式. |
2 | CLOSINGBALANCEMONTH(表达式,Date_Column, [SetFilter]) 在当前上下文中评估当月最后一个日期的表达式. |
3 | OPENINGBALANCEQUARTER(Expression,Date_Column,[SetFilter]) 在当前上下文中评估季度第一个日期的表达式. |
4 | CLOSINGBALANCEQUARTER(Expression,Date_Column,[SetFilter]) 在当前上下文中计算该季度最后一个日期的表达式. |
5 | OPEN INGBALANCEYEAR(表达式,Date_Column,[SetFilter],[YE_Date]) 在当前上下文中计算一年中第一个日期的表达式. |
6 | CLOSINGBALANCEYEAR(表达式) ,Date_Column,[SetFilter],[YE_Date]) 在当前上下文中计算一年中最后一个日期的表达式. |