Добрый день, всем участникам форума! В просторах интернета не нашел решения одного своего вопроса, буду признателен если подскажите в какую сторону думать дальше. Простой алгоритм (по факту больше, но проблема даже с этими 4 строками): [vba]
Код
let Источник = Folder.Files(Excel.CurrentWorkbook(){[Name="Papka"]}[Content]{0}[Путь к папке]), #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "Пользовательский", each Excel.Workbook([Content])), #"Развернутый элемент Пользовательский" = Table.ExpandTableColumn(#"Добавлен пользовательский объект", "Пользовательский", {"Item", "Kind", "Hidden"}, {"Item", "Kind", "Hidden"}), #"Строки с примененным фильтром" = Table.SelectRows(#"Развернутый элемент Пользовательский", each ([Item] = "ФА EBITDA Группы")) in #"Строки с примененным фильтром"
[/vba] Когда путь к папке указан на сетевую папку - отработка происходит оооооооочень долго. Когда тоже количество файлов расположено в папке на локальном компьютере - не всегда моргнуть успеваю как все готово. Пробовал менять настройки разрешения как текущей книги так и глобальные (этой сетевой папки) поочередно (общий, организационный, частный) - не помогло. Пока решение нашел переноса папки с файлами на локальный компьютер, что не совсем подходит (подходит только для отработки алгоритма). Можете подсказать решение этой задачки?
Добрый день, всем участникам форума! В просторах интернета не нашел решения одного своего вопроса, буду признателен если подскажите в какую сторону думать дальше. Простой алгоритм (по факту больше, но проблема даже с этими 4 строками): [vba]
Код
let Источник = Folder.Files(Excel.CurrentWorkbook(){[Name="Papka"]}[Content]{0}[Путь к папке]), #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "Пользовательский", each Excel.Workbook([Content])), #"Развернутый элемент Пользовательский" = Table.ExpandTableColumn(#"Добавлен пользовательский объект", "Пользовательский", {"Item", "Kind", "Hidden"}, {"Item", "Kind", "Hidden"}), #"Строки с примененным фильтром" = Table.SelectRows(#"Развернутый элемент Пользовательский", each ([Item] = "ФА EBITDA Группы")) in #"Строки с примененным фильтром"
[/vba] Когда путь к папке указан на сетевую папку - отработка происходит оооооооочень долго. Когда тоже количество файлов расположено в папке на локальном компьютере - не всегда моргнуть успеваю как все готово. Пробовал менять настройки разрешения как текущей книги так и глобальные (этой сетевой папки) поочередно (общий, организационный, частный) - не помогло. Пока решение нашел переноса папки с файлами на локальный компьютер, что не совсем подходит (подходит только для отработки алгоритма). Можете подсказать решение этой задачки?Anis625
Ну 1 - первый шаг забуферить; 2 - преобразование делать не через добавление столбца, а через трансформацию, можно сразу с фильтрацией; 3 - таблицу итоговую получать не через экспенд, а через комбайн или FromList
Это общие замечания. В любом случае судя по описанию проблема именно в скорости загрузки информации, разрешения на это никак не влияют
Ну 1 - первый шаг забуферить; 2 - преобразование делать не через добавление столбца, а через трансформацию, можно сразу с фильтрацией; 3 - таблицу итоговую получать не через экспенд, а через комбайн или FromList
Это общие замечания. В любом случае судя по описанию проблема именно в скорости загрузки информации, разрешения на это никак не влияютпрохожий2019
Сообщение отредактировал прохожий2019 - Понедельник, 30.05.2022, 12:33
прохожий2019, Спасибо Вам за совет. Если есть возможность подскажите где ошибаюсь (ошибку выдает) 1. С первым вроде разобрался. А после буферизации нужно на каком то этапе извлекать из буфера? 2. Со вторым пунктом делаю так: [vba]
Код
Excel.Workbook(Table.SelectColumns( Folder.Files(Excel.CurrentWorkbook(){[Name="Papka"]}[Content]{0}[Путь к папке]), {"Content"}))
[/vba] Ошибку выдает. 3. Пример с фильтрацией нашел тут попробую разобраться.
прохожий2019, Спасибо Вам за совет. Если есть возможность подскажите где ошибаюсь (ошибку выдает) 1. С первым вроде разобрался. А после буферизации нужно на каком то этапе извлекать из буфера? 2. Со вторым пунктом делаю так: [vba]
Код
Excel.Workbook(Table.SelectColumns( Folder.Files(Excel.CurrentWorkbook(){[Name="Papka"]}[Content]{0}[Путь к папке]), {"Content"}))
[/vba] Ошибку выдает. 3. Пример с фильтрацией нашел тут попробую разобраться.Anis625
нет, извлекать не надо, буферизация нужна для предотвращения повторной загрузки информации - раз уж это лимитирующее со вторым пунктом вы делаете что-то странное - дайте пример пары файлов в архиве, напишу обработчик а по фильтрациям и обращениям к полям рекомендую смотреть тут или спросить тут, но пример всё равно нужен, желательно с описанием необходимого конечного результата
нет, извлекать не надо, буферизация нужна для предотвращения повторной загрузки информации - раз уж это лимитирующее со вторым пунктом вы делаете что-то странное - дайте пример пары файлов в архиве, напишу обработчик а по фильтрациям и обращениям к полям рекомендую смотреть тут или спросить тут, но пример всё равно нужен, желательно с описанием необходимого конечного результатапрохожий2019
прохожий2019, Файлы не получится приложить из-за перс.данных =) а по ссылкам получится только дома пройти т.к. на работе политикой безпасности закрыты =) Спасибо Вам большое
прохожий2019, Файлы не получится приложить из-за перс.данных =) а по ссылкам получится только дома пройти т.к. на работе политикой безпасности закрыты =) Спасибо Вам большоеAnis625
никто не просит перс данные. От вас требуется 2-3 файла, в которых ШАПКА как в оригинале и несколько строчек данных про бабочек/цветочки, апельсины/яблоки, главное чтобы форматы данных отображали реальность. Ну и также в общем виде - какая таблица на выходе нужна.
никто не просит перс данные. От вас требуется 2-3 файла, в которых ШАПКА как в оригинале и несколько строчек данных про бабочек/цветочки, апельсины/яблоки, главное чтобы форматы данных отображали реальность. Ну и также в общем виде - какая таблица на выходе нужна.прохожий2019
Для примере сделал 2 файла на основании исходных. Листом в них намного больше. Работаю с листом "ФА EBITDA Группы" фильтре еще может быть выбрать параметр "Sheet". Добавляю в отдельный столбец имя файла и извлекаю название предприятия (Предприятие 1, Предприятие 2) с этого листа.
upd. удаляю 6 строк и делаю первую строку заголовком таблицы
прохожий2019,
Для примере сделал 2 файла на основании исходных. Листом в них намного больше. Работаю с листом "ФА EBITDA Группы" фильтре еще может быть выбрать параметр "Sheet". Добавляю в отдельный столбец имя файла и извлекаю название предприятия (Предприятие 1, Предприятие 2) с этого листа.
upd. удаляю 6 строк и делаю первую строку заголовком таблицыAnis625
let from = List.Buffer(Folder.Files("C:\путь к папке")[Content]), tr = List.Transform(from,TransformFile), to = Table.Combine(tr) in to
[/vba] функция трансформации: [vba]
Код
(x)=>[a=Excel.Workbook(x), b=a{[Name="ФА EBITDA Группы"]}[Data], c = b{2}[Column3], d = Table.Skip(b,6), e = Table.PromoteHeaders(d), f = Table.SelectRows(e,(x)=>x[#"План/#(lf)Факт"]<>null), g = Table.AddColumn(f,"Предприятие",(x)=>c), h = List.Select(Table.ColumnNames(g),(x)=>not Text.Contains(x,"Column")), k = Table.SelectColumns(g,h)][k]
[/vba]
я бы что-то такое написал [vba]
Код
let from = List.Buffer(Folder.Files("C:\путь к папке")[Content]), tr = List.Transform(from,TransformFile), to = Table.Combine(tr) in to
[/vba] функция трансформации: [vba]
Код
(x)=>[a=Excel.Workbook(x), b=a{[Name="ФА EBITDA Группы"]}[Data], c = b{2}[Column3], d = Table.Skip(b,6), e = Table.PromoteHeaders(d), f = Table.SelectRows(e,(x)=>x[#"План/#(lf)Факт"]<>null), g = Table.AddColumn(f,"Предприятие",(x)=>c), h = List.Select(Table.ColumnNames(g),(x)=>not Text.Contains(x,"Column")), k = Table.SelectColumns(g,h)][k]
прохожий2019, Ого. Надо изучить как вы это сделали. Попробовал поменять путь ошибку правда выдал, но это скорее всего из-за того что некоторые файлы не содержат такой лист. Когда поэтапно обрабатываю, то получается выявить такие ошибки
прохожий2019, Ого. Надо изучить как вы это сделали. Попробовал поменять путь ошибку правда выдал, но это скорее всего из-за того что некоторые файлы не содержат такой лист. Когда поэтапно обрабатываю, то получается выявить такие ошибкиAnis625
На одном файле спотыкается. на каком не выявить. С транфсормацией с одной стороны удобно но при условии что все файлы правильные. Первый блок для изучения взял на проработку. Спасибо Вам огромное
На одном файле спотыкается. на каком не выявить. С транфсормацией с одной стороны удобно но при условии что все файлы правильные. Первый блок для изучения взял на проработку. Спасибо Вам огромноеAnis625
вот так пробуйте (добавил исключение некорректных файлов): [vba]
Код
let from = List.Buffer(Folder.Files("C:\путь")[Content]), tr = List.Transform(from,TransformFile), filtr = List.RemoveNulls(tr), to = Table.Combine(filtr) in to
[/vba] [vba]
Код
(x)=>[a=Excel.Workbook(x), b=a{[Name="ФА EBITDA Группы"]}?[Data]?, c = b{2}[Column3], d = Table.Skip(b,6), e = Table.PromoteHeaders(d), f = Table.SelectRows(e,(x)=>x[#"План/#(lf)Факт"]<>null), g = Table.AddColumn(f,"Предприятие",(x)=>c), h = List.Select(Table.ColumnNames(g),(x)=>not Text.Contains(x,"Column")), k = Table.SelectColumns(g,{List.Last(h)}&List.RemoveLastN(h,1)), l = if b <> null then k else null][l]
[/vba] главная идея индивидуальной обработки - так обычно просто быстрее, оперативу не шкалит
вот так пробуйте (добавил исключение некорректных файлов): [vba]
Код
let from = List.Buffer(Folder.Files("C:\путь")[Content]), tr = List.Transform(from,TransformFile), filtr = List.RemoveNulls(tr), to = Table.Combine(filtr) in to
[/vba] [vba]
Код
(x)=>[a=Excel.Workbook(x), b=a{[Name="ФА EBITDA Группы"]}?[Data]?, c = b{2}[Column3], d = Table.Skip(b,6), e = Table.PromoteHeaders(d), f = Table.SelectRows(e,(x)=>x[#"План/#(lf)Факт"]<>null), g = Table.AddColumn(f,"Предприятие",(x)=>c), h = List.Select(Table.ColumnNames(g),(x)=>not Text.Contains(x,"Column")), k = Table.SelectColumns(g,{List.Last(h)}&List.RemoveLastN(h,1)), l = if b <> null then k else null][l]
[/vba] главная идея индивидуальной обработки - так обычно просто быстрее, оперативу не шкалитпрохожий2019
прохожий2019, Протестировали PLEXом скорость обработки моим способом (как научился пока) и ваш способ => ваш способ чуть больше чем в 2 раза быстрее отрабатывает 47 файлов (136,8с / 63,5с). Пока конечно Космос для меня некоторые строки и в целом тема Table.Combine. Буду разбираться. Спасибо Вам за новые знания!!!
прохожий2019, Протестировали PLEXом скорость обработки моим способом (как научился пока) и ваш способ => ваш способ чуть больше чем в 2 раза быстрее отрабатывает 47 файлов (136,8с / 63,5с). Пока конечно Космос для меня некоторые строки и в целом тема Table.Combine. Буду разбираться. Спасибо Вам за новые знания!!!Anis625
Сообщение отредактировал Anis625 - Вторник, 31.05.2022, 09:59