Функция Power Query - необязательные аргументы - ожидается токен - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь создать функцию в powerquery, которая будет принимать необязательные аргументы.Цель этой функции - создать общий каталог, который будет использоваться для импорта текста в других запросах в рабочей книге.Как правило, для наших моделей у нас есть родительский каталог, имеющий следующую структуру:

Financial_Ind_Ovr_Dashoards
    Data
        -Data_File_1.txt
        -Data_File_2.txt
        -Data_File_3.txt
    Models
        -Model1.xlsm
        -Model2.xlsm

Иногда, однако, каталог Data или Models будет назван или вложен по-разному.

Эти родительские каталоги постоянно перемещаются с места на место, сохраняя структуру.В связи с этим я пытаюсь получить относительный путь к файлу для наших запросов на импорт.Учитывая это, я получаю сообщение об ошибке с кодом:

let
    GET_DATA_PATH = (optional dir_nest_level as number, optional data_dir_path as text) =>

    //Handle Input
    cur_dir_nest_level = if dir_nest_level = null or dir_nest_level = "" then 1
                                                                         else dir_nest_level,

    data_dir_path_from_parent_dir = if data_dir_path = null or data_dir_path = "" then "Data\"
                                                                                  else data_dir_path,


    //Get Path
    full_path = Excel.CurrentWorkbook(){[Name="WORKBOOK_PATH"]}[Content]{0}[Column1],
    separators = Text.PositionOf(full_path, "\", Occurrence.All),
    dir_count = List.Count(separators),
    sep_index = dir_count - 1 - cur_dir_nest_level,
    GET_DATA_PATH = Text.Start(full_path, separators{sep_index} + 1) & data_dir_path_from_parent_dir
 in
    GET_DATA_PATH

Когда я пишу это как обычный запрос (а не как функцию), я знаю, что моя логика после комментария // Get Path работает нормально.После добавления логики, чтобы сделать это функцией и обрабатывать ввод, я продолжаю получать следующую ошибку:

Expression.SyntaxError: Token Literal expected.

Эта ошибка возникает в первом операторе if, где я ссылаюсь на переменную cur_dir_nest_level.Я не очень знаком с функциями мощных запросов, поэтому я уверен, что делаю что-то неправильно.Любое и все проникновение будет с благодарностью.

1 Ответ

1 голос
/ 15 мая 2019

Вы забыли лишнее, вам нужно:

let
    GET_DATA_PATH = (optional dir_nest_level as number, optional data_dir_path as text) =>
     let
        //Handle Input
    cur_dir_nest_level = if dir_nest_level = null or dir_nest_level = "" then 1
                                                                         else dir_nest_level,

    data_dir_path_from_parent_dir = if data_dir_path = null or data_dir_path = "" then "Data\"
                                                                                  else data_dir_path,


    //Get Path
    full_path = Excel.CurrentWorkbook(){[Name="WORKBOOK_PATH"]}[Content]{0}[Column1],
    separators = Text.PositionOf(full_path, "\", Occurrence.All),
    dir_count = List.Count(separators),
    sep_index = dir_count - 1 - cur_dir_nest_level,
    GET_DATA_PATH = Text.Start(full_path, separators{sep_index} + 1) & data_dir_path_from_parent_dir
    in
        GET_DATA_PATH
in
    GET_DATA_PATH
...