Habilite JavaScript para visualizar esta página.

Altova MapForce 2022 Professional Edition

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\MapForce2022\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 la asignación llama a la función group-by. Para alcanzar el segundo llama a las funciones de agrupación min, max y avg.Todas estas funciones son funciones integradas de MapForce y las puede añadir a cualquier aplicación arrastrándolas desde la ventana Bibliotecas (véase Agregar una función integrada a una asignación de datos).

mf_GroupTemperaturesByYear_map

GroupTemperaturesByYear.mfd

Para ejecutar una asignación, MapForce empieza por el elemento superior del componente de destino. Este también es el modo recomendado para empezar a leer una. En este ejemplo se creará un elemento YearlyStats por cada grupo que devuelva la función group-by. Esta función 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 de los resultados 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 al leer el archivo de origen. 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.

© 2015-2021 Altova GmbH