功能查询功能-可选参数-预期令牌文字

时间:2019-05-15 16:51:41

标签: excel powerbi powerpivot powerquery

我正在尝试在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.

在我引用cur_dir_nest_level变量的第一个if语句上会发生此错误。我对电源查询功能不是很熟悉,所以我确定自己做错了什么。任何和所有的感谢将不胜感激。

1 个答案:

答案 0 :(得分:1)

您已经忘记了需要的额外内容:

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