【後編】 データベースを管理するノーコードツールAirtableについて:関数フィールドFormulaの基礎
コードの書けないエンジニアのたかしです。今回も最後までお付き合い宜しくお願いします。本記事は後編です。また前編と中編を読んでいない方はそちらを先に読むことをオススメします。それでは早速、関数フィールドFormulaについて解説していきます。
Excel /スプレッドシート と Airtable の違い
FormulaとはAirtable内で使える関数フィールドのことを指します。当然エクセルもスプレッドシートもAirtabeleも全て関数の仕様は違うのですが、特にフィールド単位で処理を行うことと同じテーブル内での処理に限定されると言う点において他の表計算ツールと違っています。
フィールド単位の処理に関して、具体的にはAirtableで =a1+b5 のような処理はできません。特定のセルを選択することができないのです。Airtableができる処理は{1つ当たりの値段が入力されたフィールド}*{購入した個数の入力されたフィールド}のような処理になります。それを全てのレコードにおいて行い、フィールド上に値を生成するのです。
同じテーブル内での処理に関して、具体的にはエクセルやスプレッドシートのように = 'シート2'!A1 + 'シート3'!A1 のような処理ができません。テーブル ( WorkSheet )をまたいで一気に処理を行うことができないのです。もしそのような処理を行う場合にはリンク&ルックアップ(ロールアップ)でFormulaと同じテーブル上に処理したい値を表示させる必要があります。
表計算に関してAirtableはスプレッドーシートやエクセルに劣るようです。リンク&ルックアップを行わないと別のテーブルの値を処理できないという仕様は、負けを認めざるをえません。
ここまで書いてきて筆者には「それだったらスプレッドシートを使ってGlide動かした方がいいじゃん」というノーコーダーさんの心の声が聞こえてきています。ちょっと待ってください。Airtableだってもちろん良いところがあります。それはどんなデータでも保存できるということです。そもそもの前提としてAirtableはデータベースツールですし、スプレッドシートやExcelは表計算ツールです。両者には共通点もありますが設計思想が異なるのです。スプレッドシートのセルにスプレッドシートを保存できませんよね。エクセルのセルにpdfファイルを保存できませんよね。Airtableならアタッチメントフィールドを使って保存できます(データベースツールなので当然ではありますが)。
ではFormulaの基本的な関数を見ていきましょう
基本的な計算
・足し算 {フィールド1} + {フィールド2}
・引き算 {フィールド1} - {フィールド2}
・掛け算 {フィールド1} * {フィールド2}
・割り算 {フィールド1} / {フィールド2}
テキスト
・テキストを繋げる {テキスト1} & "と" & {テキスト2} & "は"&{テキスト3}
・テキストを繋げる CONCATENATE({テキスト1}, "ノーコード",...)
「, 」で区切って文字を繋げていきます。&と同じような仕様になります。
・ 「" 」は \ をつけることで表示することができる
・テキストから一部だけ返す
左からいくつか LEFT({テキスト}, 数字)
右からいくつか RIGHT({テキスト}, 数字)
・文字数をカウントする LEN({テキスト})
・改行する "\n"
論理演算子
・より大きい >
・未満 <
・以上 >=
・以下 <=
・等しい =
・等しくない !=
フォーマット
Decimal(小数)/ Integer(整数)/ Currency(通貨)/ Percent(百分率)/ Duration(時間) の5つのフォーマットから選択して表示させる値の種類を決めます。
条件分岐
IF 文
IF([論理引数], [値1], [値2])で[論理引数]がtrueなら[値1]を返し、それ以外なら[値2]を返します。論理引数には論理演算子を使います。
IF({財布の所持金}>=5000, "購入できます", "購入できません")
これで5000円以上持ってたら「購入できます」と表示されて5000円未満なら「購入できません」と表示される関数が作れました。
IF({在庫状況} = '在庫あり', '在庫があり購入可能です', '間も無く入荷いたします')
このようにテキストに対する処理も行うことが可能です。
⏰ ✅ 🏃 👍 💥 🔥 💣
返す値にこのような絵文字を含めたい場合は、Windowsなら[windows][.]もしくは[windows][;]で可能です。Macなら[control][command][space]で可能です。
チェックボックスフィールドはチェックがついている場合「1」が入っており、チェックがついていない場合「0」が入っているので、条件分岐の際には0または1を使うことができます
IFの入れ子構造
条件をいくつにも分岐させて処理を行いたい場合、IF文の中にIF文を入れていきます。上の画像をIF文に表してみます。
IF(
{Test Score} < 0,
"Error!",
IF({Test Score} < 70,
"❌ Does not meet expectations",
IF({Test Score} < 90,
"💪 Meets expectations",
IF({Test Score} <= 100,
"✅ Exceeds expectations",
"Error!"
)
)
)
)
SWITCH文
入れ子構造にせずに条件分岐を行います。下の画像のように進捗状況を数字で示し、それに対応する値を返すことができます。
SWITCH(
{進捗状況},
4, '計画中',
3, '実装中',
2, 'β版の完成',
1, 'ローンチ',
'範囲外'
)
このような関数がFormulaに入っています。それぞれの数字に対応する値を返すように設定できます。
日付を操作する
DATETIME_DIFF
DATETIME_DIFF( {時間1},{時間2},'単位指定子' )
時間1と時間2の差を返す関数です。その際の単位(分/秒)などを単位指定子で設定します。
単位指定子
ミリ秒 'milliseconds' 'ms'
秒 'seconds' 's'
分 'minutes' 'm'
時 'hours' 'h'
日 'days' 'd'
週 'weeks' 'w'
月 'months' 'M'
四半期 'quarters' 'Q'
年 'years' 'y'
※単位指定子を設定しない場合や、正しく入力されていない場合はデフォルトの秒で返します
DATETIME_FORMAT
DATETIME_FORMAT({時間}, '時間のフォーマット指定子')
フォーマット指定子は M/DD/YYYY h:mm のように指定します。下のリンクに詳しいフォーマット指定子がありますので見てみて下さい。
SET_TIMEZONE
DATETIME_FORMAT(SET_TIMEZONE({時間}, 'タイムゾーン'), '時間のフォーマット指定子')
タイムゾーンを指定することでGMT(世界標準時)に修正されるのを阻止できます。タイムゾーンのリストについては下のリンクから見れます。
DateフィールドからGMTに固定すると言う方法もありです
終わりに
基本的な関数を紹介しました。Airtableには紹介した以外のテキスト関数/論理関数/数値関数が沢山ありますので下のリンクから調べてみてください。
ここまで読んで頂いてありがとうございました。Twitterをやっておりますのでフォロー宜しくお願いします
▶︎ https://twitter.com/NoCoderT