Clause GROUP

La clause GROUP oblige WMI à générer une notification unique pour représenter un groupe d’événements. La notification représentative est une instance de la classe système __AggregateEvent. La classe système __AggregateEvent contient deux propriétés : Representative et NumberOfEvents. La propriété Representative est un objet incorporé qui contient l’une des instances reçues pendant l’intervalle de regroupement spécifié dans la clause WITHIN. Par exemple, si un événement d’agrégation est généré pour notifier les événements de modification de l’instance, Representative contient une instance de la classe __InstanceModificationEvent. La propriété NumberOfEvents contient le nombre d’événements reçus pendant l’intervalle de regroupement. Un intervalle de regroupement spécifie la période, après réception d’un événement initial, pendant laquelle WMI doit collecter des événements similaires.

La clause GROUP doit contenir une clause WITHIN pour spécifier l’intervalle de regroupement et peut contenir les mots clé BY ou HAVING, ou les deux. La clause GROUP est placée après la clause WHERE, comme indiqué ci-dessous :

SELECT * FROM EventClass [WHERE property = value] 
    GROUP WITHIN interval [BY property_list]
    [HAVING NumberOfEvents operator integer]

La valeur EventClass est la classe d’événements dont l’événement est membre, et value est la valeur de la propriété sur laquelle la notification est requise. L’intervalle est un entier non signé qui représente l’intervalle de regroupement après la réception du premier événement. L’entier non signé est un nombre de secondes. La liste de propriétés est une liste délimitée par des virgules d’une ou plusieurs propriétés incluses dans la classe d’événements. operator est n’importe quel opérateur relationnel et integer est un entier non signé 32 bits indiquant un nombre d’événements.

Lorsque vous utilisez la clause GROUP, les clauses WHERE, BY et HAVING sont facultatives.

Une utilisation de base de la clause GROUP peut demander un regroupement d’événements dans un intervalle de temps qui commence à la réception du premier événement. Par exemple, la requête suivante regroupe tous les événements de courrier électronique envoyés dans un délai de 5 minutes. Au lieu de paginer un utilisateur chaque fois qu’un nouvel e-mail est reçu, le consommateur permanent peut utiliser cette requête pour informer l’utilisateur uniquement si un nouvel e-mail a été reçu au cours des 5 dernières minutes.

SELECT * FROM EmailEvent GROUP WITHIN 300

Si des informations plus détaillées sont requises, les événements peuvent être regroupés par une ou plusieurs propriétés de la classe d’événements. La requête suivante demande que les événements d’e-mail soient combinés avec d’autres événements qui ont la même valeur dans la propriété Sender :

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

Un niveau de détail encore plus élevé peut être atteint en ajoutant une clause WHERE. Par exemple, la requête suivante avertit un utilisateur du nouvel e-mail d’un expéditeur particulier arrivé au cours des 10 dernières minutes, combiné à d’autres événements qui ont la même valeur dans la propriété Importance :

SELECT * FROM EventClass WHERE Sender = "MyBoss" 
  GROUP WITHIN 300 BY Importance