Qlik Training Blog

ビジュアライゼーション・分析

まだ間に合う!?チャートの値が想定通りか確認してみよう!

公開日:
更新日:
ビジュアライゼーション・分析
#Qlik Cloud
#Qlik Sense
#QlikView
#開発者
#可視化・分析

Qlik Senseの操作にも慣れ、様々なチャートを表示できるようになった皆さま。
ふと、こんな疑問を持ったことがないでしょうか?

『このチャートの値、本当に正しいんだろうか…』
『チャートに変な値が混じっている気がする…』

数式や設定によって複雑な集計が可能なQlik Senseですが、"それっぽい"数式を設定すると、"それっぽい"グラフを表示してくれるのも事実です。
もしかしたら、「表示していたチャートの値が実は間違えていた」なんて恐ろしいことも考えられます…。

そんなことにならないためにも、今回は「チャートの値の確認方法」をご紹介します!

数式の妥当性を確認するこの方法は、弊社サポートセンターのメンバーも実際に行っている方法です。
これまでに作成したチャートの検証や、これから開発を行う際の確認手順として、是非参考にしてみてください!

目次

※本記事は「2023年06月時点のSaaS」で作成しています。

サンプルデータの紹介

今回使用するサンプルデータを紹介します。
もし開発中のアプリがある場合は、是非ご自身のデータで試してみてください!

元となるデータは以下のように、「年月」「部署」「科目」「売上」の4つの項目で構成されています。

年月

部署

科目

売上

202204

東京

食品

30

202204

東京

アパレル

26

202204

大阪

食品

25

202204

大阪

アパレル

12

202204

北海道

食品

20

Tips

サンプルデータを用意する際は、以下の3つのコツを意識してみてください。

  1. データ量を少なくすること。

  2. 条件を満たすデータと満たさないデータを用意すること。

  3. 条件を満たした時、どういう値が出れば正しいのか把握しておくこと。

それぞれ、結果が想定通りになっているのか判断しやすくするために必要なポイントです。
例えば10万行もあるデータだと、数式の結果を目視しても、合っているのか判断が難しくなりますよね。
条件次第ですが、サンプルデータの量は多くても20~30行程度がちょうど良いかと思います。

この元データから、以下の折れ線チャートを作成してみました。

この折れ線グラフは、「年月」ごとの”東京”の”食品”の「売上」について、累計の値を求めている”つもり”です。

以下のような軸とメジャーを設定しています。

  • 軸:年月

  • メジャー:Rangesum(Above(Sum(If(部署='東京' and 科目 = '食品',売上)),0,RowNo()))

今回は、このメジャーに設定している数式の結果が正しいかを確認していきます!
※今回のメジャーの数式はIf関数で条件を指定していますが、SET分析でも以下のような数式で指定が可能です。
 またSET分析の使用方法については、後述のリンクをご参照ください。
 ・メジャー:Rangesum(Above(Sum({<部署={'東京'},科目 = {'食品'}>} 売上),0,RowNo()))

確認のステップ

データを確認する際、大きく分けて以下の3つのステップで作業を行います。

  1. チャートをテーブルへ変換する。

  2. 「目的のデータ」が取得できているか確認する。

  3. 「集計」が正しくできているか確認する。

地道な作業が続きますが、千里の道も一歩からです。
早速、①からやってみましょう!

①チャートをテーブルへ変換する

チャートに複数のグラフを表示したりしていると、そのままの状態では数式の検証がしにくくなってしまいます。
そこで検証の第一歩として、チャートをテーブルへ変換します。
数値の確認がしやすくなるので、かなりオススメの方法です。
※検証は元のシートを複製するなどし、必ずバックアップがある状態で行いましょう!

【確認手順】

1)シートを編集状態にし、画面左側のアセットパネルを開きます。

2)[チャート]から[テーブル]を選択し、対象のチャートへドラッグアンドドロップします。

3)「以下に変換:テーブル」の表示が出るため、選択します。

4)チャートの値が、テーブルに変換して表示されました!

この後行う手順で求めた結果が、このテーブルの値と一致していれば、チャートの値は正しいと判断できますね!

②「目的のデータ」が取得できているか確認する

「合計するにはSum関数を使う」のようなことが分かっていても、合計する元の値が間違えていたら、Sum関数の結果も間違ってしまいます。
そのためまずは、「目的のデータ」が取得できているか確認するようにしましょう!

【確認手順】

1)検証用のテーブルを、新しく作成します。

2)元データにどのような値があるのかハッキリさせるため、「集計に関わる項目」を全て軸に追加します。
 料理を始める時に、食材を全て台所に並べるイメージですね。
 今回は、「年月」「部署」「科目」「売上」の4つの項目です。

3)検証したい数式を分解します。
 どんなに長い数式でも、基本的に一番内側の関数から処理されていきます。
 そのため一番内側の関数(カッコ)を抜き出し、テーブルのメジャーに設定します。

・元の数式

 今回の数式では、『If(部署='東京' and 科目 = '食品',売上)』が該当します。
 また上記の例ではIf関数の条件が2つあるので、1つに減らして『If(部署='東京',売上)』部分だけ設定してみましょう。

どうでしょうか。
もし「部署」が”東京”なら、「売上」を表示するように指定しています。
テーブルを見てみると、”大阪”や”北海道”の売上はハイフンで非表示になり、”東京”の「売上」だけが表示されているので、目的のデータが取得できていますね。

またこの時、画面を最後までスクロールして、全ての行で目的のデータが取得できているか確認するようにしましょう。
もしイレギュラーな値が出ているときは、数式の見直しや、元データにおかしなデータがないか調べてみてください!


