Страницы: Пред. 1 2
RSS
Power Query. Удаление подряд идущих дубликатов только в двух столбцах с сохранением строки
 
КТУ 10
      20
КСУ 10
      20
 
То есть, убрать до изменения значения в каждом столбце отдельно / независимо от другого столбца (при этом сортировка сначала по первому столбцу, затем по второму)?
Блин, ну и хотелки у вас... В чем смысл-то?
F1 творит чудеса
 
Да, так, только сортировка сначала по второму столбцу, потом по первому. Ну вот такие выходные документы, такой порядок. Чтобы лишняя информация не мешала. Ох, правильно объяснить что нужно - это целое искусство  :idea: (что у меня плохо получается)
Изменено: maxrus163 - 11.08.2020 15:56:02
 
Цитата
maxrus163 написал:
только сортировка сначала по второму столбцу, потом по первому
погодите, тогда из
Код
КТУ 10
КТУ 20
КСУ 10
КСУ 20
ну никак не получится
Код
КТУ 10
    20
КСУ 10
    20
а получится
Код
КТУ 10
КСУ
КТУ 20
КСУ
F1 творит чудеса
 
maxrus163, в личку не пишите
Код
let
    
    Источник = Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="Параметры"]}[Content]{0}[Путь к исходным данным]), null, true),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each ([Name] = "Осн." or [Name] = "Эл.")),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Строки с примененным фильтром",{"Data"}),
    #"Развернутый элемент Data" = Table.ExpandTableColumn(#"Другие удаленные столбцы", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16"}),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Развернутый элемент Data", each ([Column1] <> null)),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Строки с примененным фильтром1", [PromoteAllScalars=true]),
    #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Участок", type text}, {"№ опер.", type any}, {"     Наименование", type text}, {"ГОСТ сорт", type text}, {" Марка материала", type any}, {"ГОСТ ТУ", type text}, {"МКК", type text}, {"Профиль", type any}, {"Размер", type any}, {"Единица изм-я", type text}, {"Норма1", type any}, {"/-", type text}, {"Норма2", type any}, {"/-2", type text}, {"Норма3", type text}, {"Column16", Int64.Type}}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип",{"Column16"}),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Удаленные столбцы",{{"Норма3", type number}, {"Норма2", type number}}),
    #"Строки с примененным фильтром2" = Table.SelectRows(#"Измененный тип1", each [Участок] = "КТУ" or [Участок] = "МСУ" or [Участок] = "КСУ" or [Участок] = "БИХ" or [Участок] = "Гр.мех" or [Участок] = "УКР" or [Участок] = "УРВ" or [Участок] = "УРК"),
    #"Сгруппированные строки" = Table.Group(#"Строки с примененным фильтром2", {"Участок", "№ опер.", "     Наименование", "ГОСТ сорт", " Марка материала", "ГОСТ ТУ", "МКК", "Профиль", "Размер", "Единица изм-я", "/-", "/-2"}, {{"Норма1С", each List.Sum([Норма1]), type number}, {"Норма2С", each List.Sum([Норма2]), type anynonnull}, {"Норма3С", each List.Sum([Норма3]), type text}}),
    #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Сгруппированные строки",{"Участок", "№ опер.", "     Наименование", "ГОСТ сорт", " Марка материала", "ГОСТ ТУ", "МКК", "Профиль", "Размер", "Единица изм-я", "Норма1С", "/-", "Норма2С", "/-2", "Норма3С"}),
    #"Измененный тип2" = Table.TransformColumnTypes(#"Переупорядоченные столбцы",{{"Норма3С", type number}}),
    #"Сортированные строки1" = Table.Sort(#"Измененный тип2",{{"№ опер.", Order.Ascending}}),
    Group = Table.Combine(Table.Group(Table.AddIndexColumn(#"Сортированные строки1","id"),{"Участок","№ опер."},{{"a", each _}})[a]),
    Custom1 = Table.FromColumns(Table.ToColumns(Group)&{{null}&List.RemoveLastN(Group[Участок])}&{{null}&List.RemoveLastN(Group[#"№ опер."])}),
    Replace1 = Table.ReplaceValue(Custom1, each [Column17],null,(a,b,c)=>if a=b then c else a,{"Column1"}),
    Replace2 = Table.ReplaceValue(Replace1,each [Column18],each [Column1],(a,b,c)=>if a=b then null else a,{"Column2"}),
    Remove = Table.RemoveColumns(Replace2,{"Column18","Column16", "Column17"}),
    Rename = Table.RenameColumns(Remove,List.Zip({Table.ColumnNames(Remove)}&{Table.ColumnNames(#"Сортированные строки1")}))
in
    Rename
 
Цитата
Максим Зеленский написал:
а получится
Да, Вы правы, с сортировкой в данном примере именно так получится. Сортируем по второму, потом по первому, потом убираем подряд идущие дубликаты в обоих столбцах независимо друг от друга.
 
Михаил Л, хорошо. Спасибо. Традиционно виртуозно! В данном примере все работает. Продолжаю тестировать.
 
maxrus163, какой из меня виртуоз :D
Это года пол-тара-два назад, когда я сам учился на этом форуме, может и посчиталось это решение за виртуозное, а сейчас, когда подобное уже прижилось и приелось, это просто рабочая лошадка)
Страницы: Пред. 1 2
Наверх