zoukankan      html  css  js  c++  java
  • 如何分秒必争--浅淡时间切片器

    ​不知日常工作中,是否有人跟小悦一样,遇到过需要将时间筛选细化至时分的问题,例如,货运/快递行业,需要掌握时点的发运信息,如:2019/6/1 13:40:00到2019/6/3 18:30:00,以了解时点的发运高峰等信息。鉴于Power BI目前大致的切片器都仅只显示日期的筛选,小悦这次为大家分享两种解决方法。

    第一种,DAX写出时间区域

    在这种方法中,我们需要用DAX分别生成开始时间(日期+时点)和结束时间(日期+时点),以使用它来与我们的业务日期(日期/时点)进行对比。

    首先开始时间表和结束时间表,分别由日期表和不同的小时表(开始和结束)和分钟表(开始和结束)内的数据进行拼结,我们先随机生成开始的小时和分钟数,公式如下:

    小时(开始)=GENERATESERIES(0,23,1)

    分钟(开始)= GENERATESERIES(0,59,1)

    以同样的方法来生成结束的小时和分钟表。

    然后,我们以业务表的开始日期和结束日期为坐标,生成一个日期表(开始),公式如下:

    日期表(开始)=CALENDAR(MIN(‘业务表’[业务日期]),MAX(‘业务表’[业务日期]))

    并且创建一列,将它转化为文本列,如果有需要,可以用YEAR,MONTH等函数取出年份,月份等信息。

    再以同样的方式来创建日期表(结束)。

    当表格都创建完成后,现在让我们来分别用(开始)的表格们创建完整的日期时间计算字符吧;

    '时 开始'[开始时值]= SELECTEDVALUE('时 开始'[Hou])
    '分 开始'[开始分值]= SELECTEDVALUE('时 结束'[Hou])

    开始日期= MIN('日期表 开始'[日期文本])&" "&FORMAT(TIME('时 开始'[开始时值],'分 开始'[开始分值],0),"HH:mm:SS")

    结束日期用同样的方式,将结束表格中的日期与时间作文本拼接。

    接下来,我们回到主界面,在画布中拖拉生成切片器,这里,要分别用(开始)表格和(结束)表格生成两个类型切片器,首先,我们来看开始时间的切片器。

    我们先将开始日期表的[DATE]拉入切片器字段,因为我们不是在这里来筛选日期区间,所以选择“之后”这种单日期选择模式,再继续加入两个切片器,将时(开始)表中的小时值和分(开始)表中的分值拉入字段内;最后开成这样的切片界面。

    在完成开始时间的切片器制作后,请继续以同样的方式,完成结束时间的切片器制作。

    当开始时间和结束时间的切片器完成后,我们就可以来创建计算度量值了,比如,我们想对时间区域内的订单数进行计数,以确定在具体的多少小时内,各车队分别完成了多少单,可以完成如下计算公式:

    订单数 = CALCULATE(COUNTROWS('DM_T_FYD'),FILTER('DM_T_FYD',FORMAT('DM_T_FYD'[出发录入时间],"YYYY/MM/DD HH:mm:SS")>='日期表 开始'[开始时间]&&FORMAT('DM_T_FYD'[出发录入时间],"YYYY/MM/DD HH:mm:SS")<='日期表 结束'[结束时间]))

    因为我们的日期表(开始/结束)中的[开始时间]和[结束时间]是文本拼接,它的数据类型为文本,所以请注意,在用业务表中定义的业务计算时间来与之对比时,一定事先进行格式的转化,将其转化为文本再进行对比。在筛选器中,我们将出发日期在开始时间和结束时间之间的数据行筛选出来,再进行计数运算。

    最后,得到我们需要的值,在切片器中,可以任意填入开始/结束日期,以及与之对应的时点。

    而为了验证切片器的时间设置,与日期表的开始时间/结束时间,确实一致,我们可以拖放两个卡片图来进行确定。在日常操作中,这并非必要步骤。

    关于用DAX解决时点粒度的时间切片问题,以上便是所有内容了。

    现在,让我们来看下;

    第二种方法:Time Brush Slicer

    我们先从市场导入Time Brush,并在可视化面板中选择它,如果我们对这个对象并不熟悉,我们可以在示例中先来了解它。

    示例文件中,你会发现以下提示

    1. 在时间字段中,最好不要用时间层次结构,而是使用日期时间的时间戳。就这意味着,在拖放好时间字段后,需要显式取消选择时间层次。

    2. 预先通过时间戳生成自己所需要时间粒度(分,时,日,周),Time Brush本身无法完成聚合。

    3. 必须在值字段中添加一列数值列(或计算数值列)以便得到一个可选择的时间区间图。

    4. 通过它来过滤其它可视化对象,但是一定要注意,是通过哪个来过滤哪个对象,不要出现相互过滤的情况。

    5. 默认情况下,如果另一个可视化对象对Time Brush形成过滤交互,那么它也会清除掉Time Brush所选择的时间区域。

    当看完这些提示,让我们来做一次总结,Time Brush其实作为一个可视化对象,通过交互作用,对其它可视化对象起到时间粒度的过滤作用,所以,我们首先需要将放置其字段面板中的时间,进行时间粒度的细化(时,分),然后,需要在值字段中,拉放一个数值字段,最后,在需要受时间切片器影响,将时间细化到(时,分)的可视化对象,在选择Time Brush的情况下,将交互模式调整到过滤,注意不要出现相互过滤。操作如下:

    首先,我们选择一个时间切片器,并将我们的业务日期拖放进字段。接下来,我们选择Time Brush,同样,将业务日期(带时点)拖放至“Date”,并拖放一个数值列进“With Values”.因为我们并不在意这个数值,所以随意拖放订单进行计数。

    完成后,会生成如下图所示的可视化对象。在这里,时间切片(日期)对它进行影响,它仅仅显示我们日期所选区间内的日期/时间区间轴,但是粒度却会细化至我们拖放进去的“业务时间”同样的粒度。

    当我们将鼠标悬停在创建的Time Brush对象上时,会发现会出现一个黑十字图标,这里,我们通过拖拉,来在该时间区间内,选择我们具体所需要时点区间。选择好的时间区间,会形成一片阴影面积,就便是我们在具体日期的时间区间内,所具体选择的时点区域。

     最后,我们再创建一个车队的订单计数表格。然后记得通过交互设计,来选择谁对谁进行筛选。

    完成以上步骤后,就可以通过选择不同时点区域,来对表格的统计时点粒度进行控制。

    以上,便是第二种方式的分享,希望在工作中遇到此问题的小伙伴,能够有所收获,从而解决自己的问题。也希望,如果有了解其它方法的小伙伴,在留言中与我们共享知识哦。

    技术交流

    1.Power BI免费下载:http://www.yeacer.com/

        Microsoft Power BI Desktop中文最新版:下载地址

    2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。 

       Power Data技术交流群:702966126 (验证注明:博客园Power BI) 

       更多精彩内容请关注微信公众号:悦策PowerBI          


    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/ 
    Fancy
  • 相关阅读:
    idea jsp无法加载<c:foreach>循环遍历数据
    java POI读取Excel文件
    Javaweb中请求的资源[/Servlet]不可用解决方案
    大作业第一阶段冲刺(一)
    hive中sql左外连接查询列值为null
    关于ECharts在jsp页面无法显示的问题
    echarts通过ajax实现数据加载
    读书笔记
    解决:[Err] 1064
    idea启动Tomcat报错Artifact testdemo1:war exploded: Error during artifact deployment. See server log for details.问题解决
  • 原文地址:https://www.cnblogs.com/yeacer/p/11095735.html
Copyright © 2011-2022 走看看