GlideAggregate : dans le champ d’application
L’API GlideAggregate permet de créer des requêtes d’agrégation de base de données.
La classe GlideAggregate est une extension de la classe GlideRecord et fournit des requêtes d’agrégation de base de données (AVG, COUNT, GROUP_CONCAT, GROUP_CONCAT_DISTINCT, MAX, MIN, STDDEV, SUM). Cette fonctionnalité peut être utile lors de la création de rapports personnalisés ou dans les calculs de champs calculés.
Lorsque vous utilisez des méthodes GlideAggregate sur des champs de devise ou de prix, vous utilisez la valeur de la devise de référence. Assurez-vous de convertir les valeurs agrégées dans la devise de la session de l’utilisateur pour l’affichage. Étant donné que le taux de conversion entre la valeur de la devise ou du prix (valeur affichée) et sa valeur de devise de référence (valeur d’agrégation) peut changer, le résultat peut ne pas correspondre aux attentes de l’utilisateur.
GlideAggregate dans le champ d’application : GlideAggregate(String tableName)
Crée un objet GlideAggregate dans la table spécifiée.
| Nom | Type | Description |
|---|---|---|
| tableName | Chaîne | Nom de la table. |
var count = new GlideAggregate('incident');
GlideAggregate inclus dans le champ d’application : addAggregate(String agg, String name)
Ajoute un agrégat à une requête de base de données.
| Nom | Type | Description |
|---|---|---|
| Agrégat | Chaîne | Nom d’un agrégat à utiliser. Valeurs valides :
|
| nom | Chaîne | Facultatif. Nom du champ sur lequel regrouper les résultats de l’agrégation. Valeur par défaut : nul |
| Type | Description |
|---|---|
| Néant |
L’exemple suivant montre comment utiliser les fonctions GlideAggregate dans la table Incident [incident].
var incidentGA = new GlideAggregate('incident');
incidentGA.groupBy('category');
incidentGA.orderByAggregate('COUNT', 'sys_mod_count');
incidentGA.addAggregate('AVG', 'sys_mod_count');
incidentGA.addAggregate('COUNT', 'sys_mod_count');
incidentGA.addAggregate('GROUP_CONCAT', 'sys_mod_count');
incidentGA.addAggregate('GROUP_CONCAT_DISTINCT', 'sys_mod_count');
incidentGA.addAggregate('MAX', 'sys_mod_count');
incidentGA.addAggregate('MIN', 'sys_mod_count');
incidentGA.addAggregate('STDDEV', 'sys_mod_count');
incidentGA.addAggregate('SUM', 'sys_mod_count');
incidentGA.query();
while (incidentGA.next()) {
gs.info('CATEGORY: ' + incidentGA.getValue('category'));
gs.info('AVG: ' + incidentGA.getAggregate('AVG', 'sys_mod_count'));
gs.info('COUNT: ' + incidentGA.getAggregate('COUNT', 'sys_mod_count'));
gs.info('GROUP_CONCAT: ' + incidentGA.getAggregate('GROUP_CONCAT', 'sys_mod_count'));
gs.info('GROUP_CONCAT_DISTINCT: ' + incidentGA.getAggregate('GROUP_CONCAT_DISTINCT', 'sys_mod_count'));
gs.info('MAX: ' + incidentGA.getAggregate('MAX', 'sys_mod_count'));
gs.info('MIN: ' + incidentGA.getAggregate('MIN', 'sys_mod_count'));
gs.info('STDDEV: ' + incidentGA.getAggregate('STDDEV', 'sys_mod_count'));
gs.info('SUM: ' + incidentGA.getAggregate('SUM', 'sys_mod_count'));
gs.info(' ');
}
Sortie.
CATEGORY: inquiry
AVG: 8.42424242424242424242424242424242424242E00
COUNT: 33
GROUP_CONCAT: 0,0,0,0,1,2,2,4,4,4,5,5,5,6,6,6,6,6,6,6,6,7,8,8,8,8,9,15,15,19,32,33,36
GROUP_CONCAT_DISTINCT: 0,1,2,4,5,6,7,8,9,15,19,32,33,36
MAX: 36
MIN: 0
STDDEV: 9.15843294125113629932710147135171494439E00
SUM: 278
CATEGORY: software
AVG: 21
COUNT: 13
GROUP_CONCAT: 3,4,5,5,6,7,9,10,10,11,14,94,95
GROUP_CONCAT_DISTINCT: 3,4,5,6,7,9,10,11,14,94,95
MAX: 95
MIN: 3
STDDEV: 3.27693962918655755532970326989852794087E01
SUM: 273
CATEGORY: Hardware
AVG: 6.8
COUNT: 10
GROUP_CONCAT: 2,5,5,6,6,6,7,7,9,15
GROUP_CONCAT_DISTINCT: 2,5,6,7,9,15
MAX: 15
MIN: 2
STDDEV: 3.39280283999985933622820108982884699755E00
SUM: 68
CATEGORY: network
AVG: 18
COUNT: 5
GROUP_CONCAT: 3,12,17,21,37
GROUP_CONCAT_DISTINCT: 3,12,17,21,37
MAX: 37
MIN: 3
STDDEV: 1.25698050899765347157025586536136512302E01
SUM: 90
CATEGORY:
AVG: 9.5
COUNT: 4
GROUP_CONCAT: 8,8,10,12
GROUP_CONCAT_DISTINCT: 8,10,12
MAX: 12
MIN: 8
STDDEV: 1.91485421551267621995020382273964310607E00
SUM: 38
CATEGORY: database
AVG: 29
COUNT: 2
GROUP_CONCAT: 8,50
GROUP_CONCAT_DISTINCT: 8,50
MAX: 50
MIN: 8
STDDEV: 2.969848480983499602483546320840365965E01
SUM: 58
GlideAggregate inclus dans le champ d’application : addEncodedQuery(String query)
Ajoute une requête codée aux autres requêtes qui ont pu être définies pour cet agrégat.
| Nom | Type | Description |
|---|---|---|
| query | Chaîne | Une requête codée à ajouter à l’agrégat. |
| Type | Description |
|---|---|
| Néant |
//Number of incidents varies depending on the current state
//of the incident table
var count = new GlideAggregate('incident');
count.addEncodedQuery('active=true');
count.addAggregate('COUNT');
count.query();
var incidents = 0;
if (count.next())
incidents = count.getAggregate('COUNT');
gs.info(incidents);
GlideAggregate inclus dans le champ d’application : addQuery(nom de chaîne, opérateur de chaîne, valeur de chaîne)
Ajoute une requête à l’agrégat.
| Nom | Type | Description |
|---|---|---|
| nom | Chaîne | Requête à ajouter. |
| opérateur | Chaîne | Opérateur pour la requête. |
| valide | Chaîne | Liste des valeurs à inclure dans la requête. |
| Type | Description |
|---|---|
| GlideQueryCondition | Condition de la requête. |
//Number of incidents varies depending on the current state
//of the incident table
var count = new GlideAggregate('incident');
count.addQuery('active', '=','true');
count.addAggregate('COUNT', 'category');
count.query();
while (count.next()) {
var category = count.category;
var categoryCount = count.getAggregate('COUNT', 'category');
gs.info("There are currently " + categoryCount + " incidents with a category of " + category);
}
There are currently 1 incidents with a category of database
There are currently 5 incidents with a category of hardware
There are currently 42 incidents with a category of inquiry
There are currently 4 incidents with a category of network
There are currently 4 incidents with a category of request
There are currently 7 incidents with a category of softwareGlideAggregate inclus dans le champ d’application : addNotNullQuery(String fieldName)
Ajoute une requête non nulle à l’agrégat.
| Nom | Type | Description |
|---|---|---|
| nom de champ | Chaîne | Nom du champ. |
| Type | Description |
|---|---|
| GlideQueryCondition | Condition de requête incluse dans le champ d’application. |
var count = new GlideAggregate('incident');
count.addNotNullQuery('short_description');
count.query(); // Issue the query to the database to get all records
while (count.next()) {
// add code here to process the aggregate
}
GlideAggregate inclus dans le champ d’application : addNullQuery(String fieldName)
Ajoute une requête nulle à l’agrégat.
| Nom | Type | Description |
|---|---|---|
| Fieldname | Chaîne | Nom du champ. |
| Type | Description |
|---|---|
| GlideQueryCondition | La condition de la requête incluse dans le champ d’application. |
var count = new GlideAggregate('incident');
count.addNullQuery('short_description');
count.query(); // Issue the query to the database to get all records
while (count.next()) {
// add code here to process the aggregate
}
GlideAggregate inclus dans le champ d’application : addTrend(String fieldName, String timeInterval, Number numUnits)
Ajoute une tendance pour un champ spécifié. Utilisez une tendance pour afficher des schémas sur une période de temps.
| Nom | Type | Description |
|---|---|---|
| Fieldname | Chaîne | Nom du champ pour lequel la tendance doit se produire. |
| intervalle de temps | Chaîne | Intervalle de temps pour la tendance. Valeurs valides :
|
| Unités num | Numéro | Facultatif. Valide uniquement lorsque = timeIntervalminute. Nombre de minutes à inclure dans la tendance. Valeur par défaut : 1 |
| Type | Description |
|---|---|
| nul |
var ga = new GlideAggregate('incident');
ga.addAggregate('COUNT'); // Count all incidents opened each quarter
ga.addTrend('opened_at', 'quarter');
ga.query();
while(ga.next()) {
gs.info([ga.getValue('timeref'), ga.getAggregate('COUNT')]);
}
3/2018, 9
4/2018, 2
1/2019, 38
2/2019, 310GlideAggregate dans le champ d’application : getAggregate(String agg, String name)
Renvoie la valeur d’un agrégat de l’enregistrement actuel.
| Nom | Type | Description |
|---|---|---|
| Agrégat | Chaîne | Type de l’agrégat. Valeurs valides :
|
| nom | Chaîne | Nom du champ sur lequel effectuer l’agrégation. |
| Type | Description |
|---|---|
| Chaîne | Valeur de l’agrégation. Si les valeurs regroupées sont des valeurs de devises FX, la valeur renvoyée est au format <currency_code ; currency_value>, tels que : USD ; 134.980000. Remarque : Si le champ spécifié contient des valeurs de devises FX de types de devises mixtes, la méthode n’est pas en mesure d’agréger les valeurs et renvoie un point-virgule (;)). |
Affiche une agrégation qui renvoie le nombre d’enregistrements dans la table Incident.
var count = new GlideAggregate('incident');
count.addAggregate('COUNT');
count.query();
var incidents = 0;
if (count.next()) {
incidents = count.getAggregate('COUNT');
}
//Number of incidents varies depending on the current state
//of the incident table
gs.info('Number of incidents: ' + incidents);
Produit : Nombre d’incidents : 63.
Affiche l’agrégation d’un champ de devise FX.
var ga = new GlideAggregate('laptop_tracker');
ga.addAggregate('SUM', 'cost');
ga.groupBy('name');
ga.query();
while (ga.next()) {
gs.info('Aggregate results ' + ga.getValue('name') + ' => ' + ga.getAggregate('SUM', 'cost'));
}
Sortie :
*** Script: Aggregate results Apple MacBook Air => USD;1651.784280000000
*** Script: Aggregate results Apple MacBook Pro => USD;1651.784280000000
*** Script: Aggregate results Dell XPS => USD;470.852672000000
*** Script: Aggregate results LG =>
*** Script: Aggregate results Samsung Galaxy => USD;225.320000000000
*** Script: Aggregate results Surface3 => USD;2895.560369520000
*** Script: Aggregate results Toshiba => USD;9385.202875800000
GlideAggregate inclus dans le champ d’application : getAggregateEncodedQuery()
Obtient la requête nécessaire pour renvoyer l’agrégat actuel.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Chaîne | Requête codée pour obtenir l’agrégat. |
var count = new GlideAggregate('incident');
count.addAggregate('MIN', 'sys_mod_count');
count.groupBy('category');
count.query();
while (count.next()) {
gs.info(count.getAggregateEncodedQuery());
}
category=database
category=hardware
category=inquiry
category=network
category=request
category=softwareGlideAggregate inclus dans le champ d’application : getEncodedQuery()
Récupère la requête codée.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Chaîne | Requête codée. |
var count = new GlideAggregate('incident');
count.addAggregate('MIN', 'sys_mod_count');
count.addAggregate('MAX', 'sys_mod_count');
count.addAggregate('AVG', 'sys_mod_count');
count.groupBy('category');
count.query();
gs.info(count.getEncodedQuery());
ORDERBYcategory^GROUPBYcategoryGlideAggregate inclus dans le champ d’application : getRowCount()
Récupère le nombre de lignes dans l’objet GlideAggregate.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Numéro | Nombre de lignes dans l’objet GlideAggregate. |
var count = new GlideAggregate('incident');
count.addAggregate('MIN', 'sys_mod_count');
count.addAggregate('MAX', 'sys_mod_count');
count.addAggregate('AVG', 'sys_mod_count');
count.groupBy('category');
count.query();
gs.info(count.getRowCount());
while (count.next()) {
var min = count.getAggregate('MIN', 'sys_mod_count');
var max = count.getAggregate('MAX', 'sys_mod_count');
var avg = count.getAggregate('AVG', 'sys_mod_count');
var category = count.category.getDisplayValue();
gs.info(category + " Update counts: MIN = " + min + " MAX = " + max + " AVG = " + avg);
}
6
Database Update counts: MIN = 8 MAX = 48 AVG = 28.0000
Hardware Update counts: MIN = 4 MAX = 14 AVG = 6.6250
Inquiry / Help Update counts: MIN = 0 MAX = 34 AVG = 6.5714
Network Update counts: MIN = 3 MAX = 37 AVG = 18.6000
Request Update counts: MIN = 5 MAX = 39 AVG = 13.4000
Software Update counts: MIN = 4 MAX = 98 AVG = 24.0000GlideAggregate inclus dans le champ d’application : getTableName()
Récupère le nom de table associé à cet objet GlideAggreg.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Chaîne | Nom de table. |
var count = new GlideAggregate('incident');
count.addAggregate('MIN', 'sys_mod_count');
count.addAggregate('MAX', 'sys_mod_count');
count.addAggregate('AVG', 'sys_mod_count');
count.groupBy('category');
count.query();
gs.info(count.getTableName());
GlideAggregate inclus dans le champ d’application : getValue (nom de chaîne)
Renvoie la valeur du champ spécifié.
| Nom | Type | Description |
|---|---|---|
| nom | Chaîne | Nom du champ dans la table actuelle à renvoyer. |
| Type | Description |
|---|---|
| Chaîne | Valeur du champ spécifié. Renvoie null si non valide (ne fait pas partie de l’ensemble de résultats). |
var count = new GlideAggregate('incident');
count.addAggregate('MAX', 'sys_mod_count');
count.groupBy('category');
count.query();
while (count.next()) {
gs.info(count.getValue('category') + " category had " + count.getAggregate('MAX', 'sys_mod_count') + " updates");
}
Sortie :
category had 12 updates
hardware category had 15 updates
inquiry category had 36 updates
network category had 37 updates
software category had 95 updates
GlideAggregate inclus dans le champ d’application : groupBy (nom de chaîne)
Fournit le nom d’un champ à utiliser dans le regroupement des agrégats.
Peut être appelé plusieurs fois pour définir plusieurs champs de groupe.
| Nom | Type | Description |
|---|---|---|
| nom | Chaîne | Nom du champ. |
| Type | Description |
|---|---|
| Néant |
var count = new GlideAggregate('incident');
count.addAggregate('MIN', 'sys_mod_count');
count.addAggregate('MAX', 'sys_mod_count');
count.addAggregate('AVG', 'sys_mod_count');
count.groupBy('category');
count.query();
while (count.next()) {
var min = count.getAggregate('MIN', 'sys_mod_count');
var max = count.getAggregate('MAX', 'sys_mod_count');
var avg = count.getAggregate('AVG', 'sys_mod_count');
var category = count.category.getDisplayValue();
gs.info(category + " Update counts: MIN = " + min + " MAX = " + max + " AVG = " + avg);
}
Database Update counts: MIN = 8 MAX = 48 AVG = 28.0000
Hardware Update counts: MIN = 4 MAX = 14 AVG = 6.6250
Inquiry / Help Update counts: MIN = 0 MAX = 34 AVG = 6.5714
Network Update counts: MIN = 3 MAX = 37 AVG = 18.6000
Request Update counts: MIN = 5 MAX = 39 AVG = 13.4000
Software Update counts: MIN = 4 MAX = 98 AVG = 24.0000
GlideAggregate inclus dans le champ d’application : hasNext()
Détermine s’il existe d’autres enregistrements dans l’objet GlideAggred.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Booléen | Marqueur indiquant s’il existe plus de résultats dans l’ensemble de requêtes. Valeurs possibles :
|
var agg = new GlideAggregate('incident');
agg.addAggregate('AVG', 'sys_mod_count');
agg.groupBy('category');
agg.query();
while (agg.hasNext()) {
agg.next();
var avg = agg.getAggregate('AVG', 'sys_mod_count');
var category = agg.category.getDisplayValue();
gs.info(category + ': AVG = ' + avg);
}
Database: AVG = 32.5000
Hardware: AVG = 12.0000
Inquiry / Help: AVG = 7.6667
Network: AVG = 24.0000
Request: AVG = 16.4000
Software: AVG = 27.0833GlideAggregate inclus dans le champ d’application : next()
Passe à l’enregistrement suivant dans GlideAggregate.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Booléen | Marqueur indiquant s’il existe plus de résultats dans l’ensemble de requêtes. Valeurs possibles :
|
var count = new GlideAggregate('incident');
count.addAggregate('COUNT');
count.query();
var incidents = 0;
if (count.next()) {
incidents = count.getAggregate('COUNT');
gs.info(incidents);
}
GlideAggregate inclus dans le champ d’application : orderBy(nom de chaîne)
Trie les agrégats en fonction de la valeur du champ spécifié. Le champ est également ajouté à la liste grouper par.
| Nom | Type | Description |
|---|---|---|
| nom | Chaîne | Nom du champ selon lequel trier les agrégats. Vous pouvez également fournir une fonction glide pour ordonner les agrégats, telle que |
| Type | Description |
|---|---|
| Néant |
var agg = new GlideAggregate('incident');
agg.addAggregate('count', 'category');
agg.orderBy('category');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count', 'category');
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count', 'category');
agg2.orderBy('category');
gs.info(category + ": Current number of incidents:" + count);
}
database: Current number of incidents:2
hardware: Current number of incidents:8
inquiry: Current number of incidents:28
network: Current number of incidents:5
request: Current number of incidents:5
software: Current number of incidents:11GlideAggregate inclus dans le champ d’application : orderByAggregate(String agg, String fieldName)
Trie les agrégats en fonction de l’agrégat et du champ spécifiés.
| Nom | Type | Description |
|---|---|---|
| Agrégat | Chaîne | Type d’agrégation. |
| Fieldname | Chaîne | Nom du champ à regrouper. |
| Type | Description |
|---|---|
| nul |
ga.addAggregate('COUNT', 'category');
ga.orderByAggregate('count', 'category');
ga.query();
while(ga.next()) {
gs.info('Category: ' + ga.category + ' ' + ga.getAggregate('COUNT', 'category'));
}
Sortie :
Category: inquiry 18
Category: software 11
Category: hardware 7
Category: network 5
Category: request 5
Category: 4
Category: database 2
GlideAggregate inclus dans le champ d’application : orderByDesc(nom de la chaîne)
Trie les agrégats par ordre décroissant en fonction du champ spécifié. Le champ sera également ajouté à la liste grouper par.
| Nom | Type | Description |
|---|---|---|
| nom | Chaîne | Nom du champ. |
| Type | Description |
|---|---|
| Néant |
var agg = new GlideAggregate('incident');
agg.addAggregate('count', 'category');
agg.orderByDesc('category');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count', 'category');
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count', 'category');
agg2.orderBy('category');
gs.info(category + ": Current number of incidents:" + count);
}
software: Current number of incidents:11
request: Current number of incidents:5
network: Current number of incidents:5
inquiry: Current number of incidents:28
hardware: Current number of incidents:8
database: Current number of incidents:2
GlideAggregate inclus dans le champ d’application : query()
Émet la requête et obtient les résultats.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Néant |
var count = new GlideAggregate('incident');
count.addAggregate('COUNT');
count.query();
var incidents = 0;
if (count.next()) {
incidents = count.getAggregate('COUNT');
}
gs.info('Number of incidents: ' + incidents);
GlideAggregate inclus dans le champ d’application : setAggregateWindow(Number firstRow, Number lastRow)
Limite le nombre de lignes de la table à inclure dans la requête d’agrégat.
| Nom | Type | Description |
|---|---|---|
| première ligne | Numéro | Index de base zéro de la première ligne à inclure dans la requête d’agrégat, incluse. |
| dernière ligne | Numéro | Index de base zéro de la dernière ligne à inclure dans la requête d’agrégat, exclusif. |
| Type | Description |
|---|---|
| Néant |
Imprime le nombre de chaque catégorie pour les dix premiers enregistrements dans la table Incident [incident].
var incidentGroup = new GlideAggregate('incident');
incidentGroup.addAggregate('COUNT', 'category');
incidentGroup.setAggregateWindow(0, 10);
incidentGroup.query();
while (incidentGroup.next()) {
var incidentCount = incidentGroup.getAggregate('COUNT', 'category');
gs.info('{0} count: {1}', [incidentGroup.getValue('category'), incidentCount]);
}
Sortie :
database count: 1
Hardware count: 1
inquiry count: 7
software count: 1
GlideAggregate inclus dans le champ d’application : setGroup (booléen b)
Définit s’il faut regrouper les résultats de retour.
| Nom | Type | Description |
|---|---|---|
| b | Booléen | Marqueur indiquant s’il faut regrouper ou non les résultats. Valeurs valides :
|
| Type | Description |
|---|---|
| nul |
var ga = new GlideAggregate('incident');
ga.addAggregate('COUNT', 'category');
ga.setGroup(true);
ga.groupBy("category");
ga.query();
while(ga.next()) {
gs.info('Category ' + ga.category + ' ' + ga.getAggregate('COUNT', 'category'));
}
Sortie :
Category database 2
Category hardware 7
Category inquiry 18
Category network 5
Category request 5
Category software 11
GlideAggregate inclus dans le champ d’application : setIntervalYearIncluded(booléen b)
Définit s’il faut regrouper les résultats par année pour les tendances du jour de la semaine. Ces tendances sont créées à l’aide de la méthode addTrend() avec l’intervalle dayofweek de temps.
Dépendance : GlideAggregate inclus dans le périmètre : addTrend('<fieldName>', 'dayofweek').
| Nom | Type | Description |
|---|---|---|
| b | Booléen | Marqueur indiquant s’il faut inclure une année pour une tendance avec un intervalle de temps de jour de la semaine. Valeurs valides :
Par défaut : true |
| Type | Description |
|---|---|
| Néant |
L’exemple suivant montre comment compter les incidents créés au cours des six derniers mois. Les incidents sont séparés par le jour de la semaine, mais sans inclure l’année. Par exemple, les résultats par défaut pour jeudi incluraient l’année, comme jeudi /2023 : 16.
var incidentGroup = new GlideAggregate('incident');
incidentGroup.addEncodedQuery("sys_created_onRELATIVEGT@month@ago@6");
incidentGroup.addTrend('sys_created_on', 'dayofweek');
incidentGroup.addAggregate('COUNT');
incidentGroup.setIntervalYearIncluded(false);
incidentGroup.query();
while (incidentGroup.next()) {
gs.info(incidentGroup.getValue('timeref') + ': ' + incidentGroup.getAggregate('COUNT'))};
Sortie :
Sunday: 1
Monday: 15
Tuesday: 1
Wednesday: 7
Thursday: 16
Saturday: 1