> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stockwork.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 計算フィールド

計算フィールドは、既存のフィールドを組み合わせて独自の指標を作る機能です。受注見込み金額・平均単価・フォロー優先度など、組織の見方に合わせた項目をウィジェットのディメンションやメトリクスとして利用できます。

## 始める前に

* 計算フィールドを使ったウィジェットの閲覧はすべてのロールで可能です。
* 計算フィールドの作成・編集・削除は **分析者** 以上のロールが必要です。
* 計算フィールドはダッシュボード単位で管理されます。1つのダッシュボード内で名前は一意です。
* 数式には他の計算フィールドも参照できますが、循環参照はエラーになります。
* 他の計算フィールドから参照されている計算フィールドは削除できません。先に参照元を修正してください。

<Warning>
  **上級機能です**

  計算フィールドは数式リテラシーが必要です。基本的なウィジェット作成に慣れてから利用することを推奨します。
</Warning>

## 計算フィールドを作成する

1. ダッシュボードで **カスタマイズ** をクリックします。
2. アクションバーの **計算フィールド** をクリックします。

<img src="https://mintcdn.com/medium-3cf2b5dd/dVS8vWQ1A7Pv22Qn/guide/dashboard/images/calculated-fields.png?fit=max&auto=format&n=dVS8vWQ1A7Pv22Qn&q=85&s=5337225913bc161900fe65fef03817c3" alt="計算フィールド管理画面" width="2048" height="1024" data-path="guide/dashboard/images/calculated-fields.png" />

3. **計算フィールドを作成** をクリックします。
4. フォームに次の内容を入力します。

| 項目     | 内容                             |
| ------ | ------------------------------ |
| 名前     | ウィジェット設定に表示される項目名（ダッシュボード内で一意） |
| 説明     | 何を計算するか（任意）                    |
| データソース | 計算対象の取引・会社・コンタクト・商談ログなど        |
| スコープ   | **行単位** または **テーブル全体**（下記参照）   |
| 数式     | フィールド参照・演算子・関数を組み合わせた式         |

5. 右側のプレビューパネルで、実データに対する計算結果を確認します。
6. **保存する** をクリックします。

7) ウィジェット設定で、計算フィールドをディメンションまたはメトリクスとして選択します。
8) ダッシュボード右上の **保存** をクリックします。

## スコープ

計算フィールドには2つのスコープがあります。ウィジェットで使える場所（ディメンション/メトリクス）が変わるため、目的に合わせて選択してください。

| スコープ              | 計算単位            | ウィジェットでの使い方 | 例                                         |
| ----------------- | --------------- | ----------- | ----------------------------------------- |
| **行単位（row）**      | 各レコードごとに計算      | ディメンション     | `{{amount}} * 1.1`（税込金額）                  |
| **テーブル全体（table）** | 全レコードを集約して1値を算出 | メトリクス       | `SUM({{amount}}) / COUNT({{id}})`（平均取引金額） |

## 数式の書き方

### フィールドの参照

データソースのフィールドは `{{フィールド名}}` の形式で参照します。数式エディタのフィールド候補（左パネル）から選択すると、正しい名前で挿入されます。

```
{{amount}} * 1.1
```

### 演算子

| 演算子               | 説明   | 例                                      |
| ----------------- | ---- | -------------------------------------- |
| `+` `-` `*` `/`   | 四則演算 | `{{amount}} + {{tax}}`                 |
| `>` `<` `>=` `<=` | 大小比較 | `{{amount}} > 1000000`                 |
| `=` `!=`          | 等値比較 | `{{stage}} = "受注"`                     |
| `AND` `OR`        | 論理演算 | `{{amount}} > 0 AND {{stage}} != "失注"` |

## 関数リファレンス

計算フィールドで使える関数を、カテゴリ別に一覧します。

### 集計関数

主に **テーブル全体** スコープで使用します。

| 関数               | 構文                              | 説明          |
| ---------------- | ------------------------------- | ----------- |
| `SUM`            | `SUM(field)`                    | 合計          |
| `AVG`            | `AVG(field)`                    | 平均          |
| `COUNT`          | `COUNT(field)`                  | レコード件数      |
| `COUNT_DISTINCT` | `COUNT_DISTINCT(field)`         | 重複を除いた件数    |
| `MAX`            | `MAX(field)`                    | 最大値         |
| `MIN`            | `MIN(field)`                    | 最小値         |
| `PERCENTILE`     | `PERCENTILE(field, percentile)` | 指定パーセンタイルの値 |

使用例:

```
SUM({{amount}})                    -- 金額の合計
COUNT_DISTINCT({{account_id}})     -- ユニークな会社数
PERCENTILE({{amount}}, 75)         -- 金額の75パーセンタイル
```

### 算術関数

| 関数      | 構文                        | 説明             |
| ------- | ------------------------- | -------------- |
| `ABS`   | `ABS(number)`             | 絶対値            |
| `ROUND` | `ROUND(number, decimals)` | 四捨五入（第2引数は省略可） |
| `CEIL`  | `CEIL(number)`            | 切り上げ           |
| `FLOOR` | `FLOOR(number)`           | 切り捨て           |
| `POWER` | `POWER(base, exponent)`   | べき乗            |
| `SQRT`  | `SQRT(number)`            | 平方根            |
| `LOG`   | `LOG(number)`             | 自然対数           |
| `LOG10` | `LOG10(number)`           | 常用対数           |

使用例:

```
ROUND({{amount}} / {{count}}, 2)   -- 平均金額を小数第2位で四捨五入
ABS({{profit}})                    -- 利益の絶対値
```

### 条件関数

