Как установить источник запроса, имя которого является значением другого запроса? - PullRequest
0 голосов
/ 16 марта 2020

Мне нужен запрос (query1) из файла в папке. Этот файл ежедневно обновляется, и мне нужно подключиться к новейшему. Для этого я создал запрос (query2), который возвращает новейшее имя файла в его уникальной записи.

Теперь, как задать источник запроса1 как значение dinami c, извлеченное из запроса 2.

В приведенном ниже примере я хочу вместо указания на staticfilename.xlsx указать имя файла dinami c, значение которого рассчитывается с помощью query2

let
    Source = Excel.Workbook(File.Contents("Q:\....\staticfilename.XLSX"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(...)
in
    #"Changed Type"

Ответы [ 3 ]

2 голосов
/ 16 марта 2020

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

Подробнее в этой статье и это тоже .

1 голос
/ 16 марта 2020

Если query2 возвращает таблицу 1x1 с именем столбца Column1 и содержимым Q: \ path \ subpath \ filename.xlsx , тогда это должно сработать, чтобы получить путь из query2 в ваш следующий запрос

Source = Excel.Workbook(File.Contents(query2{0}[Column1]), null, true),
0 голосов
/ 17 марта 2020

Другой вариант - использовать функцию для возврата самого последнего файла:

//fnLatestFile (excluding temp files)
(
    FileFolder as text, 
    optional FileNameContains as text, 
    optional FileExtension as text, 
    optional IncludeSubfolders as logical, 
    optional OutputType as text
) =>

let
    fSwitch =  (Expression as any, Values as list, Results as list, optional Else as any) =>
        try Results{List.PositionOf(Values, Expression)} otherwise if Else = null then "Value not found" else Else,
    Source = Table.SelectRows(Folder.Files(FileFolder), each not Text.Contains([Name], "~")),
    #"Filtered Name" = if FileNameContains = null then Source else Table.SelectRows(Source, each (Text.Contains([Name], FileNameContains) = true)),
    #"Filtered Extension" = if FileExtension = null then #"Filtered Name" else Table.SelectRows(#"Filtered Name", each ([Extension] = FileExtension)),
    #"Filtered Subfolder" = if IncludeSubfolders = true then #"Filtered Extension" else Table.SelectRows(#"Filtered Extension", each ([Folder Path] = Text.Combine({FileFolder, if Text.End(FileFolder,1) = "\" then "" else "\"}))),
    #"Sorted by Modified Date" = Table.Sort(#"Filtered Subfolder",{{"Date modified", Order.Descending}}),
    FileData = #"Sorted by Modified Date"{0},
    Output = fSwitch(
        Text.Lower(OutputType),
        {"name","fullname","date"},
        {FileData[Name], FileData[Folder Path] & FileData[Name], FileData[Date modified]},
        FileData[Content]
    )
in
    Output

Применительно к вашему запросу ваша первая строка становится:

Source = Excel.Workbook(fnLatestFile("Q:\....\", "staticfilename", ".xlsx", false), null, true),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...