Страницы: 1
RSS
Удаление строк в PQ если данные есть из всех столбцов только в столбце NAME
 
День добрый! ранее на этом форуме мне помогли объединить данные с нескольких файлов и листов эксель тыц  

Воспользовался идеей Alexey_Spb.

Вопрос вот в чём. в запросе я удаляю пустые строки(см. вложение). но они не удаляются т.к. в первом столбце NAME содержится данные а во всех остальных столбцах пусто
Как сделать так чтобы если данные есть только в столбце NAME а во всех остальных столбцах на строке пусто, этих строк не было бы.

ПРЕМЕР 621,622,623 СТРОКА норм (т.к. данные есть во втором столбце) а последующие строки 624-1309 лишние. как такое убирать.

P.S возможно название темы не будет подходить под предложение решение. и я что то не так понимаю.
Изменено: Wild.Godlike - 20.03.2019 16:26:27
 
Можно было постарается и сделать все в одном файле, а не заставлять всех скачивать файлы и менять путь к исходникам...
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, Собрал в один файл.
 
Вот так, например.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="ОБЩИЙ"]}[Content],
    СгруппированныеСтроки = Table.Group(Источник, {"Name"}, {{"Таб", each Table.SelectRows(Table.RemoveColumns(_, {"Name"}), each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))), type table}}),
    #"Развернутый элемент Таб" = Table.ExpandTableColumn(СгруппированныеСтроки, "Таб", {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"}, {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"})
in
    #"Развернутый элемент Таб"
Вот горшок пустой, он предмет простой...
 
PooHkrd,  Не совсем понимаю куда вставить этот код именно в этом запросе.

Код
let
    Source = Folder.Files("U:\Воркутинский офис продаж и обслуживания клиентов (ОПиОК)\Журналы"),
    Filtered = Table.SelectRows(Source, each not Text.StartsWith([Name], "~$") and [Name] <> "1. ОТЧЕТ ТКО.xlsx"),
    Pages = Table.AddColumn(Filtered, "Data", each Excel.Workbook(File.Contents([Folder Path]&[Name]), null, true)),
    Loaded = Table.TransformColumns
               (
                Pages, 
                  {
                   "Data", 
                   (Row) =>
//                   Table.Combine(
                         List.Accumulate
                          (
                           {2018..2019},
                           {},
                           (acc, this) => acc & (try {Table.PromoteHeaders(Row{[Item=Text.From(this), Kind="Sheet"]}[Data])} otherwise {})
                           )
//                      )
                }
               ),
    Expanded = Table.ExpandListColumn(Loaded, "Data"),
    #"Удаленные столбцы" = Table.RemoveColumns(Expanded,{"Content", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}),
    #"Развернутый элемент Data" = Table.ExpandTableColumn(#"Удаленные столбцы", "Data", {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"}, {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"}),
    #"Измененный тип" = Table.TransformColumnTypes(#"Развернутый элемент Data",{{"Когда принято", type date}, {"Дата обработки", type date}, {"Name", type text}, {"№", type text}, {"Статус", type text}, {"ФИО", type text}, {"Улица", type text}, {"Дом", type text}, {"Кв.", type text}, {"Где находится", type text}, {"Примечание", type text}, {"БДФЛ", type text}}),
    #"Обрезанный текст" = Table.TransformColumns(Table.TransformColumnTypes(#"Измененный тип", {{"Когда принято", type text}, {"Дата обработки", type text}}, "ru-RU"),{{"Name", Text.Trim, type text}, {"№", Text.Trim, type text}, {"Статус", Text.Trim, type text}, {"Когда принято", Text.Trim, type text}, {"ФИО", Text.Trim, type text}, {"Улица", Text.Trim, type text}, {"Дом", Text.Trim, type text}, {"Кв.", Text.Trim, type text}, {"Причина", Text.Trim, type text}, {"Дата обработки", Text.Trim, type text}, {"Где находится", Text.Trim, type text}, {"Примечание", Text.Trim, type text}, {"БДФЛ", Text.Trim, type text}}),
    #"Текст в верхнем регистре" = Table.TransformColumns(#"Обрезанный текст",{{"БДФЛ", Text.Upper, type text}, {"Примечание", Text.Upper, type text}, {"Где находится", Text.Upper, type text}, {"Дата обработки", Text.Upper, type text}, {"Причина", Text.Upper, type text}, {"Кв.", Text.Upper, type text}, {"Дом", Text.Upper, type text}, {"Улица", Text.Upper, type text}, {"ФИО", Text.Upper, type text}, {"Когда принято", Text.Upper, type text}, {"Статус", Text.Upper, type text}, {"Name", Text.Upper, type text}}),
    #"Удалены пустые строки" = Table.SelectRows(#"Текст в верхнем регистре", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))
