GlideAggregate :グローバル
GlideAggregate API を使用すると、データベース集計クエリーを作成できます。
GlideAggregate クラスは GlideRecord クラスの拡張であり、データベース集計 (AVG、COUNT、GROUP_CONCAT、GROUP_CONCAT_DISTINCT、MAX、MIN、STDDEV、SUM) クエリーを提供します。この機能は、カスタマイズされたレポートを作成するとき、または計算フィールドの計算に役立ちます。
通貨フィールドまたは価格フィールドで GlideAggregate メソッドを使用する場合は、参照通貨値を操作します。表示するには、集計値をユーザーのセッション通貨に変換してください。通貨または価格の値 (表示値) とその参照 通貨 の値 (集計値) の間の換算レートは変化する可能性があるため、結果がユーザーの期待とは異なる場合があります。
この API を使用して動的属性を作成するには、dynamic_schema_writer ロールが必要です。この API を使用して動的データを読み取るには、dynamic_schema_reader ロールが必要です。
動的属性の詳細については、「 Dynamic Schema」を参照してください。
GlideAggregate - addAggregate(String agg、String name)
データベースクエリに集計を追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| agg | 文字列 | 使用する集計の名前。 有効な値:
|
| name | 文字列 | フィールド名はオプションです。集計の結果をグループ化するフィールドの名前、または動的属性ストア内の属性へのパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
動的属性の詳細については、「 Dynamic Schema」を参照してください。 デフォルト:Null |
| タイプ | 説明 |
|---|---|
| なし |
次の例は、インシデント [incident] テーブルで GlideAggregate 関数を使用する方法を示しています。
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(' ');
}
出力。
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
次の例は、動的属性ストアの属性を使用してこのメソッドを呼び出す方法を示しています。
var ga_Inc = new GlideAggregate('incident');
ga_Inc.groupBy('inc_dynamic_schema->cars->make');
ga_Inc.addAggregate('AVG', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('MIN', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('MAX', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('SUM', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('COUNT', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('STDDEV', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('GROUP_CONCAT', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('GROUP_CONCAT_DISTINCT', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('COUNT(DISTINCT', 'inc_dynamic_schema->cars->cost');
ga_Inc.query();
while (ga_Inc.next()) {
gs.info(gr_Inc.getValue('inc_dynamic_schema->cars->make'));
gs.info('AVG: ' + ga_Inc.getAggregate('AVG', 'inc_dynamic_schema->cars->cost'));
gs.info('MAX: ' + ga_Inc.getAggregate('MAX', 'inc_dynamic_schema->cars->cost'));
gs.info('MIN: ' + ga_Inc.getAggregate('MIN', 'inc_dynamic_schema->cars->cost'));
gs.info('SUM: ' + ga_Inc.getAggregate('SUM', 'inc_dynamic_schema->cars->cost'));
gs.info('COUNT: ' + ga_Inc.getAggregate('COUNT', 'inc_dynamic_schema->cars->cost'));
gs.info('STDDEV: ' + ga_Inc.getAggregate('STDDEV', 'inc_dynamic_schema->cars->cost'));
gs.info('GROUP_CONCAT: ' + ga_Inc.getAggregate('GROUP_CONCAT', 'inc_dynamic_schema->cars->cost'));
gs.info('GROUP_CONCAT_DISTINCT: ' + ga_Inc.getAggregate('GROUP_CONCAT_DISTINCT', 'inc_dynamic_schema->cars->cost'));
gs.info('COUNT(DISTINCT: ' + ga_Inc.getAggregate('COUNT(DISTINCT', 'inc_dynamic_schema->cars->cost'));
gs.info(' ');
}
出力:
*** Script: BMW
*** Script: AVG: 31852.066666666667
*** Script: MAX: 49182
*** Script: MIN: 16544
*** Script: SUM: 477781
*** Script: COUNT: 15
*** Script: STDDEV: 10376.50218706
*** Script: GROUP_CONCAT: 16544,18427,19083,22144,24126,27018,32353,34934,35691,35698,35799,36814,41257,48711,49182
*** Script: GROUP_CONCAT_DISTINCT: 16544,18427,19083,22144,24126,27018,32353,34934,35691,35698,35799,36814,41257,48711,49182
*** Script: COUNT(DISTINCT: 15
*** Script:
*** Script: Ford
*** Script: AVG: 31520.090909090909
*** Script: MAX: 47408
*** Script: MIN: 16080
*** Script: SUM: 346721
*** Script: COUNT: 11
*** Script: STDDEV: 11355.75551388
*** Script: GROUP_CONCAT: 16080,16082,16996,27621,31662,33478,35201,36965,38085,47143,47408
*** Script: GROUP_CONCAT_DISTINCT: 16080,16082,16996,27621,31662,33478,35201,36965,38085,47143,47408
*** Script: COUNT(DISTINCT: 11
*** Script:
*** Script: Honda
*** Script: AVG: 31972.750000000000
*** Script: MAX: 49187
*** Script: MIN: 15208
*** Script: SUM: 511564
*** Script: COUNT: 16
*** Script: STDDEV: 10240.67632207
*** Script: GROUP_CONCAT: 15208,17926,18365,20942,25557,28215,29090,34336,34857,34969,37144,38097,41541,41805,44325,49187
*** Script: GROUP_CONCAT_DISTINCT: 15208,17926,18365,20942,25557,28215,29090,34336,34857,34969,37144,38097,41541,41805,44325,49187
*** Script: COUNT(DISTINCT: 16
*** Script:
*** Script: Lexus
*** Script: AVG: 29841.250000000000
*** Script: MAX: 48406
*** Script: MIN: 15517
*** Script: SUM: 238730
*** Script: COUNT: 8
*** Script: STDDEV: 12073.56647214
*** Script: GROUP_CONCAT: 15517,16964,22371,23900,32421,36620,42531,48406
*** Script: GROUP_CONCAT_DISTINCT: 15517,16964,22371,23900,32421,36620,42531,48406
*** Script: COUNT(DISTINCT: 8
*** Script:
*** Script: Tesla
*** Script: AVG: 30790.000000000000
*** Script: MAX: 45032
*** Script: MIN: 16724
*** Script: SUM: 431060
*** Script: COUNT: 14
*** Script: STDDEV: 8510.068136760580
*** Script: GROUP_CONCAT: 16724,17173,21049,24837,28431,30594,31871,32549,32675,33778,36963,37946,41438,45032
*** Script: GROUP_CONCAT_DISTINCT: 16724,17173,21049,24837,28431,30594,31871,32549,32675,33778,36963,37946,41438,45032
*** Script: COUNT(DISTINCT: 14
*** Script:
*** Script: Toyota
*** Script: AVG: 32115.444444444444
*** Script: MAX: 49418
*** Script: MIN: 15188
*** Script: SUM: 289039
*** Script: COUNT: 9
*** Script: STDDEV: 12120.76776767
*** Script: GROUP_CONCAT: 15188,16453,24596,28529,32863,34697,42790,44505,49418
*** Script: GROUP_CONCAT_DISTINCT: 15188,16453,24596,28529,32863,34697,42790,44505,49418
*** Script: COUNT(DISTINCT: 9
*** Script:
スコープ対応
addAggregate() メソッドをスコープ対応アプリケーションで使用するには、対応する Scopedメソッドを使用します: addAggregate()
GlideAggregate - addBizCalendarTrend(文字列 fieldName, 文字列 bizCalendarSysId)
ビジネスカレンダー別の傾向を集計クエリに追加します。このメソッドを使用すると、対応する GlideRecord の日時フィールドを選択し、指定されたビジネスカレンダーのタイムスパンに基づいてレコードをグループ化できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| fieldName | 文字列 | レコードを含めるグループまたはカレンダーのタイムスパンを決定するために使用する、関連する GlideRecord の日時フィールド。 |
| bizCalendarSysID | 文字列 | 使用するカレンダーレコードのSys_id。これは、目的のタイムスパンを含むカレンダーです。 |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、「月」ビジネスカレンダーのタイムスパンでグループ化されたインシデントレコードの数を示しています。
var monthCal = "4d7ddda353f3001076bcddeeff7b12b1"
var ga = new GlideAggregate('incident');
ga.addAggregate('COUNT');
ga.addBizCalendarTrend('opened_at', monthCal);
ga.setGroup(false);
ga.query();
gs.print(ga.getRowCount());
while (ga.next()) {
gs.info(ga.getValue('bizcalref') + ', ' + ga.getValue('bizcalrefend') + ', ' + ga.getAggregate('COUNT'));
}
出力:
13
2015-08-01 00:00:00, 2015-09-01 00:00:00, 2
2015-11-01 00:00:00, 2015-12-01 00:00:00, 2
2016-08-01 00:00:00, 2016-09-01 00:00:00, 3
2016-12-01 00:00:00, 2017-01-01 00:00:00, 1
2018-08-01 00:00:00, 2018-09-01 00:00:00, 3
2018-09-01 00:00:00, 2018-10-01 00:00:00, 3
2018-10-01 00:00:00, 2018-11-01 00:00:00, 2
2019-07-01 00:00:00, 2019-08-01 00:00:00, 2
2020-06-01 00:00:00, 2020-07-01 00:00:00, 1
2021-01-01 00:00:00, 2021-02-01 00:00:00, 1
2023-04-01 00:00:00, 2023-05-01 00:00:00, 15
2023-05-01 00:00:00, 2023-06-01 00:00:00, 23
2023-07-01 00:00:00, 2023-08-01 00:00:00, 9
GlideAggregate - addEncodedQuery(文字列 query)
この集計に設定されている可能性のある他のクエリーにエンコードされたクエリーを追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| クエリ | 文字列 | 集計に追加するエンコードされたクエリー文字列です。 |
| タイプ | 説明 |
|---|---|
| なし |
var agg = new GlideAggregate('incident');
agg.addAggregate('count','category');
agg.orderByAggregate('count', 'category');
agg.orderBy('category');
agg.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(2)');
agg.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(2)');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count','category');
var query = agg.getQuery();
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count','category');
agg2.orderByAggregate('count', 'category');
agg2.orderBy('category');
agg2.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(3)');
agg2.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(3)');
agg2.addEncodedQuery(query);
agg2.query();
var last = "";
while (agg2.next()) {
last = agg2.getAggregate('count','category');
}
gs.log(category + ": Last month:" + count + " Previous Month:" + last);
}
スコープ対応
スコープ対象のアプリケーションで addEncodedQuery() メソッドを使用するには、対応するスコープ対象のメソッド addEncodedQuery() を使用します。
GlideAggregate - addHaving(文字列 name, 文字列 operator, 文字列 value)
「having」要素を集計に追加します。例:select category, count(*) from incident group by category HAVING count(*) > 5
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | フィルターを適用する集計です。例:COUNT |
| 演算子 | 文字列 | 演算子記号です。例:<、>、=、!= |
| value | 文字列 | クエリーを適用する値です。例:'5' |
| タイプ | 説明 |
|---|---|
| なし |
var trend = new GlideAggregate('incident');
trend.addTrend ('opened_at','Month');
trend.addAggregate('COUNT');
//addHaving limits the results returned to those in which the aggregate COUNT is greater than 2
trend.addHaving('COUNT', '>', '2');
trend.setGroup(false);
trend.query();
while(trend.next()) {
gs.print(('Incidents by month ' + trend.getValue('timeref') + ' where count is more than 2 count is: ' + trend.getAggregate('COUNT'));
}
出力:
Incidents by month 9/2018 where count is more than 2 count is: 3
Incidents by month 10/2018 where count is more than 2 count is: 8
Incidents by month 11/2018 where count is more than 2 count is: 14
GlideAggregate - addHaving(文字列 aggName, 文字列 fieldName, 文字列演算子, 文字列 value)
select category, count(*) from incident group by category HAVING count(*) > 5 のような「having」要素をアグリゲートに追加します。このメソッドの実装により、テーブル内の特定のフィールドまたは動作対象の動的属性を指定できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| aggName | 文字列 | フィルターを適用する集計です。 例:COUNT |
| フィールド名 | 文字列 | 動的属性ストア内の属性へのフィールド名またはパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
動的属性の詳細については、「 Dynamic Schema」を参照してください。 |
| オペレーター | 文字列 | 演算子記号です。 例:<、>、=、!= |
| value | 文字列 | クエリーを適用する値です。 例:'5' |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、 addHaving() メソッド呼び出しのフィールド名を使用して、cmdb テーブル内の重複するシリアル番号を識別する方法を示しています。
function getDupes(tableName, dpField) {
var ga = new GlideAggregate(tableName);
ga.addAggregate('COUNT', dpField); // Aggregate to count values in whatever field is passed as dpField
ga.addHaving('COUNT', dpField, '>', '1'); // Returns only records having more than one active instance of dpField
ga.query();
var arDupes = new Array(); // Build array to push the results into
while (ga.next()) {
arDupes.push(ga.getValue(dpField)); // Push the value of the dupe field to the array
}
return arDupes;
}
var tableName = "cmdb";
var dpField = "serial_number";
gs.print(getDupes(tableName, dpField));
出力:
Incidents by month 9/2018 where count is more than 2 count is: 3
Incidents by month 10/2018 where count is more than 2 count is: 8
Incidents by month 11/2018 where count is more than 2 count is: 14
次の例は、重複を識別するためのものですが、 addHaving() メソッド呼び出しでフィールドの代わりに動的属性を使用しています。
function getDupes(tableName, dpField) {
var ga = new GlideAggregate(tablename);
ga.addAggregate('COUNT', dpField); // Aggregate to count values in whatever dynamic attribute is passed as dpField
ga.addHaving('COUNT', dpField, '>', '1'); // Returns only records having more than one active instance of dpField
ga.query();
var arDupes = new Array(); // Build array to push the results into
while (ga.next()) {
arDupes.push(ga.getValue(dpField)); // Push the value of the dupe field to the array
}
return arDupes;
}
var tableName = "cmdb";
var dpField = "dyn_att_field->group->attr";
gs.print(getDupes(tableName, dpField));
出力:
Incidents by month 9/2018 where count is more than 2 count is: 3
Incidents by month 10/2018 where count is more than 2 count is: 8
Incidents by month 11/2018 where count is more than 2 count is: 14
GlideAggregate - addTrend(文字列 fieldName, 文字列 timeInterval, 数値 numUnits)
フィールドのトレンドを追加します。傾向を使用して、一定期間のパターンを示します。
| 名前 | タイプ | 説明 |
|---|---|---|
| fieldName | 文字列 | 傾向が発生するフィールドの名前です。 |
| timeInterval | 文字列 | 傾向の時間間隔です。 有効な値:
|
| numUnits | 番号 | オプション。timeInterval が minute の場合にのみ有効です。傾向に含める時間 (分) です。 デフォルト値:1 |
| タイプ | 説明 |
|---|---|
| なし |
var trend = new GlideAggregate('incident');
trend.addTrend ('opened_at','month');
trend.addAggregate('COUNT');
trend.setGroup(false);
trend.query();
while(trend.next()) {
gs.print(trend.getValue('timeref') + ': ' + trend.getAggregate('COUNT'));
}
出力:
9/2018: 3
10/2018: 8
11/2018: 14
スコープ対応
スコープ対象のアプリケーションで addTrend() メソッドを使用するには、対応するスコープ対象のメソッド addTrend() を使用します。
GlideAggregate - getAggregate(String agg、String name)
現在のレコードからの集計の値を取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| agg | 文字列 | 集計のタイプです。 有効な値:
|
| name | 文字列 | 集計を取得するフィールドの名前、または動的スキーマ内の属性へのパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
動的属性の詳細については、「 Dynamic Schema」を参照してください。 |
| タイプ | 説明 |
|---|---|
| 文字列 | 集計の値。 集計される値が FX 通貨値である場合、戻り値は <currency_code;currency_value> 形式になります。例:USD;134.980000 注: 指定されたフィールドに通貨タイプが混在する FX 通貨値が含まれている場合、このメソッドは値を集計できず、セミコロン (;) を返します。 |
この例は、COUNT 集計を取得する方法を示しています。
function doMyBusinessRule(assigned_to, number) {
var agg = new GlideAggregate('incident');
agg.addQuery('assigned_to', assigned_to);
agg.addQuery('category', number);
agg.addAggregate("COUNT");
agg.query();
var answer = 'false';
if (agg.next()) {
answer = agg.getAggregate("COUNT");
if (answer > 0)
answer = 'true';
else
answer = 'false';
}
return answer;
}
この例は、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'));
}
出力:
*** 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
次の例は、動的属性ストアの属性を使用してこのメソッドを呼び出す方法を示しています。
var ga_Inc = new GlideAggregate('incident');
ga_Inc.groupBy('inc_dynamic_schema->cars->make');
ga_Inc.addAggregate('AVG', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('MIN', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('MAX', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('SUM', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('COUNT', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('STDDEV', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('GROUP_CONCAT', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('GROUP_CONCAT_DISTINCT', 'inc_dynamic_schema->cars->cost');
ga_Inc.addAggregate('COUNT(DISTINCT', 'inc_dynamic_schema->cars->cost');
ga_Inc.query();
while (ga_Inc.next()) {
gs.info(gr_Inc.getValue('inc_dynamic_schema->cars->make'));
gs.info('AVG: ' + ga_Inc.getAggregate('AVG', 'inc_dynamic_schema->cars->cost'));
gs.info('MAX: ' + ga_Inc.getAggregate('MAX', 'inc_dynamic_schema->cars->cost'));
gs.info('MIN: ' + ga_Inc.getAggregate('MIN', 'inc_dynamic_schema->cars->cost'));
gs.info('SUM: ' + ga_Inc.getAggregate('SUM', 'inc_dynamic_schema->cars->cost'));
gs.info('COUNT: ' + ga_Inc.getAggregate('COUNT', 'inc_dynamic_schema->cars->cost'));
gs.info('STDDEV: ' + ga_Inc.getAggregate('STDDEV', 'inc_dynamic_schema->cars->cost'));
gs.info('GROUP_CONCAT: ' + ga_Inc.getAggregate('GROUP_CONCAT', 'inc_dynamic_schema->cars->cost'));
gs.info('GROUP_CONCAT_DISTINCT: ' + ga_Inc.getAggregate('GROUP_CONCAT_DISTINCT', 'inc_dynamic_schema->cars->cost'));
gs.info('COUNT(DISTINCT: ' + ga_Inc.getAggregate('COUNT(DISTINCT', 'inc_dynamic_schema->cars->cost'));
gs.info(' ');
}
出力:
*** Script: BMW
*** Script: AVG: 31852.066666666667
*** Script: MAX: 49182
*** Script: MIN: 16544
*** Script: SUM: 477781
*** Script: COUNT: 15
*** Script: STDDEV: 10376.50218706
*** Script: GROUP_CONCAT: 16544,18427,19083,22144,24126,27018,32353,34934,35691,35698,35799,36814,41257,48711,49182
*** Script: GROUP_CONCAT_DISTINCT: 16544,18427,19083,22144,24126,27018,32353,34934,35691,35698,35799,36814,41257,48711,49182
*** Script: COUNT(DISTINCT: 15
*** Script:
*** Script: Ford
*** Script: AVG: 31520.090909090909
*** Script: MAX: 47408
*** Script: MIN: 16080
*** Script: SUM: 346721
*** Script: COUNT: 11
*** Script: STDDEV: 11355.75551388
*** Script: GROUP_CONCAT: 16080,16082,16996,27621,31662,33478,35201,36965,38085,47143,47408
*** Script: GROUP_CONCAT_DISTINCT: 16080,16082,16996,27621,31662,33478,35201,36965,38085,47143,47408
*** Script: COUNT(DISTINCT: 11
*** Script:
*** Script: Honda
*** Script: AVG: 31972.750000000000
*** Script: MAX: 49187
*** Script: MIN: 15208
*** Script: SUM: 511564
*** Script: COUNT: 16
*** Script: STDDEV: 10240.67632207
*** Script: GROUP_CONCAT: 15208,17926,18365,20942,25557,28215,29090,34336,34857,34969,37144,38097,41541,41805,44325,49187
*** Script: GROUP_CONCAT_DISTINCT: 15208,17926,18365,20942,25557,28215,29090,34336,34857,34969,37144,38097,41541,41805,44325,49187
*** Script: COUNT(DISTINCT: 16
*** Script:
*** Script: Lexus
*** Script: AVG: 29841.250000000000
*** Script: MAX: 48406
*** Script: MIN: 15517
*** Script: SUM: 238730
*** Script: COUNT: 8
*** Script: STDDEV: 12073.56647214
*** Script: GROUP_CONCAT: 15517,16964,22371,23900,32421,36620,42531,48406
*** Script: GROUP_CONCAT_DISTINCT: 15517,16964,22371,23900,32421,36620,42531,48406
*** Script: COUNT(DISTINCT: 8
*** Script:
*** Script: Tesla
*** Script: AVG: 30790.000000000000
*** Script: MAX: 45032
*** Script: MIN: 16724
*** Script: SUM: 431060
*** Script: COUNT: 14
*** Script: STDDEV: 8510.068136760580
*** Script: GROUP_CONCAT: 16724,17173,21049,24837,28431,30594,31871,32549,32675,33778,36963,37946,41438,45032
*** Script: GROUP_CONCAT_DISTINCT: 16724,17173,21049,24837,28431,30594,31871,32549,32675,33778,36963,37946,41438,45032
*** Script: COUNT(DISTINCT: 14
*** Script:
*** Script: Toyota
*** Script: AVG: 32115.444444444444
*** Script: MAX: 49418
*** Script: MIN: 15188
*** Script: SUM: 289039
*** Script: COUNT: 9
*** Script: STDDEV: 12120.76776767
*** Script: GROUP_CONCAT: 15188,16453,24596,28529,32863,34697,42790,44505,49418
*** Script: GROUP_CONCAT_DISTINCT: 15188,16453,24596,28529,32863,34697,42790,44505,49418
*** Script: COUNT(DISTINCT: 9
*** Script:
スコープ対応
getAggregate() メソッドをスコープ対応アプリケーションで使用するには、対応する Scopedメソッドを使用します。 getAggregate() 。
GlideAggregate - getDynamicAttributeValue(文字列 fullPath)
指定されたパスにある動的属性の値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フルパス | 文字列 | 目的の動的属性を見つけるために使用するパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
|
| タイプ | 説明 |
|---|---|
| オブジェクト | 指定されたパスにある動的属性の値。 fullPathパラメーターに無効なデータが含まれている場合、または指定された属性値がサポートされているデータ型の 1 つでない場合は、null を返します。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
var ga_Tab = new GlideAggregate('u_mytable');
ga_Tab.groupBy('u_dyn_attr_store->paint->color');
ga_Tab.addAggregate('AVG', 'u_dyn_attr_store->paint->number');
ga_Tab.query();
while(ga_Tab.next()) {
gs.info(
"color: " + ga_Tab.getDynamicAttributeValue('u_dyn_attr_store->paint->color')
+ " avg: " + ga_Tab.getAggregate('AVG', 'u_dyn_attr_store->paint->number'));
}
*** Script: color: blue avg: 5.0000
*** Script: color: red avg: 8.0000
*** Script: color: yellow avg: 7.0000GlideAggregate - getDynamicAttributeValue(文字列 dynamicAttributeField, 文字列 groupAttrPath)
現在のテーブルの指定されたフィールドと指定された属性パスにある動的属性の値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| dynamicAttributeField | 文字列 | 動的属性を含むテーブル内のフィールドの名前。 |
| groupAttrPath | 文字列 | 関連する動的スキーマ属性を見つけるために使用する属性パス。 フォーマット:「 group_name->attr_name」
例 |
| タイプ | 説明 |
|---|---|
| オブジェクト | 指定されたパスにある動的属性の値。 dynamicAttributeField パラメーターまたは groupAttrPath パラメーターのいずれかが無効な場合は、null を返します。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
var ga_Tab = new GlideAggregate('u_mytable');
ga_Tab.groupBy('u_dyn_attr_store->paint->color');
ga_Tab.addAggregate('AVG', 'u_dyn_attr_store->paint->number');
ga_Tab.query();
while(ga_Tab.next()) {
gs.info(
"color: " + ga_Tab.getDynamicAttributeValue('u_dyn_attr_store', 'paint->color')
+ " avg: " + ga_Tab.getAggregate('AVG', 'u_dyn_attr_store->paint->number'));
}
*** Script: color: blue avg: 5.0000
*** Script: color: red avg: 8.0000
*** Script: color: yellow avg: 7.0000GlideAggregate:getDynamicAttributeDisplayValue(文字列 fullPath)
指定されたパスにある動的属性の表示値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フルパス | 文字列 | 目的の動的属性を見つけるために使用するパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
|
| タイプ | 説明 |
|---|---|
| 文字列 | 指定したパスにある動的属性の表示値。 fullPathパラメーターが無効な場合は、null を返します。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
var ga_Tab = new GlideAggregate('u_mytable');
ga_Tab.groupBy('u_dyn_attr_store->paint->color');
ga_Tab.addAggregate('AVG', 'u_dyn_attr_store->paint->number');
ga_Tab.query();
while(ga_Tab.next()) {
gs.info(
"color: " + ga_Tab.getDynamicAttributeDisplayValue('u_dyn_attr_store->paint->color')
+ " avg: " + ga_Tab.getAggregate('AVG', 'u_dyn_attr_store->paint->number'));
}
*** Script: color: blue avg: 5.0000
*** Script: color: red avg: 8.0000
*** Script: color: yellow avg: 7.0000GlideAggregate - getDynamicAttributeDisplayValue(文字列 dynamicAttributeField, 文字列 groupAttrPath)
指定されたテーブルフィールドと属性パスにある動的属性の表示値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| dynamicAttributeField | 文字列 | 動的属性を含むテーブル内のフィールドの名前。 |
| groupAttrPath | 文字列 | 関連する動的スキーマ属性を見つけるために使用する属性パス。 フォーマット:「 group_name->attr_name」
例 |
| タイプ | 説明 |
|---|---|
| 文字列 | 指定したパスにある動的属性の表示値。 dynamicAttributeField パラメーターまたは groupAttrPath パラメーターのいずれかが無効な場合は、null を返します。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
var ga_Tab = new GlideAggregate('u_mytable');
ga_Tab.groupBy('u_dyn_attr_store->paint->color');
ga_Tab.addAggregate('AVG', 'u_dyn_attr_store->paint->number');
ga_Tab.query();
while(ga_Tab.next()) {
gs.info(
"color: " + ga_Tab.getDynamicAttributeDisplayValue('u_dyn_attr_store', 'paint->color')
+ " avg: " + ga_Tab.getAggregate('AVG', 'u_dyn_attr_store->paint->number'));
}
*** Script: color: blue avg: 5.0000
*** Script: color: red avg: 8.0000
*** Script: color: yellow avg: 7.0000GlideAggregate - getQuery()
現在の集計を返すために必要なクエリーを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | クエリー |
var agg = new GlideAggregate('incident');
agg.addAggregate('count','category');
agg.orderByAggregate('count', 'category');
agg.orderBy('category');
agg.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(2)');
agg.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(2)');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count','category');
var query = agg.getQuery();
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count','category');
agg2.orderByAggregate('count', 'category');
agg2.orderBy('category');
agg2.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(3)');
agg2.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(3)');
agg2.addEncodedQuery(query);
agg2.query();
var last = "";
while (agg2.next()) {
last = agg2.getAggregate('count','category');
}
gs.log(category + ": Last month:" + count + " Previous Month:" + last);
}
GlideAggregate:getRowCount()
GlideAggregate オブジェクトの行数を取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 番号 | 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.0000スコープ対応
スコープ対象のアプリケーションで getRowCount() メソッドを使用するには、対応するスコープ付きメソッド ( スコープ付き GlideAggregate - getRowCount()) を使用します。
GlideAggregate - getTotal(文字列 agg, 文字列 name)
集計を合計してレコード数を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| agg | 文字列 | 使用する集計の名前。 有効な値:
|
| name | 文字列 | 集計するフィールドの名前 |
| タイプ | 説明 |
|---|---|
| 番号 | レコードの数です。 |
var incidentGA = new GlideAggregate('incident');
incidentGA.addQuery('category', 'software');
incidentGA.addAggregate('COUNT');
incidentGA.addTrend('opened_at','year'); // Counting number of incidents for software category per year
incidentGA.setGroup(false);
incidentGA.query();
while(incidentGA.next()){
gs.info('Incidents opened on year - '+incidentGA.getValue('timeref')+' - '+incidentGA.getAggregate('COUNT'));
}
gs.info('Total Aggregate Value >> '+ incidentGA.getTotal('COUNT'));
出力:
Incidents opened on year - 2015 - 1
Incidents opened on year - 2018 - 5
Incidents opened on year - 2020 - 10
Total Aggregate Value >> 16
GlideAggregate getValue(String name)
フィールドまたは動的属性の値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 動的属性ストア内の属性へのフィールド名またはパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
|
| タイプ | 説明 |
|---|---|
| 文字列 | 指定されたフィールドの値。無効な (結果セットの一部ではない) 場合は null を返します。 |
var trend = new GlideAggregate('incident');
trend.addTrend ('opened_at','Month');
trend.addAggregate('COUNT');
//addHaving limits the results returned to those in which the aggregate COUNT is greater than 2
trend.addHaving('COUNT', '>', '2');
trend.setGroup(false);
trend.query();
while(trend.next()) {
gs.print(('Incidents by month ' + trend.getValue('timeref') + ' where count is more than 2 count is: ' + trend.getAggregate('COUNT'));
}
出力:
Incidents by month 9/2018 where count is more than 2 count is: 3
Incidents by month 10/2018 where count is more than 2 count is: 8
Incidents by month 11/2018 where count is more than 2 count is: 14
スコープ対応
スコープ対象のアプリケーションで getValue() メソッドを使用するには、対応するスコープ対象のメソッド getValue() を使用します。
GlideAggregate - groupBy(文字列 name)
集計をグループ化するときに使用する、動的属性ストア内のフィールドまたは属性の名前を指定します。
複数のグループフィールドを設定するために何度も呼び出されることがあります。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 動的属性ストア内の属性へのフィールド名またはパス。 動的パスの形式: dyn_att_field->group_name->attribute_name
動的属性の詳細については、「 Dynamic Schema」を参照してください。 |
| タイプ | 説明 |
|---|---|
| なし |
次の例は、このメソッドを呼び出す方法を示しています。
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.log(category + " Update counts: MIN = " + min + " MAX = " + max + " AVG = " + avg);
}
次の例は、動的属性ストアの属性を使用してこのメソッドを呼び出す方法を示しています。
var ga_AppTab = new GlideAggregate('application_table');
ga_AppTab.addGroupBy('dyn_att_field->group->attr');
ga_AppTab.addAggregate('AVG', 'dyn_att_field->group->attr1');
ga_AppTab.addHaving('SUM', 'dyn_att_field->group->attr2', '>=', 420);
ga.query();
スコープ対応
groupBy() メソッドをスコープ対応アプリケーションで使用するには、対応するScoped メソッドを使用します。 groupBy() 。
GlideAggregate orderBy(String name)
指定されたフィールド、動的属性パス、または glidefunction の値を使用して集計を順序付けします。このフィールドは、グループ化リストにも追加されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | フィールド名、動的属性ストア内の属性へのパス、または集計の順序付けに使用する glidefunction。 動的パスの形式: dyn_att_field->group_name->attribute_name
動的属性の詳細については、「 Dynamic Schema」を参照してください。 glidefunction 形式: |
| タイプ | 説明 |
|---|---|
| なし |
var agg = new GlideAggregate('incident');
agg.addAggregate('count','category');
agg.orderByAggregate('count', 'category');
agg.orderBy('category');
agg.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(2)');
agg.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(2)');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count','category');
var query = agg.getQuery();
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count','category');
agg2.orderByAggregate('count', 'category');
agg2.orderBy('category');
agg2.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(3)');
agg2.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(3)');
agg2.addEncodedQuery(query);
agg2.query();
var last = "";
while (agg2.next()) {
last = agg2.getAggregate('count','category');
}
gs.log(category + ": Last month:" + count + " Previous Month:" + last);
}
スコープ対応
スコープ対象のアプリケーションで orderBy() メソッドを使用するには、対応するスコープ対象のメソッド orderBy() を使用します。
GlideAggregate:orderByAggregate(文字列集計, 文字列フィールド名)
指定した集計とフィールドまたは動的属性に基づいて集計を並べ替えます。
| 名前 | タイプ | 説明 |
|---|---|---|
| agg | 文字列 | 集計のタイプ 有効な値:
|
| fieldName | 文字列 | 集計する動的属性ストア内のフィールドまたは属性へのパスの名前。 動的パスの形式: dyn_att_field->group_name->attribute_name
動的属性の詳細については、「 Dynamic Schema」を参照してください。 |
| タイプ | 説明 |
|---|---|
| なし |
var agg = new GlideAggregate('incident');
agg.addAggregate('count','category');
agg.orderByAggregate('count', 'category');
agg.orderBy('category');
agg.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(2)');
agg.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(2)');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count','category');
var query = agg.getQuery();
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count','category');
agg2.orderByAggregate('count', 'category');
agg2.orderBy('category');
agg2.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(3)');
agg2.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(3)');
agg2.addEncodedQuery(query);
agg2.query();
var last = "";
while (agg2.next()) {
last = agg2.getAggregate('count','category');
}
gs.log(category + ": Last month:" + count + " Previous Month:" + last);
}
スコープ対応
orderByAggregate() メソッドをスコープ対応アプリケーションで使用するには、対応する Scopedメソッドを使用します。 orderByAggregate() 。
GlideAggregate - query()
クエリーを発行し、結果を取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし |
var agg = new GlideAggregate('incident');
agg.addAggregate('count','category');
agg.orderByAggregate('count', 'category');
agg.orderBy('category');
agg.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(2)');
agg.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(2)');
agg.query();
while (agg.next()) {
var category = agg.category;
var count = agg.getAggregate('count','category');
var query = agg.getQuery();
var agg2 = new GlideAggregate('incident');
agg2.addAggregate('count','category');
agg2.orderByAggregate('count', 'category');
agg2.orderBy('category');
agg2.addQuery('opened_at', '>=', 'javascript:gs.monthsAgoStart(3)');
agg2.addQuery('opened_at', '<=', 'javascript:gs.monthsAgoEnd(3)');
agg2.addEncodedQuery(query);
agg2.query();
var last = "";
while (agg2.next()) {
last = agg2.getAggregate('count','category');
}
gs.log(category + ": Last month:" + count + " Previous Month:" + last);
スコープ対応
スコープ対象のアプリケーションで query() メソッドを使用するには、対応するスコープ対象のメソッド query() を使用します。
GlideAggregate - setAggregateWindow(数値 firstRow, 数値 lastRow)
集計クエリに含めるテーブルの行数を制限します。
| 名前 | タイプ | 説明 |
|---|---|---|
| firstRow | 数値 | 集計クエリに含める最初の行のゼロベースのインデックス (包含)。 |
| lastRow | 数値 | 集計クエリに含める最後の行のゼロベースのインデックス (排他的) 。 |
| タイプ | 説明 |
|---|---|
| なし |
インシデント [incident] テーブルの最初の 10 件のレコードの各カテゴリの数を出力します。
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]);
}
出力:
database count: 1
Hardware count: 1
inquiry count: 7
software count: 1
スコープ対応
スコープ対象のアプリケーションで setAggregateWindow() メソッドを使用するには、対応するスコープ対象のメソッド setAggregateWindow() を使用します。
GlideAggregate - setGroup(ブール b)
結果をグループ化するかどうかを設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| b | ブーリアン | 結果をグループ化するかどうかを示すフラグです。 有効な値:
|
| タイプ | 説明 |
|---|---|
| なし |
var ga = new GlideAggregate('incident');
ga.addAggregate('COUNT', 'category');
ga.setGroup(true);
スコープ対応
Scoped アプリケーションでsetGroup()メソッドを使用するには、対応する Scoped メソッドsetGroup()を使用してください。
GlideAggregate - setIntervalYearIncluded(ブール値 b)
曜日の傾向について、結果を年別にグループ化するかどうかを設定します。これらのトレンドは、dayofweek時間間隔でaddTrend()メソッドを使用して作成されます。
依存関係:GlideAggregate - addTrend('<fieldName>', 'dayofweek')。
| 名前 | タイプ | 説明 |
|---|---|---|
| b | ブール | 曜日間隔のある傾向に年を含めるかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| なし |
次の例は、過去 6 か月間に作成されたインシデントをカウントする方法を示しています。インシデントは曜日ごとに分かれていますが、年は含まれません。たとえば、木曜日のデフォルトの結果には、 Thursday/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'))};
出力:
Sunday: 1
Monday: 15
Tuesday: 1
Wednesday: 7
Thursday: 16
Saturday: 1
スコープ対応
スコープ対象のアプリケーションで setIntervalYearIncluded() メソッドを使用するには、対応するスコープ対象のメソッド setIntervalYearIncluded() を使用します。