В таблице, "создать новый столбец" и вывести в него значения: при повторяющихся значениях в столбце "КоординатаНЭ" вывести значение из столбца "Spool-ID", но если значение столбца " Spool-ID" содержит "" тогда вывести значение из столбца Element. Но только в позициях где в столбце №шва содержится значение "F".
Решение почти нашёл, объединил запрос самим собой
Код
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
#"Объединенные запросы" = Table.NestedJoin(Источник,{"КоординатаНЭ"},Источник,{"КоординатаНЭ"},"Удаленные столбцы",JoinKind.LeftOuter),
#"Развернутый элемент Удаленные столбцы" = Table.ExpandTableColumn(#"Объединенные запросы", "Удаленные столбцы", {"Spool-ID"}, {"Spool-ID.1"})
in
#"Развернутый элемент Удаленные столбцы"
Но вот ни как не могу применить условие, что если столбец "Spool-ID" пустой разворачивать (подставлять) нужно столбец (Element)
Таким образом пытался применить if, последняя строка
Код
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
#"Объединенные запросы" = Table.NestedJoin(Источник,{"КоординатаНЭ"},Источник,{"КоординатаНЭ"},"Удаленные столбцы",JoinKind.LeftOuter),
#"Развернутый элемент Удаленные столбцы" = #!"Table.ExpandTableColumn(#"Объединенные запросы",
each if [#"Spool-ID"]<> null then "Удаленные столбцы", {"Spool-ID"}, {"Spool-ID.1"}) else ("Удаленные столбцы", {"Element"}, {"Element"}))"
in
#"Развернутый элемент Удаленные столбцы"
Решение вроде как нашёл, но слишком мне кажется заморочено
Ошибся в данном случа он собирает все значения с обоих столбцов, а необходимо, только в случае если "Spool-ID" пустой(
Код
let Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
#"Объединенные запросы" = Table.NestedJoin(Источник,{"КоординатаНЭ"},Источник,{"КоординатаНЭ"},"Удаленные столбцы",JoinKind.LeftOuter),
#"Развернутый элемент Удаленные столбцы" = Table.ExpandTableColumn(#"Объединенные запросы", "Удаленные столбцы", {"Spool-ID"}, {"Spool-ID.1"}),
#"Развернутый элемент Удаленные столбцы2" = Table.ExpandTableColumn(#"Объединенные запросы", "Удаленные столбцы", {"Element"}, {"Spool-ID.1"}),
#"Добавленный запрос" = Table.Combine({#"Развернутый элемент Удаленные столбцы", #"Развернутый элемент Удаленные столбцы2"}),
#"Строки с примененным фильтром" = Table.SelectRows(#"Добавленный запрос", each ([#"Spool-ID.1"] <> null and [#"Spool-ID.1"] <> "")),
#"Удаленные дубликаты" = Table.Distinct(#"Строки с примененным фильтром", {"БЛОК", "Номер линии", "№шва", "Spool-ID.1"})
in
#"Удаленные дубликаты"
let Source = Table.AddIndexColumn(Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],"id"),
Group = Table.Group(Source, {"КоординатаНЭ"},{{"a", each let a=_,b=a{1} in Table.AddColumn
(a, "b", each try if Text.Contains([#"№шва"],"F") then if b[#"Spool-ID"]="" then b[Element]
else b[#"Spool-ID"] else null otherwise null )}}),
Custom1 = Table.RemoveColumns(Table.Sort(Table.Combine(Group[a]),{"id",0}),{"id"})
in Custom1
Михаил Л, спасибо! Извините, что сразу не ответил. Можете пояснить? 1. В первой строчке, по мимо источника, вы добавили новый столбец id, но не указали первую цифру 0 или 1, то есть как понимаю, по умолчанию, если не указать, будет от 0 2. С группировкой не совсем понял, "a_" это вся таблица, "b" новый столбец с условием if, тут же не понимаю синтаксис "try" и "otherwise", гугл сообщил "пытаться" и "в противном случае", то есть в if можно добавить 3 результат? 3. В последней строчке разворачиваем столбцы и сортируем, но вот с Table.Combine не понял, ведь по сути можно было просто развернуть столбцы? 4. Так же не понимаю выражение each, гугл пишет: "Ключевое слово each используется для удобного создания простых функций. "each ..." — это синтаксический сахар для сигнатуры функции, которая принимает параметр "(_) => ..."."
1. Да. 2. a=_ - это вся таблица группы (там или две строки или одна строка), b=a{1} - это вторая строка таблицы (не в каждой таблице есть вторая строка, поэтому возвращается ошибка, с которой работают try и otherwise). try и otherwise работают вместе (аналог ЕСЛИОШИБКА, гуглите на этом форуме). Убрал try и otherwise - результат тот же, только глаза мозолит сообщение о ошибке. 3. Разворачивать так разворачивать
Код
let Source = Table.AddIndexColumn(Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],"id"),
Group = Table.Group(Source, {"КоординатаНЭ"},{{"a", each
let
a=_,b=a{1}
in Table.AddColumn(a, "bbbb", each if Text.Contains([#"№шва"],"F") then if b[#"Spool-ID"]="" then b[Element] else b[#"Spool-ID"] else null)}}),
#"Expanded {0}" = Table.ExpandTableColumn(Group[[a]], "a", {"БЛОК", "Номер линии", "№шва", "Element", "Spool-ID", "КоординатаНЭ", "id", "bbbb"}),
Custom1 = Table.RemoveColumns(Table.Sort( #"Expanded {0}",{"id",0}),{"id"})
in
Custom1
PooHkrd,заменил на b=a{1}? убрал try и otherwise null
Код
let Source = Table.AddIndexColumn(Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],"id"), Group = Table.Group(Source, {"КоординатаНЭ"},{{"a", each let a=_,b=a{1} in Table.AddColumn
(a, "b", each if Text.Contains([#"№шва"],"F") then if b[#"Spool-ID"]="" then b[Element]
else b[#"Spool-ID"] else null)}}),
Custom1 = Table.RemoveColumns(Table.Sort(Table.Combine(Group[a]),{"id",0}),{"id"})
in Custom1
Ошибка не уходит, "не может применить доступ к полям в типе null"
adamm, вы не поняли, знак вопроса всего лишь убирает ошибку при обращении к несуществующему элементу списка. А дальше уже в коде нужно как-то обрабатывать ситуацию, когда вместо второй строки у вас пустое значение. Конструкция try ... otherwise у Михаила обрабатывала целое выражение, а не простое обращение к элементу списка, поэтому нельзя делать так, как вы сделали, тут нужен более комплексный подход. В код я погружаться сейчас времени не имею, тут уж извините. Только общими объяснениями.