【DAX】常用时间度量值


时间维度指标函数——本期至今

年度至今

订单 指标 YTD =
CALCULATE ( [订单 业务指标], DATESYTD ( '日期'[Date] ) )

特殊财年,如结束于6月30号,则增加第三个参数

订单 指标 YTD =
CALCULATE ( [订单 业务指标], DATESYTD ( '日期'[Date] ,'06-30') )

订单 指标 YTD = TOTALYTD([订单 业务指标], '日期'[Date] ,'06-30')

季度至今

订单 指标 QTD =

CALCULATE ( [订单 业务指标], DATESQTD ( '日期'[Date] ) )

月度至今

订单 指标 MTD =
CALCULATE ( [订单 业务指标], DATESMTD ( '日期'[Date] ) )

本周至今

订单 指标 WTD =
CALCULATE (
    [订单 业务指标],
    FILTER (
        ALL ( '日期' ),
        '日期'[YearWeek] = SELECTEDVALUE ( '日期'[YearWeek] )
            && '日期'[Date] <= SELECTEDVALUE ( '日期'[Date] )

时间维度指标函数——上期同期

订单 指标 PY =
// 上年同期
CALCULATE ( [订单 业务指标],
    DATEADD ( '日期'[Date], -1, YEAR ) )
订单 指标 PQ =
// 上季同期
CALCULATE ( [订单 业务指标],
    DATEADD ( '日期'[Date], -1, QUARTER ) )
订单 指标 PM =
// 上月同期
CALCULATE ( [订单 业务指标],
    DATEADD ( '日期'[Date], -1, MONTH ) )
订单 指标 PW =
// 上周同期(上周同日,7日前)
CALCULATE ( [订单 业务指标],
    DATEADD ( '日期'[Date], -7, DAY ) )

时间维度指标函数——上期全部

订单 指标 PYT =
//上年全部
    CALCULATE ( [订单 业务指标],
        PARALLELPERIOD ( '日期'[Date], -1, YEAR ) )
订单 指标 PQT =
// 上季全部
CALCULATE ( [订单 业务指标],
    PARALLELPERIOD ( '日期'[Date], -1, QUARTER ) )
订单 指标 PMT =
// 上月全部
CALCULATE ( [订单 业务指标],
    PARALLELPERIOD ( '日期'[Date], -1, MONTH ) )
订单 指标 PWT =
// 上周全部
IF (
    SELECTEDVALUE ('日期'[WeekOfYear] ) = 1 ||
        CALCULATE (COUNTROWS ( '日期' ),
            FILTER ( ALL ( '日期' ),
            '日期'[YearWeek] = SELECTEDVALUE ( '日期'[YearWeek] ) - 1 ) 
            )< 7,
    BLANK (),
    CALCULATE ([订单 业务指标],
        FILTER ( ALL ( '日期' ),
        '日期'[YearWeek] = SELECTEDVALUE ( '日期'[YearWeek] ) - 1 ) 
    )

时间维度指标函数——时间对比

订单 指标 YOY =
// 与去年同期差异
[订单 指标] - [订单 指标 PY]
订单 指标 YOY % =
// 与去年同期差异增长率
DIVIDE ( [订单 指标] - [订单 指标 PY],
    [订单 指标 PY] )
订单 指标 PYTD =
// 去年年度至今
CALCULATE ( [订单 指标 YTD],
    SAMEPERIODLASTYEAR ( '日期'[Date] ) )
订单 指标 YTD YOY =
// 年度至今同比差异
[订单 指标 YTD] - [订单 指标 PYTD]
订单 指标 YTD YOY % =
// 年度至今同比差异增长率
DIVIDE ( [订单 指标 YTD YOY], [订单 指标 PYTD] )
上年同期金额(万) =
calculate(sum([项目金额(万)]),
    SAMEPERIODLASTYEAR('日期'[日期]))
上月金额(万) =
calculate(sum([项目金额(万)]),
    DATEADD('日期'[日期],-1,MONTH))
金额环比增长率 =
if(
    ISBLANK([上月金额(万)]),
    BLANK(),
    (sum([项目金额(万)])-[上月金额(万)])/[上月金额(万)])
金额 排名 =
rankx(all([来源明细]),
    CALCULATE(sum([项目金额(万)])),,desc)
金额同比增长率 =
if(
    ISBLANK([上年同期金额(万)]),
    blank(),
    (sum([项目金额(万)])-[上年同期金额(万)])/[上年同期金额(万)])
累积金额(万) =
TOTALYTD(sum([项目金额(万)]),'日期'[日期])

以下几个时间函数在PBI和EXCEL通用

EDATE,N个月之后的某天

EDATE("2019/9/9",3)= "2019/12/9"

EOMONTH,N个月之后的月末那天

EOMONTH("2019/9/9",3)= "2019/12/31"

YEARFRAC,两个日期之间天数占年份总天数之比

YEARFRAC("2019/1/1","2019/3/1",1)=0.16

特殊时间智能函数,仅PBI

月/季/年第一天的计值OPENINGBALANCEMONTH,-QUARTER,-YEAR,
OPENINGBALANCEMONTH(<expression>,<dates>[,<filter>])
月/季/年最后一天的计值CLOSINGBALANCEMONTH,-QUARTER,-YEAR,
CLOSINGBALANCEMONTH(<expression>,<dates>[,<filter>])

时间表函数-calendarauto()

该函数不输入参数时,默认会读取所有表,根据最早日期和最晚日期(不含计算列的日期)所在年份的1月1日至12月31日,构建表。 比如表1有日期列,最早是2004年3月2日,表2有日期列,最晚是2007年5月。则生成2004年1月1日-2007年12月31日。

如果填入参数(数字),则会改变年份的期初期末日期。如不填,为1月1日至12月31日。如填6,则为7月1日至6月30日。

Date=calendarauto(6)

日期表

Date =
VAR MinYear = YEAR ( MIN ( Sales[Order Date] ) )
VAR MaxYear = YEAR ( MAX ( Sales[Order Date] ) )
RETURN
ADDCOLUMNS (
     FILTER (
         CALENDARAUTO ( ),
         YEAR ( [Date] ) >= MinYear &&
         YEAR ( [Date] ) <= MaxYear
     ),
     'Year', YEAR ( [Date] ),
     'Quarter Number', INT ( FORMAT ( [Date], 'q' ) ),
     'Quarter', 'Q' & INT ( FORMAT ( [Date], 'q' ) ),
     'Month Number', MONTH ( [Date] ),
     'Month', FORMAT ( [Date], 'mmmm' ),
     'Week Day Number', WEEKDAY ( [Date] ),
     'Week Day', FORMAT ( [Date], 'dddd' ),
     'Year Month Number', YEAR ( [Date] ) * 100 + MONTH ( [Date] ),
     'Year Month', FORMAT ( [Date], 'mmmm' ) & ' ' & YEAR ( [Date] ),
     'Year Quarter Number', YEAR ( [Date] ) * 100 + INT ( FORMAT ( [Date], 'q' ) ),
     'Year Quarter', 'Q' & FORMAT ( [Date], 'q' ) & '-' & YEAR ( [Date] )
)

移动年度合计 Moving Annual Total (MAT)

MAT Sales:=
calculate(
    [Sales],
    datesinperiod(
        'date'[date],max('date'[date]),-1,year)
        )

MAT Sales:=
calculate(
    [Sales],
    datesbetween(
        'date'[date],
        nextday(samepeiodlastyear(lastdate('date'[date]))),
        lastdate('date'[date])
        )
    )