Power Query技术求助:将DDMM格式日期转为MMDD格式(SMSS数据源)
Power Query日期修正与IF语句正确用法
问题根源
你原代码的核心错误是:在Table.AddColumn的each上下文(逐行计算逻辑)中调用了表级函数Table.TransformColumnTypes——这个函数用于处理整个表,不能在单一行的计算里使用,直接导致类型不匹配报错。
Power Query IF语句正确语法
在逐行计算场景下,IF语句的标准格式为:
if [判断条件] then [满足条件时的单一返回值] else [不满足条件时的单一返回值]
关键注意点:
- 用
[列名]引用当前行的字段 then和else必须返回相同数据类型的值(比如都是日期),避免类型冲突
日期修正实现步骤
结合你已有的Text Before Delimiter列判断错误行,以下是两种适配场景的解决方案:
场景1:Date列为文本格式(错误格式为MM/DD/YYYY,需转为DD/MM/YYYY对应的日期)
// 先将Date列转为文本(若已是文本可跳过此步) #"Converted to Text" = Table.TransformColumnTypes(#"Removed Columns1", {{"Date", type text}}), // 添加修正后的日期列 #"Added Corrected Date" = Table.AddColumn(#"Converted to Text", "Corrected Date", each if [Text Before Delimiter] <> "1" then let // 拆分错误日期的月、日、年部分 dateParts = Text.Split([Date], "/"), wrongMonth = dateParts{0}, wrongDay = dateParts{1}, year = dateParts{2}, // 重新组合为正确的日/月/年格式文本 correctDateText = wrongDay & "/" & wrongMonth & "/" & year in // 按英国区域解析为日期(日/月/年) Date.FromText(correctDateText, [Culture="en-GB"]) else // 正确行直接按日/月/年解析 Date.FromText([Date], [Culture="en-GB"]) )
场景2:Date列已被错误解析为日期(比如2/01/2022被识别为2022年1月2日)
#"Added Corrected Date" = Table.AddColumn(#"Removed Columns1", "Corrected Date", each if [Text Before Delimiter] <> "1" then let // 将错误日期转回MM/DD/YYYY格式的文本 wrongDateText = Date.ToText([Date], "MM/dd/yyyy", "en-US"), dateParts = Text.Split(wrongDateText, "/"), // 交换日和月后重新组合 correctDateText = dateParts{1} & "/" & dateParts{0} & "/" & dateParts{2} in Date.FromText(correctDateText, [Culture="en-GB"]) else // 正确行保留原日期 [Date] )
后续优化
修正完成后,你可以:
- 删除原
Date列和辅助的Text Before Delimiter列 - 将
Corrected Date列重命名为Date - 确保最终日期列类型为
date,方便后续按月份分析
内容的提问来源于stack exchange,提问作者fifth-essence
相关产品推荐
相关产品推荐

