新闻动态

行业新闻企业新闻雷火电竞

Power BI动态日期轴方法总结

雷火电竞

趋势,应该是态日我们做可视化时最熟悉的一个词了,看趋势自然离不开日期,年度趋势,月趋势,周趋势等等。Power BI中我们可以借助于计算表,计算组,字段参数来实现动态实时轴的期轴效果 。

计算表实现动态日期切换

这个方法在字段参数出来后是总结有些过时的,基本可以淘汰掉了,但是实现的思路还是可以借鉴的,这也涉及到了另一个主题,学习的本质,技术是一个在更新迭代的,但是一些思想是不变的 。掌握了底层逻辑就能以不变应万变 。态日

废话不多说,来回顾下具体怎么实现。期轴

就如下面这样,实际使用时还应加入相应的排序字段

区间区间类型日期2023年2023-04-242023年2023-04-252023Q2季2023-04-242023Q2季2023-04-25

转换为计算表如下,代码有些长,其实类似的代码重复写了几遍而已

DatesPeriod   =   VAR DT  =   'Dates' VAR  YearLevel   =     ADDCOLUMNS  (         SELECTCOLUMNS  (  DT ,   "区间" ,   "Y"   &  FORMAT  (   [ Year ],   "0"   ),   "日期" ,   [ Date ]   ),          "区间类型" ,   "年" ,          "区间类型OrderBy" ,   1 ,          "区间OrderBy" ,  YEAR  (   [日期]   )      ) VAR  QuarterLevel   =     ADDCOLUMNS  (         SELECTCOLUMNS  (             DT ,              "区间" ,                  "Y"   &  FORMAT  (   [ Year ],   "0"   )   &   "Q"                      &  FORMAT  (   [ Quarter ],   "0"   ),              "日期" ,   [ Date ]          ),          "区间类型" ,   "季" ,          "区间类型OrderBy" ,   2 ,          "区间OrderBy" ,  FORMAT  (   [日期],   "YYYY\QQ"   )      ) VAR  MonthLevel   =     ADDCOLUMNS  (         SELECTCOLUMNS  (             DT ,              "区间" ,                  "Y"   &  FORMAT  (   [ Year ],   "0"   )   &   "M"                      &  FORMAT  (   [ Month ],   "0"   ),              "日期" ,   [ Date ]          ),          "区间类型" ,   "月" ,          "区间类型OrderBy" ,   3 ,          "区间OrderBy" ,  FORMAT  (   [日期],   "YYYY\Mmm"   )      ) VAR  DateLevel   =     ADDCOLUMNS  (         SELECTCOLUMNS  (  DT ,   "区间" ,  FORMAT  (   [ Date ],   "yyyy/M/dd"   ),   "日期" ,   [ Date ]   ),          "区间类型" ,   "日" ,          "区间类型OrderBy" ,   4 ,          "区间OrderBy" ,   [日期]      ) RETURN     UNION  (   YearLevel ,   QuarterLevel ,   MonthLevel ,    DateLevel   )

建立关系

f2420aff7e4ba6fd1d7a6123cde938b2.jpeg

效果如下

0f9ab465c7daf81a19d6eccb16772eb5.jpeg

计算组实现动态日期切换

现在需求又变了,不需要按年季月这样来切换日期轴,而是根据参数的选择来切换,比如最近3个月,最近6个月,12个月的趋势。在计算组刚出来没多久sqlbi就给出了解决方案:

Show previous 6 months of data from single slicer selection - SQLBI --- 显示来自单个切片器选择的态日前 6 个月的数据 - SQLBI[1]

Period   =  GENERATESERIES ( 3 ,   36 ,   1 ) 430f2173a7c3c6d5591bd94af8095ad0.jpegVAR  NumOfMonths   =   -[ Months   Value ] VAR  ReferenceDate   =  MAX  (   'Dates' [ Date ]   ) VAR  Previous   =  DATESINPERIOD  (   'DatesPeriod2' [ Date ],   ReferenceDate ,   NumOfMonths ,  MONTH  ) VAR  Result   =     CALCULATE  (         SELECTEDMEASURE  (),         REMOVEFILTERS  (   'Dates'   ),         KEEPFILTERS  (   Previous   ),         USERELATIONSHIP  (   'DatesPeriod2' [ Date ],   'Dates' [ Date ]   )      ) RETURN  Result 3600a29200dabe878df2bd492987798d.jpeg

字段参数实现动态日期轴

字段参数真的是微软去年至今的更新中最好用的功能,比如日期轴实现动态的年季月切换,就不再需要写那么多代码来组合一张新表了,只需要在新建参数的时候选择我们需要的列即可 。

fda422da72e4c1985174b2bfb0e17663.jpeg

接下来看下效果

6376047f21220d1496e7eef2955b4e78.jpeg

细心的期轴肯定已经发现了,图中x轴的顺序的错乱的,我们来手动修改下排序,当我们切换为其他类别时,再切换回来排序又乱了。 。总结 。态日

d251b46aeca0d548872b9a433187bcdc.jpeg

这是期轴微软的bug,在去年时就已经有用户提交给微软了,一年快过去了。。总结。态日

这个bug修复起来,也相对简单,给我们字段参数中用到列都加一个排序列,比如年份列,可以复制一份然后对原始的期轴年份列排序。

069b83db5fa5de8dd144598a76930aec.jpeg

再来看下效果,总结排序正常了。

6a8689d68379eb6be9b1368298daa8b8.jpeg

字段参数实现动态日期轴进阶

现在需求再进一步,时间轴要根据所选的时间范围自动切换,比如选择的范围大于36个月,就显示年趋势,范围小于30天就显示为日趋势 。

实现起来也相对简单,只需要新建一个度量来判断就可以了,为了简单起见,这里对月的判断直接是除以30,如果筛选器是月的话,也可以直接统计月份数 。

Flag   =   VAR  Months   =  COUNT ( Dates [ Date ])/ 30 VAR  Periods   =  SELECTEDVALUE ( '动态日期轴 参数' [ Order ]) RETURN  SWITCH (     TRUE ,          Months   <=   1   &&   Periods   =   0 ,   1 ,          Months   >   1   &&   Months   <=   3   &&   Periods   =   1 ,   1 ,          Months   >   3   &&   Months   <=   6   &&   Periods   =   2 ,   1 ,          Months   >   6   &&   Months   <=   24   &&   Periods   =   3 ,   1 ,          Months   >   24   &&   Periods   =   4 ,   1 ,          0      )

之后在图表上加一个筛选条件,是对字段参数中的排序列取top1

baf5d3d19effb0ae073e68bed9d2fd65.jpeg

看下效果

bcd178dfa0322e99d1f4c43826c3d746.jpeg

总结

计算组和字段参数无疑是Power BI中最强大的两个功能,借助于这两个功能可以实现很多复杂的效果,只不过过程中还是需要注意是否还有一些小Bug,毕竟微软改起bug来真的很佛。

引用链接

[1] Show previous 6 months of data from single slicer selection - SQLBI --- 显示来自单个切片器选择的前 6 个月的数据 - SQLBI: https://www.sqlbi.com/articles/show-previous-6-months-of-data-from-single-slicer-selection/