2023年10月6日金曜日

積み上げチャートのシリーズおよびラベル列にNULLが含まれる際の対応

以前の記事「カレンダとレポートを連携させる」で作成したアプリケーションに、タスクの担当者(列ASSIGNED_TO)のステータス(列STATUS)の積み上げチャートのページを追加します。

ページの作成をクリックします。


チャートを選択します。


積み上げのバー・チャートは選択肢に含まれていないため、バーを選択します。


ページの名前担当者ステータスとします。データ・ソース表/ビューの名前にプロジェクトのデータが含まれる表SAMP_PROJECTSを指定します。

へ進みます。


チャート・タイプ向き垂直を選びます。

ラベル列(横軸)としてASSIGNED_TO (Varchar2)を選択します。値集計件数とします。積み上げるためのシリーズには列STATUSを使用しますが、このウィザードでは指定できません。チャートのページを作成した後に設定します。

ページの作成をクリックします。


ページが作成されます。

積み上げチャートにするためリージョン担当者別ステータスを選択し、プロパティ・エディタ属性を開きます。

外観積上げオン凡例表示オンにします。


シリーズ(今回の例ではシリーズ1)を選択し、列のマッピングシリーズ名としてSTATUSを設定します。


作成したチャートを表示します。

チャートの表示に利用している列にNULLは含まれていないので、想定どおりのチャートが表示されます。


ここで列STATUSのClosedのステータスをNULLに更新します。SQLコマンドより、以下のSQLを実行します。

update samp_projects set status = null where status = 'Closed';


チャートの表示に戻ります。

ラベルにグループXXといった不明な表示が増えています。


シリーズソースSQL問合せに変更し、値にNULLが含まれる対応をしようとすると、列のマッピングより値集計が無くなります。そのため、ソースのSELECT文で値の集計を行なう(GROUP BYを使ったSELECT文を記述する)必要が出てきます。


これは大変なので、代わりに以下ようなビューSAMP_PROJECTS_Vを作成します。

列ASSIGNED_TOおよびSTATUSがNULLの場合、NULLの代わりにCOALESCEファンクションを使って別の値に置き換えています。

create view samp_projects_v
as
select
    coalesce(assigned_to, '未アサイン') assigned_to,
    coalesce(status, 'クローズ') status
from samp_projects
リージョン担当者別ステータスソース表名SAMP_PROJECTSからSAMP_PROJECTS_Vに置き換えます。


列STATUSにNULLが含まれていないため、チャートが想定通りに表示されるようになります。


列にNULLが含まれるためにチャートやレポートがうまく表示されない、といった場合、今回のようにビューを作成して対応することができます。

以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。