こんにちは。Turtleです。

ぼくは最近念願のランニングシューズを手に入れてランニングをそれなりにしているのだけど、昨日、面白いことに気が付いた。ランニング中とランニング後のしばらくの間、慣れ親しんだ楽曲がいつもよりテンポが遅く聴こえたのだ。

「これはきっと何かあるに違いない!」と思い、帰って調べてみると、面白い記事が結構出てくる。どうやらこれは偶然ではないらしい。(なぜ今まで気が付かなかったのだろうか…それとも気付いても何とも思わなかったのだろうか…)ここでは長くなるから内容については触れないのだけれど、記事をひとつ載せておくので、興味がある方はぜひ読んでほしい。

「If your music appears to slow down when you exercise, this is what could be happening in your brain」/ BUSINESS INSIDER (2017.09.22)

…さて、話は変わるが今回はCASE関数の紹介。

【Formula】IF関数を使って条件分岐する をまだ読んでいない方は先にこちらから。
ここでの内容がところどころ出てくるので…
今回使用するデータもこちらの記事でダウンロードできます。

1. CASE関数

まずは基本となるテーブルの準備。ピポットで
行:「[顧客No.]」 値:「[Total 購入金額]」を指定する。

前回はIF関数を使ったが、今回はCASE関数を使って、値がNULLのところに “0” と表示していく。

早速、CASE関数の使い方を確認してみよう。
先程のテーブルから 値→追加→数式エディタでCASEの説明欄を表示する。


CASE関数は以下のような使い方をする。

CASE
WHEN <条件> THEN <結果> […] [ELSE <結果>] END

この説明欄の書き方だと少しややこしく見えるかもしれないが、使い方はIF関数以上にシンプル。(個人的には)

説明欄の下にあるサンプルを見てみよう。
おそらく、こちらを見たほうがピンとくる方が多いのではないだろうか。微妙に日本語訳されてしまっているが、サンプルのCASE文は以下のようになっているはず。

CASE
WHEN SUM(Sales) < 100 THEN 1
WHEN SUM(Sales) < 1000 THEN 2
ELSE 3
END

このサンプルの式は、
SUM(Sales) が 100 未満のときは 1 と表示
SUM(Sales) が 1000 未満のときは 2 と表示
それ以外のとき(SUM(Sales)が1000以上)は 3 と表示
という意味になっている。

CASE関数のポイントは以下の3つ。
1. 必ず “CASE” で始めて “END” で終わる
2. 必ず 「WHEN <条件> THEN <結果>」と書く(WHENとTHENはセット)
3. “ELSE” で「それ以外のときは〇〇」と書くことができる

では、さっそく使ってみよう。

1-1. NULLに値を表示する

それでは、IF関数の時と同様に、[Total 購入金額] が NULLのときに 0 と表示する式をつくっていく。

数式エディタで、

CASE
WHEN ISNULL ([Total 購入金額]) THEN 0
ELSE [Total 購入金額]
END

と入力して OKを押そう。

ちなみに ISNULL関数は、ISNULL(<数値>)という形で使用して、括弧内の値がNULLの時に TRUE を返す関数だったね。

以下のように、NULLだったところに “0” と表示することができた!

ちなみに、ELSEは必ず使わなければいけないわけではない。以下のように、WHEN <条件> THEN <結果> だけで書くこともできる。

1-2. 購入金額に応じてポイントを算出する

違うパターンでもCASE関数に慣れていこう。

購入金額に応じてポイントを付与するとする。
5000円以上は5%、3000円以上は3%、3000円未満は2%とするときのポイント値を、CASE関数を使って算出してみよう。(実際に自分で数式を考えてみてね)

 

正解の数式と値はこちら。

CASE
WHEN [Total 購入金額] >= 5000 THEN [Total 購入金額]*0.05
WHEN [Total 購入金額] >= 3000 THEN [Total 購入金額]*0.03
ELSE [Total 購入金額]*0.02
END

同じ内容の条件式を、IF関数を使うと以下のように書かなくてはならない。

IF([Total 購入金額]>=5000, [Total 購入金額]*0.05,
IF([Total 購入金額]>=3000, [Total 購入金額]*0.03, [Total 購入金額]*0.02))

…ちょっとわかりにくいね。
CASE文の方が、見た目がすっきりしていてわかりやすいと思う。

話を戻して。
これでポイントを算出できたわけだけど、せっかくなのであと少し。
ポイントを整数値にしてみよう。

数値を整数値にする関数は以下の2つ。

FLOOR(<数値>) … 小数点以下切り下げ
CEILING(<数値>)… 小数点以下切り上げ

これらを使って、先程算出したポイントを整数値にしてみよう。
先程作成した「ポイント」を複製する。

複製してできた「ポイント (1)」を「ポイント (小数点以下切り捨て) 」に変更。
鉛筆マークをクリックして数式エディタを開き、
THEN の後の部分を FLOOR() の括弧内に入れて、OKを押す。


以下のように、小数点以下が切り下げられた整数値のポイントが表示されるはずだ。


同じような流れで、FLOOR CEILING に変えれば、小数点以下を切り上げたポイントを算出することが出来る。是非やってみてほしい。

2.まとめ

今回は、CASE関数を使用した条件文について解説した。IF関数と比べてどのように感じただろうか。個人的にはIF関数よりも見た目がすっきりしていて気に入っている。

CASE関数の使い方は以下の通り。

CASE
WHEN <条件> THEN <結果> […] [ELSE <結果>] END

CASE関数の3つのポイント
1. 必ず “CASE” で始めて “END” で終わる
2. 必ず 「WHEN <条件> THEN <結果>」と書く(WHENとTHENはセット)
3. “ELSE” で「それ以外のときは〇〇」と書くことができる

いろいろな場面で使ってみてください!

それでは。

この記事が気に入ったら
いいね ! しよう