1.时间日期表

一般要在模型种另建一个日期维度表。在创建日期表时,日期字段需要满足以下条件:

  • 包含唯一值
  • 不包含任何空值
  • 包含连续的日期值(从开头到结尾)
  • 如果是日期/时间数据类型,则每个值都要具有相同的时间戳(比如都是00:00或者12:00)
    1. 日期表2 = CALENDAR(MIN('订单'[订单日期]),MAX('订单'[订单日期]))
    涉及到的函数:CALENDAR

生成如下的结果
image.png
image.png

  1. 日期表3 =
  2. var BaseCalendar = CALENDAR(MIN('订单'[订单日期]),MAX('订单'[订单日期])) //将日历做成一个变量
  3. return
  4. generate(//generate(表1,表2) 函数返回表1和表2的交叉表(笛卡尔积)
  5. BaseCalendar, //BaseCalendar 为表1
  6. var BaseDate = [Date] //Date来自于calendar函数产生的默认字段名
  7. var YearDate = YEAR(BaseDate)
  8. var MonthNumber = MONTH(BaseDate)
  9. return //返回单行表以及所写的列表达式,下面是表2
  10. row( //返回一个单行表,其中包含由 DAX 表达式指定的新列
  11. "年",YearDate,"季度数",FORMAT(BaseDate,"Q"),"月",FORMAT(BaseDate,"mmm"),"日",DAY(BaseDate),"月份数",MonthNumber,
  12. "年月",FORMAT(BaseDate,"yyyy-mmmm"),"日期键",YearDate & FORMAT([Date],"mm") & FORMAT([Date],"dd")
  13. )
  14. )

涉及到的函数:GENERATEROW

2.时间智能函数

2.1 普通日期函数

普通日期函数有CALENDAR、CALENDARAUTO、DATEDIFF、WEEKNUM、EDATE、EOMONTH等。

2.2 时间智能函数

时间智能函数是指对输入值带有日期识别功能的函数,通过使用时间智能函数确定日期范围,再结合聚合函数和CALCULATE函数就可以进行各种时间的比较计算
image.png

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