計算

他のフィールドの値を使って自動計算した結果を表示する読み取り専用フィールドです。フィールドコードと演算子で計算式を定義します。

表示イメージ

入力フォームでの表示

単価

¥1,500

個数

3

合計金額 自動

¥4,500

設定項目

プロパティパネル

ラベル *

フィールドコード

計算式

unit_price * quantity
▶ フィールド一覧▶ 関数一覧

単位記号

単位の位置

小数点以下の表示桁数

3桁ごとにカンマ表示ON
設定項目
ラベル
説明
画面に表示されるフィールド名
設定項目
フィールドコード
説明
API・他の計算式から参照するための識別子
設定項目
計算式
説明
フィールドコードと演算子を組み合わせた式。「フィールド一覧」「関数一覧」からクリックで挿入可能
設定項目
単位記号
説明
計算結果に付与する単位(例: ¥、円、kg、%)
設定項目
単位の位置
説明
単位を値の前に表示するか後に表示するか(例: ¥1,000 / 1,000円)
設定項目
小数点以下の表示桁数
説明
小数点以下を何桁まで表示するか(0〜10)
設定項目
3桁ごとにカンマ表示
説明
ONにすると 1000 → 1,000 のようにカンマ区切りで表示
設定項目
計算式を表示しない
説明
ONにすると入力・詳細画面では計算結果のみ表示し、数式文字列(例: unit_price * quantity)は表示しない。既定はON

使用できる関数

計算式では以下の関数を使用できます。設定画面の「関数一覧」からクリックで挿入できます。

集計関数

関数
SUM
説明
合計
SUM(val1, val2) または SUM(table.price)
関数
AVERAGE / AVG
説明
平均(空欄は除外)
AVERAGE(a, b, c) または AVERAGE(table.score)
関数
COUNT
説明
数値の個数
COUNT(a, b, c) または COUNT(table.price)
関数
COUNTA
説明
空でない値の個数
COUNTA(a, b, c) または COUNTA(table.name)
関数
MAX / MIN
説明
最大値 / 最小値
MAX(a, b, c)

集計関数は引数に値を並べる使い方のほか、SUM(テーブルコード.サブフィールドコード) の書き方でテーブル内の列を集計できます。計算フィールドの集計関数は同じレコード内のテーブル (サブテーブル) が対象です。別アプリのレコードを集計する場合は関連レコード集計フィールドを使います (後述)。

数値関数

関数
ROUND
説明
四捨五入
ROUND(val, 2)
関数
ROUNDUP
説明
切り上げ(桁指定)
ROUNDUP(val, 2)
関数
ROUNDDOWN
説明
切り捨て(桁指定)
ROUNDDOWN(val, 2)
関数
CEILING
説明
切り上げ(倍数指定)
CEILING(1234, 100) → 1300
関数
FLOOR
説明
切り捨て(倍数指定)
FLOOR(1234, 100) → 1200
関数
INT
説明
整数部分
INT(3.7) → 3
関数
ABS
説明
絶対値
ABS(-100) → 100
関数
MOD
説明
余り
MOD(10, 3) → 1
関数
POWER
説明
べき乗
POWER(2, 10) → 1024
関数
YEN
説明
円書式(文字列変換)
YEN(10000) → ¥10,000

日付関数

