Download PDF
Download page Analytics の関数.
Analytics の関数
関数は、SELECT 句の引数として機能します。ADQL の関数タイプは次のとおりです。
- メトリック関数
- バケット関数
- 文字列関数
- ファネル関数
- データ型変換関数
- 他の関数を変更する関数
多くの関数では、数値フィールドのみ有効です。「すべての」データ型とは、整数、浮動小数点、日時、および文字列を意味します。
関数は、ゼロまたは空のデータフィールドによる整数除算の結果の NULL 値など、NULL 値を無視します。
WHERE 句をクエリに追加するには、[Controller Analytics search UI] の [data] タブのクエリボックスを使用します。検索を実行すると、テーブルウィジェットの [visualization] タブにメトリック関数の結果が表示されます。
次の各セクションで、関数のタイプについて 1 つずつ説明します。
メトリック関数
メトリック関数:
- フィールドの値のセットに対して計算を実行します。
- カウントや合計など 1 つの結果、またはパーセンタイルなどの結果のセットを返します。
- SELECT 句内でのみ使用できます。
- フィールド名が存在する場合は常にそれをフォローします。存在しない場合は、一部の視覚化が機能しない場合があります。
distinctcount() 関数は、最大 3000 の一意の戻り値に対して正確です。一意の戻り値が 3000 を超える場合、distinctcount() は、パフォーマンスの最適化によって概算となります。
関数 | 返り値 | 有効なフィールドタイプ | ADQL クエリの例 |
---|---|---|---|
avg(numeric_field_name) | 数値フィールドの平均値。 | 整数、浮動小数点、日時 | SELECT |
count(field_name) | イベントの数。 | all count(*) という形式も有効です。 | SELECT 次のクエリは、アプリケーションに HTTP 要求を送信している上位 10 個の IP アドレスを返します。 SELECT ip, |
distinctcount(field_name) | フィールドに対して記録された一意の値の数。 | all | SELECT |
max(numeric_field_name) | 数値フィールドの最大記録値。 | 整数、浮動小数点、日時 1 つのフィールドのみを指定します。 | SELECT SELECT nodeName, |
min(numeric_field_name) | 数値フィールドの最小記録値。 | 整数、浮動小数点、日時 1 つのフィールドのみを指定します。 | SELECT |
stdev(numeric_field_name) | 数値フィールドの母集団標準偏差。 | 整数、浮動小数点 | SELECT stdev (numeric_field_name)FROM transactions |
sum(numeric_field_name) | 数値フィールドの値の合計。 | 整数、浮動小数点、日時 1 つのフィールドのみを指定します。 | SELECT |
percentile(numeric_field_name, percent) | 0 ~ 100 の間の指定したパーセンタイル値 | 整数、浮動小数点、日時 1 つまたは複数のパーセンタイルを指定します。 | SELECT |
stats(numeric_field_name) | フィールドの統計情報: | 整数、浮動小数点、日時 | SELECT |
totalResultCount() | イベントの合計数。 | フィールドを受け入れません。 | 次のクエリでは、最初に「ECommerce」アプリケーションのすべてのエラートランザクションを選択します。次に、一意のトランザクション名ごとに、そのトランザクション名のインスタンス数とエラートランザクションの合計数の比率を計算します。(所定のトランザクション名を複数のエラートランザクションに表示できることを前提としています。) SELECT |
バケット関数
SELECT series
(eventTimestamp, '1h'), count
(*) FROM transactions WHERE application='yourAppName'
結果の大規模なデータセットを含めるには、Controller Analytics search UI の右上隅にある時間範囲セレクタを使用します。
日付は日時値とは異なります。次のように週からミリ秒までの単位がサポートされています。
'1w'
:1 週間'10d'
:10 日間'2h'
:2 時間'5m'
:5 分間'36s'
:36 秒'800ms'
:800 ミリ秒
バケットを定義するために日付を使用する場合は、定義によって生成されるバケットの数を考慮してください。series() のバケット数は 2000 を超えることはできず、これよりもずっと少ない数のバケットが標準です。
関数 | 返り値 | 有効なフィールドタイプ | ADQL クエリの例 |
---|---|---|---|
range(field_name, n|(n1, n2), n3|(n4, n5), ...) | 1 つ以上のバケット。 | 整数、浮動小数点、日付 単一の値 バケットの定義方法の詳細については、以下を参照してください。 | 次に range クエリの例を示します。 SELECT これにより、次のバケットが生成されます。 [-Inf, 0], [0, 10], [10, 20], [20, +Inf] |
範囲を指定すると、すべてのバケットが返されるか、空になるか、または返されません。 範囲を指定しない場合は、次のようになります。
| 指定した間隔に基づく一連のバケット。 | 整数、浮動小数点、日付 数値フィールドでは、間隔を整数として指定します。 オプションのキーワード引数 | SELECT SELECT |
range() のバケットの定義
各バケットは、2 つの単一値による範囲として定義されます。バケットには最初の値が含まれ、2 番目の値は除外されます。
値のペア (x, y)
によって、x
(この値は含まれる)から y
(この値は含まれない)までの明示的なバケットが定義されます。
単一値 x
では、range()
の引数間のどこに値が配置されているかに基づいたルールに従いバケットが暗黙的に定義されます。
- バケットを定義する単一値を使用するためのルールは次のとおりです。
- フィールドの直後(つまり、2 番目の引数として):バケットは負の無限大で始まります。
- 別の単一値の後:バケットは前の引数(この引数は含まれる)から開始され、
x
(これは含まれない)まで拡張されます。 - 値のペアの後、かつ別の単一値の前:バケットは x(これは含まれる)から開始され、次の引数(これは含まれない)まで拡張されます。
- パラメータリストの末尾:バケットは正の無限大で終わります。これは、
x
が 2 つの引数の 2 番目であるという前提の例外の 1 つです。 - 2 つの値のペアの間:バケットを定義できず、値は無視されます。
range クエリの例
ここでは、上記のルールのほとんどを実行する range クエリを示します。
SELECT range
(segments.transactionTime, 0, (10, 20), 30, (40, 50), 60, 70) FROM transactions
クエリによって、次のバケットが生成されます。
- [-Inf, 0]:ルールが 0 に適用されるため
- [10, 20]:(10, 20) によってこのバケットが明示的に定義されるため
- 30 に対してはバケットなし:ルール e が適用されるため、30 は無視されます
- [40, 50]:(40, 50) によってこのバケットが明示的に定義されるため
- [60, 70]:ルール c が 60 に適用されるため
- [70, +Inf]:ルール d が 70 に適用されるため
オプションのキーワード引数:series():
offset
、rangeStyleBucketKeys
、および strictEndpoints
series は、次のオプションのキーワード引数をサポートしています。
offset
指定の正(+)または負(-)のオフセット期間によって各 series の開始値を 0 から変更します(1 時間の場合は 1h、1 日の場合は 1d など)。値 alignStart
および alignEnd
によって、拡張範囲引数の先頭と末尾にそれぞれバケットを配置します。この関数には、これらの特別な値を使用するために指定された拡張範囲が必要です。デフォルトは 0 です。整数と文字列の両方の値を受け入れます。
例:
SELECT series
(responseTime, 1, 1, 10, offset
="alignStart"), count
(*) FROM transactions
SELECT series
(responseTime, 100, 1, 1000, offset=1), count
(*) FROM transactions
rangeStyleBucketKeys
数値シリーズの開始値と終了値を文字列型として「bucketStart - bucketEnd」形式に変換します。たとえば、「0-10」、「10-20」などです。この引数が返すこの出力は、range 関数によって返されたものと似ています。このキーワード引数を使用するには、series 関数を数値型で動作させる必要があります。デフォルトは false です。ブール値のみを受け入れます。
例:
SELECT series
(responseTime, 100, 1, 1000, rangeStyleBucketKeys
=true), count
(*) FROM transactions
strictEndpoints
クエリにフィルタを追加し、最小の拡張範囲で開始し、最大の拡張範囲まで拡張します。これにより、拡張範囲外のバケットは結果に存在しなくなります。デフォルトは false です。ブール値のみを受け入れます。拡張範囲によって、ヒストグラム集約で、特定の最小値に基づいて間隔の作成が開始され、所定の最大値まで間隔が拡張されます。
例:
SELECT series
(responseTime, 2, 1, 5, strictEndpoints=true, rangeStyleBucketKeys=true), count
(*) FROM transactions
時系列クエリでの上位 n 件の結果の選択
Deployment Support
![](/appd/20.x/files/en/104020916/117480583/1/1617404450000/DeploymentSupport_SaaS1.png)
上位 n 件の結果は、SaaS デプロイでのみ使用できます。
SELECT series
(eventTimestamp, '1m'), transactionName, count
(*) FROM transaction LIMIT 1, 12一連の関数で、全期間にわたってグローバルな上位 n 件の計算を実行できます。上位 n 件の制限を設定するには、クエリの末尾に LIMIT 句を追加します。
この例では、クエリを transactionName の上位 12 件の結果に制限しています。値 1 は series
関数に適用されますが、series はバケット関数であるため、実際にはこの制限を使用しません。series
関数の値を含める必要があります。
次のクエリの場合、全体の上位 n 件の制限は適用されません。
- series 関数の前に選択が含まれる:
SELECT application,series
(eventTimestamp, '1m'), transactionName,...
- 追加のバケット関数がある:
SELECTseries
(eventTimestamp, '1m'),range
(responseTime, 0, 60, 120), transactionName,...
- HAVING 句が含まれる:
SELECTseries
(eventTimestamp, '1m'), transactionName,avg
(responseTime), ... HAVING a >15
文字列関数
ADQL 文字列操作関数:
- SQL の対応物に似ています。
- 大文字と小文字が区別されます。
- 引数が NULL の場合、NULL を返します。
- 0 ベースではなく、1 ベースのインデックス作成を使用します。
- たとえば、
indexOf()
関数は、文字列の最初の文字のインデックスを 0 ではなく 1 として指定します。 - このため、0 は整数引数の有効な値ではありません。
- たとえば、
文字列関数は、Analytics イベントサービスに存在するすべてのイベントデータを変換できます。重要な使用例の 1 つは、データが収集された構造、シリアル化、または形式を変更する必要がある場合に、アドホックデータ変換を実行することです。
4.5.2 より前のバージョンの AppDynamics では、誤って収集されたデータを修正するのに、収集設定を調整する必要があります。
文字列関数を使用して、次の操作を実行できます。
- 文字列の
length()
、文字列内のindexOf()
文字、またはこれらの両方を処理することで、substring()
に焦点を合わせることができます- たとえば、URL からドメイン名を抽出できます
concat()
演算子を使用して複数の文字列を連結できます- たとえば、複数のフィールドの値を 1 つの値に結合することができます
trim()
でフィールドの先頭と末尾から空白をトリミングできます。substring()
関数の出力と別の関数の出力を項目ごとにペアリングすることができますこの暗黙的集約は、SQL の GROUP BY に相当する ADQL です
次の暗黙的な集約の例を参照してください。
関数 | 返り値 | 有効なフィールドタイプ | ADQL クエリの例 |
---|---|---|---|
concat(inputString1, string inputString2, ... inputStringN) | 入力文字列を結合する単一の文字列。 | string 2 つ以上の文字列を指定します。 | 関数: concat('foo', 'bar') 結果:
|
indexOf(inputString, substring, [occurrence]) |
|
occurrence に対して正または負の整数 | 関数:
結果:
関数:
結果:
関数(関数の連結と結合の例): SELECT 結果:
|
length(inputString) | 入力文字列の空白を含む文字の数。 | string | 関数: length(' foo bar ') 結果: 9 |
substring(inputString, startIndex, numChars) | (1 ベースの)
|
| この例では、URL からドメイン名を抽出します。 関数: substring('https://example.com/home.htm', 9, indexOf('https://example.com/home.htm','/',3) - 9) 結果: 'example.com' |
trim(inputString) | 先頭と末尾の空白文字が削除された入力文字列のコピー。 | string | 関数: trim(' foo bar ') 結果: 'foo bar' |
暗黙的な集約の例
次のデータを考慮してください。
Application ID | responseTime (ms) |
---|---|
SJC-001 | 500 |
SJC-002 | 600 |
SJC-003 | 700 |
LAX-001 | 200 |
LAX-002 | 300 |
LAX-003 | 400 |
次の ADQL クエリは、substring()
の出力の各項目と、avg()
の出力の対応する項目をペアにします。
SELECT substring(application, 1, 3)
, avg(responseTime)
FROM transactions
次のような結果をもたらします。
SJC, 600
LAX, 300
2 番目の関数 avg()
の適用先のグループを処理するために、ADQL で substring()
をどのように使用しているかに注目してください。
ファネル関数
ファネル関数を使用すると、ADQL クエリからファネルウィジェットを作成できます。次のクエリの例では、通常のトランザクションのファネルウィジェットを作成します。
SELECT funnel(transactionName, responseTime < 90, showHealth=true, health="NORMAL") FROM transactions
ファネルウィジェットを表示するには、クエリを入力し、[Search] を選択します。検索結果が表示されたら、クエリの右上にある [Basic] を選択します。
AppDynamics コミュニティを参照してください。
データ型変換関数
データ型変換関数は、SaaS デプロイでのみ使用できます。
データ型変換関数は、SELECT 句または WHERE 句で使用できます。使用可能なデータ型変換関数を以下に示します。formatString
の要件については、「クラス」セクションの Joda の DateTimeFormat
のドキュメントを参照してください。
関数 | 返り値 | ADQL クエリの例 |
---|---|---|
toDate(string value, [string formatString]) | 日時としてフォーマットされた文字列値。 | SELECT 返り値 文字列値「01/15/2019」を含む |
toDate(int value) | 日時としてフォーマットされた整数値。 | SELECT 返り値 Dec 31 1969 19:25:41 GMT-0800 |
toString(datetime value, [string formatString]) | 文字列としてフォーマットされた日時値。 | SELECT 返り値 日時値 2019-01-15T00:00:00.000Z を含む |
toString(float/int/bool value) | 文字列としてフォーマットされた値。 | SELECT 返り値 「123.123」 |
toInt(datetime/float/string/bool value) | 次のようにフォーマットされた整数値。
| SELECT 返り値 123 |
toFloat(int/string value) | 浮動小数としてフォーマットされた整数または文字列値。 | SELECT 返り値 123123.0 |
round(float value, int decimalPlaces) | decimalPlaces に丸められた値。decimalPlaces は必ず負ではない整数になります。 | SELECT 返り値 123.123 |
ifNull(object value, object replacementValue) | 値が NULL 以外の場合は 1 つの値。値が NULL の場合、replacementValue が返されます。 | SELECT 返り値
返り値 値が NULL ではない場合は |
ifNull)
を除く)では、field_name
の値で NULL が返された場合、変換されたデータ型でも NULL が返されます。日時に対する数学関数と now()
関数の使用
now()
関数は、SaaS コントローラでのみサポートされます。オンプレミス展開ではサポートされません。
日時値および長整数値に対して、加算および減算の数学関数を実行できます。次に例を示します。
SELECT toDate(field_name, "MMM, dd, yyyy") - toDate(field_name,"MMM, dd, yyyy") FROM transactions |
この関数は日時値を返します。乗算、除算、および剰余の数学関数はサポートされていません。加算関数と減算関数を、浮動小数と組み合わせて使用することはできません。
now()
関数を使用して、値に対してサーバの現在の時刻を加算または減算できます。次に例を示します。
SELECT toInt(now() - field_name) FROM transactions |
上記の関数によって、field_name
がどれくらい前に作成されたか特定され、値が整数に変換されます。
他の関数を変更する関数
関数 | 返り値 | 有効なフィールドタイプ | ADQL クエリの例 |
---|---|---|---|
filter(metric_function (field_expression), ...) [WHERE] condition_expression) | 1 つのメトリック関数の入力にフィルタを適用することによって計算された、データの特定サブセットの集約。 | メトリック関数は、1 つの値を返す次のいずれかにする必要があります。 { 2 番目の引数の構文は WHERE 句と同じで、オプションで WHERE キーワードを指定して開始します。次に例を示します。 SELECT filter( | filter( SELECT 100.0 * filter( |
さまざまなタイプの関数の組み合わせ
異なるタイプの関数を組み合わせる際に考慮すべき特殊なケースを次に示します。
- distinctcount() がバケット関数の後に続く場合、distinctcount() の最大精度が低下します。
distinctcount()
クエリをネストすると、メモリ節約の精度がそれと引き換えになります。これは、前の関数によってバケットが確立され、distinctcount() によって、前の関数の各バケット内に一連のバケットが作成され、Elasticsearch の実行時にこのトレードオフが自動的に行われるためです。- たとえば、次の 2 つのクエリ例の最初の例では、2 番目よりも精度の低い結果が返されます。
SELECT transactionName, distinctcount(userId) FROM transactions
SELECT distinctcount(userId) FROM transactions
- たとえば、次の 2 つのクエリ例の最初の例では、2 番目よりも精度の低い結果が返されます。
stdev(numeric_field_name)
の戻り値を使用して、結果をソートまたはフィルタすることはできません。