New Relicアップデート情報：累積分布関数の追加でNew Relic のクエリ言語 NRQLがさらに強力に！

# 概要
　New Relic のクエリ言語 NRQL は、New Relic で収集されるデータを分析するための豊富な関数を持っています。2023年8月のアップデートでは、新たに累積分布関数が導入されました。この機能を用いることで、指定した閾値を基にデータの分布を計算することが簡単になります。例えば、バックエンドの応答時間や Core Web Vitals の分布を素早く可視化することが可能となります。

:::note info
このアップデートの詳細はこちら。
[New Relic アップデート(2023年8月)](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202308 "New Relic アップデート(2023年8月)")
[New Relic アップデート一覧](https://newrelic.com/jp/blog/nerdlog/new-relic-update "New Relic アップデート一覧")
:::

:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

# cdfPercentage の活用法
　cdfPercentage()は、指定した閾値以下の属性値のパーセンテージを算出する関数です。この関数を利用することで、特定の属性の値が指定閾値以下にどれだけのデータがあるのかをパーセンテージで得ることができます。

https://docs.newrelic.com/jp/docs/query-your-data/nrql-new-relic-query-language/get-started/nrql-syntax-clauses-functions/#func-cdfPercentage

```
cdfPercentage(attribute, threshold \[, threshold \[, ...]])
```
　引数に設定できる属性( attribute )は、数値属性、もしくはメトリクスのタイプが distribution の属性を設定することが可能です。メトリクスのタイプについては[こちらの公式ドキュメント](https://docs.newrelic.com/jp/docs/data-apis/understand-data/metric-data/metric-data-type/)から詳細が確認可能です。

**数値属性の場合**
```
FROM PageView SELECT cdfPercentage(firstPaint, 0.5, 1.0)
```
![cdfPercentage_num.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/8771e90d-8019-729c-5454-1c4030adef31.png)
**メトリクスのタイプがDistributionの場合**
![metrics_type_distribution.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/38110983-dd08-141e-971a-ac7bf176bd09.png)
```
SELECT cdfPercentage(`newrelic.goldenmetrics.synth.monitor.medianDurationS`, 3) 
FROM Metric SINCE 1 day AGO
```
![cdfPercentage_metrics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/26915b81-a4d8-39a6-1637-5544bbd01085.png)
　引数には閾値を複数設定することが可能で最大10個まで設定が可能です。
```
FROM PageView 
SELECT cdfPercentage(firstPaint, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0)
```
![cdfPercentage_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/51b45d59-446c-5731-0a7b-583fe33fd1c4.png)

# getCdfCount の活用法
　getCdfCount() は、累積分布関数で、値が閾値以下の属性値のデータの数を返す関数です。また、getCdfCount() は、 前述のcdfPercentage()と異なり集計関数ではありません。

https://docs.newrelic.com/jp/docs/query-your-data/nrql-new-relic-query-language/get-started/nrql-syntax-clauses-functions/#func-getCdfCount

```
getCdfCount(attribute, threshold)
```
　引数に設定できる属性( attribute )は、数値型属性、もしくはメトリクスのタイプが distribution の属性を設定することが可能です。メトリクスのタイプについては[こちらの公式ドキュメント](https://docs.newrelic.com/jp/docs/data-apis/understand-data/metric-data/metric-data-type/)から詳細が確認可能です。

**数値型属性の場合**
```
FROM PageView SELECT getCdfCount(firstPaint, 1.0)
```
![スクリーンショット 2023-09-23 23.12.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/6f07593e-db80-d47a-2bb4-d3d387141225.png)
　getCdfCount()は集計関数ではないため、このように数値型の場合は、属性が閾値以下なら1を返し，そうでなければ0を返します。次にメトリクスのタイプがDistributionの場合を見てみましょう。

**メトリクスのタイプがDistributionの場合**
```
FROM Metric
SELECT getCdfCount(`newrelic.goldenmetrics.synth.monitor.medianDurationS`, 3) 
WHERE monitorName = 'Test'
```
![getCdfCount_metrics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/48cafea7-ce1b-df2d-8d15-2f9043743bf5.png)
メトリクスのタイプがDistributionの場合、このようにデータセット内のデータ数を返します。

　このようにgetCdfCount()は集計関数ではないため、閾値以下のデータの総数を計算するわけではありません。集計する場合は、sum 関数を使って集計することで指定した閾値以下のデータの数を算出することが可能です。
![スクリーンショット 2023-09-23 23.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/703bfc45-78d4-749d-3acb-1166c2b6d5c2.png)


# まとめ
　2023年8月のアップデートにより、累積分布関数のcdfPercentage()およびgetCdfCount()がNRQLに追加されました。これにより、データの分布を簡単にダッシュボードで可視化したり、特定のデータの割合や数にアラートを設定したりする作業が効率化されます。この新機能を活用して、データ分析の幅をさらに広げてみてください！


:::note info
このアップデートの詳細はこちら。
[New Relic アップデート(2023年8月)](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202308 "New Relic アップデート(2023年8月)")
[New Relic アップデート一覧](https://newrelic.com/jp/blog/nerdlog/new-relic-update "New Relic アップデート一覧")
:::

:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::