関数
TODAY
説明
今日の日付
TODAY() → 2025-04-07
関数
NOW
説明
現在の日時
NOW() → 2025-04-07T09:30:00
関数
DATE
説明
年月日から日付を組み立て
DATE(2026, 4, 10) → 2026-04-10
関数
YEAR
説明
年を取得
YEAR(date_field) → 2025
関数
MONTH
説明
月を取得
MONTH(date_field) → 4
関数
DAY
説明
日を取得
DAY(date_field) → 7
関数
DATEDIF
説明
日付の差
DATEDIF(start, end, "d") → 日数差
関数
MINUTES_BETWEEN
説明
時刻・日付・日時の差(分)
MINUTES_BETWEEN(start_time, end_time) → 570
関数
HOURS_BETWEEN
説明
時刻・日付・日時の差(時間)
HOURS_BETWEEN(start_time, end_time) → 9.5
関数
OVERLAP_MINUTES
説明
日時の区間と時間帯(日跨ぎ可)の重なり(分)
OVERLAP_MINUTES(start, end, "22:00", "05:00")
関数
ROUND_MINUTES
説明
分数値を指定単位で丸める(切り捨て/切り上げ/最も近い)
ROUND_MINUTES(minutes, 15, "down") → 15分単位切り捨て
関数
PARENT
説明
テーブル(サブテーブル)内の計算フィールドから、テーブルの外の項目の値を読む。テーブルの外の計算フィールドでは使えません(詳細は「サブテーブル内の計算フィールド」へ)
cost / PARENT(total)
関数
CONST
説明
アプリ定数(アプリ設定で登録した名前つきの数値)の値を返す。コードは文字列で直接指定(式では組み立てられません)。値を定数側で変えると参照しているすべての数式に反映されます(詳細は「アプリ定数」のページへ)
IF(overtime > CONST("overtime_limit"), "超過", "")
関数
ROUND_TIME
説明
日時を指定単位(1〜60分)で丸める。結果は日時なので、深夜帯集計などにそのまま渡せます
ROUND_TIME(clock_in, 15, "up") → 8:55 なら 9:00
関数
IS_HOLIDAY
説明
アプリの休日カレンダーに登録された日か(1 or 0、土日は含まない)
IS_HOLIDAY(work_date)
関数
IS_NON_WORKING_DAY
説明
アプリの休日カレンダー上の非稼働日か(1 or 0、土日を含む)
IS_NON_WORKING_DAY(work_date)
関数
DATE_FORMAT
説明
日付書式
DATE_FORMAT(date, "YYYY/MM/DD")
関数
AGE
説明
正確な年齢計算
AGE(birth_date) → 24
関数
WEEKDAY
説明
曜日番号(1=日〜7=土)
WEEKDAY(date_field) → 2(月曜)
関数
EOMONTH
説明
N月後の月末日
EOMONTH(date_field, 1) → 翌月末

IS_HOLIDAYIS_NON_WORKING_DAY はどちらも「設定 > 休日カレンダー」に登録した独自休業日・日本の祝日を判定します(未設定のアプリでは常に 0)。違いは土日の扱いだけです。IS_HOLIDAY はカレンダーに登録した休日のみを対象とし土日は含みません。「休日出勤か」のように祝日そのものを判定したい場合に使います。IS_NON_WORKING_DAY は土日(カレンダーの休日設定に従う)も対象に含むため、「その日は稼働日か」を 1 つの関数で判定したい場合はこちらを使います(OR(IS_HOLIDAY(work_date), WEEKDAY(work_date) == 1, WEEKDAY(work_date) == 7) と等価ですが、土日の設定をカスタマイズしたアプリ(例: 土曜のみ休業、週休3日制)でも正しく追従します)。OVERLAP_MINUTES は深夜勤務手当(例: 22:00〜翌5:00)のような時間帯手当の対象時間を算出する用途を想定しています。

休日カレンダーの設定画面(「設定 > 休日カレンダー」、アプリ単位で上書きしていなければテナント既定の設定が使われます)には、週の起算曜日(既定は日曜)の設定もあります。この設定は、この計算フィールドの休日判定には影響しませんが、データパイプラインの週バケットや、フィルタの「過去●週間以内」($LAST_N_WEEKS)の週の区切りに使われます。同じアプリの中でも、既存の「今週」「先週」「来週」というフィルタの選択肢だけは月曜起算に固定のままなので、週の起算曜日をカスタマイズしたアプリでは範囲が食い違う場合がある点に注意してください。

範囲関数

範囲型フィールド(開始〜終了を1つの値として持つフィールド)の値を扱う関数です。

