Power BI动态日期轴方法总结

news2024/9/20 10:38:15

趋势,应该是我们做可视化时最熟悉的一个词了,看趋势自然离不开日期,年度趋势,月趋势,周趋势等等。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.jpeg
  • • 打开Tabular Editor新建计算组,这里只是修改了月份数为参数的值

VAR  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 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Months &nbsp; <= &nbsp; 1 &nbsp; && &nbsp; Periods &nbsp; = &nbsp; 0 , &nbsp; 1 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Months &nbsp; > &nbsp; 1 &nbsp; && &nbsp; Months &nbsp; <= &nbsp; 3 &nbsp; && &nbsp; Periods &nbsp; = &nbsp; 1 , &nbsp; 1 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Months &nbsp; > &nbsp; 3 &nbsp; && &nbsp; Months &nbsp; <= &nbsp; 6 &nbsp; && &nbsp; Periods &nbsp; = &nbsp; 2 , &nbsp; 1 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Months &nbsp; > &nbsp; 6 &nbsp; && &nbsp; Months &nbsp; <= &nbsp; 24 &nbsp; && &nbsp; Periods &nbsp; = &nbsp; 3 , &nbsp; 1 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Months &nbsp; > &nbsp; 24 &nbsp; && &nbsp; Periods &nbsp; = &nbsp; 4 , &nbsp; 1 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
&nbsp;&nbsp;&nbsp;&nbsp; )

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

baf5d3d19effb0ae073e68bed9d2fd65.jpeg

看下效果

bcd178dfa0322e99d1f4c43826c3d746.jpeg

总结

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

引用链接

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js--基础

一、Node.js是什么 Node.js is a JavaScript runtime built on Chrome’s V8 JavaScript engine. 1、特性 Node.js 可以解析JS代码&#xff08;没有浏览器安全级别的限制&#xff09;提供很多系统级别的API&#xff0c;如&#xff1a; 文件的读写 (File System)进程的管理 …

每日一个小技巧:1分钟告诉你文字转图片的方法有哪些

在数字时代&#xff0c;信息传递快速便捷&#xff0c;但文字在传递中却显得单调乏味&#xff0c;难以吸引人们的眼球。为了解决这个问题&#xff0c;越来越多的人开始寻找方法将文字转化为图片。文字转图片不仅能够让文字更具视觉冲击力&#xff0c;还能够在社交媒体、广告宣传…

Nginx常见应用场景

文章目录 场景一&#xff1a;代理静态文件场景二&#xff1a;代理服务器 本教程讲述 Nginx 的常见应用场景。内容接上文&#xff1a;Nginx基本配置。 前提&#xff1a;假设我们已经安装好了 Nginx&#xff0c;并启动成功。 场景一&#xff1a;代理静态文件 Nginx 一个常用的功…

Hilt 和协程助力启动框架搭建:解决代码混乱和初始化策略问题

关于Hilt的使用&#xff0c;目前已经比较普及了&#xff0c;想必大家已经知道。今天说的是一个如何利用Hilt来做一个启动框架的故事。 是否经历过大型项目的启动优化&#xff0c;一遍过去无任何效果&#xff0c;第二遍过去好几处报错&#xff0c;第三遍过去启动不了&#xff0…

开放耳机有什么优缺点,列举出几款口碑不错的开放式耳机

开放式耳机是通过骨头振动传递声音&#xff0c;而不是通过耳道或鼓膜&#xff0c;因此它具有许多优势&#xff0c;比如可以在运动过程中保持对环境的感知&#xff0c;并避免对听力造成伤害。随着科技的进步和用户需求的增加&#xff0c;开放式耳机也在不断更新。目前市面上的开…

springboot+nodejs+vue众筹项目管理系统平台系统

筹资人&#xff08;企业&#xff09;&#xff1a; 1&#xff0c;可以后台注册并登录&#xff0c;发布项目情况&#xff0c;众筹项目需要管理员审核通过后才能展现在前台&#xff0c;没有审核或者审核不通过不会在前台展示&#xff1b; 众筹项目包括项目名称&#xff0c;项目分类…

盲目自学网络安全只会成为脚本小子?

前言&#xff1a;我们来看看怎么学才不会成为脚本小子 一&#xff0c;怎么入门&#xff1f; 1、Web 安全相关概念&#xff08;2 周&#xff09; 了解网络安全相关法律法规 熟悉基本概念&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#xff09;。 通过关键字&…

springboot整合flowable的简单使用

内容来自网络整理&#xff0c;文章最下有引用地址&#xff0c;可跳转至相关资源页面。若有侵权请联系删除 环境&#xff1a; mysql5.7.2 springboot 2.3.9.RELEASE flowable 6.7.2 采坑&#xff1a; 1.当前flowable sql需要与引用的pom依赖一致&#xff0c;否则会报library…

