需求
实现如下图的周同比环比分析
实现
日期表 = -- 创建一个日期表
addcolumns(
addcolumns(
calendar auto(),
"年度“,year(date),
“季度”,“q”&format([date],"q"),
“月份”,format([date],"mm"),
“日”,format([date],"dd"),
“年度季度”,format([date],"yyyy")&"q"&format([date],"q"),
“年度月份”,format([date],"yyyy-mm"),
“周几”,weekday([date],2) ,-- 周从星期一(1)开始,到星期天(7)结束
“周数”,weeknum([date],2) -- 周数指此周在一年中的数值,1-52
),
"年度周数",[年度]*100+[周数]
)
-- 返回如下日期表
日期表
WEEKDAY(<date>, <return_type>)
WEEKNUM(<date>[, <return_type>])
有两个系统用于此函数:
系统 1 - 包含 1 月 1 日的周是一年的第一周,编号为“第 1 周”。
系统 2 - 包含一年第一个星期四的周是一年的第一周,编号为“第 1 周”。 此系统是 ISO 8601 中指定的方法,通常称为欧洲周编号系统
度量值 上周销售额 =
var curyear = selectedvalue('日期表'[年度]) -- 返回当前上下文的唯一取值
var curweeknum = selectedvalue('日期表'[周数]) -- 返回当前上下文的唯一取值
return
calculate(
[销售金额],
filter(
all('日期表'),
'日期表'[年度]=curyear&&'日期表'[周数]=curweeknum-1
)
)
度量值 去年同周销售额 =
var curyear = selectedvalue('日期表'[年度]) -- 返回当前上下文的唯一取值
var curweeknum = selectedvalue('日期表'[周数]) -- 返回当前上下文的唯一取值
return
calculate(
[销售金额],
filter(
all('日期表'),
'日期表'[年度]=curyear-1&&'日期表'[周数]=curweeknum
)
)
度量值 本周至今WTD =
var curyearweek = selectedvalue('日期表'[年度周数]) -- 获取当前周
return
calculate(
[销售金额],
filter( -- 计算当前周截止到当前天有几天
all('日期表'), --从取消了所有筛选的日期表中筛选
'日期表'[年度周数]=curyearweek &&'日期表'[date]<=max('日期表'[date])
--取到年度周数为当前周,且小于等于当前上下文最大的那天的日期
上面的代码中涉及到了selectedvalue,附上官方文档
SELECTEDVALUE文档例子
DEFINE
MEASURE DimProduct[Selected Color] =SELECTEDVALUE(DimProduct[Color], "No Single Selection")
EVALUATE
SUMMARIZECOLUMNS
(ROLLUPADDISSUBTOTAL(DimProduct[Color], "Is Total"),
"Selected Color", [Selected Color])
ORDER BY [Is Total] ASC, [Color] ASC