関数
RANGE
説明
開始・終了からリテラルの範囲値を組み立てる。終了を省略・空文字にすると終了未定(開区間)
RANGE("22:00", "29:00") → 22:00〜翌5:00
関数
RANGE_START
説明
範囲の開始の値を取得
RANGE_START(period) → 期間の開始日
関数
RANGE_END
説明
範囲の終了の値を取得(終了未定は空文字)
RANGE_END(period) → 期間の終了日
関数
RANGE_LENGTH
説明
範囲の長さ(日付=日数、日時・時刻=分、数値=差。終了未定は空欄)
RANGE_LENGTH(stay) → 2(8/1〜8/3の2泊分)
関数
RANGE_OVERLAP
説明
2つの範囲が重なっている長さ(単位は RANGE_LENGTH と同じ)
RANGE_OVERLAP(break_range, RANGE("22:00", "29:00"))
関数
RANGE_CONTAINS
説明
値(スカラーまたは範囲)が範囲に含まれるか(1 or 0、境界は両端含む)
RANGE_CONTAINS(period, TODAY()) → 1 or 0

RANGE_LENGTH の長さは両端を含まない差(終了 − 開始)です。日付基準では宿泊数のように数えられます(8/1〜8/3 は2日=2泊)。時刻基準で日をまたぐ範囲(例: 22:00〜翌5:00)は、終了を24時を超える表記("29:00")で書くことでそのまま計算できます。開区間(終了未定)は長さが定義できないため空欄(数値として使う文脈では0)になります。

RANGE_OVERLAP と既存の OVERLAP_MINUTES は「開始と終了が同じ」場合の解釈が異なりますRANGE_OVERLAP(a, b) は範囲の from と to が等しい場合を長さ0の点として扱い、重なりへの寄与はゼロです。一方 OVERLAP_MINUTES(start, end, bandStart, bandEnd) は時間帯(バンド)引数の bandStart と bandEnd が等しい場合を全24時間の繰り返しバンドとして扱います。同じ「両端が等しい」入力でも範囲値としての解釈とバンドとしての解釈で結果が逆になるため、2つの関数を混在させる数式では注意してください。

RANGE() で時刻・日時のリテラルを組み立てる際はゼロ埋めが必須です。RANGE("9:00", "17:00") のように時が1桁の指定は認識されず(構築に失敗し空欄になります)、RANGE("09:00", "17:00") のように2桁で指定してください。フィールドの値をそのまま渡す場合(RANGE(start_time, end_time) 等)は保存形がもともとゼロ埋めされているため問題ありません。

時刻基準の RANGE() は、範囲型フィールドの値と同じく開始が終了より後になる指定を受け付けませんRANGE("22:00", "05:00") は構築に失敗し空欄になります)。日をまたぐ範囲を書くときは、終了を24時間以上の値(24:0047:59)で指定してください。RANGE("22:00", "29:00") は22:00〜翌5:00を表します(範囲型フィールドの入力欄にある「翌日」トグルと同じ考え方で、終了に24時間を足した値をそのまま書きます)。なお一覧・ビューフィルタの「重なる」条件のオペランドはこれとは別の解釈規則を持ち、開始より終了を前にする指定が「毎晩◯時〜◯時」という繰り返しの時間帯の意味になります。詳しくは範囲型フィールドの「条件・フィルタでの利用」を参照してください。

範囲値を関数の引数として渡せるのは、範囲型フィールドの参照か RANGE(...) リテラルを直接ネストした場合のみです。IF(条件, range_field_a, range_field_b) のように IF/IFS/COALESCE 等を経由すると、選ばれた範囲値は構造を失って表示文字列に変換されてしまい、RANGE_LENGTH(IF(条件, range_field_a, range_field_b)) のような式は範囲値として評価されずサイレントに空欄・0 として扱われます。条件によって参照する範囲を切り替えたい場合は、範囲値ではなく計算結果を IF で切り替えてください(IF(条件, RANGE_LENGTH(range_field_a), RANGE_LENGTH(range_field_b)))。

重なり計算の実例(休憩時間帯と深夜料金帯の重なりを控除する組み方)は範囲フィールドのレシピを参照してください。

レシピ: 実働時間の計算

出勤・退勤(時刻フィールド)と休憩(分・数値フィールド)から実働時間を分単位で計算する例です。未入力の間は空欄にするため ISBLANK でガードします。

