1. 前提
1) 建立日期表并标记为日期表,日期表的起止日期要涵盖事实表的所有日期
a. 可以用dax或者PQ建立,可以参考佐罗://www.greatytc.com/p/7b69d8ec41ef
b. 标记日期表可以强制检查日期列是否连续、无重复值

image.png
2. 时间函数
1) Date 日期
Date(2020,1,31) --返回一个日期
2) Datevalue 将文本日期转换为日期格式
Measure = DATEVALUE("2020-10-01")
Measure = DATEVALUE("1-10-2020") --月/日不方便区分时,pbi跟随系统时间确定月/日
Measure = DATEVALUE("10-1") --缺乏年份信息时,pbi返回系统所在年

image.png

image.png

image.png
3)Edate 返回指定月数平移后的日期⭐
--求rolling12的值
Measure = CALCULATE (
[Resolved],
FILTER (
ALL ( Calendar[Resolve Date] ),
Calendar[Resolve Date] - 1
>= EDATE ( [Eomonth.fullmonth], -12 )
)
4)EOMONTH⭐
measure = EOMONTH(DATE(2020,1,2),1)

image.png
5) HOUR MONTH MINUTE NOW QUATER SECOND TODAY() YEAR
这些直接用就行了
3. 时间智能函数

image.png
(来自采悟)
1)今年累计值⭐
销量 = SUM('表'[销售])
年初至今 = TOTALYTD([总销量],'表'[日期])
月初至今 = TOTALMTD([总销量],'表'[日期])
季出至今 = TOTALQTD([总销量],'表'[日期])
年初至今 = TOTALYTD([度量值],'表'[日期],"9-30") # 从10月1日开始计算为一年
2)去年同期累计值
去年同期年初至今 = TOTALYTD([总销量],SAMEPERIODLASTYEAR('表'[日期]))
去年同期月初至今 = TOTALMTD([总销量],SAMEPERIODLASTYEAR('表'[日期]))
去年同期季初至今 = TOTALQTD([总销量],SAMEPERIODLASTYEAR('表'[日期]))
3)指定时间销量
指定时间销量 = CALCULATE([总销量],DATESBETWEEN('表'[日期],DATE(2019,4,1),DATE(2020,4,30) ))
每月最后3天销量 = CALCULATE([销售量],DATESINPERIOD('表2'[日期],ENDOFMONTH('表2'[日期]),-3,DAY))
每月前3天销量 = CALCULATE([销售量],DATESINPERIOD('表2'[日期],STARTOFMONTH('表2'[日期]),3,DAY))
计算每年1月1日的销量 = CALCULATE([销售量],STARTOFyear('表'[日期]))
计算每年12月31日销量 = CALCULATE([销售量],ENDOFyear('表'[日期]))
计算指定年度开始前5天的销量
= CALCULATE([销售量],DATESINPERIOD('表'[日期],STARTOFMONTH('表'[日期],"5-31"),5,DAY))
4)最近30天
求最近30天的移动平均
= Calculate([销售量], datesinperiod(‘表’[日期],max(‘表’[日期]),-30,day)/30)
5)同比环比
去年去年同期销售额 = CALCULATE(sum(sales), DATEADD(canlendar[date], -1, year))
上月销售额 = CALCULATE(sum(sales), DATEADD(canlendar[date], -1, month))
5)rolling12month
Datesinperiod
或者//www.greatytc.com/p/016372ba651e这篇文章中previous 12 months这个切片器
