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)

这里写图片描述

<think>好的,我需要帮助用户在Power BI中进行日期格式转换。首先,根据用户提供的引用,特别是引用[1]和引用[2],我应该先确认用户提到的具体步骤是否正确。 根据引用[1],用户可以通过PowerQuery更改数据类型为日期。步骤是点击日期时间列的数据类型图标,选择日期,然后添加新步骤。这应该是基本的方法。但用户可能需要更多的细节,比如如何处理不同的日期格式或者遇到错误的情况。 然后引用[2]提到如果没有分隔符,可以使用其他拆分方法,比如按字符数或位置。这可能适用于处理非标准日期格式的情况。例如,如果日期是“20231022”这样的格式,可能需要手动拆分年、月、日部分,再合并成日期类型。 接下来,引用[3]建议参考官方M文档处理特殊情况。比如使用M函数如Date.FromText或Date.From进行转换,或者处理不同区域设置的日期格式问题。这可能在用户遇到复杂转换时有用。 用户可能需要具体的示例,所以我应该提供一个步骤清晰的例子,例如将文本“2023-10-22”转换为日期,或者处理“20231022”这样的格式。同时,需要注意常见的错误,比如区域设置导致的月份和日期颠倒,这时候可能需要使用Locale参数来指定格式。 此外,用户可能不知道如何在PowerQuery中创建自定义列来拆分文本,比如使用“按字符数”拆分,然后组合成日期。例如,从“20231022”中提取前四位作为年,中间两位作为月,最后两位作为日,然后用Date.From函数生成日期。 最后,提醒用户如果遇到问题,可以查阅官方M文档或使用界面操作进行转换。需要确保所有步骤都正确,并且语法无误,比如正确的M函数名称和参数使用。</think>在Power BI中进行日期格式转换,可通过Power Query编辑器实现,以下是具体方法和示例: ### 一、基础转换方法 1. **数据类型转换**: - 进入Power Query编辑器,选中日期列 - 点击列标题左侧的`日期/时间`图标 - 选择`日期`类型,系统自动转换格式[^1] ```powerquery-m // 自动生成的M代码 Table.TransformColumnTypes(源,{{"日期列", type date}}) ``` 2. **界面操作格式转换**: - 右键点击日期列 > 选择`替换值` - 使用`格式`功能直接修改日期显示格式(如yyyy-MM-dd改为dd/MM/yyyy) ### 二、复杂格式处理 当遇到非常规日期格式时(如`20231022`),需分步处理: ```powerquery-m let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 拆分列 = Table.TransformColumns(源, {{"原始列", each Text.Split(_, ""), type list}}), 提取日期 = Table.AddColumn(拆分列, "日期", each Date.From( Text.Combine({Text.Range([原始列],0,4),"-",Text.Range([原始列],4,2),"-",Text.Range([原始列],6,2)}) ), type date) in 提取日期 ``` ### 三、使用M函数精确控制 ```powerquery-m // 带有时区信息的转换(如"2023-10-22T08:00:00+08:00") Date.From( DateTimeZone.ToLocal( DateTimeZone.FromText("2023-10-22T08:00:00+08:00") ) ) // 处理不同区域格式(如"22-10-2023") Date.FromText("22-10-2023", [Format="dd-MM-yyyy", Culture="en-US"]) ``` ### 四、常见问题处理 1. **错误值处理**: ```powerquery-m Table.TransformColumns(源, {{"日期列", each try Date.From(_) otherwise null, type nullable date}}) ``` 2. **混合格式拆分**: 使用`按字符数拆分`功能,配合`转换点检测`(如数字到字母的转换点)[^2]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值