在群里看到有人在交流周维度同环比,同时又好多天都没有更新文章了,最近没有什么好的素材,就硬生生的写一个吧。
先来看看结果图(ps:实现功能,美化靠天赋,反正我没什么天赋。)
关于中国式报表,有人喜欢方式一,也有人喜欢方式二,如果喜欢方式三就自己写吧。
数据源用M写的随机数据,共三张表。
1、【周几】
2、【calendar】
3、【data】
4、三张表的M
5、数据源M源码
/*data*/ let D = #table( type table[ date=date ,value=number ] ,List.Transform( {0..364} ,(d)=> { Date.From(Number.From(#date(2018,1,1))+d) ,Number.Round(Number.RandomBetween(1,1000),2) } ) ) in D /*周几*/ let 源 = #table( type table [ ID=Int32.Type ,周几=text ] ,List.Transform( {0..6} ,(d)=> { d , {"一","二","三","四","五","六","日"}{d} } ) ) in 源 /*calendar*/ let D = #date(2018,1,1), N = Number.From(D), C = #table( type table [ date=date ,weeknumber=Int32.Type ,weekday=Int32.Type ] ,List.Transform( {0..364} ,(d)=> let r=Date.From(N+d) in { r , Date.WeekOfYear(r,1) ,Date.DayOfWeek(r,1) } ) ) in C
6、关系
1、周同比
2、日环比
3、result
result := VAR v = FORMAT ( 'calendar'[total], "0.00" ) VAR t = SWITCH ( TRUE (), 'calendar'[周同比] > 0, "同比:▲" & FORMAT ( 'calendar'[周同比], "0%" ), 'calendar'[周同比] < 0, "同比:▼" & FORMAT ( 'calendar'[周同比], "0%" ), "同比:▁" & FORMAT ( 'calendar'[周同比], "0%" ) ) VAR h = SWITCH ( TRUE (), 'calendar'[日环比] > 0, "环比:▲" & FORMAT ( 'calendar'[日环比], "0%" ), 'calendar'[日环比] < 0, "环比:▼" & FORMAT ( 'calendar'[日环比], "0%" ), "环比:▁" & FORMAT ( 'calendar'[日环比], "0%" ) ) RETURN SWITCH ( TRUE (), 'calendar'[周同比] = BLANK () &&'calendar'[日环比] = BLANK (), v, 'calendar'[周同比] = BLANK (), CONCATENATE ( v, "|" & h ), 'calendar'[日环比] = BLANK (), CONCATENATE ( v, "|" & t ), CONCATENATE ( v, "|" & t & "|" & h ) )
1、dax没有什么难度,主要是上周和前一天的筛选上下创建;
2、中国式报表:主要是利用文本连接(度量值:result);
3、本案例中只体现了2018年一年的周,如果需要多年的话,只需要创建weeknumber的索引即可。