Страницы: 1
RSS
[Power Query] Удаление строк по условию (содержание текста в предыдущих строках) со смещением
 
Добрый день! Коллеги, прошу вашей помощи в решении задачи через PQ.

В примере есть один столбец, в котором содержаться стоки с текстом "Что сохранить" и "Что улучшить". После каждой из этих строк идет строка с рекомендациями (текст этих строк я заменил на кашу из букв и цифр из-за возможного наличия там конфиденциальной информации).

Задача заключается в том, чтобы удалить эти строки, т. е. при нахождении строки с текстом "Что сохранить" или "Что улучшить" удалялась эта строка и следующая за ней. По моему скромному мнению для решения задачи нужно создать столбец с маркерами, а затем по этим маркерам выполнить удаление. И у меня большая просьба к знатокам языка M, пожалуйста не умещайте весь код в одну строку, я хочу полученное решение применить на рабочем файле самостоятельно  :)  
 
Вот так можно:
Код
let
    Source = Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="adress"]}[Content]{0}[Column1])){[Name="Evaluation Report"]}[Data],
    AddedColumn = Table.AddColumn(Source, "Признак", each if [Column1] = "Что сохранить" then "ЧС" else if [Column1] = "Что улучшить" then "ЧУ" else null),
    GroupedRows = Table.Group(AddedColumn, {"Признак"}, {{"Таб", each _, type table}}, GroupKind.Local),
    AddedTabsColumn = Table.AddColumn(GroupedRows, "ИтоговыеТаблицы", each Table.Skip( [Таб], 1 ) ),
    Combine = Table.Combine( AddedTabsColumn[ИтоговыеТаблицы] ),
    RemovedColumns = Table.RemoveColumns(Combine,{"Признак"})
in
    RemovedColumns

Старался как можно подробнее делать.
Вот горшок пустой, он предмет простой...
 
PooHkrd, большое спасибо! Пошел курить как вы это сделали  :)  
 
Murderface_, ничего сложного, всё колдунство здесь:
Код
Table.Group(AddedColumn, {"Признак"}, {{"Таб", each _, type table}}, GroupKind.Local)

Смотрите на 4 параметр GroupKind.Local.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
GroupKind.Local
Смотрю в книгу вижу фигу.
 
Murderface_, не в ту книгу смотрите. ;) Надо в ту!
Вот горшок пустой, он предмет простой...
 
PooHkrd, еще раз спасибо  :)  
 
Murderface_, я даже скажу страшное, там есть еще 5-й параметр! С ним тоже можно начудить всякого, а с 4 и 5 вместе... :idea:
Вот горшок пустой, он предмет простой...
 
Удалось решить задачу самостоятельно, немного другим способом :-)

Скрытый текст
 
Рабочий вариант, но злоупотреблять им я настоятельно не керемендую. Обращение к таблице по абсолютным ссылкам это крайне не быстрый способ получения данных. Т.е. по сути что вы своим запросом делаете? Вы в каждой строке обращаетесь и ко всей таблице целиком (выдергивая из неё значение конкретной ячейки) и к записи текущей строки. А ленивые вычисления любых составных типов данных в языке М еще только усугубят проблему. На серьезном массиве (1кк+) такой запрос зависнет, а вы состаритесь ожидая результатов. А вот локальная группировка такой массив проглотит не поморщившись.
Но, если уж надумаете пользоваться алгоритмами подобного рода, то нужно шаг index брать в Table.Buffer(). Это значительно ускорит работу.
Вот горшок пустой, он предмет простой...
 
PooHkrd, благодарю за совет.
Страницы: 1
Наверх