Commande GROUP

Exécute une ou plusieurs commandes ACLScript sur un enregistrement avant de passer à l'enregistrement suivant dans la table, avec uniquement une seule transmission dans la table. L'exécution de la commande peut être contrôlée par des conditions.

Syntaxe

GROUP <IF test> <WHILE test> <FIRST plage|NEXT plage>
  commande
  <...n>
<ELSE IF test>
  commande
  <...n>
<ELSE>
  commande
  <...n>
END

Remarque

Certaines commandes Analytics ne peuvent pas être utilisées avec la commande GROUP. Pour plus d'informations, consultez la section Commandes utilisables dans la commande GROUP.

Paramètres

Nom Description
IF test

optionnel

Expression conditionnelle qui doit être vraie afin de traiter chaque enregistrement. La commande est exécutée uniquement sur les enregistrements remplissant la condition.

Remarque

La condition IF est évaluée uniquement par rapport aux enregistrements restant dans une table après application des options relevant du champ d'application (WHILE, FIRST, NEXT).

WHILE test

optionnel

Expression conditionnelle qui doit être vraie afin de traiter chaque enregistrement. La commande est exécutée jusqu'à ce que la condition soit évaluée comme fausse ou lorsque la fin de la table est atteinte.

Remarque

Si vous utilisez WHILE conjointement avec FIRST ou NEXT, le traitement des enregistrements s'arrête dès qu'une limite est atteinte.

FIRST plage | NEXT plage

optionnel

Le nombre d'enregistrements à traiter :

  • FIRST pour commencer le traitement à partir du premier enregistrement jusqu'à ce que le nombre d'enregistrements spécifié soit atteint
  • NEXT pour commencer le traitement à partir de l'enregistrement actuellement sélectionné jusqu'à ce que le nombre d'enregistrements spécifié soit atteint

Utilisez plage pour indiquer le nombre d'enregistrements à traiter.

Si vous ignorez FIRST et NEXT, tous les enregistrements sont traités par défaut.

commande <...n>

Une ou plusieurs commandes ACLScript à exécuter à l'intérieur de GROUP. Pour obtenir la liste complète des commandes prises en charge à l'intérieur de GROUP, consultez la rubrique Commandes utilisables dans la commande GROUP.

Si IF ou ELSE IF le précède, le test doit être évalué sur « true ».

Lorsque la commande est répertoriée sous ELSE, elle est exécutée si des enregistrements n'ont été traités par aucune commande précédente. Vous pouvez inclure plusieurs commandes, chacune commençant sur une ligne séparée.

ELSE IF test

optionnel

Ouvre un bloc ELSE IF pour la commande GROUP. La condition teste les enregistrements qui ne correspondent pas au test de la commande GROUP ou à aucun test ELSE IF précédent.

Vous pouvez inclure plusieurs tests ELSE IF. Ils sont évalués de haut en bas jusqu'à ce qu'un enregistrement soit évalué comme vrai et les commandes suivant cette instruction ELSE IF sont exécutées.

ELSE

optionnel

Ouvre un bloc ELSE pour la commande GROUP. Les commandes suivantes sont exécutées pour les enregistrements évalués comme faux dans tous les tests antérieurs.

END Fin de la commande GROUP.

Exemples

GROUP S=simple

Les groupes simples commencent par une commande GROUP, suivie d'une série de commandes, et se terminent par une commande END :

GROUP
  COUNT
  HISTOGRAM ON Quantité MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Emplacement SUBTOTAL Quantité
END

GROUP IF

Les groupes conditionnels exécutent des commandes qui dépendent de l'état vrai ou faux d'une condition. La commande GROUP suivante est exécutée uniquement sur les enregistrements dont la valeur du champ Classe_produits est inférieure à 5 :

GROUP IF Classe_produits < "05"
  COUNT 
  HISTOGRAM ON Quantité MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Emplacement SUBTOTAL Quantité
END

GROUP IF ...ELSE

