Power BI条件数据转换:空格分隔文本分列列数不匹配问题求解
Power BI 不规则空格分隔文本适配方案
问题根因定位
样例行中,日值为个位数时,月份字段(如
May)与日期值(如4)之间的双空格,被默认的单空格拆分逻辑识别为两个独立分隔符,中间拆出无内容的空列,最终导致同一文件的行拆分后出现15列、16列的列数差异。
方案1:通用连续空格清理(适配当前场景)
适用于文本所有字段均以单空格分隔、不存在字段内部包含双空格的场景,操作步骤:
- 导入文本文件后,停留在Power Query的原始行文本表(即未做任何拆分的初始步骤,默认列为
Column1),新增自定义转换步骤,将所有连续多空格压缩为单个空格,参考M代码:= Table.TransformColumns( 已导入的文本源, { { "Column1", each Text.Trim( List.Accumulate( Text.Split(_, " "), "", (state, current) => if current <> "" then state & " " & current else state ) ), type text } } ) - 清理完成后,所有行内的连续空格都会被替换为单个空格,原双空格位置拆分后不会再产生空列。
- 选择清理后的文本列,按单空格完成拆分,所有行的列数将完全统一。
方案2:固定位置精准修正(适配存在字段内部带空格的场景)
针对双空格异常位置固定出现在第三字段(日字段)前、后续字段本身可能包含双空格不能全局替换的场景,精准定位修正:
- 拆分逻辑前,对原始行文本按固定层级拆分前置字段:
- 第一层级拆分:从行首按第一个空格拆分,拿到第一字段(周值,如
Tue),剩余内容去除开头所有空格 - 第二层级拆分:从剩余内容的开头按第一个空格拆分,拿到第二字段(月份值,如
May),剩余内容去除开头所有空格(这一步会自动清掉月份和个位数日期之间的双空格) - 将三个部分(周值、月份值、清理后的剩余内容)重新按单空格拼接为完整行文本
- 第一层级拆分:从行首按第一个空格拆分,拿到第一字段(周值,如
- 拼接完成的文本仅修正前置字段的双空格异常,不会改动后续内容中可能存在的合法双空格,再执行统一拆分操作即可。
兜底校验步骤
为避免后续数据加工时出现列错位,拆分完成后新增自定义列校验逻辑:
- 校验列公式(判断拆分后的列中是否存在空值列):
= List.Contains(Record.FieldValues(_), "") - 若校验列返回
true,说明仍存在未清理的连续空格,可对应调整前述清理逻辑。
内容的提问来源于stack exchange,提问作者vallemedef
相关产品推荐
相关产品推荐

