Размещение идентификатора на основе условия в данных столбца в PowerQuery - PullRequest
0 голосов
/ 29 ноября 2018

Я хотел бы знать, как я могу добавить уникальный идентификатор для значения в запросе мощности.Я не уверен, правильно ли я объясняю, но история такая.В обычном процессе Excel я бы отсортировал столбец по его значениям, чтобы при наличии нескольких ячеек с одинаковым значением в первом случае был бы указан идентификатор.Например, у нас есть следующие данные:

+---------------+
|       A       |
+---------------+
| Column Header |
| 5             |
| 5             |
| 6             |
| 7             |
| 7             |
+---------------+

Я использую первую сортировку, а затем использую следующую формулу в столбце B:

=if(A2=A1;"";"Unique") 

, что приведет к

+---------------+--------+
|       A       |   B    |
+---------------+--------+
| Column Header |        |
| 5             | Unique |
| 5             |        |
| 6             | Unique |
| 7             | Unique |
| 7             |        |
+---------------+--------+

Здесь у меня может быть «Уникальный» или любая строка для моего идентификатора, но я просто хочу знать, как я могу сделать то же самое в силовом запросе.Буду признателен за помощь.BR

Div/Mat столбец имеет значение, которое я хочу поставить уникальный идентификатор в первую очередь:

Div/Mat col has the value that i want to put unique identifier in first instance

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Вот еще один способ:

Я добавляю таблицу, как вы ее описали, сортируете, группируете, затем меняете первый элемент каждой группы на «Уникальный», используя List.ReplaceRange.Затем я расширяю список до новых строк.Это дает мне следующее:

enter image description here

Затем я удаляю столбец AllData:

enter image description here

Вот код:

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"
0 голосов
/ 29 ноября 2018

Другое решение, возможно, более простое, и вам не нужно сортировать значения.

См. Код и комментарии ниже.

let
Source = Table.FromColumns({{5,5,6,7,6}},{"Values"}),

// В качестве примера используйте вместо нее таблицу Excel.

WithIndex = Table.AddIndexColumn(Source, "Index"),

// Добавьте «индекс»столбец в таблице «Source».

NewUniqueColumn = Table.AddColumn(WithIndex, "Is_Unique", each List.PositionOf(WithIndex[Values],[Values]) = [Index])

// Добавить новый столбец в таблицу «WithIndex» с именем «Is_Unique» со значениями True или False.

// Третий аргументформула, применяемая к каждой строке:

// WithIndex [Значения] возвращает список из столбца Значения.

// [Значение] - значение этой строки.

// 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

Теперь вы можете удалить столбец индекса и при необходимости изменить значения «Истина / Ложь».

Надеюсь, это поможет.

0 голосов
/ 29 ноября 2018

Если вы уже отсортировали таблицу соответствующим образом, начните с добавления столбца индекса:

#"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"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...