Les enregistrements qui ne remplissent pas la condition de test sont ignorés, sauf si un bloc ELSE est inclus.

L'instruction ELSE peut être suivie d'autant de commandes que vous le souhaitez. Dans l'exemple suivant, le total du champ Quantité est calculé pour tous les enregistrements qui ne remplissent pas la condition :

GROUP IF Classe_produits < "05"
  COUNT 
  HISTOGRAM ON Quantité MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Emplacement SUBTOTAL Quantité
ELSE
  TOTAL Quantité
END

GROUP IF...ELSE IF...ELSE

Vous pouvez inclure plusieurs blocs ELSE IF dans un groupe, à condition que chaque block ELSE IF contienne un test différent. Dans l'exemple suivant, les blocs ELSE IF et le bloc ELSE génèrent quatre totaux :

GROUP IF Classe_produits < "05"
  COUNT 
  HISTOGRAM ON Quantité MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Emplacement SUBTOTAL Quantité
ELSE IF Classe_produits = "05"
  TOTAL Quantité
ELSE IF Classe_produits = "06"
  TOTAL Quantité
ELSE IF Classe_produits = "07"
  TOTAL Quantité
ELSE
  TOTAL Quantité
END

Commandes GROUP imbriquées

Les groupes imbriqués sont des groupes insérés dans d'autres groupes. Ils permettent de contrôler efficacement quelles commandes sont exécutées, et pour quels enregistrements. La plupart des applications ne nécessitent pas de fonctionnalités aussi avancées, mais elles sont disponibles.

Comme dans d'autres groupes, utilisez la commande END pour terminer un groupe imbriqué. Analytics commence le traitement des données uniquement lorsque toutes les commandes du groupe sont terminées :

GROUP IF Classe_produits < "05"
  COUNT
  STRATIFY ON Quantité SUBTOTAL Quantité MIN 0 MAX 100 INT 10
  GROUP IF Quantité > 0
    STATISTICS ON Quantité
    HISTOGRAM ON Quantité
  END
ELSE
  TOTAL Quantité
END

Dans cet exemple, toutes les commandes, de la commande COUNT à la commande GROUP suivante incluse, sont exécutées uniquement si la valeur Classe_produits est inférieure à 5.

Les commandes STATISTICS et HISTOGRAM sont exécutées si la valeur Quantité est supérieure à zéro. Cependant, la deuxième commande GROUP étant imbriquée, les commandes STATISTICS et HISTOGRAM sont exécutées uniquement pour les enregistrements qui remplissent les conditions Classe_produits < "05" et Quantité > 0.

Génération de variables système à l'intérieur d'un GROUP

Vous pouvez utiliser GROUP pour créer plusieurs variables système pour une seule commande.

Normalement, lorsque vous exécutez une commande comme TOTAL, COUNT ou STATISTICS, une seule variable système est générée. Chaque fois que vous exécutez la commande, vous écrasez la valeur de la dernière exécution de la commande. Les commandes qui s'exécutent dans un GROUP créent une variable spécifique pour chaque instance de la commande à l'intérieur du GROUP.

Dans cet exemple, la commande TOTAL calcule la somme du champ Montant pour chaque classe de produit dans la table Trans_Metaphor_2002. Lorsque le code s'exécute, les variables suivantes sont générées et peuvent être utilisées dans les commandes suivantes après le GROUP :

  • TOTAL2 la somme du champ Montant pour la classe de produit 03
  • TOTAL3 la somme du champ Montant pour la classe de produit 05
  • TOTAL4 la somme du champ Montant pour la classe de produit 08
  • TOTAL5 la somme du champ Montant pour la classe de produit 09
OPEN Trans_Metaphor_2002
GROUP
  TOTAL AMOUNT IF PRODCLS = "03"
  TOTAL AMOUNT IF PRODCLS = "05"
  TOTAL AMOUNT IF PRODCLS = "08"
  TOTAL AMOUNT IF PRODCLS = "09"
