Forum Discussion
Funciones anidadas en PowerQuery
Hola @JDanielHarvey ,
La mejor persona para explicar esto es @ImkeF uno de los mejores (si no el mejor) usuario en el idioma M en la comunidad.
@ImkeF puedes ayudar en esto.
- JDanielHarvey6 years agoRegular Visitor
Ok suena bien @MFelix . A medida que pasé más tiempo revisando cómo funcionan las funciones y los parámetros anoche, tiene sentido que (DataTableTemp, n) están recibiendo sus datos de pasos anteriores en la consulta sub 'let'. Este parece ser el caso de cada función cuando se realiza una función 'cada una' escrita manualmente con un outter y una tabla interna como
• Table.AddColumn('"previousStep", "NewColName", (OT) ?> Table.AddColumn((OT)[NestedTableColumn], "length", (IT) ?> Text.Length((IT)[column]), Int64.Type))
Por lo tanto, en la consulta anterior, (OT) recibe sus datos de la tabla "previousStep" que, a continuación, se pueden hacer referencia dentro de la anidada Table.AddColumn pero el (IT) remite los datos de la tabla anidada de (OT)[NestedTableColumn]
En cuanto a la consulta de la imagen y mi pregunta sobre (DataTableTemp, n) ambos están recibiendo sus valores de DataTableTemp - FindReplaceList y n - Counter. Sólo un pequeño contador intuitivo b / c al principio usted piensa que sería capaz de llamar a esas variables dentro de los parámetros, pero eso no es cómo funcionan los parámetros Supongo.Lo único que todavía no parece entender ahora es:
Línea 18 de la imagen. Salida: BulkReplaceValues(DataTable, 0). si n hace el contador - 1 y el resultado es "ReplaceTable" se proporciona que es DataTableColumn transformado con todas las tranformaciones no debería el último paso definido ser algo así como:
Salida: BulkReplaceValues(ReplaceTable, n)? ¿Por qué está en la imagen BulkReplaceValues(DataTable, 0)? ¿Qué es el cero y por qué DataTable?
Espero que @ImkeF pueda ayudar a arrojar algo de luz sobre este 😊
Esta imagen para ayudar a mostrar los datos reales utilizados en el video- ImkeF6 years ago
Community Champion
Hola @JDanielHarvey ,
no estoy seguro de entender su pregunta y por desgracia no soy capaz de ver los números de fila.
Pero como te has dado cuenta, esta es la definición de una función anidada.
Pero también contiene una llamada / invocación de una función: Salida - BulkReplaceValues(DataTable, 0)
Allí, DataTable se le dará a conocer con el valor de la llamada de función externa ("Changed Type", como desde la última imagen que ha publicado)
Pero el 0 está codificado de forma rígida como un valor inicial. La función interna recursiva "BuldReplaceValues" siempre comenzará con ese valor y contará desde allí.
- JDanielHarvey6 years agoRegular Visitor
@ImkeF Sí, lamento que no hubiera números de fila, conté manualmente ese lol. Odio el editor de texto para PowerQuery - bastante seguro de que hay un SDK para escribir desde VisualStudio, al menos eso es lo que escuché de Chris Webb o los chicos de PragmaticWorks, pero parece estar mejorando. Por el bien de otros lectores, he actualizado la imagen para incluir algunos números de fila de cambio con mis habilidades de edición de imágenes tan excelentes 😅
Interesante... Así que esto no es diferente de una 'funciones de primera clase' o función 'decorators', o al menos pensar en ello de esa manera me ayuda a entender la lógica de la consulta. Así que cuando la variable 'Output' llama a la función BulkReplaceValues, el resultado es de hecho 'ReplaceValue' almacenado en 'Output' una vez que se llama en la línea 23, ¿es así?
No me di cuenta de que podía usar decorador como sintaxis para referirse a las funciones más adelante en la consulta - eso es bastante impresionante!
Gracias por su ayuda para entender esto!