総計とは?
ワークシート内の列・行単位の総計を表示する機能です。
合計値を別ワークシートで出さなくて済むので活用する場面も多いかと思います。
メニューバー→分析→合計→(列・行)の総計を表示
で表示可能です。
計算方法を「自動」で設定すると、指定した列・行の単位を無視して指定された計算してくれます。
以下は個別のカウント(COUND)を使用した時の総計の結果
総計で困ったこと
以前、各製品に対し、特定の日にその製品を販売した「店舗数」を、特定の日に販売の実績があった「全店舗数」で割った値を「納品率」として表示してほしいという依頼がありました。
全店舗数の計算に工夫が必要となります。
各日付毎については
{FIXED[日付]:COUNTD([店舗名])}
とすればよいですが、この計算に対して総計を行うと各日付毎の値に対して集計処理を行うことになり、計算が合わなくなります。
そのため、総計と各日付ごとで処理を分ける必要があります。
解決案
日付のカウント数が1の時には日付毎の個別のカウント、2以上の時は日付も無視した個別のカウント、という分岐をすることで総計の処理を変更することを考えます。
これにより製品「AA」「BB」は全店舗数の使い分けが出来るようになりました。
ただし製品「CC」は2021/10/01しか実績がないため総計でも日付の個別のカウントが1という扱いになってしまいますので、分岐しません。そのため、手順としては必ず日付が入るように設定します。
実施手順
Tableau Prepで処理を行います。
集計でグループ化したフィールドを「店舗名」「製品」に設定し、そのデータをユニオンしたものを出力します。
このデータをTableauに接続します。
計算フィールド「日付の個数」を作成(NULLの日付はダミーで1900年などのありえない日付としてカウントする)。
COUNTD(IFNULL([日付],DATE("1900/1/1")))
計算フィールド「店舗数」を作成(ダミー行の店舗数をカウントしないためにNULLの判定がついている)
COUNTD(IF NOT(ISNULL([日付])) THEN [店舗名]END)
計算フィールド「全店舗数」を作成(ダミー行の店舗数をカウントしないためにNULLの判定がついている)
IF [日付の個数]=1 THEN SOM({FIXED[日付]:COUNTD([店舗名])})
ELSE SUM({FIXED:COUNTD(
IF NOT(ISNULL([日付])) THEN
[店舗名]
END
)})
END
計算フィールド「納品率」を作成
[店舗数]/[全店舗数]
クロス集計表を作成。
NULLを選択し、非表示にする。
正しい表が得られる。
日付のフィルターを使用する場合は必ず「NULL値を含める」にチェックを入れ、コンテキストに追加の設定を行うこと。
終わりに
総計は便利ですが計算が複雑になると意図しない変わった数を返すことが多くあるため注意が必要です。
総計に入るディメンションの数を使用した分岐により上手く制御する方法を紹介しました。是非ご活用ください。