END
OPEN Trans_Metaphor_2002

Remarques

Astuce

Pour voir le tutoriel détaillé sur les commandes LOOP et GROUP, reportez-vous à la rubrique Regroupement et exécution de boucles.

Commandes utilisables dans la commande GROUP

Le tableau ci-dessous répertorie les commandes Analytics pouvant être utilisées à l'intérieur de la commande GROUP.

Si une commande ne figure pas ci-après, elle ne peut pas être utilisée à l'intérieur de GROUP.

AGE ASSIGN BENFORD
CLASSIFY COMMENT COUNT
CROSSTAB DUPLICATES EXPORT
EXTRACT GAPS GROUP
HISTOGRAM JOIN LIST
LOOP MERGE PROFILE
REPORT SEQUENCE STATISTICS
STRATIFY SUMMARIZE TOTAL
VERIFY    

Regroupement et exécution de boucles

La commande GROUP permet d'exécuter plusieurs commandes sur un enregistrement avant de passer à l'enregistrement suivant dans la table, ce qui peut réduire considérablement la durée de traitement.

Vous pouvez utiliser la commande LOOP dans la commande GROUP afin d'exécuter plusieurs fois une série de commandes dans un enregistrement.

Utilisation de variables avec GROUP

Variables définies par l'utilisateur

Pour utiliser une variable dans la commande GROUP, définissez la variable avant de saisir le bloc GROUP.

Remarque

Pendant que vous pouvez initialiser et définir une variable à l'intérieur d'un bloc GROUP, cela n'est pas recommandé. Les variables initialisées à l'intérieur d'un GROUP peuvent entraîner des résultats inattendus pendant l'utilisation.

À l'intérieur d'un groupe, vous pouvez évaluer les variables à l'aide de la substitution de variable. La valeur de la variable reste identique à la valeur fournie au moment de la saisie de GROUP.

Il est impossible de définir une variable à l'intérieur d'un GROUP pour ensuite y faire référence à l'aide de la substitution de variable :

ASSIGN v_test = "hello"
GROUP
  ASSIGN v_test2 = "%v_test% world"
  COMMENT cela serait non valide : v_test3 = "%v_test2% again"
END

Variables définies par le système

Certaines commandes comme TOTAL et STATISTICS génèrent des variables système basées sur des calculs que les commandes effectuent. Si vous utilisez un GROUP pour exécuter ces commandes, les variables système créées sont numérotées dans l'ordre consécutif, à partir du numéro de ligne de la commande à l'intérieur du GROUP (à l'exception des lignes vides) et jusqu'à n. La valeur n augmente de 1 pour chaque numéro de ligne dans le GROUP.

Remarque

Vous devez attendre la fin de l'exécution de GROUP avant d'utiliser des variables générées par le système qui sont créées à l'intérieur de GROUP. La commande doit s'exécuter pour chaque enregistrement de la table avant que la variable soit disponible. Utilisez ces variables après le mot-clé END de fermeture du GROUP.

Dans l'exemple suivant, la première commande TOTAL génère la variable TOTAL2 et la deuxième génère TOTAL4. Ces deux variables sont disponibles pour être utilisées dans les commandes suivantes une fois le GROUP exécuté :

GROUP
  TOTAL Réduction IF Ordre_Priorité = "Faible"
  ASSIGN v_var = "test"			
  TOTAL Réduction IF Ordre_Priorité = "Élevé"
END

Remarques sur la syntaxe

  • La syntaxe multiligne répertoriée pour la commande GROUP est requise. Par conséquent, il n'est pas possible de saisir la commande GROUP dans la ligne de commande ACL.
  • Chaque commande GROUP doit se terminer par une commande END.
  • Lorsque vous utilisez la commande GROUP dans vos scripts, vous pouvez améliorer la lisibilité du bloc de commandes en appliquant un retrait aux commandes répertoriées dans le groupe.
Guide de création de scripts ACL 14.1