Altova MapForce 2024 Enterprise Edition

La fonction group-by crée des groupes d'enregistrements conformément à certaines clés de regroupement que vous aurez spécifiées.

mf-func-group-by

Par exemple, dans la transformation abstraite illustrée ci-dessous, la clé de regroupement est "Department". Étant donné qu'il y a trois départements au total, l'application de la fonction group-by créera trois groupes :

mf_group-by

 

Langages

Built-in, C++, C#, Java, XSLT 2.0, XSLT 3.0.

 

Paramètres

Nom

Description

nodes/rows

Cette entrée doit recevoir une connexion depuis un item de mappage qui fournit une séquence de zéros ou plus de valeurs. Par exemple, la connexion peut provenir d’un item XML de source , un champ CSV, un enregistrement de base de données, etc.

key

La clé avec laquelle regrouper des items.

 

Exemple 1

Partons du principe que vos données de source existent sous la forme d’un fichier XML contenant les éléments suivants (veuillez noter que dans l’extrait de code suivant, l’espace de noms et des déclarations XML ont été supprimés pour plus de simplicité).

 

<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>

 

L’exigence commerciale est de regrouper des enregistrements de personnes par département. Pour ce faire, le mappage suivant invoque la fonction group-by et fournit department en tant que clé.

mf_group-by_map

Le résultat de mappage est le suivant :

 

<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>

 

Cet exemple, avec d’autres exemples de regroupement, fait partie du fichier de mappage suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\GroupingFunctions.mfd. Ne pas oublier de cliquer sur la touche Aperçu mf_ic_preview applicable à la fonction que vous souhaitez consulter préalablement, avant de cliquer sur le volet Sortie.

 

Exemple 2

Cet exemple vous montre comment regrouper des enregistrements avec l'aide de la fonction group-by, de même, il illustre comment agréger des données. Cet exemple est accompagné par un mappage de démonstration disponible sous le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\GroupTemperaturesByYear.mfd. Ce mappage lit les données provenant d'un fichier XML qui contient un journal de températures mensuelles, comme illustré dans le code ci-dessous :

 

<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>

 

Les exigences commerciales de ce mappage sont doubles :

 

1.Regrouper les températures de chaque année.

2.Trouver le minimum, le maximum, et la température moyenne de chaque année.

 

Afin d'atteindre le premier objectif, nous utilisons la fonction group-by. Afin d'atteindre le second objectif, nous utilisons les fonctions d'agrégation min, max, et avg.

mf_GroupTemperaturesByYear_map

GroupTemperaturesByYear.mfd

Pour exécuter un mappage, MapForce (et il s'agit là de la méthode recommandée pour commencer à lire un mappage) consulter l'item supérieur du composant de cible. Dans cet exemple, un item YearlyStats sera créé pour chaque groupe retourné par la fonction group-by. La fonction group-by prend en tant que premier argument tous les items data depuis la source et les regroupe selon ce qui est connecté à l'entrée key. Puisque l'exigence est de regrouper des températures par année, il faut tout d'abord obtenir l'année. Pour ce faire, la fonction substring-before extrait la partie de l'année depuis l'attribut month de chaque élément data. Concrètement, il prend en tant qu'argument la valeur de month et retourne la partie avant la première apparition de substr. Comme illustré ci-dessus, dans cet exemple, substr est défini pour le caractère de tiret ; ainsi, pour une valeur "2006-01", la fonction retournera "2006".

 

Enfin, les valeurs de MinimumTemp, MaximumTemp et AverageTemp sont obtenues en connectant ces items avec les fonctions d'agrégat respectives : min, max et avg. Les trois fonctions prennent en tant qu'entrée la séquence des températures lues depuis le composant de source. Ces fonctions ne nécessitent pas d'argument parent-context, parce qu'elles fonctionnent déjà dans le contexte de chaque groupe. En d'autres mots, il existe une connexion parent, de data à YearlyStats qui fournit le contexte pour chaque fonction d'agrégation sur laquelle vous souhaitez travailler.

 

Pour consulter la sortie de mappage, cliquez sur le volet Sortie. Veuillez noter que le nombre de groupes doit coïncider avec le nombre d'années obtenues en lisant le fichier de source, par exemple :

 

<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>

 

Note :Pour une plus grande simplicité, les listes de code ci-dessus contiennent moins de données que l'entrée et la sortie véritables utilisés dans le mappage de démonstration.

 

© 2018-2024 Altova GmbH