IF(OR(ISBLANK(start_time), ISBLANK(end_time)), "", MINUTES_BETWEEN(start_time, end_time) - break_minutes)
  • 結果は分の数値です。フィールド設定の「表示形式」を「時間」(値の単位「分」・表示のパターン「H:MM」)にすると 510 → 8:30 のように表示されます(合計やグラフは数値のまま集計されます)
  • 15 分単位の丸めは FLOOR(MINUTES_BETWEEN(start_time, end_time), 15) のように丸め関数と組み合わせます
  • 日をまたぐ勤務は時刻フィールド同士では負の値になります(自動で +24 時間補正はしません)。IF(x < 0, x + 1440, x) で補正するか、日時フィールドの利用を推奨します
  • 時刻フィールドと日時フィールドを混ぜて指定した場合は空欄になります
  • CSV/Excel エクスポートやメール通知では分の数値のまま出力されます(H:MM は画面表示・帳票のみ)

レシピ: 深夜割増・15分丸め・休日判定

日時フィールド(出勤・退勤)と休日カレンダーを使った、深夜割増時間の算出・分丸め・休日判定の例です。

OVERLAP_MINUTES(clock_in_dt, clock_out_dt, "22:00", "05:00")
ROUND_MINUTES(MINUTES_BETWEEN(clock_in_dt, clock_out_dt), 15, "down")
IF(IS_HOLIDAY(work_date), "休日出勤", "平日")
  • OVERLAP_MINUTES は日時フィールド同士(時刻フィールドではない)で使います。深夜帯 22:00〜翌5:00 のように日をまたぐ時間帯もそのまま指定でき、勤務が複数日にまたがる場合は各夜の重なりを自動で合算します
  • 時間帯の開始と終了が同じ時刻(例: OVERLAP_MINUTES(start, end, "09:00", "09:00"))の場合は 24 時間帯(終日)として扱われます
  • ROUND_MINUTES の第3引数は "down"(切り捨て)・"up"(切り上げ)・"nearest"(最も近い方、境界は切り上げ)から選びます
  • 時刻そのものを丸めるときは ROUND_TIME長さ(分数)を丸めるときは ROUND_MINUTES を使います。ROUND_TIME は日時を返すので OVERLAP_MINUTESMINUTES_BETWEEN にそのまま渡せます(切り上げが 24 時をまたぐ場合は翌日の 0:00 になります)
  • 打刻された値そのものを丸めて保存したい場合は、計算フィールドではなく入力ルールの「丸め」を使います。そちらは打刻の列自体を丸めた値に置き換えるので、実働・残業・深夜帯などの計算が自動的に丸め後の値を見ます
  • IS_HOLIDAY はアプリの休日カレンダー(設定 > 休日カレンダー)に登録された独自休業日・日本の祝日を判定します。カレンダー未設定のアプリでは常に 0 です。土日はこの関数の対象に含まれません。土日も休日扱いにするには、IS_NON_WORKING_DAY(work_date) に置き換えます(OR(IS_HOLIDAY(work_date), WEEKDAY(work_date) == 1, WEEKDAY(work_date) == 7) と等価ですが、カレンダーの土日設定(例: 土曜のみ休業)にも正しく追従します)

レシピ: 勤怠月次集計を作る(残業のしきい値超過を通知)

