Altova MapForce 2025 Basic Edition

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:

mf_group-by

 

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>
  <person department="Administration" name="Vernon Callaby"/>
  <person department="Marketing" name="Susi Sanna"/>
  <person department="Engineering" name="Michelle Butler"/>
  <person department="Engineering" name="Fred Landis"/>
  <person department="Administration" name="Frank Further"/>  
</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.

mf_group-by_map

El resultado de la asignación es el siguiente:

 

<groups>
  <group>
    <record key="Administration" value="Vernon Callaby"/>
    <record key="Administration" value="Frank Further"/>
  </group>
  <group>
    <record key="Marketing" value="Susi Sanna"/>
  </group>
  <group>
    <record key="Engineering" value="Michelle Butler"/>
    <record key="Engineering" value="Fred Landis"/>
  </group>
</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 mf_ic_preview 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>
  <data temp="-3.6" month="2006-01" />
  <data temp="-0.7" month="2006-02" />
  <data temp="7.5" month="2006-03" />
  <data temp="12.4" month="2006-04" />
  <data temp="16.2" month="2006-05" />
  <data temp="19" month="2006-06" />
  <data temp="22.7" month="2006-07" />
  <data temp="23.2" month="2006-08" />
  <data temp="18.7" month="2006-09" />
  <data temp="11.2" month="2006-10" />
  <data temp="9.1" month="2006-11" />
  <data temp="0.8" month="2006-12" />
  <data temp="-3.2" month="2007-01" />
  <data temp="-0.3" month="2007-02" />
  <data temp="6.5" month="2007-03" />
  <data temp="10.6" month="2007-04" />
  <data temp="19" month="2007-05" />
  <data temp="20.3" month="2007-06" />
  <data temp="22.3" month="2007-07" />
  <data temp="20.7" month="2007-08" />
  <data temp="19.2" month="2007-09" />
  <data temp="12.9" month="2007-10" />
  <data temp="8.1" month="2007-11" />
  <data temp="1.9" month="2007-12" />
</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.

mf_GroupTemperaturesByYear_map

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>
  <YearlyStats Year="2006">
    <MinimumTemp>-3.6</MinimumTemp>
    <MaximumTemp>23.2</MaximumTemp>
    <AverageTemp>11.375</AverageTemp>
  </YearlyStats>
  <YearlyStats Year="2007">
    <MinimumTemp>-3.2</MinimumTemp>
    <MaximumTemp>22.3</MaximumTemp>
    <AverageTemp>11.5</AverageTemp>
  </YearlyStats>
</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.

 

© 2018-2024 Altova GmbH