DAX中与时间相关的数据处理

时间是数据分析中经常使用的条件,通常情况下在DAX中对时间列有以下几种常见处理情况。

将数字列转换成时间列
有些原始数据对时间的存储采用了纯数字形式,例如用20170122表示2017年1月22日。但是采用这种存储方式的数据列在导入到Power BI中会被认为是整数类型,将无法自动转换成日期格式,就不能做时间相关运算。
这里写图片描述
要解决该问题,有两种思路,一种是在数字形式的日期上添加反斜杠“/”,将年月日分开。例如将20170122变成2017/02/22,之后就能被Power BI自动识别转换成日期格式了。
转换方式可以用一下DAX完成:

DateFormat = LEFT(Store[Date],4)&"/"&MID(Store[Date],5,2)&"/"&RIGHT(Store[Date],2)

这里写图片描述

另外一种方式是调用DATE函数,直接将数字类型转换成日期时间类型。

DateTime = DATE(INT(LEFT(Store[Date],4)),INT(MID(Store[Date],5,2)),INT(RIGHT(Store[Date],2)))

这里写图片描述
基于表单日期列创建日历
在用DAX做很多时间相关的数据分析时都需要一个单独的日历表单来作为分析基准。这个日历表需要满足以下条件:

  1. 必须有一个日期列
  2. 这个日期列中的日期范围至少要包含所有原始表单中涉及到的时间,并且必须是连续完整的,并且没有重复数据。

创建表单的方式有很多,之前介绍了用M语言创建自增长日历,还可以用下面DAX公式基于当前表中的日期列的最小和最大值来创建日历。

Table = CALENDAR(MIN(Project[FinishTime]),MAX(Project[FinishTime]))

这里写图片描述

如果想用DAX做一个自增长日历,则可以使用NOW函数

Table = CALENDAR(DATE(2018,1,1),NOW())

这里写图片描述

将日期列做拆分
有的时候根据需求,需要对于日期列其拆分成3或者4列来单独的存储年份,季度,月份以及星期。拆分的方法也很简单,调用FORMAT函数就可以。例如:

Year = FORMAT('Table'[Date],"YYYY")
Quarter = FORMAT('Table'[Date],"Q")
Month = FORMAT('Table'[Date],"MMMM")
Weekday = FORMAT('Table'[Date],"DDDD")

这其中,如果月份位置使用的是FORMAT(‘Table’[Date],”MM”)则可以获得数字类型的月份,同样的,如果星期部分使用的是”DD”则获得的是数字类型的日期。

这里写图片描述

需要注意的是,拆分后的月份还有星期如果是文本类型,当直接用这类数据创建表单时Power BI会默认按照字母顺序排序。要解决该问题,创建一个数字类型的排序列。例如对于月份列的排序问题可以按照以下方法解决。创建一个数字类型的月份做完排序使用。

MonthOrder = FORMAT('Table'[Date],"M")

之后再选择文本类型的月份,然后设置以数字类型的月份作为排序准则,即可解决该问题。

这里写图片描述

在Power BI最近release的版本中默认开启了“在字段列表中将日期显示为层次结构”功能。该功能将日期类型列在后台转换拆分成了一个表单单独存储,并提供了年份,季度,月份以及日期的层次结构,可以直接用了创建表单,而不再需要单独对数据进行拆分。可以方便的利用该功能做日期相关分析处理。

这里写图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值