日次の出退勤から月次の残業時間を自動集計し、36協定の目安(月45時間 = 2700分)を超えたら管理者に通知する構成です。サンプルアプリ「勤怠月次集計」(アプリストアから追加可能)に、この手順で作った状態がそのまま入っています。

  1. 日次勤怠アプリに、出勤・退勤(日時フィールド)と休憩(数値フィールド)に加えて、以下の計算フィールドを追加します。
    実働(分) = IF(OR(ISBLANK(clock_in), ISBLANK(clock_out)), "", MINUTES_BETWEEN(clock_in, clock_out) - break_minutes)
    実働(15分丸め) = IF(ISBLANK(work_minutes), "", ROUND_MINUTES(work_minutes, 15, "down"))
    残業(分) = IF(ISBLANK(work_minutes_rounded), "", IF(IS_NON_WORKING_DAY(date), work_minutes_rounded, MAX(work_minutes_rounded - 480, 0)))
    集計月 = IF(ISBLANK(date), "", DATE_FORMAT(date, "YYYY-MM"))

    「残業(分)」は、休日出勤(IS_NON_WORKING_DAY が真、土日を含む)ならその日の実働全体を、稼働日なら所定8時間(480分)の超過分だけを残業として扱います(土日を除外すると土曜出勤分がまるごと未計上になるため IS_HOLIDAY ではなく IS_NON_WORKING_DAY を使います)。「集計月」はパイプラインの集計キーに使う月次の文字列(例: 2026-07)です。

  2. 月次サマリアプリを新規作成し、従業員(ユーザー選択)・対象月(文字列)・残業時間(分)(数値)などの受け皿フィールドを用意します。パイプラインの「更新または作成」マッチキーにする文字列フィールドも 1 つ追加し、「値の重複を禁止する(ユニーク)」を ON にします(例: 従業員×月キー)。
  3. データパイプラインを作成します(詳細はデータパイプラインのドキュメント)。ソースは日次勤怠アプリ、集計方法は「従業員」「集計月」でグループ化し、残業(分)などを合計。出力モードは「更新または作成」、マッチキーは手順2で用意したユニークフィールドにします。従業員(ユーザー選択)は id ベースで正規化して連結されるため、CONCAT(従業員, "_", 集計月) のような計算式でも従業員ごとに異なるキーになります。
  4. 月次サマリアプリの通知ルール(詳細は通知のドキュメント)に、トリガー「レコード追加時」「レコード編集時」の2つを作成し、条件を「残業時間(分) > 2700」(45時間)に設定、通知先に管理者を指定します。追加時・編集時の両方を対象にするのは、初回集計で既に超過している場合と、2回目以降の実行で超過に転じた場合の両方を取りこぼさないためです。
  5. パイプラインを手動実行するたびに月次サマリが更新されます。月次で自動実行したい場合は、パイプラインの編集画面から「スケジュール」を有効にします。

注意点: パイプライン実行で月次サマリが更新される際、通知ルールも発火します。ただし、同じレコードに対して24時間以内に同じ条件で再度通知が送られることはありません(例: 同じ従業員の同じ月に2回実行した場合、1回目の実行で45時間超過を知らせる通知が送られたら、その後24時間以内の2回目実行では同じ通知は送られません)。

日付・日時の引数が未入力のときは、計算結果も空欄になります。DATEDIF / YEAR / MONTH / DAY /WEEKDAY / EOMONTH / AGE のいずれも同じ扱いです。 たとえば DATEDIF(received_on, closed_on, "d") は完了日がまだ空のレコードでは 0 ではなく空欄になり、集計(合計・平均・件数)の母数からも外れます。 「未入力のときは別の値を出したい」場合だけ ISBLANK で明示的に分岐してください (例: IF(ISBLANK(closed_on), "対応中", DATEDIF(received_on, closed_on, "d")))。 なお数値の足し算では未入力は従来どおり 0 として扱われます(SUM の慣習)。

DATEDIF の第3引数: "d" 日数、"m" 完全月数、"y" 完全年数。「記念日通過済みか」を考慮して完全年数 / 月数を返します (例: 誕生日から年齢を求めるときに、その年の誕生日を迎えていなければ 1 引いた値が返る、いわゆる満年齢)。

AGEは誕生日を過ぎたかを正確に判定します。AGE(birth_date) は今日時点の年齢、AGE(birth_date, base_date) は指定日時点の年齢を返します。DATEDIF(birth_date, TODAY(), "y") と同じ結果です。

DATEは年フィールドと月フィールドを別々に管理している場合に役立ちます。例えば2つのドロップダウンから経過月数を求めるには DATEDIF(DATE(start_year, start_month, 1), TODAY(), "M") と書けます。

論理関数

関数
IF
説明
条件分岐
IF(amount > 0, amount, 0)
関数
IFS
説明
多分岐条件
IFS(score >= 80, "A", score >= 60, "B", 1, "C")
関数
ISBLANK
説明
値が空なら 1、そうでなければ 0
ISBLANK(discount) → 1 or 0
関数
AND
説明
すべて真なら1
AND(a > 0, b > 0)
関数
OR
説明
いずれか真なら1
OR(a > 0, b > 0)
関数
NOT
説明
否定
NOT(flag)
関数
CONTAINS
説明
文字列を含むか
CONTAINS(status, "完了") → 1 or 0

