いつもフォーラム拝見して参考にさせていただいております。
Appsheetの魅力にハマってしまい、試行錯誤しながらスキルを高めて行っています。
今回、どうしても自力で解決できない問題がありまして
お力をお貸しいただきたく投稿させていただきました。
●作成中のアプリ
人員管理をするためのアプリ
・テーブル1:社員リスト
・テーブル2:変更履歴(役職、所属、雇用形態)
・テーブル3:資格取得履歴
●解決できない問題点
テーブル1を親テーブルとして、VitualColumnに
テーブル2の変更履歴の情報を表示させたいと思っています。
・5/13にAさんという人が、昇進し部長になった
テーブル1のAさんの役職VCデータには部長と表示される
・5/14にAさんの所属部署が営業部に変更になった
テーブル1のAさんの所属VCデータには営業部と表示される
というようにしたいのですが、どうやってもできません。
いろんな数式パターン試したのですが、壁にぶつかってしまいます。
よろしければお教えください。
よろしくお願いいたします。
下記がテーブル構造です。
★社員
★変更履歴
Tsuji さま
お返事ありがとうございますm(__)m
BOTを使った自動ログすごいですね! この自動ログは他の作成中のアプリでも使えそうなので
さっそくやってみようと思います。
BOTはいままでメールを飛ばすぐらいしか使ってないので
チャレンジしてみます。
いつもありがとうございますm(__)m
現在のアプローチでは、変更ログをマニュアルで入力してレコードを複数作成していくこととなりますが、全く異なるアプローチも有効です。BOT(旧WORKFLOW)を用いて、現在VCで作成している親のレコードのカラムをPhysical化し、役職やその他のカラムを保存。いずれかのカラムの値が変更されるEventをBOTに察知させ、変更ログにレコードを追加して記録。役職や部署などの変更があるたびに自動的にログを保存してくれますのでログの取得の自動化の達成です。BOTについても学習機会が有りましたら研究してみることをお勧めします。
Tsuji 様
追加コメントありがとうございました。
教えていただいたとおりにしたら、同じ結果になりました。
結果を取得するVCが
[役員変更KEY].[役職]
これだけシンプルにできるんですね!
Appsheetはほんとに素晴らしいツールですね。
Salesforceもかなり独学で頑張って勉強しましたが
Appsheetのほうが直感的で奥深く楽しいです。
いつもフォーラムを参考に勉強させていただいています。
いつもありがとうございますm(__)m
Great job!です。
AppSheetは極めてパワフルなツールなので、当初のアプローチのまま進まれても問題解決することができたかと思いますが、同じゴールにたどり着くためにはより効率的な近道も準備されている、というのが面白い点です。
コメントを加えますと、2の役員変更(直近)のレコードのKEYを呼び出す部分。
SELECT(変更履歴DB[変更履歴ID],AND([変更日]=[_thisrow].[役職変更日],[名前]=[_thisrow].[社員ID]))
でOKですが、更に効率化するとこのExpressionをANYでWRAPします。
ANY(SELECT(変更履歴DB[変更履歴ID],AND([変更日]=[_thisrow].[役職変更日],[名前]=[_thisrow].[社員ID])))
とAppFormulaを設定し、COLUMNタイプをREFに設定し、参照先を変更履歴テーブルに指定。VC名は役員変更KEYのままとします。
別途最新の役員名を取得するカラム、VCを設置します。3の関数に当たるところですが、単純に
[役員変更KEY].[役職]
というDEFER関数で最新の役職名を呼び出せます。
一連のVCとそのExpressionを更にシンプルに効率化するアプローチです。
但し、現在設定されたExpressionでも結果は全く同じです。
Tsuji 様
いつもありがとうございます。
ご返信いただいてから、内容をよく解読しました。
最初はさっぱりわからなかったのですが、試行錯誤しながら
一つ一つ段階を追ってやったらできました!
答えをもらうよりアプローチ方法を教えてもらったほうが
自分のためになりますね。
丁寧に教えてくださってありがとうございます。
これでまた一つスキルアップできました。
あってるかどうかわかりませんが、同じようなところで
つまづく方の参考になればと思い、下記に方法を記載しておきます。
1、親テーブルにVCを作成する VC名:役員変更日
FORMULA欄に、子テーブルの最新変更日を取得する計算式を入れる
※役職変更の変更理由は昇格と降格にしています。
max(select(変更履歴DB[変更日],AND([名前]=[_thisrow].[社員ID],OR([変更理由]="昇格",[変更理由]="降格" ))))
これで、役職を変更した最新日が取得できました。
2、親テーブルにVCを作成する VC名:役員変更KEY
FORMULA欄に、子テーブルの役職変更日の属するKEYを取得する計算式を入れる
SELECT(変更履歴DB[変更履歴ID],AND([変更日]=[_thisrow].[役職変更日],[名前]=[_thisrow].[社員ID]))
これで、子テーブルの該当KEYが取得できました。
3、親テーブルにVCを作成する VC名:役職
FORMULA欄に、2で取得したKEYをもとに子テーブルの役職を取得する計算式を入れる
select(変更履歴DB[役職],IN([変更履歴ID],[_thisrow].[Related 変更履歴DBs]))
これで役職名が取得できました。
名前、役職、所属、雇用形態などいずれかに変動が有った場合、そのログ・記録を目的として変更履歴のテーブルでその情報を管理していることと理解しました。変更があった際のデータの持たせ方ですが、直近の最新の情報を含めて新たしいレコードを作成。親テーブルに持ち上げてくる子レコードの情報は、変更日の日付が最新(MAX)というロジックを使い、子レコードにある最新の日付のレコードを別途VCを利用してKEYを抽出。REFタイプに設定。
そのVCを参照し、Dereference関数を使って、親レコードに最新の情報(部署や所属など)をこちらもVCを使って計算して表示させるアプローチがもっとも効率的、且つ一般的な手法です。