in
    #"Удалены пустые строки"
Изменено: Wild.Godlike - 13.02.2019 16:48:36
 
Wild.Godlike, добавил в конце. Пользуйтесь.
Код
let
    Source = Folder.Files("U:\Воркутинский офис продаж и обслуживания клиентов (ОПиОК)\Журналы"),
    Filtered = Table.SelectRows(Source, each not Text.StartsWith([Name], "~$") and [Name] <> "1. ОТЧЕТ ТКО.xlsx"),
    Pages = Table.AddColumn(Filtered, "Data", each Excel.Workbook(File.Contents([Folder Path]&[Name]), null, true)),
    Loaded = Table.TransformColumns
               (
                Pages, 
                  {
                   "Data", 
                   (Row) =>
//                   Table.Combine(
                         List.Accumulate
                          (
                           {2018..2019},
                           {},
                           (acc, this) => acc & (try {Table.PromoteHeaders(Row{[Item=Text.From(this), Kind="Sheet"]}[Data])} otherwise {})
                           )
//                      )
                }
               ),
    Expanded = Table.ExpandListColumn(Loaded, "Data"),
    #"Удаленные столбцы" = Table.RemoveColumns(Expanded,{"Content", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}),
    #"Развернутый элемент Data" = Table.ExpandTableColumn(#"Удаленные столбцы", "Data", {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"}, {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"}),
    #"Измененный тип" = Table.TransformColumnTypes(#"Развернутый элемент Data",{{"Когда принято", type date}, {"Дата обработки", type date}, {"Name", type text}, {"№", type text}, {"Статус", type text}, {"ФИО", type text}, {"Улица", type text}, {"Дом", type text}, {"Кв.", type text}, {"Где находится", type text}, {"Примечание", type text}, {"БДФЛ", type text}}),
    #"Обрезанный текст" = Table.TransformColumns(Table.TransformColumnTypes(#"Измененный тип", {{"Когда принято", type text}, {"Дата обработки", type text}}, "ru-RU"),{{"Name", Text.Trim, type text}, {"№", Text.Trim, type text}, {"Статус", Text.Trim, type text}, {"Когда принято", Text.Trim, type text}, {"ФИО", Text.Trim, type text}, {"Улица", Text.Trim, type text}, {"Дом", Text.Trim, type text}, {"Кв.", Text.Trim, type text}, {"Причина", Text.Trim, type text}, {"Дата обработки", Text.Trim, type text}, {"Где находится", Text.Trim, type text}, {"Примечание", Text.Trim, type text}, {"БДФЛ", Text.Trim, type text}}),
    #"Текст в верхнем регистре" = Table.TransformColumns(#"Обрезанный текст",{{"БДФЛ", Text.Upper, type text}, {"Примечание", Text.Upper, type text}, {"Где находится", Text.Upper, type text}, {"Дата обработки", Text.Upper, type text}, {"Причина", Text.Upper, type text}, {"Кв.", Text.Upper, type text}, {"Дом", Text.Upper, type text}, {"Улица", Text.Upper, type text}, {"ФИО", Text.Upper, type text}, {"Когда принято", Text.Upper, type text}, {"Статус", Text.Upper, type text}, {"Name", Text.Upper, type text}}),
    #"Удалены пустые строки" = Table.Group(#"Текст в верхнем регистре", {"Name"}, {{"Таб", each Table.SelectRows(Table.RemoveColumns(_, {"Name"}), each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))), type table}}),
    #"Развернутый элемент Таб" = Table.ExpandTableColumn(#"Удалены пустые строки", "Таб", {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"}, {"№", "Статус", "Когда принято", "ФИО", "Улица", "Дом", "Кв.", "Причина", "Дата обработки", "Где находится", "Примечание", "БДФЛ"})
