如何在 Power Query 中找不到数据源时跳过文件的处理?

问题描述 投票:0回答:2

Power Query 从单元格中获取源文件应该去的路径。

我想处理当该文件夹中没有文件或单元格中没有任何引用路径的文本时的情况。目标是如果单元格或文件夹 (DigitalCallPath) 为空,则跳过以下步骤(或者可能用空表欺骗后续步骤)。

我试过,在很多事情中,函数尝试......否则没有任何成功。

我的代码是这样的:

let
    DigitalCallPath = Excel.CurrentWorkbook(){[Name="DigitalCallPath"]}[Content][Column1]{0},
    Origen = Folder.Files(DigitalCallPath),
    #"Archivos ocultos filtrados1" = Table.SelectRows(Origen, each [Attributes]?[Hidden]? <> true),
    #"Invocar función personalizada1" = Table.AddColumn(#"Archivos ocultos filtrados1", "Transformar archivo (2)", each #"Transformar archivo (2)"([Content])),
    #"Columnas con nombre cambiado1" = Table.RenameColumns(#"Invocar función personalizada1", {"Name", "Source.Name"}),
    #"Otras columnas quitadas1" = Table.SelectColumns(#"Columnas con nombre cambiado1", {"Source.Name", "Transformar archivo (2)"}),
    #"Columna de tabla expandida1" = Table.ExpandTableColumn(#"Otras columnas quitadas1", "Transformar archivo (2)", Table.ColumnNames(#"Transformar archivo (2)"(#"Archivo de ejemplo (2)"))),
    #"Tipo cambiado" = Table.TransformColumnTypes(#"Columna de tabla expandida1",{{"Source.Name", type text}, {"Id. de la cuenta (NO modificar campo)", type text}, {"Nombre", type text}, {"Apellidos", type text}, {"a/o", type text}, {"Genero", type text}, {"Nº de Documento", Int64.Type}, {"Fecha de nacimiento", type any}, {"Correo electrónico", type text}, {"Teléfono Celular", Int64.Type}, {"Teléfono particular", type any}, {"Calle", type text}, {"Ciudad", type text}, {"Provincia", type text}, {"Código postal", Int64.Type}, {"Banco (Ver desplegable)", type text}, {"Tarjeta (Ver desplegable)", type any}, {"Nº de Tarjeta", type text}, {"Vencimiento", type date}, {"Recibo  (No modificar)", type any}, {"Descripción Fuente  (No modificar)", type any}, {"Descripción Origen  (Nombre del operador)", type text}, {"Fecha Ingreso", type date}, {"Comentarios", type text}, {"Monto Donacion", Int64.Type}, {"País  (No modificar)", type text}, {"Id. del propietario (No modificar)", type text}, {"Autoriza llamadas (No modificar)", type text}, {"Fecha de alta  (Dejarlo vacío)", type any}, {"Fuente (No modificar)", type text}, {"Autoriza envío postal", type text}, {"Correo electonico alternativo", type any}, {"Pack Fin de Año (Ver desplegable)", type text}, {"Relación con donante  (No modificar)", type text}, {"Tipo de direccion", type text}, {"Tipo de Documento", type text}, {"Welcome Pack (Ver desplegable)", type text}, {"Modalidad  ", type text}, {"Base", type text}}),
    #"Filas filtradas" = Table.SelectRows(#"Tipo cambiado", each ([Nombre] <> null)),
    #"Columnas con nombre cambiado" = Table.RenameColumns(#"Filas filtradas",{{"Nombre", "Nombre"}, {"Apellidos", "Apellido"}, {"Genero", "Genero__c"}, {"Nº de Documento", "N_de_Documento__c"}, {"Fecha de nacimiento", "Birthdate"}, {"Correo electrónico", "Email"}, {"Teléfono Celular", "MobilePhone"}, {"Teléfono particular", "HomePhone"}, {"Calle", "MailingStreet"}, {"Código postal", "MailingPostalCode"}, {"Descripción Origen  (Nombre del operador)", "Descripci_n_Origen__c"}, {"Base", "Campaña"}, {"Monto Donacion", "Monto_Donacion__c"}, {"Fecha Ingreso", "Fecha_Ingreso__c"}, {"Banco (Ver desplegable)", "Entidad Bancaria"}, {"Tarjeta (Ver desplegable)", "Tipo de Tarjeta"}, {"Nº de Tarjeta", "Numero de Tarjeta"}, {"Ciudad", "MailingCity"}}),
    Fuente__c = Table.AddColumn(#"Columnas con nombre cambiado", "Fuente__c", each "Telemarketing"),
    Descripci_n_Fuente__c = Table.AddColumn(Fuente__c, "Descripci_n_Fuente__c", each "Digital Call"),
    #"Columnas quitadas" = Table.RemoveColumns(Descripci_n_Fuente__c,{"Id. de la cuenta (NO modificar campo)", "a/o", "Recibo  (No modificar)", "Descripción Fuente  (No modificar)", "Id. del propietario (No modificar)", "Autoriza llamadas (No modificar)", "Fecha de alta  (Dejarlo vacío)", "Autoriza envío postal", "Correo electonico alternativo", "Pack Fin de Año (Ver desplegable)", "Tipo de direccion", "Tipo de Documento", "Welcome Pack (Ver desplegable)", "Modalidad  ", "País  (No modificar)", "Fuente (No modificar)", "Relación con donante  (No modificar)"}),
    #"Columnas con nombre cambiado2" = Table.RenameColumns(#"Columnas quitadas",{{"Vencimiento", "Vencimiento__c"}, {"Comentarios", "Comentarios__c"}})
in
    #"Columnas con nombre cambiado2"

你能帮我解决这个问题吗?

试了好几种方法,都找不到代码里写“如果文件夹是空的,就用这个空表”的方法

我一直在尝试两个功能:

  • 如果……那么……否则

  • 尝试...否则

    let
        DigitalCallPath = Excel.CurrentWorkbook(){[Name="DigitalCallPath"]}[Content][Column1]{0},
        Origen = Folder.Files(DigitalCallPath),
        // Check if DigitalCallPath is null or empty
        if DigitalCallPath = null or DigitalCallPath = "" then
            // Return immediately if DigitalCallPath is null or empty
            return;
        else
        // Continue with the rest of the instructions
            #"Archivos ocultos filtrados1" = Table.SelectRows(Origen, each [Attributes]?[Hidden]? <> true),
    

应该是这样的空表:

#table({"Id. de la cuenta (NO modificar campo)",    "Nombre",   "Apellidos",    "a/o",  "Genero",   "Nº de Documento",  "Fecha de nacimiento",  "Correo electrónico",   "Teléfono Celular", "Teléfono particular",  "Calle",    "Ciudad",   "Provincia",    "Código postal",    "Banco (Ver desplegable)",  "Tarjeta (Ver desplegable)",    "Nº de Tarjeta",    "Vencimiento",  "Recibo  (No modificar)",   "Descripción Fuente  (No modificar)",   "Descripción Origen  (Nombre del operador)",    "Fecha Ingreso",    "Comentarios",  "Monto Donacion",   "País  (No modificar)", "Id. del propietario (No modificar)",   "Autoriza llamadas (No modificar)", "Fecha de alta  (Dejarlo vacío)",   "Fuente (No modificar)",    "Autoriza envío postal",    "Correo electonico alternativo",    "Pack Fin de Año (Ver desplegable)",    "Relación con donante  (No modificar)", "Tipo de direccion",    "Tipo de Documento",    "Welcome Pack (Ver desplegable)",   "Modalidad  ",  "Base"}, {})

非常感谢您的支持, 朱利安

excel powerquery m
2个回答
0
投票

这有帮助吗?

let DigitalCallPath = Excel.CurrentWorkbook(){[Name="DigitalCallPath"]}[Content][Column1]{0},
ztable = #table({"Id. de la cuenta (NO modificar campo)",    "Nombre",   "Apellidos",    "a/o",  "Genero",   "Nº de Documento",  "Fecha de nacimiento",  "Correo electrónico",   "Teléfono Celular", "Teléfono particular",  "Calle",    "Ciudad",   "Provincia",    "Código postal",    "Banco (Ver desplegable)",  "Tarjeta (Ver desplegable)",    "Nº de Tarjeta",    "Vencimiento",  "Recibo  (No modificar)",   "Descripción Fuente  (No modificar)",   "Descripción Origen  (Nombre del operador)",    "Fecha Ingreso",    "Comentarios",  "Monto Donacion",   "País  (No modificar)", "Id. del propietario (No modificar)",   "Autoriza llamadas (No modificar)", "Fecha de alta  (Dejarlo vacío)",   "Fuente (No modificar)",    "Autoriza envío postal",    "Correo electonico alternativo",    "Pack Fin de Año (Ver desplegable)",    "Relación con donante  (No modificar)", "Tipo de direccion",    "Tipo de Documento",    "Welcome Pack (Ver desplegable)",   "Modalidad  ",  "Base"},{}),
Origen =   Folder.Files(DigitalCallPath),
Output = if (try Table.RowCount(Origen) otherwise 0) =0 then ztable else Table.SelectRows(Origen, each [Attributes] <> true)
in Output

0
投票

正确的做法是以跳过耗时计算的方式嵌套您的

let ... in ...

我无法检查最终结果(您的变量和列的语言是理解步骤的真正障碍+您可能已经单独定义了

#"Transformar archivo (2)"
)但它应该包含在步骤中:

  1. 定义一个没有记录的表(=空表),其中包含您在最终结果中期望的所有列。
    无需定义
    EmptyTable
    变量,但是,我发现如果我那样做,它会为您提供更清晰的解释。
  2. 对于
    Origen
    ,如果文件夹不存在,用
    Folder.Files(...)
    包围
    try ... otherwise ...
    以返回一个空表。
  3. 制作一个
    if Table.isEmpty(Origen) then EmptyTable else (<lengthy calculation>)
    ,以便有一个结构,如果它落入
    else
    部分则跳过计算。

看起来像这样:

let
    /* Define an empty table with the same columns as what is expected in the final result. */
    EmptyTable = #table({"Add the columns of final variable Columnas con nombre cambiado2 here"}, {}),
    DigitalCallPath = Excel.CurrentWorkbook(){[Name="DigitalCallPath"]}[Content][Column1]{0},
    /* Origen will be empty if there is no file (obviously) or if the folder does not exist. */
    Origen = try Table.Buffer(Folder.Files(DigitalCallPath)) otherwise #table({"Empty table" }, {}),
    result = if Table.IsEmpty(Origen) then EmptyTable else (
/* If Origen is empty, all of this is skipped. */
    let
        #"Archivos ocultos filtrados1" = Table.SelectRows(Origen, each [Attributes]?[Hidden]? <> true),
        #"Invocar función personalizada1" = Table.AddColumn(#"Archivos ocultos filtrados1", "Transformar archivo (2)", each #"Transformar archivo (2)"([Content])),
        #"Columnas con nombre cambiado1" = Table.RenameColumns(#"Invocar función personalizada1", {"Name", "Source.Name"}),
        #"Otras columnas quitadas1" = Table.SelectColumns(#"Columnas con nombre cambiado1", {"Source.Name", "Transformar archivo (2)"}),
        #"Columna de tabla expandida1" = Table.ExpandTableColumn(#"Otras columnas quitadas1", "Transformar archivo (2)", Table.ColumnNames(#"Transformar archivo (2)"(#"Archivo de ejemplo (2)"))),
        #"Tipo cambiado" = Table.TransformColumnTypes(#"Columna de tabla expandida1",{{"Source.Name", type text}, {"Id. de la cuenta (NO modificar campo)", type text}, {"Nombre", type text}, {"Apellidos", type text}, {"a/o", type text}, {"Genero", type text}, {"Nº de Documento", Int64.Type}, {"Fecha de nacimiento", type any}, {"Correo electrónico", type text}, {"Teléfono Celular", Int64.Type}, {"Teléfono particular", type any}, {"Calle", type text}, {"Ciudad", type text}, {"Provincia", type text}, {"Código postal", Int64.Type}, {"Banco (Ver desplegable)", type text}, {"Tarjeta (Ver desplegable)", type any}, {"Nº de Tarjeta", type text}, {"Vencimiento", type date}, {"Recibo  (No modificar)", type any}, {"Descripción Fuente  (No modificar)", type any}, {"Descripción Origen  (Nombre del operador)", type text}, {"Fecha Ingreso", type date}, {"Comentarios", type text}, {"Monto Donacion", Int64.Type}, {"País  (No modificar)", type text}, {"Id. del propietario (No modificar)", type text}, {"Autoriza llamadas (No modificar)", type text}, {"Fecha de alta  (Dejarlo vacío)", type any}, {"Fuente (No modificar)", type text}, {"Autoriza envío postal", type text}, {"Correo electonico alternativo", type any}, {"Pack Fin de Año (Ver desplegable)", type text}, {"Relación con donante  (No modificar)", type text}, {"Tipo de direccion", type text}, {"Tipo de Documento", type text}, {"Welcome Pack (Ver desplegable)", type text}, {"Modalidad  ", type text}, {"Base", type text}}),
        #"Filas filtradas" = Table.SelectRows(#"Tipo cambiado", each ([Nombre] <> null)),
        #"Columnas con nombre cambiado" = Table.RenameColumns(#"Filas filtradas",{{"Nombre", "Nombre"}, {"Apellidos", "Apellido"}, {"Genero", "Genero__c"}, {"Nº de Documento", "N_de_Documento__c"}, {"Fecha de nacimiento", "Birthdate"}, {"Correo electrónico", "Email"}, {"Teléfono Celular", "MobilePhone"}, {"Teléfono particular", "HomePhone"}, {"Calle", "MailingStreet"}, {"Código postal", "MailingPostalCode"}, {"Descripción Origen  (Nombre del operador)", "Descripci_n_Origen__c"}, {"Base", "Campaña"}, {"Monto Donacion", "Monto_Donacion__c"}, {"Fecha Ingreso", "Fecha_Ingreso__c"}, {"Banco (Ver desplegable)", "Entidad Bancaria"}, {"Tarjeta (Ver desplegable)", "Tipo de Tarjeta"}, {"Nº de Tarjeta", "Numero de Tarjeta"}, {"Ciudad", "MailingCity"}}),
        Fuente__c = Table.AddColumn(#"Columnas con nombre cambiado", "Fuente__c", each "Telemarketing"),
        Descripci_n_Fuente__c = Table.AddColumn(Fuente__c, "Descripci_n_Fuente__c", each "Digital Call"),
        #"Columnas quitadas" = Table.RemoveColumns(Descripci_n_Fuente__c,{"Id. de la cuenta (NO modificar campo)", "a/o", "Recibo  (No modificar)", "Descripción Fuente  (No modificar)", "Id. del propietario (No modificar)", "Autoriza llamadas (No modificar)", "Fecha de alta  (Dejarlo vacío)", "Autoriza envío postal", "Correo electonico alternativo", "Pack Fin de Año (Ver desplegable)", "Tipo de direccion", "Tipo de Documento", "Welcome Pack (Ver desplegable)", "Modalidad  ", "País  (No modificar)", "Fuente (No modificar)", "Relación con donante  (No modificar)"}),
        #"Columnas con nombre cambiado2" = Table.RenameColumns(#"Columnas quitadas",{{"Vencimiento", "Vencimiento__c"}, {"Comentarios", "Comentarios__c"}})
    in
        #"Columnas con nombre cambiado2"
    )
in
    result

只要您确保代码保持清晰,您就可以创建任意数量的

let ... in ...
结构。 或者,您可以定义一个函数来完成所有复杂的工作,这样您就可以这样写:

result = if Table.IsEmpty(Origen) then EmptyTable else MyFunction(Origen)
© www.soinside.com 2019 - 2024. All rights reserved.