我想知道如何在幂查询中为值添加唯一标识符。我不确定我的解释是否正确,但故事是这样的。 在正常的excel过程中,我将按其值对列进行排序,因此,如果存在多个具有相同值的单元格,则它将在第一个实例中放置一个标识符。例如,我们的数据如下:
OK
我先排序,然后在B列中使用以下公式:
+---------------+
| A |
+---------------+
| Column Header |
| 5 |
| 5 |
| 6 |
| 7 |
| 7 |
+---------------+
这将导致
=if(A2=A1;"";"Unique")
在这里,我可以使用“ Unique”或任何字符串作为标识符,但是我只想知道如何在超级查询中执行相同的操作。我会很感激的。 BR
+---------------+--------+
| A | B |
+---------------+--------+
| Column Header | |
| 5 | Unique |
| 5 | |
| 6 | Unique |
| 7 | Unique |
| 7 | |
+---------------+--------+
列具有我要在第一个实例中放置唯一标识符的值:
答案 0 :(得分:0)
假设您已经对表进行了相应的排序,请首先添加索引列:
#"Added Index" = Table.AddIndexColumn(PriorStep, "Index", 0, 1),
然后,您可以添加一个自定义列,根据索引值将每一行与上一行进行比较:
#"Added Unique" = Table.AddColumn(#"Added Index", "Unique", each if [Index] = 0 then "Unique" else if #"Added Index"{[Index]}[Header] <> #"Added Index"{[Index] - 1}[Header] then "Unique" else null),
最后,删除“索引”列:
#"Removed Columns" = Table.RemoveColumns(#"Added Unique",{"Index"})
或者:您可能希望在未排序的表中找到值的第一个匹配项-这种方法可以做到这一点(当然,对排序表仍然有效):
#"Added Index" = Table.AddIndexColumn(PriorStep, "Index", 0, 1),
#"Grouped Rows" = Table.Group(#"Added Index", {"Header"}, {{"MinIndex", each List.Min([Index]), type number}}),
#"Merged Queries" = Table.NestedJoin(#"Added Index",{"Header", "Index"},#"Grouped Rows",{"Header", "MinIndex"},"Group",JoinKind.LeftOuter),
#"Added First Occurrence" = Table.AddColumn(#"Merged Queries", "First Occurrence", each if Table.IsEmpty([Group]) then null else "First"),
#"Removed Columns" = Table.RemoveColumns(#"Added First Occurrence",{"Index", "Group"})
答案 1 :(得分:0)
这是另一种方式:
我按照您所描述的那样带入表格,对其进行排序,分组,然后使用List.ReplaceRange将每个分组的第一项更改为“唯一”。然后,将列表扩展到新行。它给了我这个:
然后我删除AllData列:
代码如下:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}}),
#"Sorted Rows" = Table.Sort(#"Changed Type",{{"Column1", Order.Ascending}}),
#"Grouped Rows" = Table.Group(#"Sorted Rows", {"Column1"}, {{"AllData", each _, type table}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each List.ReplaceRange([AllData][Column1],0,1,{"Unique"})),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"AllData"})
in
#"Removed Columns"
答案 2 :(得分:0)
另一种解决方案,也许更容易,而且您不必对值进行排序。
请参见下面的代码和注释。
let
Source = Table.FromColumns({{5,5,6,7,6}},{"Values"}),
//一个示例表,请改用Excel表。
WithIndex = Table.AddIndexColumn(Source, "Index"),
//向“源”表中添加“索引”列。
NewUniqueColumn = Table.AddColumn(WithIndex, "Is_Unique", each List.PositionOf(WithIndex[Values],[Values]) = [Index])
//向具有“真”或“假”值的名为“ Is_Unique”的“ WithIndex”表中添加新列。
//第三个参数是应用于每行的公式:
// WithIndex [Values]从“值”列返回一个列表。
// [Value]是该行的值。
// List.PositionOf(WithIndex [Values],[Values])返回值(从该行开始)在值列表中的首次出现位置。
//然后,它根据[index](此行的索引列的值)检查结果,并返回布尔值(true或false)
in
NewUniqueColumn
您可以复制并粘贴以下代码以查看其工作方式:
let
Source = Table.FromColumns({{5,5,6,7,6}},{"Values"}),
WithIndex = Table.AddIndexColumn(Source, "Index"),
NewUniqueColumn = Table.AddColumn(WithIndex, "Is_Unique", each List.PositionOf(WithIndex[Values],[Values]) = [Index])
in
NewUniqueColumn
现在,您可以删除索引列,并根据需要更改“ True / False”值。
希望有帮助。