Skip to main content

いつも助けていただいてありがとうございます。

前回質問した内容の続きとなります。

前回の質問:https://community.tableau.com/s/feed/0D54T000019vZAfSAM

アドバイスいただいて作りたいものが完成しました。

今回はフィルターを掛けた時の動きについて質問させていただきたいと思います。​

質問① ​カテゴリのフィルターを掛けた際、空白になる箇所があるのはデータがないから仕方ないことだと思っていますが、この空白を×に変換する方法があれば教えていただきたくお願いいたします。

質問② 個人用シートで​は、Username()を使って自分の分しか見れないようにフィルターを作りました。

例えばTraining11は誰も受けていませんが、フィルターをTraining11のe-learningに絞った場合、表が真っ白になりますが、行のトレーニング名は一覧で出しておくことはできるのでしょうか。やはりデータがないから難しいでしょうか。

以上2つ質問させていただきました。

何卒よろしくお願い申し上げます。​

9 answers
  1. Mar 29, 2022, 3:44 AM

    そして​ (2/2) 本来どうするのが望ましかったか ですが、このスレッドの最初の返信に書いたとおり、「"無い"ことを記録しておく、もしくはそれを検知しやすいデータ構造にしておく」というのが基本です。つまり、今の2つのテーブル(Training List, Completion Status)をその形のままなんとか結合を工夫して力業でどうにかするのではなく、元データを分析や集計の目的に適した形に加工してからそれをデータソースとして読み込むほうが本来は望ましいです。

    ただ、内容によっては加工の手間がかかる、​データベース(カスタムSQLやプロシージャ)で処理しづらい、ソースがパブリッシュされており自分にそれを加工するパーミッションが無いなどの理由でデータソースの加工ができない場合、"やむを得ず"先に挙げたような1=1の完全総当りを実施することもあります。

    前置きが長くなってしまいましたが、ではどのようなデータに加工しておけばよかったかというと、一例としては次のような加工の方法があります。

    1) トレーニングの一覧を用意​(これはTraining ListそのままでOK)

    2) 氏名の一覧を用意(Completion Statusを加工して氏名をユニーク化)

    ​3) 1番と2番を総当りで結合(この時点でトレーニング11種*氏名10種で110レコード)

    4) 3番に対して受講履歴(Completion Status)を左結合

    Tableau Prepでこの加工を行う場合は、次のようなフローになります。

    そして​ (2/2) 本来どうするのが望ましかったか ですが、このスレッドの最初の返信に書いたとおり、「

    加工を終えたデータをTableau Desktopに読み込むと、次のようなデータが確認できます。ここで受講日がNullになっているデータがあります。例えば図中3行目の高橋さんはTraining2の受講履歴がないので受講日がNullのレコードが存在しています。これが"無い"ことを記録するということです。

    image

    このようなデータソースにしておくと、少なくともこのスレッドでご質問いただいているような内容は、わりかし簡単に解消できます。またレコード数は111となり、完全総当りしたときの429を大きく下回ります。サーバー(もしくはローカルエンジン)上でJOINしないのでパフォーマンス・動作速度も向上します。

    ​ワークブックを添付していますので、内容はそちらでご確認ください。(青ラベルのシートが1=1の完全総当りパターン、赤ラベルのシートが加工済みデータソースを利用したパターンです。)

0/9000