SELECT/FILTER/REF_ROWSは、同じような仕事をするため、使い分けが混乱する場面があります。
いづれの関数も、テーブルからデータを抽出することを目的にしていますが、テーブルのリレーションによって使い分けをすると、簡潔に表現できます。
例えば受注と受注明細テーブルがあった場合には以下のようにapp formulaにSELECT/FILTER/REF_ROWS関数をいれます。
このような使い分けの勘所をご紹介できればと思います。
選択の基準
まず、SELECT/FILTER/REF_ROWS関数のどれを選択するかの基準です。
1.リレーションを活用して簡単に関連データを取得したい場合:
→ REF_ROWS()が最適。親子関係が設定済みなら、最小限の設定で自動的にデータが取得できます。
2.条件付きで他テーブルのキー値を取得したい場合:
→ FILTER()が適している。キー値リストを取得した後、他のロジックに活用しやすい。(例:[テーブルキー値].[値段] といった参照が可能)
3.柔軟な条件でデータを抽出したい場合:
→ SELECT()が便利。
指定列の値を自由に取得できるため、条件が複雑な場合にも対応可能です。
関数 | 適用範囲 | 適切な場面 | 特徴 |
---|---|---|---|
SELECT() | 特定の列(任意の値のリストを取得) | 条件付きで特定の列の値を取り出したい場合 | カスタマイズ性が高く、複数列にまたがる条件でも使える。 |
FILTER() | テーブル全体(キー値のリストを取得) | 条件付きで他テーブルのレコードを検索し、そのキーを活用したい場合 | 主に「キー」を使った操作で有効。他テーブルとのリレーションに強い。 |
REF_ROWS() | リレーション(関連するレコードのキーを取得) | 参照列が設定されており、自動的に関連レコードを取得したい場合 | 明示的に条件を書く必要がなく、リレーション構築済みであれば自動で使える。 |
SELECT/FILTER/REF_ROWS関数
以下で、1つづつ見ていきたいと思います。
1. SELECT()
テーブルのREF型ではなく、他のタイプ型のカラム情報が欲しい場合はSELECT関数を使います。SELECTと後述するSUM、MAXなどを組み合わせたりする時などです。
特性:
- 指定したテーブルや列から条件に一致する値のリストを取得します。
- 汎用性が高く、柔軟にデータをフィルタリングできます。
- 結果として「リスト」を返します。
構文:
SELECT(テーブル名[列名], 条件式)
使用例:
- 特定の条件に合うデータを取得する場合
受注テーブルに紐づく受注明細を取得し、その単価の合計を取得します。この時、欲しいのは受注明細のキーである「受注番号:商品コード」ではなく、「単価」のため、SELECTを用いて「単価」を取得しています。
SELECT(受注明細[単価],[受注番号]=[_THISROW].[受注番号])
主な使い所:
- 他のテーブルから条件付きでデータを取得したいとき。
- 特定の列の値だけを取り出したいとき。
2. FILTER()
特性:
- 指定したテーブルから条件に一致する「行」のキー値を取得します。
- そのまま参照テーブルに紐づけて使用しやすい形式。
- 結果として「キー値のリスト」を返します。
構文:
FILTER(テーブル名, 条件式)
使用例:
- 条件に合うすべてのキーを取得する場合
受注テーブルの中で、現在の行の顧客ID
に一致する顧客備考のキーLISTを取得します。
FILTER(“顧客備考”,[顧客ID]=[_THISROW].[顧客ID])
主な使い所:
- 他テーブルのレコードを条件付きでリレーション構築したい場合。
- キー値を使って直接他のテーブルのデータにアクセスするとき。
3. REF_ROWS()
特性:
- 他のテーブルの「参照(Ref)」によるリレーションから、自動的に関連付けられた行を取得します。
SELECT()
やFILTER()
を明示的に記述する必要がないため、効率的。- 結果として「キー値のリスト」を返します。
構文:
REF_ROWS("テーブル名", "Ref列名")
使用例:
- 関連するレコードを自動取得する場合
受注テーブルの受注番号
列を参照し、現在の行に関連付けられた受注明細のキーを取得します。
REF_ROWS("受注明細", "受注番号")
主な使い所:
- テーブル間のリレーションがすでに定義されている場合。
- 親テーブルから子テーブルの関連レコードを簡単に取得したいとき。
まとめ
いかがでしょうか?
AppSheetを作成する際の参考になれば幸いです。
コメントを残す