Я пытаюсь создать функцию в 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. Я не совсем знаком с функциями запроса мощности, поэтому я уверен, что делаю что-то неправильно. Мы будем очень признательны за любую информацию.
Вы забыли дополнительный let, который вам нужен:
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