1.时间日期表
一般要在模型种另建一个日期维度表。在创建日期表时,日期字段需要满足以下条件:
- 包含唯一值
- 不包含任何空值
- 包含连续的日期值(从开头到结尾)
- 如果是日期/时间数据类型,则每个值都要具有相同的时间戳(比如都是00:00或者12:00)
涉及到的函数:CALENDAR日期表2 = CALENDAR(MIN('订单'[订单日期]),MAX('订单'[订单日期]))
生成如下的结果

日期表3 =var BaseCalendar = CALENDAR(MIN('订单'[订单日期]),MAX('订单'[订单日期])) //将日历做成一个变量returngenerate(//generate(表1,表2) 函数返回表1和表2的交叉表(笛卡尔积)BaseCalendar, //BaseCalendar 为表1var BaseDate = [Date] //Date来自于calendar函数产生的默认字段名var YearDate = YEAR(BaseDate)var MonthNumber = MONTH(BaseDate)return //返回单行表以及所写的列表达式,下面是表2row( //返回一个单行表,其中包含由 DAX 表达式指定的新列"年",YearDate,"季度数",FORMAT(BaseDate,"Q"),"月",FORMAT(BaseDate,"mmm"),"日",DAY(BaseDate),"月份数",MonthNumber,"年月",FORMAT(BaseDate,"yyyy-mmmm"),"日期键",YearDate & FORMAT([Date],"mm") & FORMAT([Date],"dd")))
2.时间智能函数
2.1 普通日期函数
普通日期函数有CALENDAR、CALENDARAUTO、DATEDIFF、WEEKNUM、EDATE、EOMONTH等。
2.2 时间智能函数
时间智能函数是指对输入值带有日期识别功能的函数,通过使用时间智能函数确定日期范围,再结合聚合函数和CALCULATE函数就可以进行各种时间的比较计算

EARLIER函数,用于需要将当前行与自身列的其他单元格相比较的情况。DAX中没有单元格的概念,必须借助EARLIER函数(在旧版本中被称为OUTER函数)返回相同“列”中的其他单元格作为当前行值,再与自身列进行对比。比如,在’Date’[Date]<=EARLIER (‘Date’[Date])中,EARLIER是参照列,与’Date’[Date]相比,对第一行“20050101”来说,其逻辑为:’Date’[Date]<=’20150101’,小于或等于它的值只有它自己,因此通过COUNTROWS函数计算返回结果“1”。
