Power BI 关于日期显示格式的那些事儿

由于不同国家地区风俗不同,导致使用的日期格式不一样,例如天朝和很多亚洲国家,使用的是年月日格式(YYYMMDD),即2018/01/12,代表2018年1月12日;大部分欧洲国家以及其之前的殖民地使用的是日月年格式(DDMMYYYY),例如英国,法国,澳大利亚,新西兰等,在这种格式下01/12/2018代表2018年12月1日。还有少部分追随美国的非主流国家使用了月日年格式(MMDDYYYY),而在这些国家中01/12/2018代表2018年1月12日,与日月年格式的意义有很大差别。因此,在Power BI中对数据进行处理时要特别留意数据的日期格式。

如果亲要处理的日期数据都是统一的US格式,那恭喜你,基本不需要任何特殊处理,只需要留意一下选项->区域设置中区域导入设置是否选了英语(美国)就行。这个是一个全局控制选项,会控制导入到当前Power BI报表中数据的显示样式。选择美国意味着所有的日期数据都会按照MMDDYYYY的格式进行导入,并且按照MMDDYYYY的样式进行显示。

这里写图片描述

如果处理的数据格式是既有US格式又有UK格式的怎么办?即,可能有两行日期列,一行是MMDDYYYY的格式,另外一行是DDMMYYYY的格式。一般情况下,如果导入区域选择的是美国,当导入这种数据时,Power BI会拼命的按照MMDDYYYY要求对所有日期进行处理,如果它发现有月份数大于12时,就会跑错,认为当前日期数据有问题。

这里写图片描述

显然,按照UK日期DDMMYYYY格式解读的话,Date UK一行表示1月1日,2日,3日和13日,与Date US一列中的日期相同。但是按照US格式解读,这一行就变成了1月1日,2月1日,3月1日和无法解析的13月1日,明显数据意义都发生了变化。要解决该问题,需要把UK日期数据转换成US日期数据。方法是选择Date UK数据列,然后右键,选择更改类型->使用区域设置。这个地方选择日期数据类型,然后区域设置选择英语(英国),目的是告知Power BI当前导入的数据是原始格式是DDMMYYYY,需要转译成选项->区域设置中区域导入设置是英语(美国)使用的MMDDYYYY的格式。
这里写图片描述
这里面需要特别注意,更改UK Date区域设置这一步,必须是在原始数据上进行,即Date UK列下没有任何Error,不能在Date 包含Error的情况下进行,否则Power BI无法正确解析。
这里写图片描述

如果要处理的当前表单所有日期都是UK的,则可以直接更改选项->区域设置中区域导入设置,换成英语(英国)即可。但是注意,无论是那种区域更改,修改的都是Power BI中日期的显示样式,并不会对DAX中的日期函数产生影响。为什么这么说呢,可以看下面这个例子。

把Power BI的区域设置改成英语(英国),这样,当前Power BI文件中所有显示的日期都变成了DDMMYYYY格式。
这里写图片描述
如果用DDMMYYYY格式在这个文件中创建一个1月1日到12月1日的日历,效果是下面这个样子。

Calendar = CALENDAR("1/1/2018","1/12/2018")

这里写图片描述
我们期待的是DAX CALENDAR函数会将输入的1/12/2018解析为2018年12月1日,但实际上DAX函数还是将该日期按照美国MMDDYYYY的格式进行了解读,变成了2018年1月12日。

那么DAX函数是否始终如一的对日期数据按照MMDDYYYY格式进行解读呢,似乎也不是,例如对当前公式进行修改,变为:

Calendar = CALENDAR("1/1/2018","31/12/2018")

此时,生成的日历变成了从1月1日到12月31日,符合UK格式标准。
这里写图片描述

从这个例子中可以看出,其实DAX中对日期的处理并不是完全固定死按照MMDDYYYY的格式进行了解读,但是一旦遇到数据可以符合MMDDYYYY的格式要求,就一定会按照MMDDYYYY的格式进行了解读。因此,为了兼容DDMMYYYY数据,防止DAX对日期格式解读出错,对于上面公式可以使用DATE函数来输入日期。因为DATE函数固定了需要以年月日顺序输入日期,因此可以保证解读日期格式不会出错。

Calendar = CALENDAR(DATE(2018,1,1),DATE(2018,12,1))

这里写图片描述

DATE函数输入日期比较适用于需要使用固定日期所谓参数的表达式。如果是需要动态日期,则可以考虑使用MIN和MAX函数。例如,对于DATEDIFF这个函数,如果按照UK DDMMYYYY格式求1月1日到3日一共间隔多少天,当直接输入日期时,DATEDIFF函数会按照US格式解析,认为求得是1月1日到3月1日的日期间隔,结果是59天。
这里写图片描述

如果用MIN和MAX函数获取当前表单中的最大日期和最小日期,则DATEDIFF函数就能按照DDMMYYYY格式正确计算出日期间隔。

FixDate = DATEDIFF(MIN(Locale[Date UK]),MAX(Locale[Date UK]),DAY)

这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值