キャンバスアプリで「多対一のリレーションシップの複数レベルの展開はサポートされていません」というメッセージが出たので、その原因と対処方法をメモ。
親レコードへのアクセス
キャンバスアプリでDataverseを扱うとき、「.(ドット)」でつなぐことで親テーブルの情報にアクセスできる。



これがかなり便利なんだけど、その更に親のテーブルにアクセスしようとするとエラー「多対一のリレーションシップの複数レベルの展開はサポートされていません」が発生する。
複数レベルの展開


残念ながら「.」でのアクセスでは1つ上のテーブルまでしかアクセスできないようなので、対処方法を考えてみる。
対処1:LookUp関数を使用する
まず1つ目の対処方法はLookUp関数を使用すること。


対処2:計算列を使用する

以下は古い情報なので参考程度に。
+++ 過去記事開始 +++
もう1つはテーブル「ねこ」に計算列を追加する方法。



LookUp関数を使用することで新しい「列」を増やすことなく全ての親の親の情報にアクセスできるけど、ギャラリーとかで表示するとアイテム数分だけDataverseアクセスが発生してしまい、ひょっとしたらパフォーマンスに影響を及ぼすかもしれない。
対して「計算列」を使う方法だと、必要な情報の分だけ「列」を追加しなきゃいけない(しかも計算列でアクセスできるデータ型しか対応できない)けど、親の親へのアクセスはDataverse側でやってくれる(と思う)のでパフォーマンスに影響が出にくい(と思われる)。
どっちを使うかはそのときそのときでの判断になるかなと。
あとは「食事履歴」テーブルに「しもべ」テーブルの検索列を持たせる方法もあるけど、これも情報の二重管理になるのでそのときの判断かなと。
コメント