Страницы: 1
RSS
Как в Power Query в запросе задать условие, чтобы он оставил только данные до первой пустой строки
 
Всем доброго времени суток. Вопрос, собственно, задан, но немного повторюсь. Есть экселевский файл, на одном из листов находятся разноплановые данные (как бы набросанные вниз). Но точно известно, что между первым блоком с данными и остальной информацией на листе есть как минимум одна пустая строка.
Вопрос: как с помощью PowerQuery оставить только данные до первой пустой ячейки (не включительно), а остальное как бы удалить?
Файл пример "Power_Query_удалить_после_пустой"
 
Примерно так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Индекс", 0, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Пользовательская", each if [Фамилия] = null then [Индекс] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Пользовательская"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Пользовательская] = null))
in
    #"Filtered Rows"
Изменено: PooHkrd - 20.05.2019 12:08:59
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Примерно так
Да, понял как сделано, спасибо большое!
только тут же приходится учитывать тот факт, что в этом запросе мы проверяем только первый столбец (чтобы он был не пустым), но при этом не проверяем остальные столбцы. В теории может быть так, что в первом столбце может появиться "пустота" раньше, чем будет первая (ничем не заполненная по всем столбцам) пустая строка....
 
Konstantin Zhi, я ж вам принцип показал. Никто не мешает в условный столбец добавить проверку остальных столбцов на наличие в них null.
Вот так можно проверять пустоту всей строки:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Индекс", 0, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Пользовательская", each if Text.Combine(List.Transform(Record.FieldValues(_), Text.From) ) = Text.From([Индекс]) then [Индекс] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Пользовательская"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Пользовательская] = null))
in
    #"Filtered Rows"
Изменено: PooHkrd - 20.05.2019 12:31:43
Вот горшок пустой, он предмет простой...
 
Доброе время суток
Цитата
PooHkrd написал:
Вот так можно проверять пустоту всей строки:
И не лень вам Алексей кнопки жать? :)
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Фамилия", type any}, {"Вид контакта", type any}, {"Контакт", type text}, {"Период", type text}, {"Тариф", type any}}),
    result = Table.FirstN(#"Changed Type", each List.NonNullCount(Record.FieldValues(_)) > 0)
in
    result
Изменено: Андрей VG - 20.05.2019 13:20:57
 
Андрей VG, да как всегда, что чаще использую, те конструкции первыми на ум и приходят. Спасибо за ваш вариант. Идея красивая.
Вот горшок пустой, он предмет простой...
 
спасибо большое!
 
Цитата
Андрей VG написал:
кнопки жать?
это, наверное, для нас, любителей кнопочных решений
а иначе начинающие пользователи PQ не поймут что там, в запросе сварено
 
Андрей VG, скажите, плиз, навняка можно, но я не знаю (отдельную тему, наверное, нет смысла создавать): как создать полностью пустой столбец внутри таблицы запроса, или же (альтернатива) - как из столбца удалить все, чтобы от него остался только заголовок?
 
Цитата
Konstantin Zhi написал:
как создать полностью пустой столбец внутри таблицы запроса
Код
Table.AddColumn(таблица, "Имя столбца", each null)
Цитата
Konstantin Zhi написал:
как из столбца удалить все, чтобы от него остался только заголовок
Код
Table.TransformColumns(таблица,{{"Имя столбца",each null}})
Изменено: Андрей Лящук - 20.05.2019 14:18:35
 
Андрей Лящук, тёзка не покупайтесь на
Цитата
Konstantin Zhi написал:
отдельную тему, наверное, нет смысла создавать
Правила гласят
Цитата
2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов.
 
Андрей VG, так ведь Konstantin Zhi первый день на форуме. Ещё не ознакомился с правилами.
 
понял, тогда прошу модераторов разбить этот вопрос на два, или это мне сделать?
 
Цитата
Konstantin Zhi написал:
прошу модераторов разбить этот вопрос на два
Это за Вас создать новую тему?  
 
Цитата
Юрий М написал:
Это за Вас создать новую тему
я не говорил этого, тут правильно, вероятно, так было бы сформулировать вопрос: что теперь делать, если внутри одной темы уже задан второй вопрос и получен ответ на него? если создать новую тему (только с одним вопросом), то получается нужно будет просить ответившего также дать ответ и в той (новой) теме.
А если бы у модераторов была возможность (возможно, что она есть) просто разбить один вопрос (суть - тему), на две части, то это было бы логичнее, наверное. Как то так )
Страницы: 1
Наверх