IFS は IF を何重にもネストする代わりに、条件と値のペアを並べて多分岐を書くための関数です。上から順に条件を評価し、最初に真になった値を返します。最後のペアに 1, デフォルト値 と書くと「それ以外」の値を指定できます。

ISBLANK は値が空(未入力)かどうかを判定します。数値の 0 は「空」と見なされないのがポイントで、「未入力のときはデフォルト値、入力 0 のときはそのまま 0 として扱う」という判定ができます。IF(discount = 0, ...) ではこの 2 つが区別できませんが、IF(ISBLANK(discount), ...) なら正しく区別できます。

文字列関数

関数
CONCAT
説明
文字列結合
CONCAT(field1, "-", field2)
関数
LEFT / RIGHT
説明
左/右から取得
LEFT(text, 3)
関数
MID
説明
中間文字列
MID(text, 2, 3) → 2文字目から3文字
関数
LEN
説明
文字数
LEN(text)
関数
SUBSTITUTE
説明
文字列置換
SUBSTITUTE(text, "old", "new")
関数
UPPER / LOWER
説明
大文字/小文字変換
UPPER(text)
関数
TRIM
説明
前後の空白除去
TRIM(text)

エラー処理

関数
IFERROR
説明
エラー時のデフォルト値
IFERROR(a / b, 0)
関数
COALESCE
説明
最初の非空値を返す
COALESCE(field1, field2, 0)

計算式の例

計算式
unit_price * quantity
結果
単価 × 個数 = 合計金額
計算式
subtotal * 0.1
結果
小計 × 0.1 = 消費税
計算式
subtotal + tax
結果
小計 + 消費税 = 税込合計
計算式
(sales - cost) / sales * 100
結果
利益率(%)
計算式
ROUNDDOWN(price * 1.1, 0)
結果
税込金額(切り捨て)
計算式
CEILING(amount, 100)
結果
100円単位に切り上げ
計算式
IF(stock > 0, "在庫あり", "在庫なし")
結果
条件分岐の例
計算式
DATEDIF(start_date, end_date, "d")
結果
開始日から終了日までの日数
計算式
AGE(birth_date)
結果
生年月日から現在の年齢(誕生日前後を正確に判定)
計算式
DATEDIF(TODAY(), deadline, "d")
結果
期限までの残日数
計算式
DATEDIF(start_ym, TODAY(), "M")
結果
年月フィールドから現在までの経過月数
計算式
DATEDIF(DATE(start_year, start_month, 1), TODAY(), "M")
結果
年+月フィールドから経過月数
計算式
CONCAT(DATEDIF(start, TODAY(), "y"), "年", MOD(DATEDIF(start, TODAY(), "M"), 12), "ヶ月")
結果
経過期間を「X年Yヶ月」形式で表示
計算式
SUM(order_lines.subtotal)
結果
明細テーブルの小計合計
計算式
AVERAGE(review_items.score)
結果
評価テーブルの平均スコア
計算式
COUNTA(attendees.name)
結果
参加者テーブルの行数
計算式
IFS(score >= 80, "A", score >= 60, "B", score >= 40, "C", 1, "D")
結果
点数から成績(4段階)
計算式
IF(ISBLANK(discount), price, price - discount)
結果
割引未入力時は定価、0円割引もそのまま反映
計算式
IFERROR(total / count, 0)
結果
0除算時に0を返す
計算式
COALESCE(discount, 0)
結果
値引きが未入力なら0

使用できる演算子

演算子
+ - * /
説明
四則演算
price * 1.1
演算子
( )
説明
グループ化
(a + b) * c
演算子
&
説明
文字列結合
last_name & " " & first_name
演算子
> < >= <=
説明
比較(1 or 0を返す)
IF(amount > 1000, ...)
演算子
==
説明
等しい
IF(status == "完了", ...)
演算子
!= <>
説明
等しくない
IF(status != "キャンセル", ...)

