PowerQuery中Table.Sort导致原有非空字段变为null的问题求助
Power Query排序后部分非空字段变为Null的问题解决方法
问题描述
在PowerQuery中执行代码时,前序步骤均正常,但执行#"Sorted Rows"步骤后,结果集中部分原本非空的字段变为Null。移除该排序步骤后可获取完整数据,但业务需求必须对数据排序。排序仅应改变数据顺序,不应修改数据本身,怀疑这是Power Query的Bug。
原代码
let Source = #"MyDB", _SomeTable = Source{[Schema="",Item="SomeTable"]}[Data], #"Filtered Rows" = Table.SelectRows(_SomeTable, each ([DateField3] = null)), #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Summary"}), #"Merged Queries" = Table.NestedJoin(#"Removed Columns", {"RelatedData"}, RelatedData, {"ID"}, "RelatedData.1", JoinKind.LeftOuter), #"Removed Columns1" = Table.RemoveColumns(#"Merged Queries",{"RelatedData"}), #"Expanded QueryFrom.1" = Table.ExpandTableColumn(#"Removed Columns1", "RelatedData.1", {"RelatedData"}, {"RelatedData"}), #"Reordered Columns" = Table.ReorderColumns(#"Expanded RelatedData.1",{"ID", "FK1", "FK2", "RelatedData", "DateField1", "DateField2", "DateField3"}), #"Sorted Rows" = Table.Sort(#"Reordered Columns",{{"DateField2", Order.Ascending}}) in #"Sorted Rows"
可行解决方法
- 统一排序字段的数据类型:确保
DateField2为单一数据类型(如日期/时间型),混合类型可能导致Power Query内部处理异常。可在排序前添加类型转换步骤:#"Standardize Date Type" = Table.TransformColumns(#"Reordered Columns", {{"DateField2", each DateTime.From(_), type datetime}}), #"Sorted Rows" = Table.Sort(#"Standardize Date Type",{{"DateField2", Order.Ascending}}) - 用索引列间接排序:通过添加临时索引列绕开可能的排序Bug,排序后再移除索引:
#"Added Index" = Table.AddIndexColumn(#"Reordered Columns", "TempIndex", 0, 1, Int64.Type), #"Sorted by Date" = Table.Sort(#"Added Index", {{"DateField2", Order.Ascending}}), #"Removed Temp Index" = Table.RemoveColumns(#"Sorted by Date", {"TempIndex"}) - 清除查询缓存:在Power Query编辑器中点击「刷新预览」,或关闭并重新打开查询,消除缓存引发的异常。
- 检查表扩展步骤:确认
#"Expanded QueryFrom.1"步骤中字段扩展完全正确,无遗漏或错误映射——部分字段的Null可能是扩展时的隐性问题,排序触发了问题显现。 - 升级Power Query版本:若使用的是旧版Excel/Power BI Desktop,升级到最新版本可修复已知的排序相关Bug。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

