第一种,DAX写出时间区域
在这种方法中,我们需要用DAX分别生成开始时间(日期+时点)和结束时间(日期+时点),以使用它来与我们的业务日期(日期/时点)进行对比。
首先开始时间表和结束时间表,分别由日期表和不同的小时表(开始和结束)和分钟表(开始和结束)内的数据进行拼结,我们先随机生成开始的小时和分钟数,公式如下:
小时(开始)=GENERATESERIES(0,23,1)
分钟(开始)= GENERATESERIES(0,59,1)
以同样的方法来生成结束的小时和分钟表。
然后,我们以业务表的开始日期和结束日期为坐标,生成一个日期表(开始),公式如下:
日期表(开始)=CALENDAR(MIN(‘业务表’[业务日期]),MAX(‘业务表’[业务日期]))
并且创建一列,将它转化为文本列,如果有需要,可以用YEAR,MONTH等函数取出年份,月份等信息。
再以同样的方式来创建日期表(结束)。
当表格都创建完成后,现在让我们来分别用(开始)的表格们创建完整的日期时间计算字符吧;
开始日期= 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对象上时,会发现会出现一个黑十字图标,这里,我们通过拖拉,来在该时间区间内,选择我们具体所需要时点区间。选择好的时间区间,会形成一片阴影面积,就便是我们在具体日期的时间区间内,所具体选择的时点区域。
最后,我们再创建一个车队的订单计数表格。然后记得通过交互设计,来选择谁对谁进行筛选。
完成以上步骤后,就可以通过选择不同时点区域,来对表格的统计时点粒度进行控制。