Tableau – 条件に合致するレコードの数をカウントする方法(ExcelのCOUNTIF、COUNTIFS)
Tableauには、ExcelでいうところのCOUNTIF()やCOUNTIFS()に相当する関数が存在しません。
ただし、同様の計算は関数を組み合わせることで、簡単に実現できます。
実際にやってみましょう。
使用データ
サンプルスーパーストア
作成方法
IF文とSUM関数を使って以下のような計算フィールドを作成します。
SUM ( IF <条件式> THEN 1 ELSE 0 END )
- まず、特定の条件に合致する場合には1, 含まない場合は0をフラグつけ
- それらの値をSUMで合計
すると、該当する行数分の1を合計することにで、結果として行数が算出されます。
以下のような計算式を作っても結果は同じになります。
SUM ( IIF ( <条件式> , 1, 0 ))
COUNT ( IF <条件式> THEN 1 END )
1つ目は、IF文をIIF関数でシンプルに記載した例です。
2つ目は、SUMではなくCOUNT集計しています。条件に当てはまらない場合には値をセットしていない、つまりNULLになるので、COUNT関数で集計することで、該当する行数のみを数えることができます(NULLの行は無視されるため)。
使用例
実際にやってみましょう。
今回は、「製品名」に特定の文字列が含まれるもののみをカウントしてみます。
行に「製品名」を配置してみてください。スクロールしていくと、「イケア」の文字列を含んだ製品があるのがわかります。
この行数をカウントしてみます。
計算フィールドで計算式を作成します。
SUM ( IF CONTAINS([製品名], ‘イケア’ ) THEN 1 ELSE 0 END )
新しいシートを開き、作成した計算フィールドを行に、「オーダー日」をCtrl(macはoptionキー)を推しながら列に配置します。
連続の「月(オーダー日)」にしましょう。
各月のイケア製品の販売回数を折れ線グラフで表示できました。
ユニークカウントするには
先ほどの例は単純に「イケア」と付いた製品名を注文テーブルからカウントしたので、全体で何回注文されたかを集計した形です。
そうではなく、「イケア製品」の種類数を数える(ユニークカウントする)にはどうすれば良いでしょうか。
先ほどの計算式を少し変更すれば計算できます。
COUNTD ( IF CONTAINS(<カラム名>, ‘文字列’) THEN <カラム名> END )
- IF文で条件に合致した際に1を返すのではなくカラム名を返す
- 集計をCOUNTD()にしてユニークカウントする
という形です。
こちらも実際にやってみましょう。
以下のように計算フィールドを作成します。
COUNTD ( IF CONTAINS([製品名], ‘イケア’) THEN [製品名] END )
わかりやすく表示するために、行に「カテゴリ」「サブカテゴリ」を配置します。
そして、作成した計算フィールドをマーク欄の「テキスト」に配置します。
イケア製品は、本棚で22種類あるということがわかりました。
複数条件への対応方法(COUNTIFS)
条件が複数あるケースではどうでしょう。ExcelのCOUNTIFS()関数に相当するものです。
こちらも、先程のIF文で条件にANDやOR演算子を追加すれば、簡単に実現することができます。
SUM(IF <条件式1> AND <条件式2> THEN 1 ELSE 0 END)
例えば今回の文字列検索でいうと、
SUM(IF CONTAINS(<カラム名>, ‘文字列1’) OR CONTAINS(<カラム名>, ‘文字列2’ THEN 1 ELSE 0 END)
という形にすれば、複数の文字列をOR検索することができますね。
いかがでしたか。
今回は、TableauでExcelのCOUNTIFやCOUNTIFSと同じ計算を行なう方法を説明しました。
TableauのQAにも同様の内容がありますので、こちらも参照してみてください。
https://kb.tableau.com/articles/howto/counting-occurrences-of-a-string-within-a-dimension?lang=ja-jp