group-by
La función group-by crea grupos de registros conforme a las claves de agrupación que se indiquen. Por ejemplo, en el siguiente ejemplo de transformación abstracta la clave de agrupación es "Departmento". Como hay un total de tres departamentos únicos, al aplicar la función group-by se crean tres grupos:
Lenguajes
Built-in, C++, C#, Java, XSLT 2.0, XSLT 3.0.
Parámetros
Nombre | Descripción |
---|---|
nodos/filas | Esta entrada debe recibir una conexión desde un elemento de la asignación que suministre una secuencia de cero o más valores. Por ejemplo, la conexión puede provenir de un elemento XML de origen. |
key | La clave conforme a la cual se agrupan los elementos. |
Ejemplo 1
Imaginemos que sus datos de origen son un archivo XML con el siguiente contenido (tenga en cuenta que, para simplificar, en el código de ejemplo siguiente hemos eliminado el espacio de nombre y las declaraciones XML).
<company> |
El requisito empresarial es agrupar registros de personas por departamento. Para conseguirlo, la siguiente asignación invoca la función group-by y da como clave el elemento department.
El resultado de la asignación es el siguiente:
<groups> |
Este ejemplo, junto con otros ejemplos de agrupación, es parte de esta asignación: <Documentos>\Altova\MapForce2025\MapForceExamples\Tutorial\GroupingFunctions.mfd. Antes de hacer clic en la pestaña Resultados, recuerde hacer clic en el botón Vista previa de la función que quiere comprobar.
Ejemplo 2
Este ejemplo muestra cómo agrupar registros con la ayuda de la función group-by e ilustra cómo añadir datos. Este ejemplo viene acompañado por una asignación de muestra que encontrará en la siguiente ruta: <Documentos>\Altova\MapForce2025\MapForceExamples\GroupTemperaturesByYear.mfd. Esta asignación lee datos de un archivo XML que contiene un registro de temperaturas mensuales, como se puede ver en el siguiente código de ejemplo:
<Temperatures> |
El requisito empresarial de esta asignación es doble:
1.Agrupar todas las temperaturas de cada año.
2.Averiguar las temperaturas mínima, máxima y media de cada año.
Para conseguir el primer requisito, usamos la función group-by. Para conseguir el segundo requisito, usamos funciones agregadas min, max y avg.
GroupTemperaturesByYear.mfd
La manera de ejecutar asignaciones de datos con MapForce Server (y el método recomendado para empezar a leerlas) consiste en observar el elemento de mayor nivel del componente de destino. En este ejemplo se creará un elemento YearlyStats por cada grupo que devuelva la función group-by. La función group-by toma como primer argumento todos los elementos data del origen y los agrupa en función de las conexiones que existan con la entrada de key. El requisito es agrupar las temperaturas por año, por lo que primero debemos obtener el año. Para ello, la función substring-before extrae la parte que contiene el año del atributo month de cada elemento data. Es decir, toma como argumento el valor de month y devuelve la parte que encuentre antes de la primera instancia de substr. Como se ilustra más arriba, en este ejemplo substr equivale al signo menos o guion, por lo que si tenemos el valor "2006-01", la función devolverá "2006".
Por último, los valores MinimumTemp, MaximumTemp y AverageTemp se obtienen conectando estos elementos con las correspondientes funciones agregadas: min, max y avg. Estas tres funciones toman como entrada la secuencia de temperaturas que leen en el componente de origen. Estas funciones no necesitan un argumento parent-context porque ya funcionan en el contexto de cada grupo. En otras palabras, la conexión que existe entre data y YearlyStats da el contexto en el que debe trabajar cada función agregada.
Para obtener una vista previa del resultado de la asignación, haga clic en la pestaña Resultados. Observe que el número de grupos coincide con el número de años obtenido leyendo el archivo fuente, por ejemplo:
<Temperatures> |
Nota: | Para simplificar, el código de ejemplo anterior contiene menos datos que los datos de entrada y salida utilizados en la asignación de ejemplo. |