| 関数            | 構文                                       | 説明           |
| ------------- | ---------------------------------------- | ------------ |
| `IF`          | `IF(condition, true_value, false_value)` | 条件分岐         |
| `COALESCE`    | `COALESCE(value1, value2, ...)`          | 最初の非NULL値を返す |
| `IS_NULL`     | `IS_NULL(value)`                         | NULLなら真      |
| `IS_NOT_NULL` | `IS_NOT_NULL(value)`                     | NULLでなければ真   |
| `NOT`         | `NOT(boolean)`                           | 真偽値の反転       |

使用例:

```
IF({{amount}} > 1000000, "大型", "通常")      -- 金額による案件分類
COALESCE({{close_date}}, {{created_at}})      -- クローズ日がなければ作成日を使う
IF(IS_NULL({{owner}}), "未割当", {{owner}})    -- 担当者未設定の判定
```

### 文字列関数

| 関数           | 構文                                     | 説明                  |
| ------------ | -------------------------------------- | ------------------- |
| `CONCAT`     | `CONCAT(string1, string2, ...)`        | 文字列の結合              |
| `SUBSTR`     | `SUBSTR(string, start, length)`        | 部分文字列の取得            |
| `LOWER`      | `LOWER(string)`                        | 小文字化                |
| `UPPER`      | `UPPER(string)`                        | 大文字化                |
| `TRIM`       | `TRIM(string)`                         | 前後の空白を削除            |
| `LENGTH`     | `LENGTH(string)`                       | 文字列の長さ              |
| `REPLACE`    | `REPLACE(string, from, to)`            | 置換                  |
| `CONTAINS`   | `CONTAINS(string, substring)`          | 部分文字列を含むか判定         |
| `SPLIT_PART` | `SPLIT_PART(string, delimiter, index)` | 区切り文字で分割し指定位置の要素を返す |

使用例:

```
CONCAT({{last_name}}, " ", {{first_name}})       -- 姓名を結合
UPPER({{company_code}})                          -- 会社コードを大文字化
IF(CONTAINS({{name}}, "株式会社"), "法人", "個人") -- 社名で法人判定
SPLIT_PART({{email}}, "@", 2)                    -- メールのドメイン部
```

### 正規表現関数

| 関数               | 構文                                | 説明            |
| ---------------- | --------------------------------- | ------------- |
| `REGEXP_MATCH`   | `REGEXP_MATCH(string, pattern)`   | 正規表現にマッチするか判定 |
| `REGEXP_EXTRACT` | `REGEXP_EXTRACT(string, pattern)` | マッチした部分を抽出    |

使用例:

```
REGEXP_MATCH({{email}}, "@example\\.com$")     -- 特定ドメインのメール判定
```

### 日付関数

| 関数            | 構文                               | 説明           |
| ------------- | -------------------------------- | ------------ |
| `DATE_TRUNC`  | `DATE_TRUNC('unit', date)`       | 日付を指定単位で切り捨て |
| `DATE_DIFF`   | `DATE_DIFF('unit', start, end)`  | 2つの日付の差分     |
| `DATE_ADD`    | `DATE_ADD('unit', amount, date)` | 日付に期間を加算     |
| `YEAR`        | `YEAR(date)`                     | 年を抽出         |
| `MONTH`       | `MONTH(date)`                    | 月を抽出         |
| `DAY`         | `DAY(date)`                      | 日を抽出         |
| `QUARTER`     | `QUARTER(date)`                  | 四半期を抽出（1〜4）  |
| `WEEK`        | `WEEK(date)`                     | 週番号を抽出       |
| `DAY_OF_WEEK` | `DAY_OF_WEEK(date)`              | 曜日を抽出（0=日曜日） |
| `NOW`         | `NOW()`                          | 現在日時         |
| `TODAY`       | `TODAY()`                        | 今日の日付        |

`DATE_TRUNC` と `DATE_DIFF` の `'unit'` には次を指定できます: `'day'`, `'week'`, `'month'`, `'quarter'`, `'year'`

使用例:

```
DATE_DIFF('day', {{created_at}}, NOW())        -- 作成日からの経過日数
QUARTER({{close_date}})                        -- クローズ予定の四半期
DATE_ADD('month', 3, {{created_at}})           -- 作成日から3か月後
DATE_TRUNC('month', {{meeting_date}})          -- 商談日を月初に揃える
```

## 具体例

| 作りたい項目 | スコープ   | 数式の例                                      |
| ------ | ------ | ----------------------------------------- |
| 税込金額   | 行単位    | `{{amount}} * 1.1`                        |
| 商談経過日数 | 行単位    | `DATE_DIFF('day', {{created_at}}, NOW())` |
| 平均取引金額 | テーブル全体 | `SUM({{amount}}) / COUNT({{id}})`         |
| 案件区分   | 行単位    | `IF({{amount}} > 1000000, "大型", "通常")`    |

## トラブルシューティング

| 症状              | 原因と対処                                     |
| --------------- | ----------------------------------------- |
| プレビューがエラーになる    | 参照しているフィールド名・型・関数の引数を確認します                |
| ウィジェットで選べない     | 行単位はディメンション、テーブル全体はメトリクスとしてのみ選択できます       |
| 数値として集計できない     | 計算結果が数値型になる式か確認します                        |
| 削除できない          | 他のウィジェットや計算フィールドから参照されています。先に参照元を修正してください |
| 保存できない（循環参照エラー） | 参照している計算フィールドが、直接または間接的にこのフィールドを参照しています   |

## 関連ページ

* [ダッシュボード概要](./)
* [ウィジェットの作成と編集](./widgets)
* [ウィジェットタイプ別ガイド](./widget-types)