管理后台项目-07-菜单管理和动态展示菜单和按钮

目录 1-菜单管理 1.1-菜单管理列表 1.2-添加|修改功能 1.3-删除菜单 2-动态菜单按钮展示 2.1-路由文件的整理 2.2-动态展示不同的路由 1-菜单管理 当用户点击菜单管理的时候&#xff0c;会展示当前所有菜单&#xff0c;树型结构展示...并且可以对菜单进行新增编辑删除操…

倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析

倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析 倾斜摄影超大场景的三维模型在网络发布应用时&#xff0c;常见的问题包括&#xff1a; 1、加载速度慢。由于数据量巨大&#xff0c;网络发布时需要将数据文件分割成多个小文件进行加载&#xff0c;这可能会导致页…

Sonatype Nexus兼容apk格式仓库

Sonatype Nexus兼容apk格式仓库 sonatype/nexus3 当前最新版本&#xff1a;sonatype/nexus3:3.52.0 查看nexus支持的仓库格式 创建一个nexus 容器&#xff1a; docker run -d -p 8081:8081 --name nexus sonatype/nexus3:3.52.0查看启动日志&#xff1a; docker logs nexu…

HTML5画布(图像)

案例1&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title></title><script>window.onloadfunction(){var cdocument.getElementById("myCanvas");var cxt c.getConte…

Vue3 手把手按需引入 Echarts

背景&#xff1a;新项目采用 Vue3 作为前端项目框架&#xff0c;避免不了要使用 echarts&#xff0c;但是在使用的时候&#xff0c;出现了与 Vue2 使用不一样的地方&#xff0c;所以特别记下来&#xff0c;希望给到有需要的同学一些帮助。 下载Echarts依赖 # 自己使用的yarn y…

《Odoo开发者模式必知必会》—— 缘起

Odoo作为业界优秀的开源商务软件&#xff0c;在全球范围内拥有广泛的使用者。在领英国际&#xff0c;可以搜索到全球很多国家都有大量odoo人才需求的招聘信息。在国内&#xff0c;虽然已经有为数不少的企业&#xff0c;他们或者已经使用odoo&#xff0c;或者正在了解odoo&#…

支付宝异步通知说明

如何设置异步通知地址 不同接口接收异步通知设置方式不同&#xff0c;可查看 哪些接口支持触发异步。 设置 notify_url 接收异步 对于支付产生的交易&#xff0c;支付宝会根据原始支付 API 中传入的异步通知地址 notify_url&#xff0c;通过 POST 请求的形式将支付结果作为参…

从零开始学习CTF的完整指南

前言 想要学习CTF却不知从何开始&#xff1f;本文提供了一份完整的指南&#xff0c;从Linux系统基础、网络协议基础、二进制分析、Web安全、杂项题型以及算法与密码学等方面&#xff0c;为零基础小白提供了学习路线和知识点概述。 网络安全 网络安全是 CTF 的基础&#xff0…

还不知道怎么 Mock ,用这 6款工具

以下是几个常用的国外可以mock测试的工具&#xff0c;供参考&#xff1a; MockServer: MockServer 是一个开源的 API mock 测试工具&#xff0c;提供了强大的模拟服务器和 mock 服务功能。MockServer 支持多种语言和格式&#xff0c;包括 Java、.NET、REST、SOAP 等。 WireMoc…

优思学院|做质量管理有七大工具,都是什么?

质量管理七大工具&#xff08;Seven Basic Quality Tools&#xff09;是由日本质量大师石川馨于20世纪50年代首次提出&#xff0c;这些工具被广泛应用于制造业和服务业的质量管理实践中&#xff0c;优思学院认为这七个工具除了是质量人常用的工具之外&#xff0c;也可作为学习六…

OpenGL光照:光照基础

引言 现实世界的光照是极其复杂的&#xff0c;而且会受到诸多因素的影响&#xff0c;这是以目前我们所拥有的处理能力无法模拟的。因此OpenGL的光照仅仅使用了简化的模型并基于对现实的估计来进行模拟&#xff0c;这样处理起来会更容易一些&#xff0c;而且看起来也差不多一样。…

Windows环境下运行StableDiffusion常见问题

目录 常见问题 一、问题1&#xff1a;22.2.2➡23.1.1 Torch is not able to use GPU 解决方案 二、问题2&#xff1a;exit code:128 CLIP did not run sucessfully 解决方案 三、问题3&#xff1a;exit code:128 open-clip did not run sucessfully 解决方案 四、问题4…