# カスタムトレンド管理

カスタム トレンドは、標準のNexthinkデータ モデルを拡張し、既存のデータの毎日のスナップショットを保存して、その進化を最大13か月間にわたって観察することができます。

{% hint style="info" %}
200個のカスタムトレンドを設定できます。
{% endhint %}

## ライブラリーからインストールされたカスタム トレンド

Nexthinkは、Nexthinkライブラリから手動でインストールできる一連の事前構成されたカスタムトレンドを提供します。 Nexthinkインスタンス内のNexthinkライブラリモジュールに移動して、プレデファインドされたカスタム トレンドをインストール、管理、更新します。

詳細については、[Nexthinkライブラリ](https://docs.nexthink.com/platform/ja/user-guide/nexthink-library) ドキュメントを参照してください。

## 新しいカスタムトレンド

ゼロからカスタムトレンドを作成すると、ニーズやユースケースに合わせて表示したいデータを確認できます。

詳細については、[カスタムトレンドの作成](#customtrendsmanagement-creatingacustomtrend)を参照してください。

## カスタムトレンドページにアクセスする <a href="#customtrendsmanagement-accessingthecustomtrendspage" id="customtrendsmanagement-accessingthecustomtrendspage"></a>

1. メインメニューから**管理**を選択します。
2. ナビゲーションパネルのコンテンツ管理セクションの**カスタムトレンド**をクリックします。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-411414410c24680da4b0bb644643c00144779bce%2Fcustomtrends-1706785149.png?alt=media" alt="Accessing Custom trends" width="760"><figcaption></figcaption></figure>

## カスタムトレンドの管理 <a href="#customtrendsmanagement-managingcustomtrends" id="customtrendsmanagement-managingcustomtrends"></a>

カスタム トレンド管理ページには、すでに定義されているカスタム トレンドのリストが表示されます。

* テーブルの左上にある合計カスタムトレンド数を表示します。
* リストされた結果を絞り込むために、ページの右上にある検索ボックスを使用して、名前でカスタムトレンドを検索します。

### カスタム トレンドのアクション メニューを使用する <a href="#customtrendsmanagement-usingthecustomtrendactionmenu" id="customtrendsmanagement-usingthecustomtrendactionmenu"></a>

カスタムトレンドの3つの垂直ドットアイコンにカーソルを合わせて、次のオプションを持つアクションメニューを表示します。

* **編集**:カスタムトレンドの設定の詳細を表示し、名前、説明、および NQL クエリを変更します。
* **タグの管理**: [関連タグ](#customtrendsmanagement-taggingcustomtrends) を追加または削除します。
* **エクスポート**: カスタム トレンドをJSON形式でダウンロードして保存します。
* **削除**: カスタム トレンドを削除します。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-09d7201e2d4d77009a37fa16334ef878a7d35305%2Fimage%20(303).png?alt=media" alt=""><figcaption></figcaption></figure>

### カスタムトレンドのインポート <a href="#customtrendsmanagement-importingcustomtrends" id="customtrendsmanagement-importingcustomtrends"></a>

ローカル デバイスからカスタムトレンドをJSON形式でインポートするには:

1. **管理 > カスタムトレンド**ページの右上にある**インポート**ボタンをクリックします。
2. 複数の JSON ファイルをハード ドライブから選択またはドラッグして、システムにインポートします。

インポートされたすべての項目はカスタム コンテンツとして分類されます。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-718bebb51ff539f16a1208fa15b8c0b01c3b616b%2Fcustomtrends_import.png?alt=media" alt="Import custom trend" width="760"><figcaption></figcaption></figure>

### カスタムトレンドのタグ付け <a href="#customtrendsmanagement-taggingcustomtrends" id="customtrendsmanagement-taggingcustomtrends"></a>

タグ付けにより、カスタムトレンドを効果的に整理し、データを迅速かつ簡単にナビゲートすることができます。

**タグ**の右側パネルを開いて:

* パネルの上部で特定のタグを検索します。
* 1 つ以上のタグを選択してカスタム トレンド テーブルをフィルタリングします。

カスタム トレンドに 1 つ以上のタグを追加するには、**管理 > カスタム トレンド** ページから:

1. カスタムトレンドにカーソルを合わせて、アクションメニューを表示し、**タグの管理**を選択します。
2. **タグの管理**ポップアップから以下ができます:
   * 新しいタグを入力するか、既存のタグを選択してカスタムトレンドに追加します。
   * 特定のタグ項目のアクションメニューを開いて**タグを削除**するか、タグの色を変更します。
     * タグを削除すると、関連するカスタムトレンドからのみタグが削除されます。
3. または、複数のカスタム トレンドを選択して、タグを一括で管理します。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-d0a74685ab0513bd98c6a2090f31f774d362081e%2Fimage%20(306).png?alt=media" alt="Managing tags in bulks"><figcaption></figcaption></figure>

## カスタム トレンドの作成 <a href="#customtrendsmanagement-creatingacustomtrend" id="customtrendsmanagement-creatingacustomtrend"></a>

新しいカスタムトレンドを作成するには:

1. カスタムトレンドページの右上隅にある **新しいカスタムトレンド** ボタンをクリックします。
2. カスタム トレンド設定ページで**名前** と **説明** を入力します。
3. 必要に応じて、NQLの一意の識別子である**クエリID**を調整します。
4. このトレンド データの意味と目的を他の人に理解させるために、オプションの**説明**を入力します。
5. Nexthinkプラットフォームが毎日のスナップショット評価中に実行する**NQLクエリ**を入力します。

{% hint style="info" %}
カスタムトレンドを保存すると、NQLクエリとクエリID値を変更することはできません。
{% endhint %}

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-2d17851224cc2c15287fa70e735c7c719e7153a6%2Fcustomtrends_create.png?alt=media" alt="Creating a custom trend" width="760"><figcaption></figcaption></figure>

### カスタムトレンド用のNQLクエリの記述 <a href="#customtrendsmanagement-writingnqlqueriesforcustomtrends" id="customtrendsmanagement-writingnqlqueriesforcustomtrends"></a>

クエリを書く際は、次のルールに従います。

* クエリは`devices`ネームスペースをターゲットにする必要があります。
* `devices`用の許可される時間間隔は`過去1日`中です。 すべてのデバイスをターゲットにするには、この時間間隔を省略します。
* クエリには最大2つの`include`句と2つの`compute`句を含めることができます。
* イベントコレクションの`include`句の後に許可される唯一の時間間隔は、`過去1日`中です。 時間間隔を指定せずにオブジェクトコレクションを含めることができます。
* `compute`句の結果に`where`句を適用することはできません。
* クエリには、デバイス名や従業員のメールアドレスなど、個人を特定できる情報 (PII) を含めることはできません。
* クエリは最大2つのメトリック (数値) と最大5つのプロパティ (文字列、列挙型またはブール型) を含む`list`句で終わる必要があります。
* システムでは、`as()`, `sort`, `limit`, `summarize`, `countif()`, `sumif()`, または `with` キーワードは使用できません。

{% hint style="warning" %}
**日時メトリックの制限**

カスタム トレンドは、データ タイプのサブセットのみをネイティブにサポートします。 ほとんどの場合、これが機能に影響を与えることはありません。 ただし、日時メトリックはネイティブ タイプとして保存されないため、[nql-time\_elapsed](https://docs.nexthink.com/platform/ja/understanding-key-data-platform-concepts/nexthink-query-language-nql/nql-functions/nql-time_elapsed "mention")や[nql-date-time-functions](https://docs.nexthink.com/platform/ja/understanding-key-data-platform-concepts/nexthink-query-language-nql/nql-functions/nql-date-time-functions "mention")などのタイムスタンプ関数を使用することはできません。
{% endhint %}

システムには、デフォルトでデバイスのコンテキストの一部として保存されるデバイスプロパティが含まれています。 これには次が含まれます:

* オペレーティングシステムプラットフォーム
* オペレーティングシステム名
* 場所 (国、州、場所の種類)
* 組織 (エンティティ、カスタム組織)

### カスタムトレンドデータに含まれるデバイスの理解 <a href="#customtrendsmanagement-understandingdevicesincludedincustomtrenddata" id="customtrendsmanagement-understandingdevicesincludedincustomtrenddata"></a>

カスタムトレンドの定義では、その活動に基づいてデバイスのセットを指定できます。

* **システムに登録されているすべてのデバイス** (過去 30 日間にアクティブだったすべてのデバイス -- 詳細は[データ解像度と保持](https://docs.nexthink.com/platform/ja/understanding-key-data-platform-concepts/data-resolution-and-retention)を参照) のスナップショットを保存するには、カスタムトレンドの定義で`devices`テーブルの時間選択を省略します。

{% code lineNumbers="true" %}

```
デバイス
| include… 過去 1 日 中
| compute… 
| list…
```

{% endcode %}

* スナップショットが保存された日の**活動していたデバイス**のスナップショットを保存するには、カスタムトレンドの定義で`デバイス 過去 1 日中`の後に`デバイス`を追加します。

{% code lineNumbers="true" %}

```
デバイス 過去 1 日中
| include… 過去 1 日 中
| compute… 
| list…
```

{% endcode %}

{% hint style="info" %}
デバイスの時間枠を指定していない場合は、同じ期間の運用データとトレンドデータを比較すると、結果に若干の差異が発生することがあります。
{% endhint %}

### データ保存の受け入れ <a href="#customtrendsmanagement-acceptingdataretention" id="customtrendsmanagement-acceptingdataretention"></a>

* このトレンドデータが13か月間システムに保存されることを認識するためにデータ保存チェックボックスを選択します。
* 保存ボタンをクリックして、新しいカスタムトレンドを保存します。

## カスタムトレンドの使用 <a href="#customtrendsmanagement-usingcustomtrends" id="customtrendsmanagement-usingcustomtrends"></a>

カスタムトレンドを保存すると、そのトレンドデータをNQLでクエリできます。 最初に、クエリはカスタムトレンド定義が保存された日の3日前のデータを返します。 これにより、設定したカスタムトレンドが想定される形式でデータを返すかどうかを確認できます。

{% hint style="info" %}
過去3日間の初期データには、その日のデバイスコンテキスト情報のみが含まれます。
{% endhint %}

システムは夜間に追加のスナップショットを保存します。 スナップショットには、計算日の前日の午前0時から午前0時までの顧客タイムゾーンにおけるイベントが含まれます。

以下は、カスタムトレンド定義で使用されるNQLクエリの例です。

{% code lineNumbers="true" %}

```
デバイス
| include execution.crashes 過去 1 日中
| compute nb_crashes = number_of_crashes.sum()
| list nb_crashes , hardware.manufacturer
```

{% endcode %}

`list`句を使用してトレンドにメトリックとプロパティを保存すると、カスタムトレンドテーブル内に新しいフィールドが作成されます。 システムは、次のルールに従って新しいフィールド名を構築します。

| カスタムトレンド定義クエリに使用されたフィールド          | カスタムトレンドテーブル内のフィールド名            | ルールの説明                                          |
| --------------------------------- | ------------------------------- | ----------------------------------------------- |
| `nb_crashes`                      | `nb_crashes`                    | クエリからのカスタムメトリックは、上記の例にある`nb_crashes`のようにそのままです。 |
| `hardware.manufacturer`           | `hardware_manufacturer`         | ピリオド `.` はアンダースコア `_` に置き換えられます。                |
| `device.#custom_field`            | `device__custom_field`          | 先頭以外のハッシュ `#` はアンダースコア `_` に置き換えられます。           |
| `#custom_field`                   | `#custom_field`                 | 先頭のハッシュ `#` はカスタムトレンドフィールド名に残っています。             |
| `device.last_seen.time_elapsed()` | `device_last_seen_time_elapsed` | 関数括弧 `()` は省略されます。                              |

上記の例では、カスタムトレンド定義の`| list`句で`デバイス`テーブルから`hardware.manufacturer`フィールドを使用すると、カスタムトレンドテーブルに`hardware_manufacturer`という名前の新しいフィールドが作成されます。

カスタムトレンドテーブルは以下のようになります:

| バケット開始                 | … | コンテキスト         | メトリック              | プロパティ                         |
| ---------------------- | - | -------------- | ------------------ | ----------------------------- |
| 2024/01/19 00:00:00 AM |   | デバイス1のコンテキスト情報 | デバイス1の`nb_crashes` | デバイス1の`hardware_manufacturer` |
| 2024/01/19 00:00:00 AM |   | デバイス2のコンテキスト情報 | デバイス2の`nb_crashes` | デバイス2の`hardware_manufacturer` |
| 2024/01/19 00:00:00 AM |   | デバイス3のコンテキスト情報 | デバイス3の`nb_crashes` | デバイス3の`hardware_manufacturer` |
| 2024/01/19 00:00:00 AM |   |                | ….                 |                               |
| 2024/01/20 00:00:00 AM |   | デバイス1のコンテキスト情報 | デバイス1の`nb_crashes` | デバイス1の`hardware_manufacturer` |
| 2024/01/20 00:00:00 AM |   | デバイス2のコンテキスト情報 | デバイス2の`nb_crashes` | デバイス2の`hardware_manufacturer` |
| 2024/01/20 00:00:00 AM |   | デバイス3のコンテキスト情報 | デバイス3の`nb_crashes` | デバイス3の`hardware_manufacturer` |
| 2024/01/20 00:00:00 AM |   |                | …                  |                               |

インベスティゲーションでカスタムトレンドデータをクエリするか、ダッシュボードウィジェットを作成してタイムラインでトレンドを監視します。 カスタム トレンド データを取得する構文は次のとおりです:

{% code lineNumbers="true" %}

```
custom_trend.<NQL ID>.snapshots ...
...
```

{% endcode %}

ウィジェットを構成する際に、既存のカスタムトレンドのNQL IDを使用して、特定のメトリックの時間経過に伴う変化を視覚的に表現します。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-318c1ab7cfd04286efa34c04954e74a34461f74b%2Fcustomtrends-1707990723.png?alt=media" alt="Line chart configuration using a custom trend" width="760"><figcaption></figcaption></figure>

### トレンドの関連付け

トレンドテーブルは`デバイステーブル`と関連付けられています。 トレンドデータを取得する際に、これらの関連付けを利用して、デバイスのプロパティをクエリに含めることができます。 ただし、元のテーブルに保存されている限り、これらのプロパティは利用可能です。 詳細は[データ解像度と保存](https://docs.nexthink.com/platform/ja/understanding-key-data-platform-concepts/data-resolution-and-retention) ページを参照してください。

`hardware_manufacturer`などのカスタムトレンドフィールドには最大13か月にわたる保持期間がありますが、関連付けられたデバイスのプロパティはデバイスがシステムに登録されている限り利用可能です。 デバイスを削除または匿名化した場合、またはデバイスが30日以上非アクティブになっている場合、クエリはハイフン`-`を返します。なぜなら、デバイスプロパティはトレンドには直接保存されないからです。 この項目は、デフォルトでカスタムトレンドが保存するデバイスコンテキスト情報には適用されず、それは13ヶ月間保持されます（詳細については、このページの「[カスタムトレンドのNQLクエリを書く](#customtrendsmanagement-writingnqlqueriesforcustomtrends)」を参照してください）。

## カスタムトレンドの使用最適化 <a href="#customtrendsmanagement-optimizingtheuseofcustomtrends" id="customtrendsmanagement-optimizingtheuseofcustomtrends"></a>

カスタムトレンドを効果的に活用するには、トレンドデータのプロットにはカスタムトレンドの設定とダッシュボードの設計という2段階のプロセスが含まれることを理解することが重要です（詳細な手順は「[ライブダッシュボードの管理](https://docs.nexthink.com/platform/ja/user-guide/live-dashboards/managing-live-dashboards)」を参照してください）。

追跡したいすべてのメトリクスに対して必ずしもカスタムトレンドを作成する必要はないことを理解することが重要です。 単一のカスタムトレンドは、メトリクスや集計のさまざまな組み合わせで長期データをクエリできるNQLデータモデルの拡張機能として機能します。

カスタムトレンドの設定と取得に関する以下の推奨事項を考慮してください：

<details>

<summary>可能であれば、取得時にフィルタリングと集計を適用する</summary>

データのフィルタリングおよび集計は、トレンド定義ではなく取得時にデバイスで適用することをお勧めします。

ハードウェアメーカーごとにクラッシュが発生しているデバイスのトレンドラインをプロットしたい場合の例を考えてみましょう。 数ある戦略の中でも、全てが最適というわけではありません。

**サブオプティマル戦略**

ハードウェアプロバイダーごとに、デバイスの集計を含む複数のカスタムトレンド定義を作成することを含むサブオプティマルな戦略です。 次のクエリは、特定のデバイスでクラッシュが発生しなかった場合は0を、少なくとも1回のクラッシュが発生した場合は1を示すデバイスのリストを返します。

{% code lineNumbers="true" %}

```
devices
| where hardware.manufacturer == "my_provider1"
| include execution.crashes past 1d
| compute nb_devices = device.count()
| list nb_devices
```

{% endcode %}

カスタムトレンドデータを取得する際には、フィルターは必要ありません。

{% code lineNumbers="true" %}

```
custom_trend.#name.snapshots during past 300d
| summarize my_provider1_with_crashes = nb_devices.sum() by 1d
```

{% endcode %}

**最適戦略**

最適戦略では、一つのカスタムトレンド定義を作成し、クラッシュ数をメトリクスとして、ハードウェアメーカーをプロパティとしてスナップショットを取得します：

{% code lineNumbers="true" %}

```
devices
| include execution.crashes past 1d
| compute nb_crashes = number_of_crashes.sum()
| list nb_crashes , hardware.manufacturer
```

{% endcode %}

カスタムトレンドデータを取得する際に：

* 少なくとも1回クラッシュが発生したデバイスと関連性のあるハードウェアプロバイダをフィルタリングする：

{% code lineNumbers="true" %}

```
custom_trend.#name.snapshots during past 300d
| where nb_crashes > 0
| where hardware_manufacturer == "my_provider1"
| summarize my_provider1_with_crashes = count() by 1d
```

{% endcode %}

* または、少なくとも1回クラッシュが発生したデバイスのみを要約し、ハードウェアプロバイダーによる追加のグルーピングを追加する条件付き集計を使用してください：

{% code lineNumbers="true" %}

```
custom_trend.#execution_crashes.snapshots during past 300d
| summarize
fraction_with_crashes_per_manifacturer = countif(nb_crashes > 0) / count()
by 1d, hardware_manufacturer
```

{% endcode %}

</details>

<details>

<summary>二重集計を慎重に使用する</summary>

カスタムトレンドは、カスタムトレンド定義内で集計を組み込むことを可能にします。 また、トレンドデータの取得中に追加の集計を行うこともできます。 ただし、スナップショットは定義に使用された集計に関する情報を失うことに注意が必要です（`users`のようなユニークオブジェクトに`count()`を使用する場合を除く）。

次の例を考えてみましょう。 カスタムトレンド定義のNQLは、指定された日の各デバイスの平均起動時間を含むスナップショットを作成します。

{% code lineNumbers="true" %}

```
devices during past 1d
| include device_performance.boots during past 1d
| compute boot_duration = duration.avg()
```

{% endcode %}

データを取り出す際に、すべてのデバイスにわたる日次スナップショットの平均を計算することができます。

{% code lineNumbers="true" %}

```
custom_trend.#name.snapshots
| summarize c1 = boot_duration.avg() by 1d
```

{% endcode %}

この場合、avg()集計で返される結果は、デバイスごとの平均値の合計を起動を持つデバイスの数で割ったものとなります。

</details>

## スナップショットエラーのトラブルシューティング <a href="#troubleshooting-snapshot-failures" id="troubleshooting-snapshot-failures"></a>

#### カスタムトレンドログの調査

スナップショット計算は、例えば、動的データモデルの変更によるカスタムトレンドNQLクエリ定義の不正や、一時的なシステム障害など、様々な理由で失敗することがあります。 その結果、カスタムトレンドデータが不完全になることがあります。 これらの失敗を理解することは、問題を迅速に解決し、ダッシュボードに表示されるデータに潜在的な問題を可視化するために重要です。

システムは各カスタムトレンド計算を計算時間、ステータス、カスタムトレンドNQL IDなどの詳細とともに`platform.custom_trends_logs`テーブルに保存します。 特定のカスタムトレンドの計算失敗の原因を調査するには、次のNQLクエリを使用してください：

```
platform.custom_trends_logs during past 30d
| where status = failure
| where details.nql_id ="#my_custom_trend_ID"
| list custom_trends_log.time, 
       custom_trends_log.status, 
       details.description, 
       details.n_retries, 
       details.nql_id
```

Nexthinkは、情報を保持し迅速に対応できるように、すべてのカスタムトレンドエラーを検出するモニタの設定を推奨します。 次のモニタNQLクエリと設定を使用してください：

```
platform.custom_trends_logs during past 24h
| where status = failure
| summarize failing_computations = count() by details.nql_id
```

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-d1ced17aa1fa63d76b2b56113fb6b2319b63c6c7%2Fcustom_trend_alert.png?alt=media" alt=""><figcaption></figcaption></figure>

詳細については、「[カスタムモニターの作成](https://docs.nexthink.com/platform/ja/user-guide/alerts-and-diagnostics/managing-alerts/creating-custom-monitors)」ページを参照してください。

#### トレンド補完

Nexthinkは、予期しない技術的な故障によるカスタムトレンドデータのギャップを防ぐ仕組みを使用しています。 特定の日からスナップショットの計算と保存が失敗した場合、次の日次計算時に、現在のスナップショットを計算する前に、欠落したデータの計算を試みます。 この仕組みは、過去3日間までのデータを復元できるため、問題を解決するための時間を追加で確保し、ダッシュボードでのトレンドの連続性を維持できます。

{% hint style="info" %}
前日のデータから計算された情報には、現在の日のデバイスコンテキスト情報のみが含まれます。
{% endhint %}

## 権限 <a href="#customtrendsmanagement-permissionspermissions" id="customtrendsmanagement-permissionspermissions"></a>

* Nexthinkのウェブインターフェースで、ユーザーロールが**すべてのカスタムトレンドデータを管理**権限を持っている場合、カスタムトレンドを作成できます。
* ユーザーロールが**NQLにおけるプラットフォームログを表示**権限を持っている場合、`platform.custom_trends_logs`テーブルにアクセスできます。

詳細については、[Roles](https://github.com/nexthink/documentation.online-product-documentation/blob/develop/ja_docs/configuring_nexthink/configuring-your-platform/administration/account-management/roles/README.md)ドキュメントを参照してください。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nexthink.com/platform/ja/user-guide/administration/content-management/custom-trends-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
