
【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行ごとに商品カテゴリーを確認する
「食品」なら、その行の売上を返す
それ以外なら、0を返す
最後に、それらの値を合計する
例えば、食品の売上が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を学んでいきましょう!