山奥の自宅勤務エンジニアブログ

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

試験結果を受けての補修

某先輩と食った焼きそば情報を登録して、評価して、レポートや情報を閲覧する、といったサンプルアプリを今作成中です。
このアプリを使って、テストで知識が怪しかったところを復習するのに使おうかと思います。

積み上げ集計項目について

f:id:sessan:20101003154628j:image
参照関係でも積み上げ集計はできるかと思っていましたが、主従関係でないと積み上げ集計項目を使えないようです。
焼きそば、というオブジェクトと焼きそば評価というオブジェクトを参照関係を使って1対多の関係としていましたが、参照関係では積み上げ集計項目が使えないと言われました。(上の図)
f:id:sessan:20101003161641j:image
焼きそばと焼きそば評価の関係を主従関係に変更して、積み上げ集計項目を設定すると上の図のようにウィザードで設定できる。
合計、件数、最大値、最小値しか登録できないのか。
平均点を表示したいのだけど、積み上げ集計項目は使えないようだ。数式を使うのかな。

数式について

主従関係にある従レコードでは主オブジェクトの項目を参照できるが、主レコード側では従オブジェクトの項目を数式で(積み上げ集計項目的に使った)参照はできないみたい。
というわけで、焼きそば評価オブジェクトの平均点を数式だけで実装するのはできない。
じゃあ、どうやって平均点を表示すればいいかというと、積み上げ集計項目で、集計対象オブジェクトの合計値と件数を計算しておいて、そのあと、数式項目で合計値/件数を計算すればいいみたい。

http://img.f.hatena.ne.jp/images/fotolife/s/sessan/20101003/20101003164440_original.jpg:image:w500
上の画像のように数式で使いたい項目を選択できるのだけど、従レコードは選択肢として出てこなかった。
http://img.f.hatena.ne.jp/images/fotolife/s/sessan/20101003/20101003165727_original.jpg:image:w500
逆に、上の図のように主従関係の従レコードでは親レコードの情報を数式で参照して表示することができる。
平均値を単純に、

sessan__ScoreTotal__c / sessan__NumberOfReview__c

のように計算すると焼きそばを登録後、評価がない場合に画面表示がエラーとなる。(たぶん、分母が0だから。)
これを防ぐために平均値を計算する数式は、以下のようにした。

IF (sessan__umberOfReview__c =0 , NULL ,  sessan__ScoreTotal__c / sessan__NumberOfReview__c )

分母が0のときは、NULLを返すようにして、そうでないときは普通に平均値を計算する。
ちなみに画面上に表示する項目がNULLのときは、画面に“NULL”とはでず空白となる。