こんにちは!YOKOです。
うちのお客様でペット関連のビジネスをしている企業がありまして、PetVoiceをいうスマートウォッチならぬスマート首輪を扱っています。この首輪をつけていると、心拍数・呼吸数・水飲み・トイレ・直腸温などを記録してくれるので、東京にいながらにして、札幌の愛犬の状態がわかるんですよ。
このログデータはクラウド上の蓄積されていて、Qlikで分析できるようにもなっています😉
というわけで、今回はペットのデータを例に記事を書いてみます。
さて、BIっていうのは、データがあるから表示できるのであって、ないものを表示することはできない。
0があるなら表示できるよ。
0もないの。
それは表示できないでしょ〜
って言っても、お客さんは「なんとかして!」って言う。
…そんなことありますよね。
今回は、「ないものを表示する」にチャレンジします。
小ネタですみません🙇♂️
データがないと困る例
犬が2匹います。
「モモ」と「あんず」といいます。
この2匹が1週間で何時におしっこをしたか記録してみました。
そして、このデータをインラインロードで読み込んでみます。
pet:
Load * Inline [
ペット名,時刻,回数
モモ,7,6
モモ,10,2
モモ,13,5
モモ,16,4
モモ,19,3
モモ,21,2
あんず,6,2
あんず,7,4
あんず,10,2
あんず,11,3
あんず,13,4
あんず,16,4
あんず,18,5
あんず,21,2
];
では時間帯別のおしっこの回数をチャートにしてみます。

ところどころ、おしっこをしない時間帯がありますね。
では、モモに絞り込んで見てみます。

あれっ?
空白の時間が表示されなくなってしまいました。
こういうことって、あるあるですよね。
特に連続した値を軸に取った時に、傾向が掴めなくなってしまうので、0時台から23時台まできっちり表示してもらいたい。
折れ線で表示すると、こうなってしまいます。

これって、正しくないですよね?
おしっこをしない時間帯もおしっこをしているように誤解してしまいます。
データがないんだから、こうなっても仕方がないんですよ。
って言って納得してくれるお客さんもいますが、ダメっていうお客さんもいます。
さて、どうしましょうか…
初歩的なやり方 〜Sum({1} ZERO)
まず、簡単な方法からやってみます。
以下のスクリプトを追加します。
hours:
Load
IterNo()-1 as 時刻,
0 as ZERO
AutoGenerate 1
While IterNo()-1 <=23;そしてメジャーの数式に
Sum(回数) + Sum({1} ZERO)
と入れてやると、こんなふうに表示できるようになります。

簡単にできましたね。
0の値が入ったZEROという項目を作ってあげて、足してあげるというやり方です。
この方法は簡単ですが、一つ欠点があります。
それは、「あんず」は0という結果で残っているということです。凡例に「あんず」が残っていますよね?
棒チャートだから気にならないかもしれませんが、これをピボットテーブルで表示すると「モモ」を選んでも「あんず」が値 0で残ってしまいます。
完璧なやり方 〜データにないパターンの値を作成する
では、ちょっと進んだやり方をご紹介します。
以下のスクリプトを追加します。
For i = 0 to 23
hours:
Load
$(i) as 時刻,
IterNo()-1 as 時刻_計算用,
If($(i) = IterNo()-1, 1, 0) as 計算区分
AutoGenerate 1
While IterNo()-1 <=23;
Next i
データモデルはこんな感じになります。
時刻0に対して、時刻_計算用が0〜23が紐づくようになっていて、時刻 = 時刻_計算用の時、計算区分が1(それ以外は0)になるようになっています。

ではチャートを作成しましょう。
以下の設定で、棒チャートを作成してみます。
| 設定項目 | |
|---|---|
| 軸 | [時刻_計算用] |
| メジャーの数式 | Sum({$<計算区分={1}>} [回数]) +Sum({$<計算区分={0}>} 計算区分) |

はい、このチャートでは「モモ」を選んでも、「あんず」は表示されません。
ピボットテーブルにしても問題ない仕様になっています。
今回のスクリプトでは、AutoGenerateでテーブルを作成しましたが、先に時刻のテーブルを作成し、それに時刻_計算用のテーブルをキーなしでJoinしてから、計算区分を設定してあげてもよいと思います。数値じゃない時は、この方法ですね。
まとめ
連続した値の軸が、選択状態により、非連続で表示されてしまう問題の回避策をご紹介しました。
- 表示したい軸でテーブルを作成し、0値の項目を作成して加算する
- 表示したい値でテーブルを作成し、存在するパターンの合計に存在しないパターンの合計(0)を加算する
前者は簡単ですが、一部のチャートで想定外の表示になるケースがあります。
後者は、しくみ的には万全ですが、表示したい軸の値が多いとテーブルのレコード数が多くなります。
臨機応変に使い分けてみてね。
因みに「あんず」はうちのコーギーで、「モモ」は先代のコーギーです。
ではまた!


