You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power Query中仅排序非空Date单元格并保留空白位置?

在Power Query中实现仅对Date列非空单元格升序排序并保留空白位置的方法

步骤1:导入数据并添加原始索引列

  • 将Excel表格导入Power Query编辑器(数据选项卡→从表格/范围)。
  • 添加自定义索引列:点击「添加列」→「索引列」→「从0开始」(或从1开始,只要能标记原始行位置即可),命名为OriginalIndex。

步骤2:拆分表格为空白行与非空白行

  • 添加自定义列IsDateEmpty,公式根据Date列的类型选择:
    • 如果Date是日期类型:
      = [Date] = null
      
    • 如果Date是文本类型:
      = [Date] = null or [Date] = ""
      
  • 筛选IsDateEmpty为true,将这些行另存为查询BlankRows;筛选IsDateEmpty为false,另存为查询NonBlankRows。

步骤3:对非空白行按Date列升序排序

  • 在NonBlankRows查询中,选中Date列,点击工具栏的「升序排序」按钮,完成非空Date的排序。

步骤4:重新合并表格并恢复原始空白行位置

  • 创建新的空白查询,使用以下M语言代码合并两个查询,按原始索引恢复结构:
    let
        // 获取所有原始索引值并排序
        AllIndexes = List.Sort(List.Distinct(BlankRows[OriginalIndex] & NonBlankRows[OriginalIndex])),
        // 创建基于原始索引的空表
        ReconstructedTable = Table.FromList(AllIndexes, Splitter.SplitByNothing(), {"OriginalIndex"}, null, ExtraValues.Error),
        // 左连接空白行数据
        MergedBlank = Table.NestedJoin(ReconstructedTable, {"OriginalIndex"}, BlankRows, {"OriginalIndex"}, "BlankRows", JoinKind.LeftOuter),
        // 左连接非空白行数据
        MergedNonBlank = Table.NestedJoin(MergedBlank, {"OriginalIndex"}, NonBlankRows, {"OriginalIndex"}, "NonBlankRows", JoinKind.LeftOuter),
        // 提取Date列值:优先取非空白行,空白行保留原空值
        AddDateColumn = Table.AddColumn(MergedNonBlank, "Date", each if [NonBlankRows] <> null then Table.First([NonBlankRows])[Date] else Table.First([BlankRows])[Date]),
        // 提取Book Title列值:逻辑同Date列
        AddBookTitleColumn = Table.AddColumn(AddDateColumn, "Book Title", each if [NonBlankRows] <> null then Table.First([NonBlankRows])[Book Title] else Table.First([BlankRows])[Book Title]),
        // 移除所有辅助列
        CleanedTable = Table.RemoveColumns(AddBookTitleColumn, {"OriginalIndex", "BlankRows", "NonBlankRows"})
    in
        CleanedTable
    
  • 运行代码后,即可得到Date列非空单元格已升序排序、空白行位置与原始表格完全一致的结果。

简化替代方案(适用于空白行仅作分隔的场景)

如果空白行只是用来分隔不同日期的书籍标题,可采用更简洁的分组排序方式:

  1. 选中Date列,点击「转换」→「填充」→「向下」,得到GroupDate列(非空Date会填充到下方空白行)。
  2. 按GroupDate列升序排序,同时保留每组内的原始行顺序(Book Title的原有顺序不受影响)。
  3. 选中GroupDate列,添加条件列:当原Date列为空时,将GroupDate设回空值,最终恢复原始空白状态。

内容的提问来源于stack exchange,提问作者maliebina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:15:14