Excel PowerQuery(或dax也一样完美) – 添加具有唯一ID的列

我有一个表(格式为表)的input。 我想添加一个唯一的ID列到我的表。

约束:

  • 它不应该使用任何其他列

  • 它应该是常数和稳定的,这意味着插入一个新的行不会改变任何行ID,而只是增加一个新的行。

从另一列的值计算出来的东西没有用,因为会出现拼写错误。 所以改变ID将意味着在连接到这个的其他表中的数据丢失。

在查询编辑器中简单地添加索引是没有用的,因为中间会插入行,并且在此操作中重新计算id

我也打开任何VBA解决scheme。 我试图编写一个自定义函数,如果没有ID,就会在同一行的“rowID”列中添加一个新的ID,但是我失败了,从表中调用的函数中引用了这个单元格。

问题在图像中

我的build议是使用自引用查询。

查询“数据”下面导入Excel表格“数据”,并输出到Excel表格“数据”。

为了创build这样一个查询,首先创build一个查询“数据”,导入一些Excel表(比如说表1),运行查询,以便创build表“数据”。 现在,您可以将查询源从Table1调整为Data,并在Excel中维护此表(为新行留下空白ID),然后运行查询以生成新的ID。

否则,查询应该是非常简单的; 如果没有:让我知道你需要额外的解释。

let Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content], Typed = Table.TransformColumnTypes(Source,{{"Col1", Int64.Type}, {"Col2", type text}, {"ID", Int64.Type}}), MaxID = List.Max(Typed[ID]), OriginalSort = Table.AddIndexColumn(Typed, "OriginalSort",1,1), OldRecords = Table.SelectRows(OriginalSort, each ([ID] <> null)), NewRecords = Table.SelectRows(OriginalSort, each ([ID] = null)), RemovedNullIDs = Table.RemoveColumns(NewRecords,{"ID"}), NewIDs = Table.AddIndexColumn(RemovedNullIDs, "ID", MaxID + 1, 1), NewTable = OldRecords & NewIDs, OriginalSortRestored = Table.Sort(NewTable,{{"OriginalSort", Order.Ascending}}), RemovedOriginalSort = Table.RemoveColumns(OriginalSortRestored,{"OriginalSort"}) in RemovedOriginalSort