Страницы: 1
RSS
PQ Table.Combine: как запараметризировать список объединяемых таблиц?, Нужно сделать автофайл-шаблон для обрабоки спецификаций
 
Всем доброго всего!
Есть макрос который создает циклом запросы названием типа "W0". Запросы одинаковые, меняется источник.
И есть запрос "Сводная" который их объединяет и обрабатывает дальше.
Соответвенно источником данных для "Сводная" является функция в следующем виде:
= Table.Combine({W0,W1,W2,W3,W4,W5})
Но запросов типа "W0" может быть разное количество и нумерация может отличаться. Пробовала подставлять имя списка с именами, но не работает. Пока что для каждого нового файла делаю это через копипасту.
Как мне, блин, автоматизировать перечисление таблиц в этой функции? Есть ли возможность сделать это в рамках PQ, без VBA?
Изменено: irabesova - 24.10.2024 22:39:12 (не поздаровалась)
 
Цитата
irabesova написал:
Запросы одинаковые, меняется источник.

"Параметризировать" надо список источников, а не список запросов.  А потом написать один запрос, который  функцией List.Accumulate обработает весь список  источников.
Изменено: tula19 - 25.10.2024 00:47:26
 
irabesova,
все имена запросов у вас будут находиться в глобальной области #shared - это будет запись в т.ч. содержащая ваши имена запросов вместе с названиями всех функций PQ и др. барахлом
сделать автоматически собираемый список имен запросов не трудно, если их однозначно можно по части имени выделить, по наличию только W в имени, конечно, еще куча чего найдется, поэтому, если вы сможете переделать именование запросов на др. принцип именования (например WWWW0, WWWW1....), то так:
= List.Select(Record.FieldNames(#shared), each Text.Contains(_, "WWWW"))
ну либо #shared переделывайте в таблицу или т.п. и как-то фильтруйте
получившийся cписок, соответственно, в Table.Combine

или используйте что-то вроде = List.Select(Record.FieldNames(#shared), each Text.Start(_,1)="W")
Изменено: voler83 - 25.10.2024 01:30:13
 
Цитата
написал:
получившийся cписок, соответственно, в Table.Combine
Я получила этот список через #shared. Только как аргумент Table.Combine он не работает. Ни в в фигурных скобках, ни без них. Пробовала преобразовывать список и в одну строку через запятую, доводить имена запросов до полного вида #"W0"
Table.Combine({#"список запросов"})
пишет не может преобразовать W0 в тип table.
Может что то не так с синтаксисом? Как вообще работает эта функция в плане чтения аргументов
 
Цитата
irabesova написал:
Может что то не так с синтаксисом? Как вообще работает эта функция в плане чтения аргументов
нормально она работает, читать аргументы умеет. Только ждет, что это будет список таблиц, а вы ей список текстов (названий) подсунули. Если список названий получили, то
Код
Table.Combine(List.Transform(#"список запросов", (x) => Record.Field(#shared, x)))
Пришелец-прораб.
 
Цитата
написал:
"Параметризировать" надо список источников, а не список запросов.  А потом написать один запрос, который  функцией List.Accumulate обработает весь список  источников.
Совет отличный на самом деле, хоть я и не пользовалась этой функцией ни разу. Теперь хоть знать буду.
Но дело в том что мне нужно много запросов для контроля. По запросу обрабатываются pdf файлы спецификации на чертежи. Иногда бывают сдвиги. переносы и некорректности в именах и файл тупо не подгружается.
Если у меня в одном из 200 файлов будет ошибка у меня не будет возможности её исправить. Это не 100% автофайл конечно, но работу облегчает сильно,
То есть получается мне надо собрать в один запрос не совсем одинаковые по содержанию запросы
 
Цитата
irabesova написал:
То есть получается мне надо собрать в один запрос не совсем одинаковые по содержанию запросы

Теперь понятно
Изменено: tula19 - 25.10.2024 08:27:41
 
Цитата
irabesova написал:
получила этот список через #shared. Только как аргумент Table.Combine он не работает.

либо как у AlienSX... либо еще так

let
   Источник = Record.ToTable(#shared),
фильтр_запросов = Table.SelectRows(Источник, each ([Name] = "Таблица1" )) // ЗАМЕНИТЕ НА СВОЙ ФИЛЬТР
   Value = фильтр_запросов[Value]

in
   Value
Изменено: voler83 - 25.10.2024 12:06:41
 
Цитата
написал:
нормально она работает, читать аргументы умеет. Только ждет, что это будет список таблиц, а вы ей список текстов (названий) подсунули. Если список названий получили, тоКодTable.Combine(List.Transform(#"список запросов", (x) => Record.Field(#shared, x)))
Золотой вы человек! Сколько нервов эта бяка у меня отняла. Спасибо, работает!  
 
AlienSx,
Появилась странная проблема
= Table.Combine(List.Transform(Name, (x) => Record.Field(#shared, x)))

Name это мой список. Там есть запрос W19. Но он почему то не добавился в сводную (не скомбайнился)
не могу понять почему.
 
irabesova, возможно, что он есть в списке. А есть ли он в #shared? А что показывает просто Record.Field(#shared, "W19") ?
Пришелец-прораб.
 
AlienSx,
А я извиняюсь. Всё есть. Тут как раз всплывает что сами файлы не одинаковые. Оказывается файл просто называется W19, а внутри он абсолютно такой же как W18. Но я не могла предположить такую ошибку и сразу начала думать что у меня косяк....
Но спасибо вам за оперативную реакцию...)
Изменено: irabesova - 06.12.2024 13:46:34
Страницы: 1
Наверх