Всем доброго всего! Есть макрос который создает циклом запросы названием типа "W0". Запросы одинаковые, меняется источник. И есть запрос "Сводная" который их объединяет и обрабатывает дальше. Соответвенно источником данных для "Сводная" является функция в следующем виде: = Table.Combine({W0,W1,W2,W3,W4,W5}) Но запросов типа "W0" может быть разное количество и нумерация может отличаться. Пробовала подставлять имя списка с именами, но не работает. Пока что для каждого нового файла делаю это через копипасту. Как мне, блин, автоматизировать перечисление таблиц в этой функции? Есть ли возможность сделать это в рамках PQ, без VBA?
"Параметризировать" надо список источников, а не список запросов. А потом написать один запрос, который функцией List.Accumulate обработает весь список источников.
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")
написал: получившийся cписок, соответственно, в Table.Combine
Я получила этот список через #shared. Только как аргумент Table.Combine он не работает. Ни в в фигурных скобках, ни без них. Пробовала преобразовывать список и в одну строку через запятую, доводить имена запросов до полного вида #"W0" Table.Combine({#"список запросов"}) пишет не может преобразовать W0 в тип table. Может что то не так с синтаксисом? Как вообще работает эта функция в плане чтения аргументов
irabesova написал: Может что то не так с синтаксисом? Как вообще работает эта функция в плане чтения аргументов
нормально она работает, читать аргументы умеет. Только ждет, что это будет список таблиц, а вы ей список текстов (названий) подсунули. Если список названий получили, то
написал: "Параметризировать" надо список источников, а не список запросов. А потом написать один запрос, который функцией List.Accumulate обработает весь список источников.
Совет отличный на самом деле, хоть я и не пользовалась этой функцией ни разу. Теперь хоть знать буду. Но дело в том что мне нужно много запросов для контроля. По запросу обрабатываются pdf файлы спецификации на чертежи. Иногда бывают сдвиги. переносы и некорректности в именах и файл тупо не подгружается. Если у меня в одном из 200 файлов будет ошибка у меня не будет возможности её исправить. Это не 100% автофайл конечно, но работу облегчает сильно, То есть получается мне надо собрать в один запрос не совсем одинаковые по содержанию запросы
irabesova написал: получила этот список через #shared. Только как аргумент Table.Combine он не работает.
либо как у AlienSX... либо еще так
let Источник = Record.ToTable(#shared), фильтр_запросов = Table.SelectRows(Источник, each ([Name] = "Таблица1" )) // ЗАМЕНИТЕ НА СВОЙ ФИЛЬТР Value = фильтр_запросов[Value]
написал: нормально она работает, читать аргументы умеет. Только ждет, что это будет список таблиц, а вы ей список текстов (названий) подсунули. Если список названий получили, тоКодTable.Combine(List.Transform(#"список запросов", (x) => Record.Field(#shared, x)))
Золотой вы человек! Сколько нервов эта бяка у меня отняла. Спасибо, работает!
AlienSx, А я извиняюсь. Всё есть. Тут как раз всплывает что сами файлы не одинаковые. Оказывается файл просто называется W19, а внутри он абсолютно такой же как W18. Но я не могла предположить такую ошибку и сразу начала думать что у меня косяк.... Но спасибо вам за оперативную реакцию...)