Skip to main content

お世話になります。

どうしても解決できない問題が発生しており、ご教示いただきたく思います。

※TableauDesktopは10.1.9 (10100.17.0614.1935) 32 ビット を使用して作成しました。

 

プライマリデータソースの項目「金額」に、セカンダリデータソースの「上限幅」「下限幅」を加算し、

 

各月の上下限値を折れ線グラフで表現する、以下のようなシートを作成しようとしています。

折れ線グラフと棒グラフの結果が異なる

 

しかし、グラフの種類を棒グラフとした場合、異なる結果となります。

(2,4月に出ていた上下限値が出ていない)

%E5%95%8F%E5%90%88%E3%81%9B_2.png

 

データ上は、プライマリデータソースの各月の結合項目に対して、セカンダリデータソースの対応するデータが3月分しか無いので、

 

棒グラフ側の2、4月に上下限値が出ていない結果が正しい状況となっています。

(2、4月には、プライマリとセカンダリで「結合項目」に一致するデータが無いのに、線グラフでは上下限幅が金額に加算された値が出力されている。)

 

%E5%95%8F%E5%90%88%E3%81%9B_3.png%E5%95%8F%E5%90%88%E3%81%9B_4.png

 

グラフの種類は線グラフとしたまま、棒グラフと同等の結果を表示するようにできないでしょうか。

 

このシートは以下のように作成しています。

①プライマリデータソースとなる「データ1.xlsx」を読み込む。

 

②セカンダリデータソースとなる「データ2-1.xlsx」を読み込み、ユニオンで「データ2-2.xlsx」と結合する。

%E5%95%8F%E5%90%88%E3%81%9B_5.png

③プライマリとセカンダリのリレーションシップは「月」と「結合項目」とする。

%E5%95%8F%E5%90%88%E3%81%9B_6.png

④計算フィールド「金額(上限値)」「金額(下限値)」を作成。

%E5%95%8F%E5%90%88%E3%81%9B_7.png

⑤列にプライマリの「月」を設定。

 

⑥行に「メジャーバリュー」を設定し、表示する項目として「金額」「金額(上限値)」「金額(下限値)」を設定。

 

⑦グラフの種類を「線」や「棒」にする。

 

以上、よろしくお願いします。

11 件の回答
  1. 2017年11月16日 4:00

    MIYOSHIさん

     

    こちら、昔からあるTableauのバグですね…。

    Tableauの描画ロジックとブレンド時集計ロジックの間でうまく折り合いがつかないらしく、根本的な解決が難しいようです。

     

    <本事象が発生する条件>

    ・線グラフ、もしくはエリアチャート

    ・ブレンド時、セカンダリデータソースからのメジャーを使用

    ・ブレンド時、リレーションを設定している項目間で、「一方のデータソースには存在するがもう一方のデータソースには存在しない」メンバーが存在する

     

    <ざっくりとした原因のご説明>

    ※私もコードの中身まで理解しているわけではないので、処理順序等はあまり深く考えずに読んでいただければ幸いです…。

     

    ・線グラフもしくはエリアチャートが選択された場合は、「隣り合うメンバーとどのように繋ぐか」を描画プロセスの中で決定しなければならない

    ・今回であれば、結合項目A,B,Cが存在する3月を基準に、隣り合うメンバー=2月と4月はどこにプロットするかを探す

    ・プライマリには、2月と4月には結合項目が存在しない(Null)→ では2月&Aのレコード、2月&Bのレコード、2月&Cのレコード…を、ブレンド前にプライマリ側に作ってしまえ!

     

    <回避策>

    ・線を結ぶ基準としたい項目(今回であれば「月」)を、明示的に「パス」に配置する(添付ワークブック参照)

     

    むらかみさん、LM-7さんが回答されている通り、値の重複に対処する必要がありますが、結合してしまうのも手だと思います。

    上記回避策は簡単ではあるので、是非試してみてください。

     

    Iizuka

0/9000