>/</>=/<= の比較は、両辺を数値として解釈できる場合は数値として比較します。両辺とも数値に変換できない文字列どうしの場合は辞書順で比較し、日付(YYYY-MM-DD)・日時(YYYY-MM-DDTHH:mm)・時刻(HH:mm)はいずれもゼロ埋めされた固定幅の文字列なので、辞書順がそのまま時系列順と一致します。そのため date_field >= "2026-08-01"RANGE_START(period) >= TODAY() のような日付・時刻の前後比較が正しく機能します。範囲型フィールドの値そのもの(裸参照)を > 等で直接比較することはできません(常に 0 を返します)。範囲同士や範囲とスカラーの前後関係を調べたい場合は RANGE_START/RANGE_END で端点の値を取り出してから比較してください。

関連レコード集計フィールドとの使い分け

関連レコード集計フィールドとは役割が異なります。計算フィールドの集計関数が扱うのは 同じレコード内のテーブル (サブテーブル) の行、関連レコード集計フィールドが扱うのは 別アプリのレコード です。

やりたいこと
この受注伝票の明細合計
使うフィールド
計算フィールド
書き方
SUM(order_lines.subtotal)
やりたいこと
この明細の平均スコア
使うフィールド
計算フィールド
書き方
AVERAGE(review_items.score)
やりたいこと
この顧客の受注合計 (別アプリ)
使うフィールド
関連レコード集計フィールド
書き方
設定画面で「合計」を選択
やりたいこと
この顧客の契約件数 (別アプリ)
使うフィールド
関連レコード集計フィールド
書き方
設定画面で「件数」を選択

別アプリに記録されたレコードを集計するには、計算フィールドではなく関連レコード集計フィールドを使ってください (フィールドの対応条件で紐付けを指定します)。

サブテーブル内の計算フィールド

テーブル(サブテーブル)のサブフィールドとしても計算フィールドを追加できます。サブテーブル内の計算フィールドが素の名前で参照できるのは同じ行のサブフィールドだけですが、PARENT(コード) を使うとテーブルの外の項目も読めます。

  • 計算式の入力欄で「フィールド一覧」をクリックすると、同じテーブル内のサブフィールドが表示されます
  • 「関数一覧」からクリックで関数を挿入できます
  • 単位記号・単位の位置・小数点以下の表示桁数・3桁ごとにカンマ表示も通常の計算フィールドと同じように設定できます
  • トップレベルの計算フィールドから SUM(テーブルコード.サブフィールドコード) で集計できます

テーブルの外の項目を読む(PARENT

テーブル内の計算フィールドから PARENT(コード) と書くと、そのレコードのテーブルの外にある項目の値を読めます。 たとえば費用の按分で、各行の原価をレコード全体の合計で割る、といった式が書けます。

按分額の式

cost / PARENT(total) * 100
  • 読めるのはテーブルの外の項目だけです。テーブルの外の計算フィールドで PARENT を使うと保存時にエラーになります(読む相手がいないため)
  • 読む相手が計算フィールドの場合、そのテーブルを集計している計算フィールドは読めません。 たとえば「按分」テーブルの行から SUM(按分.原価) を読もうとすると、行の計算と合計の計算がお互いを待つ状態になるため、保存時にエラーになります。 別のテーブルを集計している計算フィールド(例: 「明細」の合計)は問題なく読めます
  • 値が入るのは保存したときです。入力中の画面では、PARENT を使う計算フィールドはまだ空欄か、前回保存した値のままになります (参照先を変えても、保存するまで表示は変わりません)。これは、入力中の画面で計算すると保存される値とずれる可能性があるためで、保存すれば必ず正しい値になります
  • PARENT で参照している項目のフィールドコードを変更した場合は、式の中の PARENT(...) を手で直してください。 直し忘れた式は、次にフォームを保存するときに「存在しない項目を参照しています」として知らせます

ヒント

  • 計算フィールドは読み取り専用であり、手動で値を変更することはできません
  • 計算式にはフィールドコードを使用します。フィールドコードはプロパティパネルで確認できます
  • 計算元の値が変更されると結果は自動で再計算されます
  • 計算フィールドの結果をさらに別の計算フィールドで参照できます
  • 文字列結合(CONCAT等)の結果は文字列型になるため、単位記号や桁区切りの設定は適用されません
  • 循環参照(A = B + 1, B = A + 1 のような式)は自動検出され、該当フィールドは値が表示されません