jct999
Hola,
Creé una función en PowerQuery / M con algunos parámetros y muchos pasos.
Esta función debe usarse en otras consultas de PowerQuery / M.
Pero me enfrento a un error en esta función y el mensaje de error no es muy claro.
Entonces, mi pregunta es ¿cómo puedo depurar el error en una función autodefinida? ¿Hay alguna forma de verificar el resultado de cada paso de la función, como podemos hacer en una consulta estándar que no es una función?
(Reescribir la función muchas veces para regresar cada paso sucesivamente a la salida de la función sería un método de cerdito indigno … así que esta no es una buena respuesta).
Saludos,
cortejando
Hola,
También tuve algunas pesadillas al intentar depurar una función recursiva. La solución que encontré fue utilizar el hecho de que PBI es bueno para manipular y transformar datos.
Por ejemplo la función
f («x») = «x»
se convertiría en una matriz con el resultado real y la información de depuración
f («x») = [Result=»x», DebugInfo1=xxxx, DebugInfo2=xxxx,…]
Para obtener el resultado, llame a MyResult = Record.Field (f («x»), «Result»)
He puesto una muestra de código de trabajo a continuación que puede pegar en una consulta en blanco.
Saludos
dejar
// Función original
Saludos = (Quién as texto, Cuándo como número) => dejar
Introducción = «Hola «,
Periodo = Si Cuando = 0 entonces «Mañana» demás «Tarde»,
Bueno = «, Bien «,
FullGreeting = Introducción & Quién & Bueno & Periodo & «!»
en
FullGreeting,
// Función con depuración agregada
GreetingsDebug = (Quién como texto, Cuándo como número, depuración opcional como anulable lógico) => dejar
Introducción = «Hola «,
Periodo = Si Cuando = 0 entonces «Mañana» demás «Tarde»,
Bueno = «, Bien «,
FullGreeting = Introducción & Quién & Bueno & Periodo & «!»,
NeedDebug = Si Depurar = nulo entonces falso más depurar,
DebugOutput = Si NeedDebug entonces [Period = Period, Good = Good, When = When] demás [], // Puedo incluir tantos pasos como quiera
FuncOutput = Record.Combine ({[Result = FullGreeting], DebugOutput})
en
FuncOutput,
// Llamadas a las funciones
GoodMorningBobOriginal = Saludos («Beto», 0), // Llamando a la función original
GoodMorningBobNew = Record.Field (GreetingsDebug («Beto», 0), «Resultado»), // Llamando a la nueva función en producción; necesita obtener el campo correcto en el registro
GoodMorningBobNewDebug = GreetingsDebug («Beto», 0, cierto) // Llamar a la función en modo de depuración y recuperar toda la información a la vez
en
Buenos díasBobNuevoDebug
Alba
Hola @ jct999
Simplemente haga una consulta normal a partir de los pasos de la función. Asigne algunos valores a los argumentos iniciales. Entonces podrá ver lo que está sucediendo paso a paso.
Marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.
Contácteme de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala
Salud
Allison Kennedy
Depende de cuál sea la función. Puede usar ‘consultas auxiliares’ para mostrar el resultado de la función para cada paso y luego convertir esa consulta en una función. En este caso, si desea que la consulta auxiliar permanezca vinculada a la función, siempre debe actualizar la consulta auxiliar y no puede realizar ningún cambio en la función directamente. Cualquier cambio que realice en la consulta de ayuda se trasladará a la función.
¿Puedes pegar tu código M aquí para que podamos ser más específicos?
De lo contrario, si puede crear una nueva consulta que siga los pasos de su función (utilizando valores ‘actuales’ para los parámetros como muestra), haga clic derecho en el nombre de la consulta y conviértalo en función.
jct999
En respuesta a Allison Kennedy
Hola
No puedo copiar mi código porque debería ser demasiado difícil explicar lo que hace, y me gustaría una solución que sea adecuada para todos los casos …
¿Qué quiere decir con «consultas de ayuda»?
Un comentario: Crear y probar una nueva consulta «B» con algunas partes de una función «A», para probar la función «A» es una muy mala solución, porque:
1) No prueba la función A en un contexto dinámico, solo prueba la consulta B en un estático.
2) Es una gran pérdida de tiempo si tiene un montón de funciones para probar con un montón de parámetros.
; o (
Allison Kennedy
En respuesta a jct999
@ jct999 Al probar una función, siempre necesitará probarla con un parámetro dado. Es simplemente la naturaleza que con algunos parámetros se producirá un error mientras que otros no. Si sabe lo que está haciendo su función, entonces puede tener una mejor idea de qué parámetros están causando problemas y usarlos para sus pruebas.
Vea si estas publicaciones ayudan a mostrar cómo convertir consultas en funciones usando parámetros y, por lo tanto, le brindan una depuración de errores paso a paso:
https://allisonkennedycv.blogspot.com/2020/04/use-parameters-to-combine-data.html
https: //www.poweredsolutions.co/2019/02/19/parameters-and-functions-in-power-bi-power-query-custom-f …