AppSheetのRefがよくわからなかったが、「Google Workspaceで始めるノーコード活用入門」でRefについて少し述べられていて、いろいろ試した結果の理解をまとめます。現在の理解は以下
- テーブルを参照する際、紐づけるためのカラム名は同一でなくても良い
- Refで設定して参照先のテーブル(親)と親子関係が結ばれる時、Keyの属性の付いたカラムが使われる。(名前が異なっていても、Key属性が付いたカラムを使って親子の対応関係が作られる)*1
- Virtualカラム等で、 [ID].[ADDR]で、親のADDRが得られます等と説明があるが、、この[ID]は子のテーブルのカラムであり、ドットから後ろの.[ADDR]は紐づけされた親のテーブルのカラム*2
上記のように、REQ_ERカラムにRef(名簿テーブル)と設定すると、名簿テーブルのKEY属性であるP_IDと [REQ_ER]の値で親子の対応関係が作られる(と理解)
また、このような親子の対応関係が作られると、Virtualカラムで=[ACK].[P_ADDR]とすると、子のテーブルのカラム[ACK]と一致する名簿テーブルのレコードが引かれ、該当レコードの[P_ADDR]が取得されると理解しました(8/7の時点の理解度)
AppSheetでの以下の表記は
= [ACK].[P_ADDR]
SQL文風に書くと以下と理解しました(クオートとか変数とか適当です)
SELECT P_ADDR from 名簿テーブル where P_ID = $ACK;
AppSheetの関数で表現すると以下と思っています(テスト不十分)
select( 名簿テーブル[P_ADDR], ( [P_ID] = [_THISROW].[ACK] ))
※自分の理解が間違って、嘘まき散らかしていたら申し訳ないです
■追記
親子関係のテーブルに対してselect文を使う時、一致条件のカラム指定では、テーブル名の指定が不要なようであった。両方のテーブルにおいてカラム名が重複する場合もあるので、テーブル名を修飾する方法もあるのでは?と思えるのだが*3。
Documentによると、 条件文はデータセットに対して行われると書かれている。逆参照したければ、_THISROWを指定しろと((逆参照というのがちょっとよくわかりませんが、ごちゃまぜになってしまったデータセットに対して、値を逆にたどって、作られた元のレコードにたどり着き、そのレコードのカラムを参照するという感じでしょうか。。(親のテーブルに追加されている、REF_ROWSを使って子どものテーブル(レコード)に到達するのだろうか。。)))。
2 番目の引数であるselect-row?式内では、すべての列参照は、式が実行されるデータ セットの観点からではなく、 検索されるデータ セットの観点から解釈されます。現在の行から列を参照するには、 逆参照 _THISROWする必要があります。
だから、、VirtualColumに書く場合は、以下の形式になると思われる。(仮に、親と子で同じカラム名(UID)を使っている場合)
select(名簿[PNAME], ([UID] = [_THISROW].[UID]))
■参考URL
support.google.com