4)If関数の条件を追加し、『If(部署='東京' and 科目 = '食品',売上)』を設定します。

「部署」が”東京”かつ「科目」が”食品”なら売上を表示させます。
ひとつ前の手順で確認した値から、”アパレル”のデータが非表示になり、”食品”のデータのみ表示されるようになりました。

条件を満たしたデータのみが表示されていることが分かったので、今回のIf関数の数式は正しく、「目的のデータ」が取得されていることが分かりました。

「目的のデータ」の取得が確認できたら、次のステップで「集計」が正しくできているかを確認しましょう。

Tips

開発の時も今回と同じように、まず「目的のデータ」が取得できる数式の検討から始めましょう。
例えば『野菜の売上の合計』を求めたいなら、『野菜の売上』が取得できるか、から検討します。

合計を出す、平均を出すといった「集計」は、専用の関数が用意されているので比較的簡単に行えます。
しかし「目的のデータ」を取得することが一番難しく、慣れが必要な部分になると思います。

また「目的のデータ」を取得する一般的な方法として、If関数やSET分析の使用があります。
SET分析については本ブログで過去に紹介していますので、是非参照してみてください!

③「集計」が正しくできているか確認する

ステップ②で「目的のデータ」が取得できたので、あとは取得できた値を「集計」していきます。
台所に並べた食材を切り終えたので、あとは調理していく、のようなイメージですね。

【確認手順】

1)元の数式を見てみると、If関数で求めたデータをSum関数で集計しているので、『Sum(If(部署='東京' and 科目 = '食品',売上))』を設定します。

・元の数式

数式の結果を見てみると、”東京”の”食品”以外の結果は全て0になっているので、Sum関数は目的の動きになっているようです。
※Null(ハイフン)をSum関数などの集計関数で集計すると、0になります。

2)同様に、徐々に外側の関数を復活させていき、動作を確認します。
 次はAbove関数を加えて…と操作したいところですが、実は累計の値を求める際の有名な構文として、
『RangeSum(Above(Sum(売上),0,RowNo()))』という構文があります。
 今回は上記構文の『Sum(売上)』をこれまでに検証した『Sum(If(部署='東京' and 科目 = '食品',売上))』に置き換え、『Rangesum(Above(Sum(If(部署='東京' and 科目 = '食品',売上)),0,RowNo()))』を設定しましょう。

またこの時点で、設定している数式は元の数式と同じものになりました。

…おや?何やらイメージと違う値になっています。
チャートに設定している数式とまったく同じ数式を設定しているのに、累計の値になっていません。

これは困りました…一体何がいけないのでしょうか?

ここで、大事なことを思い出してみましょう。

皆さまは「集計の軸」について考えたことはあるでしょうか。(考えたことがある方は、読み飛ばしてもらって大丈夫です)
普段何気なくテーブルに「軸」を設定していると思いますが、軸とは「集計の軸」のことです。
そして集計の軸とは、「何の項目ごとに」計算を行うか、を示す、集計を行う上で非常に重要なポイントになります。

例えば以下のデータを見てください。

商品

売上

2022

トマト

1000

2022

きゅうり

1200

2023

トマト

1300

2023

きゅうり

1500

上記のデータについて軸(何ごとに)が違うと、結果がどう変わるか考えてみましょう。

 ①「年ごと」に売上を合計した場合
 →「2022年が2200」「2023年が2800」という2つの結果になります。

 ②「商品ごと」に売上を合計した場合
 →「トマトが2300」「きゅうりが2700」という2つの結果になります。

 ③「年と商品ごと」に売上を合計した場合
 →「2022年のトマトが1000」「2022年のきゅうりが1200」
  「2023年のトマトが1300」「2023年のきゅうりが1500」という4つの結果になります。

このように「何ごと」=「どの軸ごと」に集計するかで、結果は大きく変わってきます。
そしてQlik Senseは、「軸」に設定した項目ごとに集計を行います
そのためチャートにどの軸を設定するかによって、同じ数式でも答えが変わります。

数式を設定する時、「そのチャートの軸に何の項目を設定しているのか」を意識することが重要だとお分かりいただけましたでしょうか。

さて、現在のテーブルを改めて見てみると、軸に設定してある「年月と部署と科目と売上ごとに」データを取得しようとしているので、想定通りの値が取得できていない可能性があります。
最終的な折れ線グラフで求めたいのは「年月ごと」の売上になるので、軸としては「年月」だけ残し、他の3つの軸を削除してみます。

すると…

Rangesum関数の値が変わりました!
実際に値の変化を見てみると、30+22=52、52+18=70と、正しく累計できていることが分かります!

これで「目的のデータ」が取得でき、「集計」も正しく行えていることが確認できました。

3)最後にチャートを変換したテーブルと、新たに検証したテーブルを比較します。

2つのテーブルの値が一致しているので、無事「チャートに設定してある数式は正しい」と判断することができました!

また参考までに、以下のように検証用のテーブルをチャートに変換してみたところ、元のチャートと同じ形の折れ線グラフが表示されました。
ここまで確認できると、なお安心ですね!

アセットパネルから「折れ線チャート」を検証用テーブルにドラッグアンドドロップし、折れ線チャートに変換します。

細かいレイアウトの設定はされていませんが、元のチャートと同じ形の折れ線グラフが表示されました!

・検証用テーブルを変換したチャート

・元のチャート

さいごに

いかがでしょうか。
上記のように数式を細かく分解し、値の検証を十分に行えば、ミスにも気づけ、また自信をもって「正しいチャート」だと言えますね。

もし確認のどこかでつまずいた時は、メーカーヘルプや弊社Webサイトに解決のヒントが隠されているかもしれないので、是非調べてみてください!