メインコンテンツへスキップ
見出し画像
Photo bynyakopan

【Tableau】第5回:【集計の理解】エラー「集計と非集計は混在できません」を完全攻略する10選

    🔍 はじめに

    おはようございます。

    3連休後でまだぼんやりしていますが、早速、第5回スタート!

    今回は、Tableau初心者が一度はつまずく、あのエラーについてです。

    「集計と非集計は混在できません」

    計算フィールドを作成していて、このエラーが出たことはありませんか?

    私は最初、このメッセージを見ても、何が問題なのかよく分かりませんでした。

    SUM や AVG は見たことがあるけれど、集計と非集計の何が違うの?

    なぜ、同じ計算式の中で一緒に使えないの?

    今回は、そんな疑問を解消していきます。

    • 集計:複数のデータをまとめて計算する

    • 非集計:データ1行ごとに計算する

    この違いが分かると、エラーの原因を見つけやすくなります。

    今回も、実際の計算式を見ながら整理していきましょう!



    1. SUM

    数値を合計する

    まずは、基本中の基本である SUM です。

    SUM は、指定した数値を合計する関数です。

    例えば、次のような売上データがあるとします。

    商品  売上 
    A商品  100 
    B商品  200 
    C商品  300

    このとき、

    SUM([売上])

    とすると、売上の合計である「600」が返されます。

    一方、データ1行ごとの [売上] は、それぞれ100、200、300という値です。

    つまり、

    • [売上] → 1行ごとの売上

    • SUM([売上]) → 売上の合計

    という違いがあります。

    同じ売上という項目でも、書き方によって扱いが変わるのです。

    まずは、この違いを覚えておきましょう。


    2. AVG

    平均を求める

    AVG は、指定した数値の平均を求める関数です。

    例えば、

    AVG([売上])

    とすると、先ほどのデータでは、

    (100+200+300)÷3=200

    となります。

    ここで注意したいのが、AVG も SUM と同じく集計だということです。

    • [売上] → 1行ごとの売上

    • AVG([売上]) → 売上の平均

    となります。

    SUM は合計、AVG は平均。

    どちらも複数のデータをまとめて計算する関数です。


    3. COUNT

    データの件数を数える

    COUNT は、指定した項目のうち、NULLではない値の件数を数える関数です。

    例えば、顧客IDが次のようになっているとします。

    顧客ID
    A001
    A002
    A003

    このとき、

    COUNT([顧客ID])

    とすると、結果は「3」です。

    COUNT も集計関数なので、データの件数をまとめて数えます。

    なお、COUNT は同じ値が複数あっても、それぞれ1件として数えます。


    4. COUNTD

    重複を除いて数える

    COUNTD は、指定した項目の重複を除いた件数を数える関数です。

    例えば、次のデータがあるとします。

    顧客ID
    A001
    A001
    A002
    A003

    この場合、

    COUNT([顧客ID])

    は「4」です。

    一方、

    COUNTD([顧客ID])

    は「3」です。

    A001が2回登場していますが、COUNTDでは1人として数えるためです。

    例えば、顧客1人あたりの売上を計算したい場合は、

    SUM([売上]) / COUNTD([顧客ID])

    という計算式が使えます。

    売上の合計を、重複を除いた顧客数で割る計算です。

    SUM も COUNTD も集計関数なので、この式では集計同士を組み合わせています。


    5. MIN

    最小値を求める

    MIN は、指定した値の中から最小値を求める関数です。

    例えば、

    MIN([売上])

    とすると、先ほどのデータでは「100」が返されます。

    MIN も集計関数なので、データ1行ごとの値とは区別して考えます。


    6. MAX

    最大値を求める

    MAX は、指定した値の中から最大値を求める関数です。

    MAX([売上])

    とすると、先ほどのデータでは「300」が返されます。

    MIN が最小値、MAX が最大値です。

    ここまで紹介した6つの関数には、共通点があります。

    それは、どれも集計関数であるということです。

    SUM、AVG、COUNT、COUNTD、MIN、MAX。

    このあたりは、Tableauの計算式でよく登場するので、ぜひ覚えておきたいですね。


    7. 集計と非集計を混ぜるとエラーになる理由

    ここが今回の本題です!

    では、いよいよ問題のエラーを見ていきましょう。

    例えば、次の計算式を作ったとします。

    SUM([売上]) - [利益]

    すると、

    「集計と非集計は混在できません」

    というエラーが発生します。

    なぜでしょうか?

    • SUM([売上]) → 売上の合計なので集計

    • [利益] → データ1行ごとの利益なので非集計

    つまり、集計された値と、1行ごとの値をそのまま組み合わせているのです。

    Tableauでは、このような計算はできません。

    では、どうすればよいのでしょうか?

    例えば、売上の合計から利益の合計を引きたいのであれば、次のように書きます。

    SUM([売上]) - SUM([利益])

    これなら、両方とも集計なのでエラーになりません。

    ただし、計算したい内容によっては、この修正が正しいとは限りません。

    大切なのは、エラーを消すことだけではなく、何を計算したいのかを考えて、集計の単位をそろえることです。


    8. SUMの中で計算する

    1行ごとに計算してから合計する

    次は、少し応用です。

    例えば、商品ごとの売上から原価を引いて、利益を求めたいとします。

    まず、1行ごとの利益を計算するなら、

    [売上] - [原価]

    です。

    これは、各データの売上から原価を引く計算なので、非集計の計算です。

    では、利益の合計を求めたい場合はどうでしょうか?

    SUM([売上] - [原価])

    と書くことができます。

    この式では、1行ごとに売上から原価を引き、その結果を合計します。

    一方、次の式も有効です。

    SUM([売上]) - SUM([原価])

    こちらは、売上の合計から原価の合計を引いています。

    どちらも、通常は同じ結果になります。

    このように、行ごとに計算してから合計するのか、項目ごとに合計してから計算するのかによって、式の書き方を考えられるようになると便利です。


    9. IFと集計を組み合わせる

    条件に合う売上だけを合計する

    IF を使った計算でも、集計と非集計の違いが重要になります。

    例えば、商品カテゴリーが「食品」の売上だけを合計したい場合です。

    次のように書けます。

    SUM(
        IF [商品カテゴリー] = "食品" THEN
            [売上]
        ELSE
            0
        END
    )

    この式は、次の順番で処理されます。

    1. 1行ごとに商品カテゴリーを確認する

    2. 「食品」なら、その行の売上を返す

    3. それ以外なら、0を返す

    4. 最後に、それらの値を合計する

    例えば、食品の売上が100と300、日用品の売上が200だった場合、計算結果は400になります。

    IF の中では、行ごとに条件を判定しています。

    そして、外側の SUM で合計しています。

    一方、次のように書くこともできます。

    IF SUM([売上]) >= 1000000 THEN
        "好調"
    ELSE
        "通常"
    END

    こちらは、売上の合計が100万円以上なら「好調」、それ以外なら「通常」と判定する式です。

    条件の中で SUM を使っているため、合計値を基準に判定できます。

    何を基準に判定したいのか、1行ごとなのか、合計値なのかを考えることが大切です。


    10. 割合を計算するときの考え方

    合計同士で計算する

    最後は、実務でもよく使う割合の計算です。

    例えば、利益率を求めたい場合。

    基本的な考え方は、

    利益 ÷ 売上

    です。

    データ全体の利益率を求めたいなら、次のように書けます。

    SUM([利益]) / SUM([売上])

    一方、次のように書くとエラーになります。

    SUM([利益]) / [売上]

    分子は利益の合計ですが、分母は1行ごとの売上だからです。

    集計と非集計が混在しています。


    🎯 まとめ

    今回は、Tableauでよく見かける「集計と非集計は混在できません」というエラーについて整理しました。

    特に覚えておきたいのは、次の3つです。

    • SUM([売上]) → 売上の合計

    • [売上] → 1行ごとの売上

    • 集計と非集計をそのまま混ぜるとエラーになる

    エラーが出たときは、まず計算式を分解して、集計されている項目と、されていない項目を確認してみましょう。

    そして、計算したい内容に応じて、集計の仕方をそろえます。

    ただし、エラーを消すためにすべての項目を機械的に SUM で囲めばよい、というわけではありません。

    「何を計算したいのか?」

    これを考えることが、正しい計算式を作るための第一歩です。

    ぜひ、実際のデータで試してみてください!


    🗺️ 次回の予告

    次回は、 集計の粒度を固定する「FIXED関数」を、整理していく予定です。

    実際のワークブックで見つけた計算式を題材にしながら、少しずつ理解を深めていきたいと思います。

    それでは、次回も一緒にTableauを学んでいきましょう!


     
     
    会社でDX推進、趣味でiOSアプリ開発をしています。 IT、データ分析、アプリ開発など、知らないことを調べて、試して、失敗して。 そんな日々の学びを記録しています。 VBA Swift Python Tableau RFID

    あなたへのおすすめ