in
    #"Развернутый элемент Таб"
Вот горшок пустой, он предмет простой...
 
PooHkrd, большое спасибо :) Вопрос решен.
 
Блин, как не зайдешь в тему, уже все порешали )) К сожалению, пока могу заходить только вечером (еще плюс отрицательная разница во времени с Москвой  :( )

Ладно, напишу хоть что-нибудь  :)
Цитата
PooHkrd написал:
#"Удаленные столбцы" = Table.RemoveColumns(Expanded,{"Content", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}),
Имхо, я бы лучше не удалял ненужные, а выбирал только нужные столбцы так как это чуть-чуть увеличивает устойчивость запроса к левым столбцам и их переименованию.
Изменено: Alexey_Spb - 13.02.2019 17:06:24
 
Alexey_Spb, ну почему же, еще можно предложить такой вариант:
Код
(acc, this) => acc & (try {Table.SelectRows(Table.PromoteHeaders(Row{[Item=Text.From(this), Kind="Sheet"]}[Data]), each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))} otherwise {})

Тогда не нужен будет последний шаг с разворачиванием столбцов, т.к. пустые строки будут удаляться еще до сборки их в общий массив.
Изменено: PooHkrd - 13.02.2019 17:13:28
Вот горшок пустой, он предмет простой...
 
Братцы, всё проще можно сделать.
Берем таблицу и делаем по ней "Удалить пустые строки", получаем такой автокод:
Код
Table.SelectRows(Source, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))

и вместо знака _ (подчеркивания) пишем такое:
Код
Record.RemoveFields(_, {"NAME"})

получается вот такое:
Код
= Table.SelectRows(Source, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(Record.RemoveFields(_, {"NAME"})), {"", null})))

и всё.
Это если почти однокнопочный вариант :)

А если пренебречь пустой строкой "" вместо null, то можно и так:
Код
= Table.SelectRows(
    Source, 
    each List.NonNullCount(Record.FieldValues(Record.RemoveFields(_, {"NAME"})))>0)
Изменено: Максим Зеленский - 14.02.2019 13:08:10 (для читабельности)
F1 творит чудеса
 
Поднимаю тему из мертвых :D
Не понимаю :( почему сломался запрос?
На шаге "Удалены пустые строки" (ошибка на скриштоше) нажимаю на "перейти к ошибке" перекидывает на шаг "Loaded"

Всё что я в запросе менял из поста #6 это в шаге "Filtered" добавлял исключения через шестеренку.

2 недели назад переустанавливал офис
Версия PQ х32 2.48.4792.241
Excel 2016 plus MSO x32 16.0.4549.1000
 
Шаг Loaded ищет в файлах листы с названием Sheet, раз ошибка, значит в одном из файлов нет листа с таким названием.
Изменено: PooHkrd - 20.03.2019 13:47:44
Вот горшок пустой, он предмет простой...
 
PooHkrd, Понял проблему нашел. Спасибо :)

P.S. А как сделать чтобы если листа\ов нет с таким названием он их просто пропускал.
т.е. строго только те листы которые будут в запросе, и если в каком то файле нет нужного листа. этот файл не учитывался.(чтобы ошибки не было)

Лучше наверное отдельную тему создать да?)
 
Интересно, если учесть, что вот здесь:
Цитата
Wild.Godlike написал:
Шаг Loaded ищет в файлах листы с названием Sheet,
я фигню написал, где вы нашли таки ошибку?
Этот код все таки ищет листы с названием 2018 или 2019, и если не находил, то ошибку выдавать не должен был.
Вроде бы этот код вам Alexey_Spb предлагал в какой-то теме. Найдите эту тему, если мне не изменяет склероз, мы в ней как раз общались как правильно объезжать ошибку отсутствия листа.
Вот горшок пустой, он предмет простой...
 
PooHkrd, Просмотрел все файлы в одном из файлов за место 2018 и 2019 было Лист1 Лист2, переименовал заработало.
Тема ВОТ из неё и брал код. Сейчас увидел соощение в той теме Максима, изменил немного код. и теперь действительно ошибки нет даже если Лист1 или Лист2.
Изменено: Wild.Godlike - 20.03.2019 16:27:11
Страницы: 1
Наверх