Страницы: 1
RSS
Создать копию строки в таблице при условии, PQ
 
Всем привет!
Есть таблица, в столбце "№ клейма сварщика" при наличии знака "/" необходимо добавить копию строки в эту же таблицу, но в столбцах "№ клейма сварщика" и "Способ сварки" оставить значения, аналогично последовательности до "/" и после "/", решение конечно есть, в файле примере, но это тупое мышкоклацанье, думаю можно сократить код
 
adamm, например, так
Код
// Таблица2 (2)
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    Custom1 = Table.SelectRows(Source, each Text.Contains([#"№ клейма сварщика"], "/")),
    Split = Table.ExpandListColumn(Table.TransformColumns(Custom1, {{"№ клейма сварщика", 
    Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), let itemType = (type nullable text) 
    meta [Serialized.Text = true] in type {itemType}}}), "№ клейма сварщика"),
    Group = Table.SelectRows(Source, each not Text.Contains([#"№ клейма сварщика"], "/"))&
    Table.Combine(Table.Group(Split, {"№ клейма сварщика"}, {"a", each _})[a])
in
    Group
 
Михаил Л, оказывается в PQ в функции "разделить столбец по разделителю", есть вот такая примочка "по строкам", супер спасибо!
Только заметил, а вот второй столбец не получилось разделить
Изменено: adamm - 06.05.2020 15:46:08
 
Цитата
adamm написал:
Только заметил, а вот второй столбец не получилось разделить
Заметил я только сейчас)
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    Custom1 = Table.SelectRows(Source, each Text.Contains([#"№ клейма сварщика"], "/")),
    Merge = Table.CombineColumns(Custom1,{"№ клейма сварщика", "Способ#(lf)сварки"},(_)=> 
    let a1=Text.Split(_{0},"/"),a2=Text.Split(_{1},"/"), b =a1{0}&"__"&a2{0}, d=a1{1}&"__"&a2{1} in b&"/"&d ,"Сведено"),
    Split = Table.ExpandListColumn(Table.TransformColumns(Merge, {{"Сведено", 
    Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), let itemType = (type nullable text) 
    meta [Serialized.Text = true] in type {itemType}}}), "Сведено"),
    Split2 = Table.SplitColumn(Split, "Сведено", Splitter.SplitTextByDelimiter
    ("__", QuoteStyle.Csv), {"№ клейма сварщика", "Способ#(lf)сварки"}),
    Group = Table.SelectRows(Source, each not Text.Contains([#"№ клейма сварщика"], "/"))&
    Table.Combine(Table.Group(Split2, {"№ клейма сварщика"}, {"a", each _})[a]),
    Reorder = Table.ReorderColumns(Group,Table.ColumnNames(Source))
in
    Reorder
Изменено: Михаил Л - 06.05.2020 16:56:58
 
еще вариант
Код
let
    Источник = Excel.CurrentWorkbook(){[Name = "Таблица2"]}[Content],
    Col      = {"№ клейма сварщика", "Способ#(lf)сварки"},
    Merged   = Table.CombineColumns(Источник, Col, each 
                   let
                       a = (a) => if a = null then {null} else Text.Split(a, "/"),
                       b = List.Zip(List.Transform(_, a))
                   in
                       #table(Col, b),
               "Combined"),
    Expand   = Table.ExpandTableColumn(Merged, "Combined", Col)
in
    Expand
 
Михаил Л, Андрей Лящук, огромное спасибо!
Страницы: 1
Наверх