GlideAggregate - Com escopo
. GlideAggregate A API permite a criação de consultas de agregação de banco de dados.
. GlideAggregate a classe é uma extensão do GlideRecord E fornece agregação de banco de dados (AVG, COUNT, GROUP_CONCAT, GROUP_CONCAT_DISTINT, MAX, CONSULTAS MÍN, STDDEV, SOMA). Esta funcionalidade pode ser útil ao criar relatórios personalizados ou em cálculos para campos calculados.
Quando você usa GlideAggregate nos campos de moeda ou preço, você está trabalhando com o valor da moeda de referência. Converta os valores agregados para a moeda da sessão do usuário para exibição. Por causa da taxa de conversão entre o valor da moeda ou do preço (valor exibido) e sua referência moeda o valor (valor de agregação) pode mudar, o resultado pode não ser o que o usuário espera.
GlideAggregate com escopo - GlideAggregate(cadeia de caracteres tablename)
Cria um objeto GlideAggregate na tabela especificada.
| Nome | Tipo | Descrição |
|---|---|---|
| tableName | Cadeia de caracteres | Nome da tabela. |
var count = new GlideAggregate('incident');
GlideAggregate com escopo - addAggregate(cadeia de caracteres agg, nome da cadeia de caracteres)
Adiciona um agregado a uma consulta de banco de dados.
| Nome | Tipo | Descrição |
|---|---|---|
| agg | Cadeia de caracteres | Nome de um agregado a ser usado. Valores válidos:
|
| nome | Cadeia de caracteres | Opcional. Nome do campo para agrupar os resultados da agregação. Padrão: Nulo |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir mostra como usar GlideAggregate Funções na tabela Incidente [incidente].
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(' ');
}
Saída.
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 com escopo - addEncodedQuery (consulta de cadeia de caracteres)
Adiciona uma consulta codificada às outras consultas que podem ter sido definidas para este agregado.
| Nome | Tipo | Descrição |
|---|---|---|
| consulta | Cadeia de caracteres | Uma consulta codificada a ser adicionada ao agregado. |
| Tipo | Descrição |
|---|---|
| Nenhum |
//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 com escopo - addQuery (nome da cadeia de caracteres, operador da cadeia de caracteres, valor da cadeia de caracteres)
Adiciona uma consulta ao agregado.
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | Consulta a ser adicionada. |
| operador | Cadeia de caracteres | Operador da consulta. |
| valor | Cadeia de caracteres | Lista de valores a serem incluídos na consulta. |
| Tipo | Descrição |
|---|---|
| GlideQueryCondition | Condição de consulta. |
//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 com escopo - addNotNullQuery(cadeia de caracteres fieldName)
Adiciona uma consulta não nula ao agregado.
| Nome | Tipo | Descrição |
|---|---|---|
| fieldname | Cadeia de caracteres | Nome do campo. |
| Tipo | Descrição |
|---|---|
| GlideQueryCondition | Condição de consulta com escopo. |
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 com escopo - addNullQuery(cadeia de caracteres fieldName)
Adiciona uma consulta nula ao agregado.
| Nome | Tipo | Descrição |
|---|---|---|
| fieldName | Cadeia de caracteres | Nome do campo. |
| Tipo | Descrição |
|---|---|
| GlideQueryCondition | A condição de consulta com escopo. |
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 com escopo - addTrend(cadeia de caracteres fieldName, cadeia de caracteres timeInterval, números numéricos)
Adiciona uma tendência para um campo especificado. Use uma tendência para mostrar padrões ao longo de um período de tempo.
| Nome | Tipo | Descrição |
|---|---|---|
| fieldName | Cadeia de caracteres | Nome do campo para o qual a tendência deve ocorrer. |
| Intervalo de tempo | Cadeia de caracteres | Intervalo de tempo para a tendência. Valores válidos:
|
| NumUnits | Número | Opcional. Válido somente quando timeInterval. minuto . Número de minutos a serem incluídos na tendência. Padrão: 1 |
| Tipo | Descrição |
|---|---|
| vazio |
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 com escopo - getAggregate(cadeia de caracteres agg, nome da cadeia de caracteres)
Retorna o valor de um agregado do registro atual.
| Nome | Tipo | Descrição |
|---|---|---|
| agg | Cadeia de caracteres | Tipo de agregado. Valores válidos:
|
| nome | Cadeia de caracteres | Nome do campo no qual a agregação será realizada. |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O valor da agregação. Se os valores que estão sendo agregados forem Valores de moeda FX, o valor retornado estará no formato <currency_code;currency_value> , como: USD; 134,980000 . Nota: Se o campo especificado contiver valores de Moeda FX de tipos de moeda mista, o método não poderá agregar os valores e retornará um ponto-e-vírgula (;). |
Mostra uma agregação que retorna o número de registros na tabela Incidente.
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);
Saída: Número de incidentes: 63.
Mostra a agregação de um campo Moeda 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'));
}
Saída:
*** 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 com escopo - getAggregateEncodedQuery()
Obtém a consulta necessária para retornar o agregado atual.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Consulta codificada para obter a agregação. |
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 com escopo - getEncodedQuery()
Recupera a consulta codificada.
| Nome | Tipo | Descrição |
|---|---|---|
| nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Consulta codificada. |
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 com escopo - getRow Count()
Recupera o número de linhas no objeto GlideAggregate.
| Nome | Tipo | Descrição |
|---|---|---|
| nenhum |
| Tipo | Descrição |
|---|---|
| Número | Número de linhas no objeto 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 com escopo - getTableName()
Recupera o nome da tabela associada a este objeto GlideAggregate.
| Nome | Tipo | Descrição |
|---|---|---|
| nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Nome da tabela. |
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 com escopo - getValue (nome da cadeia de caracteres)
Retorna o valor do campo especificado.
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | Nome do campo na tabela atual a ser retornado. |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Valor do campo especificado. Retorna nulo se inválido (não faz parte do conjunto de resultados). |
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");
}
Saída:
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 com escopo - groupBy (nome da cadeia de caracteres)
Fornece o nome de um campo a ser usado no agrupamento de agregados.
Pode ser chamado várias vezes para definir vários campos de grupo.
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | Nome do campo. |
| Tipo | Descrição |
|---|---|
| Nenhum(a) |
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 com escopo - hasNext()
Determina se há mais registros no objeto GlideAggregate.
| Nome | Tipo | Descrição |
|---|---|---|
| nenhum |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se há mais resultados no conjunto de consultas. Valores possíveis:
|
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 com escopo - next()
Move para o próximo registro no GlideAggregate.
| Nome | Tipo | Descrição |
|---|---|---|
| nenhum |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se há mais resultados no conjunto de consultas. Valores possíveis:
|
var count = new GlideAggregate('incident');
count.addAggregate('COUNT');
count.query();
var incidents = 0;
if (count.next()) {
incidents = count.getAggregate('COUNT');
gs.info(incidents);
}
GlideAggregate com escopo - orderBy (nome da cadeia de caracteres)
Ordena os agregados usando o valor do campo especificado. O campo também é adicionado à lista de grupo por.
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | Nome do campo para solicitar os agregados. Como alternativa, você pode fornecer uma glidefunction para ordenar os agregados, como |
| Tipo | Descrição |
|---|---|
| Nenhum(a) |
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 com escopo - orderByAggregate(cadeia de caracteres agg, cadeia de caracteres fieldName)
Ordena os agregados com base no agregado e no campo especificados.
| Nome | Tipo | Descrição |
|---|---|---|
| agg | Cadeia de caracteres | Tipo de agregação. |
| fieldName | Cadeia de caracteres | Nome do campo a ser agregado. |
| Tipo | Descrição |
|---|---|
| vazio |
ga.addAggregate('COUNT', 'category');
ga.orderByAggregate('count', 'category');
ga.query();
while(ga.next()) {
gs.info('Category: ' + ga.category + ' ' + ga.getAggregate('COUNT', 'category'));
}
Saída:
Category: inquiry 18
Category: software 11
Category: hardware 7
Category: network 5
Category: request 5
Category: 4
Category: database 2
GlideAggregate com escopo - orderByDesc(nome da cadeia de caracteres)
Classifica os agregados em ordem decrescente com base no campo especificado. O campo também será adicionado à lista de grupo por.
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | Nome do campo. |
| Tipo | Descrição |
|---|---|
| Nenhum(a) |
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 com escopo - query()
Emite a consulta e obtém os resultados.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Nenhum |
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 com escopo - setAggregateWindow(Number firstRow, number lastRow)
Limita o número de linhas da tabela a serem incluídas na consulta agregada.
| Nome | Tipo | Descrição |
|---|---|---|
| Primeira linha | Número | Índice baseado em zero da primeira linha a ser incluída na consulta agregada, inclusive. |
| LastRow | Número | Índice baseado em zero da última linha a ser incluída na consulta agregada, Exclusivo. |
| Tipo | Descrição |
|---|---|
| Nenhum |
Imprime a contagem de cada categoria para os primeiros dez registros na tabela Incidente [incidente].
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]);
}
Saída:
database count: 1
Hardware count: 1
inquiry count: 7
software count: 1
GlideAggregate com escopo - setGroup (booliano b)
Define se os resultados retornados devem ser agrupados.
| Nome | Tipo | Descrição |
|---|---|---|
| b | Booliano | Sinalizador que indica se os resultados devem ser agrupados. Valores válidos:
|
| Tipo | Descrição |
|---|---|
| vazio |
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'));
}
Saída:
Category database 2
Category hardware 7
Category inquiry 18
Category network 5
Category request 5
Category software 11
GlideAggregate com escopo - setIntervalYearIncluded(booliano b)
Define se os resultados devem ser agrupados por ano para as tendências do dia da semana. Essas tendências são criadas usando AddTrend() método com dayofweekintervalo de tempo.
Dependência: GlideAggregate com escopo - addTrend('<fieldName>', 'dayofweek') .
| Nome | Tipo | Descrição |
|---|---|---|
| b | Booliano | Sinalizador que indica se um ano deve ser incluído para uma tendência com um intervalo de tempo de dia da semana. Valores válidos:
Padrão: verdadeiro |
| Tipo | Descrição |
|---|---|
| Nenhum |
O exemplo a seguir mostra como contar incidentes criados nos últimos seis meses. Os incidentes são separados pelo dia da semana, mas não incluem o ano. Por exemplo, os resultados padrão para quinta-feira incluiriam o ano, como Quinta-feira/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'))};
Saída:
Sunday: 1
Monday: 15
Tuesday: 1
Wednesday: 7
Thursday: 16
Saturday: 1