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

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

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

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

DAX中与时间相关的数据处理_第2张图片

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

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

DAX中与时间相关的数据处理_第3张图片
基于表单日期列创建日历
在用DAX做很多时间相关的数据分析时都需要一个单独的日历表单来作为分析基准。这个日历表需要满足以下条件:

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

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

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

DAX中与时间相关的数据处理_第4张图片

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

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

DAX中与时间相关的数据处理_第5张图片

将日期列做拆分
有的时候根据需求,需要对于日期列其拆分成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”则获得的是数字类型的日期。

DAX中与时间相关的数据处理_第6张图片

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

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

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

DAX中与时间相关的数据处理_第7张图片

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

DAX中与时间相关的数据处理_第8张图片

你可能感兴趣的:(PowerBI,Power,BI玩具箱)