Forum Discussion

JDanielHarvey's avatar
JDanielHarvey
Regular Visitor
6 years ago

Funciones anidadas en PowerQuery

Me encontré con este video en YouTube, donde se usó una función anidada y no puedo entender cómo los parámetros de la función anidada están recibiendo sus valores. Tiene sentido que pueda hacer referencia a variables almacenadas previamente en los parámetros, pero estos parámetros están formados y asumo que están recibiendo sus valores de los dos pasos anteriores respectivamente, pero supongo que no me di cuenta de que las funciones podrían eso. Por favor, hágamelo saber si estoy malinterpretando lo que está sucediendo en el adjunto M.

fBulkReplace.png

5 Replies

    • JDanielHarvey's avatar
      JDanielHarvey
      Regular 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 videofBulkReplace 01.png

      • ImkeF's avatar
        ImkeF
        Icon for Community Champion rankCommunity 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í.