De todos es conocido el problema que se crea cuando parametrizamos nuestras rutas de enlace a las fuentes de datos...
Salvo que tuvieramos 'cancelados' los niveles de privacidad (puedes leer el artículo a tal efecto) nos saltaría a nosotros mismos y al resto de compañeros/usuarios la advertencia:
Formula.Firewall: Consulta 'XXXX' (paso 'OOOOOO') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.
Hoy veremos una alternativa a modificar las Opciones de la consulta.
Montemos nuestro modelo.
En una celda de nuestro libro de trabajo añadimos la ruta completa al fichero fuente, por comodidad, esta ruta será parte de una tabla:
Cargaremos y desagruparemos hasta conseguir que el valor de la ruta quede comoo un texto... El código M de la consulta quedará:
La renombraremos como pRUTACompleta
En el siguiente paso procedemos a enlazar con el fichero fuente indicado en esa celda... con una mínima transformación.
Desde el libro de trabajo, en la ficha Datos > grupo Obtener y transformar > Obtener datos > De un archivo > De un libro empleando el explorador existente localizamos el fichero fuente y aceptamos.
Indicamos qué tabla, de entre las existentes en el libro fuente, queremos transformar
Ya en el editor, si queremos, podemos aplicar algún filtro u otra acción...
En mi ejemplo el código M resultante de aplicar acciones 'normales' es:
Y lo más importante, de momento, no hay fallo... 👏👏
Sobre la consulta anterior, procedemos a reemplazar la ruta completa 'fija' que aparece como texto por nuestro parámetro 'pRUTAcompleta', el código quedará entonces:
Y aquí al Aceptar nos encontraremos con una pequeña sorpresa!!!.
El error Formula.Firewall aparece :O
No queremos o no podemos cambiar las Opciones de privacidad de las consultas... asi pues, ¿cuál es la solución??
Lo primero es que vamos a generar una Consulta en blanco (que llamaré 'EvitoFirewall') donde incluiré las siguientes líneas:
Curiosamente al incluir el 'parámetro' de la ruta dentro de la consulta, no salta el Firewall.... muy bien!
Último paso, incluiremos y reemplazaremos esta consulta recién creada 'EvitoFirewall' en la consulta inicial que nos generaba el error... Y quedaría:
Te sorprenderás con el resultado!!. Presiona Listo y booom!.
Adios error Formula.Firewall
Resumen. Debemos crear una consulta intermedia que evite el firewall, e incluirla posteriormente como primer paso de nuestra consulta definitiva...
Y olvidate de cambiar tus niveles de privacidad ;-)
Formula.Firewall: Consulta 'XXXX' (paso 'OOOOOO') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.
Hoy veremos una alternativa a modificar las Opciones de la consulta.
Montemos nuestro modelo.
En una celda de nuestro libro de trabajo añadimos la ruta completa al fichero fuente, por comodidad, esta ruta será parte de una tabla:
Cargaremos y desagruparemos hasta conseguir que el valor de la ruta quede comoo un texto... El código M de la consulta quedará:
let Origen = Excel.CurrentWorkbook(){[Name="TblRUTA"]}[Content]{0}[Ruta_Carpeta] in Origen
La renombraremos como pRUTACompleta
En el siguiente paso procedemos a enlazar con el fichero fuente indicado en esa celda... con una mínima transformación.
Desde el libro de trabajo, en la ficha Datos > grupo Obtener y transformar > Obtener datos > De un archivo > De un libro empleando el explorador existente localizamos el fichero fuente y aceptamos.
Indicamos qué tabla, de entre las existentes en el libro fuente, queremos transformar
Ya en el editor, si queremos, podemos aplicar algún filtro u otra acción...
En mi ejemplo el código M resultante de aplicar acciones 'normales' es:
let Origen = Excel.Workbook(File.Contents("F:\excelforo\PQ_Plegado_FormulaFireWall.xlsx"), null, true), compras4_Table = Origen{[Item="compras4",Kind="Table"]}[Data], TipoCambiado = Table.TransformColumnTypes(compras4_Table,{{"art", type text}, {"pais", type text}, {"uds", Int64.Type}}), FilasFiltradas = Table.SelectRows(TipoCambiado, each ([art] = "a") and ([pais] = "ES")) in FilasFiltradas
Y lo más importante, de momento, no hay fallo... 👏👏
Sobre la consulta anterior, procedemos a reemplazar la ruta completa 'fija' que aparece como texto por nuestro parámetro 'pRUTAcompleta', el código quedará entonces:
let Origen = Excel.Workbook(File.Contents(pRUTAcompleta), null, true), compras4_Table = Origen{[Item="compras4",Kind="Table"]}[Data], TipoCambiado = Table.TransformColumnTypes(compras4_Table,{{"art", type text}, {"pais", type text}, {"uds", Int64.Type}}), FilasFiltradas = Table.SelectRows(TipoCambiado, each ([art] = "a") and ([pais] = "ES")) in FilasFiltradas
Y aquí al Aceptar nos encontraremos con una pequeña sorpresa!!!.
El error Formula.Firewall aparece :O
No queremos o no podemos cambiar las Opciones de privacidad de las consultas... asi pues, ¿cuál es la solución??
Lo primero es que vamos a generar una Consulta en blanco (que llamaré 'EvitoFirewall') donde incluiré las siguientes líneas:
let //incluyo en esta consulta el parámetro para obtener el texto de la ruta completa RutaCarpeta=Excel.CurrentWorkbook(){[Name="TblRUTA"]}[Content]{0}[Ruta_Carpeta], //y hago uso de esta variable para incorporarla y recuperar su contenido Origen = Excel.Workbook(File.Contents(RutaCarpeta ), null, true) in Origen
Curiosamente al incluir el 'parámetro' de la ruta dentro de la consulta, no salta el Firewall.... muy bien!
Último paso, incluiremos y reemplazaremos esta consulta recién creada 'EvitoFirewall' en la consulta inicial que nos generaba el error... Y quedaría:
let //anulamos el viejo movimiento... //Origen = Excel.Workbook(File.Contents(pRUTACompleta ), null, true), //y lo sustituimos por Origen = EvitoFirewall, compras4_Table = Origen{[Item="compras4",Kind="Table"]}[Data], TipoCambiado = Table.TransformColumnTypes(compras4_Table,{{"art", type text}, {"pais", type text}, {"uds", Int64.Type}}), FilasFiltradas = Table.SelectRows(TipoCambiado, each ([art] = "a") and ([pais] = "ES")) in FilasFiltradas
Te sorprenderás con el resultado!!. Presiona Listo y booom!.
Adios error Formula.Firewall
Resumen. Debemos crear una consulta intermedia que evite el firewall, e incluirla posteriormente como primer paso de nuestra consulta definitiva...
Y olvidate de cambiar tus niveles de privacidad ;-)
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.