Skip to main content

お世話になっております。

添付したファイルは、利益率の累積値が積立棒グラフに記載されているワークシートになります。この利益率の累積値を月日ごとに加算してグラフの中に表示する方法を現在検討中です。

現在計算中なのですが、うまくいきません。どのように計算したらよいでしょうか?

 

EX)12月の場合

・事務用品

158.3% 

・家電

158.3% + 140.8% =299.1%

・家具

 158.3% + 140.8% + 138.3% =437.4%

 

◆計算式

IF DATEPART('month', [オーダー日])=12 AND CONTAINS([カテゴリ],"〇〇〇") THEN [利益率] 

END

→「集計、非集計は混合できないエラーが発生してしまう」

2 commenti
  1. 18 dic 2021, 23:37

    12月だけカテゴリ累計を表示したいのでしょうか、それとも全ての月に表示したいのでしょうか?

    いずれであったとしても「先に全ての月で計算→あとで必要な月だけ表示」とできるので、その方法を載せておきます。

    今回のように、表計算の範囲や方向が異なる場合は表計算の計算フィールドを分けて作成します。​

    12月だけカテゴリ累計を表示したいのでしょうか、それとも全ての月に表示したいのでしょうか?いずれであったとしても「先に全ての月で計算→あとで必要な月だけ表示」とできるので、その方法を載せておきます。​今回のように、表計算の範囲や方向が異なる場合は表計算の計算フィールドを分けて作成します。​​まず月ごとの累計ですが、これは既に簡易表計算で計算しているのでそれをそのまま流用した計算フィールドを作成しま

    まず月ごとの累計ですが、これは既に簡易表計算で計算しているのでそれをそのまま流用した計算フィールドを作成します。

    image

    次にこの月次累計をカテゴリ間で(グラフで見ると縦方向に)累計します。これはまた別の新しい計算フィールドで作成します。

    image

    こうして作成したカテゴリ累計のフィールドをマークのラベルに配置し、表計算の「次を使用して計算」を編集します。

    2つの表計算が​行われているので、月次累計では月を、カテゴリ累計ではカテゴリをそれぞれ指定します。

    (表計算の編集画面内の一番上にあるネストされた計算のところは、クリックすることで編集対象の表計算を切り替えられます)​

    imageimage

    但し、このままでは累計の方向が想定とは逆になります。これは、Tableauが現在認識しているカテゴリの並びが「家具→家電→事務用品」なのに対して、ご指定の例では「事務用品→家電→家具」となっているためです。

    image

    この順序を制御する方法は2つあり、色に置いているカテゴリのディメンションを降順にするか、表計算内でカスタムソートを使用します。カテゴリのディメンションを降順にする場合、次の図のように積み上げるグラフの順番も変わります。それでも構わないのであれば、ディメンションを降順にしてしまうのが早い方法です。

    gifgif (86)

    しかし、この積み上げ順を変えたくない・変えられないという場合もあると思います。そのような場合は表計算の編集画面上でカスタムソートを行います。カテゴリ累計の表計算の編集で、下の方にあるソートを次の図のように指定します。こうすることによってグラフの色の並びを変えることなく、表計算の計算上でだけ「事務用品→家電→家具」の順番で累計を行うことができます。

    image

    ここまでで全てのグラフにカテゴリ累計の数字が表示されているはずです。最後にこれを12月だけ表示する方法ですが、これはもうひとつ計算フィールドを作成します。おそらく「集計と非集計が混在~~」というエラーはここで出ていると思います。Tableauではひとつの計算式の中で集計されたフィールドと集計されていない(非集計の)フィールドを混在させることができません。ここでいう「集計」とは、SUMやMINのような「複数レコードの情報を使用する計算」のことです。オーダー日の月を抜き出す部分はレコードレベルで判定されているので非集計ですが、カテゴリ累計は複数のレコードを月単位で集計し、さらにそれを累計している集計フィールドです。このように集計と非集計が混在しているとエラーがでます。解消法としては「非集計に揃える」か「集計に揃える」のいずれかとなりますが、今回のように表計算が含まれる場合は「集計に揃える」ことになります。すなわちオーダー日の月を集計する必要があります。次の図の例ではATTR関数を使用して集計しています。これはMINやMAXでも(今回のケースでは)同じ結果になります。こうすることでエラーを回避することが出来ます。

    image

    <12月だけ表示した状態>

    image

0/9000