計算項目について
計算項目は、他の数値項目の値を参照して、自動で計算を行い結果を表示する項目になります。
計算項目は、項目定義時に計算式を定義しておくことで
計算式に含まれる数値項目が設定されたときに自動で計算が行われます。
「値の重複を禁止する」について
「値の重複を禁止する」を有効にすると、計算結果が重複しているデータを登録・更新する場合に重複エラーを表示させます。
CSVアップロードでは、計算項目の自動計算OFFの場合のみ、CSVデータが元データと重複してる時点で重複エラーになり、インポートされません。
※「項目名」については、項目名の前後に『全角スペース』/『半角スペース』を含めた場合 自動削除されます。
※「項目名」の入力文字の中に全角スペースを含めた場合は、半角スペースへ自動変換されます。
※計算値の種類を「数値」にした場合、「数値の形式」を整数、小数から選択できます。
※計算値の種類を「日付」「日時」にした場合、「表示フォーマットを指定する」を有効にすると、以下を使用して表示フォーマットを指定することができます。
Y:年(西暦の4桁)・・・例)2017
y:年(西暦の2桁)・・・例)17
M:月英語3文字・・・例)Jan, Feb
m:月(2桁の月)・・・例)08
n:月(1桁で先頭に0を付けない)・・・例)8
d:日(2桁の日付)・・・例)21
H:時間(2桁の24時間単位)・・・例)16
h:時間(2桁の12時間単位)・・・例)08
i:分(2桁の分)・・・例)20
s:秒(2桁の秒)・・・例)30
t:指定した月の日数(28~31)・・・例)31
w:曜日(0:日 ~ 6:土)・・・例)2(火)
l:曜日(Sunday〜Saturday)
<追加オプション設定>
必要に応じて「追加設定オプション」を行います。
設定項目 | 内容 |
---|---|
表示条件設定 | 表示条件を設定することができます。条件設定は複数設定することができます。 ※子テーブルに設定した項目は、表示条件を満たした後、別の子テーブルの項目を更新することで、表示/非表示が切り替わります。 |
表示設定 | 表示設定することができます。表示設定は「一覧に表示」/「詳細に表示」の2パターンあります。「一覧に表示」にチェックを入れた場合、レコード一覧画面に本項目が表示されます。「詳細に表示」にチェックを入れた場合、レコード詳細画面に本項目が表示されます。 |
一覧の表示幅(px) | レコード一覧に表示する際の表示幅の指定が可能です。単位はピクセルになります。 |
一覧画面スタイル指定 | レコード一覧画面に表示される際のスタイル指定を行う事ができます。スタイル指定を行う場合、「スタイルを指定」にチェックを入れ「文字サイズ」/「フォント」/「文字色」/「位置」の指定を必要に応じて行います。 |
詳細画面スタイル指定 | レコード詳細画面に表示される際のスタイル指定を行う事ができます。スタイル指定を行う場合、「スタイルを指定」にチェックを入れ「文字サイズ」/「フォント」/「文字色」/「位置」の指定を必要に応じて行います。 |
説明用テキスト | フォーム画面に表示の際に項目の下に表示するテキストを設定することができます。項目の説明文などに利用することができます。 |
ヘルプテキスト | フォーム画面に表示の際にツールチップに表示するテキストを設定することができます。項目の説明文などに利用することができます。 |
検索高速化(インデックス) | 検索高速化を行う場合、「検索高速化(インデックス)する」にチェックを入れます。特定の項目に対しての検索が遅い際に設定することで検索が迅速に行われる機能となります。 ※高速化される代わりにデータのサイズが追加で使用される影響で、更新等が遅延する可能性がございます。 |
追加手順
例として、以下のように商品の売上を計算する項目を考えてみます。
項目名 | 項目種類 |
---|---|
価格 | 数値 |
数量 | 数値 |
売上 | 計算 |
「価格」と「数量」の項目を数値項目(数値の形式は整数)で追加しておきます。
「計算」をクリックします。
以下のように計算式に数式を入力します。
{価格}*{数量}
必要であれば「追加設定オプション」を設定後、「追加する」を押下し、テーブルを登録します。
レコードを追加します。「価格」と「数量」を入力すると、「売上」が自動で計算されます。
計算項目の数式について
基本的な数式のルールは下記となります。
- 参照する項目名を{}で囲む
- 他のテーブルを参照する場合は::をつける
- 四則演算は+-*/の記号を使います。
例えば、「売上」という計算項目で「価格」と「数量」から計算を行う場合、以下のような数式となります。
{価格}*{数量}
数式で関数を使う場合
関数を使う場合は例えば以下のような式となります。
ROUND({価格}*1.1)*{数量}
計算式で使用可能な関数は下記となります。
名前 | 引数の数 | 説明 | 設定例 | 備考 |
---|---|---|---|---|
ABS() | 1 | 絶対値を返します | ABS(数値) |
()内で指定された数値が絶対値で表示されます |
ACOS() | 1 | アークコサインを返します | ACOS(数値) |
()の数値は求める角度の逆余弦の値を、-1 ~ 1の範囲で指定します。 |
ASIN() | 1 | アークサインを返します | ASIN(数値) |
()の数値は求める角度の正弦(サイン)の値を-1~1の範囲で指定します。 |
ATAN() | 1 | アークタンジェントを返します | ATAN(数値) |
()の数値はタンジェントを表す数値を指定 |
ATAN2(), ATAN() | 1 | 2 つの引数のアークタンジェントを返します | ATAN2(数値),ATAN(数値) |
()の数値はタンジェントを表す数値を指定 |
CEIL() | 1 | 引数の数値以上で最小の整数値を返します | CEIL(1.05) |
設定例では「2」を返します |
CEILING() | 1 | 引数の数値以上で最小の整数値を返します | CEILING(1.11) |
設定例では「2」を返します |
CONV() | 3 | 数値を異なる基数間で変換します | CONV(100,mi,km) |
設定例では100マイルをキロメールへ変換します |
COS() | 1 | コサインを返します | COS(数値) |
数値ラジアンのコサインを返します |
COT() | 1 | コタンジェントを返します | COT(数値) |
数値の角度の子タンジェントを返します |
COUNT() | 1 | テーブルのレコード数を数えます | COUNT(式) |
引数の式には、行数を取得する列名(カラム名)や条件式を指定します。また*(アスタリスク)を指定すると、すべてのレコードの行数をカウントします。 |
CRC32() | 1 | 巡回冗長検査値を計算します | CRC32(数値) |
数値の巡回冗長検査値を計算します |
DEGREES() | 1 | ラジアンを角度に変換します | DEGREES(数値) |
数値のラジアンを角度に変換します |
EXP() | 1 | 累乗します | EXP(数値) |
数値を累乗します |
FLOOR() | 1 | 引数以下のもっとも大きな整数値を返します | FLOOR(1.03) |
設定例では「1」を返します |
LN() | 1 | 引数の自然対数を返します | LN(1) |
設定例では「0」を返します |
LOG() | 1 | 最初の引数の自然対数を返します | LOG(10) |
設定例では「2.30」を返します |
LOG10() | 1 | 引数の底 10 の対数を返します | LOG10(145.175642) |
設定例では「2.16」を返します |
LOG2() | 1 | 引数の底 2 の対数を返します | LOG2(2) |
設定例では「1」を返します |
MOD() | 2 | 第1 引数に指定した値を第 2 引数の値で割った余りを返します | MOD(8,3) |
設定例では「2」を返します |
PI() | - | pi の値を返します | PI() |
- |
POW() POWER() |
2 |
POWは、第1引数に指定した値を 第2引数の値だけ累乗した値を返します POWERは、指定した指数で累乗された引数を返します |
|
POWの設定例では「125」を返します POWERの設定例では「100」を返します |
RADIANS() | 1 | ラジアンに変換された引数を返します | RADIANS(180) |
設定例では「3」を返します |
RAND() | - | ランダムな浮動小数点値を返します | RAND() |
設定例では0.0~1.0の間の乱数を返します |
ROUND() | 2 | 引数を四捨五入します | ROUND(3.55,1) |
設定例では「3.6」を返します |
SIGN() | 1 | 引数の符号を返します | SIGN(999) |
設定例では「1」を返します |
SIN() | 1 | 引数のサインを返します | SIN(1) |
設定例では「0.8414709848078965」を返します |
SQRT() | 1 | 引数の平方根を返します | SQRT(100) |
設定例では「10」を返します |
TAN() | 1 | 引数のタンジェントを返します | TAN(1) |
設定例では「1.5574077246549023」を返します |
TRUNCATE() | 2 | 指定された小数点以下の桁数に切り捨てます | TRUNCATE(17.745,0) |
設定例では「17」を返します |
MAX() | 1 | 最大値の数値、日付けの値を返します | MAX(列名) |
設定例では指定した列名の最大値を返します |
MIN() | 1 | 最小値の数値、日付けの値を返します | MIN(列名) |
設定例では指定した列名の最小値を返します |
LEFT() | 2 | 第1引数で指定した文字列のうち、左から第2引数で指定した桁数の値を取得します | LEFT("ABCDEFG", 3) |
設定例ではABCを返します |
RIGHT() | 2 | 第1引数で指定した文字列のうち右から第2引数で指定した桁数の値を取得します | RIGHT("ABCDEFG", 3) |
設定例では「EFG」を返します |
REPLACE() | 3 | 値の置換を行います | REPLACE("SATOU","S","K") |
設定例では「KATOU」を返します |
SUBSTRING() | 3 | 値の部分抽出を行います | SUBSTRING("12345678", 3, 3) |
設定例では「345」を返します |
SUM() | 1 | 指定したカラムのレコードの合計を取得します | SUM({明細::金額}) |
設定例では明細テーブル内の金額のレコードの合計を取得します |
LEAST() | - | 複数の引数から最小値を取得します | LEAST({数値1},{数値2},100) |
設定例では、【項目名「数値1」、「数値2」、100】の中から最小値を取得します |
GREATEST() | - | 複数の引数から最大値を取得します | GREATEST({数値1},{数値2},100) |
設定例では、【項目名「数値1」、「数値2」、100】の中から最大値を取得します |
CONCAT() | - | 文字列を結合し取得します。 | 例①CONCAT("Today is ", CURRENT_DATE()) 例② CONCAT(TIMESTAMPDIFF(YEAR, {日付}, CURRENT_DATE()), "年", MOD(TIMESTAMPDIFF(MONTH, {日付}, CURRENT_DATE()), 12), "ヶ月") |
例①では、「Today is 2023-06-10(実行日付)」を取得します。 例②では、指定された 「日付」項目から現在の日付までの年数と月数を取得します。例えば日付項目が「2000-01-15」で現在の日付が「2023-06-10」の場合、「23年4ヶ月」を取得します。 |
DATE_ADD() | 3 | 日付値に時間値 (間隔) を加算します | DATE_ADD({日付},'year',1) |
設定例では日付項目に対して1年加算した情報を取得します。設定例の第2引数のyearと記載してある箇所は「year」「month」「day」「hour」「minute」「second」の指定が可能です。 ◆「day」の指定は2024/6/23アップデートにて実装予定 |
DATE_SUB() | 3 | 日付から時間値 (間隔) を引きます | DATE_SUB(current_date(),'month',4) |
設定例では現在日付けより4カ月減算した日付け情報を取得します |
DATEDIFF() | 2 | 2 つの日付の差を求めます | DATEDIFF(CURRENT_DATE(),"2021-07-01") |
設定例では現在日付けと2021年7月1日との日付けの差情報を取得します |
CURRENT_DATE() | - | 現在日付けを取得します | CURRENT_DATE() |
- |
LAST_DAY() | 1 | 日時項目の月末日を取得します | LAST_DAY({日付}) |
設定例では項目名(日付)の月末日を取得します |
IF() | 3 | 論理式の条件(IF文)によって処理を分岐します。IF条件 (第一引数がtrueの場合第2引数、falseの場合第3引数を表示する)IF文ではORまたはANDの指定も可能です。 |
例①
例③
例④ |
例①では項目名(居住者)が0より大きい場合は已滿を取得します。IF文の条件文が空の場合を指定する場合、次のように指定します。
例④では、項目1が「A」の場合、項目〇を、「B」の場合項目×を、それ以外の場合「-」を取得します。 |
LPAD() | 3 | 指定した桁数になるまで文字列の左側に文字列を埋め込みます。 | LPAD("abc", 6, "XYZ") |
設定例では元の文字列を「abc」で指定し6桁の文字列で且つ埋め込む文字列を「XYZ」と指定しているため、「ZYZabc」を取得します |
SUMIF() | 2 | 特定の条件を満たすレコードの値を選択し、それらの値の総和を計算します。 | SUMIF({売上明細::売上種別}="BPO",{売上明細::売上金額}) |
設定例では「売上明細」テーブル内の「売上種別」がBPOとなっているレコードの「売上金額」の総和を取得します |
DATE_FORMAT() | 2 | 引数に指定した日付を表す値を指定のフォーマットで整形した文字列を取得することができます。 | DATE_FORMAT({項目名},"%m月") |
設定例では、{項目名}が「2023/6/13」だった場合「06月」を取得します |
TIME_FORMAT() | 2 | 時刻を表す値を指定のフォーマットで整形した文字列を取得することができます。 | TIME_FORMAT({項目名},"%h時") |
設定例では、{項目名}が「14:45」だった場合「14時」を取得します |
AGE() | 1 | 日付や日付時刻より、年齢を取得することができます。 | AGE({誕生日}) |
設定例では、誕生日の生年月日より年齢を取得します |
TIMEDIFF() | 2 | 日時や時間型の値を二つ、入力引数として受け取り、その差分の時間を取得することができます。 | TIMEDIFF({出荷日}, {仕入日}) |
設定例では、仕入日をスタートとして出荷日までの差分の時間を取得します |
TIMESTAMPDIFF() | 3 | 2つの日付または時刻の間の指定した時間単位の差を計算し取得することができます。 | TIMESTAMPDIFF(YEAR, {日付}, CURRENT_DATE()) |
設定例では、{日付}項目を開始日として本日日付との差を年で取得します |
他テーブルの数値を使う場合
例えば、以下のように他のテーブルを参照している構成で考えてみます。
テーブル | 項目名 | 項目種類 |
---|---|---|
商品テーブル | 商品名 | 文字列(一行) |
商品テーブル | 価格 | 数値 |
売上テーブル | 商品 | 他テーブル参照 |
※商品テーブルの商品名を参照 | ||
売上テーブル | 数量 | 数値 |
売上テーブル | 売上 | 計算 |
このような場合、「売上」項目上の数式では以下のように、「商品」項目を使って商品テーブルの価格を参照します。
{商品::価格}*{数量}
フォーム上の自動計算リアルタイム表示について
計算項目の設定を行うと、フォーム上では自動計算され以下のようにリアルタイム表示されます。
計算値の種類が「日付」または「日時」指定時のフォーマット指定について
計算値の種類が「日付」または「日時」を指定している場合、計算結果に対して表示フォーマットを指定することができます。
子テーブルから親テーブルの項目データの取得について
以下の通り子テーブル上の計算項目に設定することで、他テーブル参照設定(子テーブル設定)されている子テーブルから、親テーブルの項目データの取得が可能です。
(親テーブルの名称ではなく、単純に親テーブルと入力する)
{親テーブル::項目名}
子テーブルや関連レコードの項目を計算する
子テーブルや関連レコードでは、SUM関数を用いて特定の項目の総和を出すことが可能です。
SUM({関連レコード一覧(子テーブル)の名称::計算を行いたい関連レコード一覧(子テーブル)内の項目名})
※特定の文字列を抽出することはできません。