Qlik Senseナレッジ - INSIGHT LAB

【Qlik Sense】予実管理(1) 分析前の準備(データモデル)

作成者: Deck|2018年4月13日

Qlik Senseで予実管理するには

こんにちは。Deckです。

データ分析を行う目的の1つに予実管理があります。

今回の記事ではQlik Senseで予実管理をするときのTipsを紹介します。

  1. データモデルについて …… この記事で解説
  2. チャートの作り方について …… 次の記事で解説

データモデルの作り方

Qlik Senseで予実管理をする際、データモデルの組み上げ方は避けて通れない課題です。

このデータを分析するとき、どのようにデータを取り込むのがよいでしょうか?

Qlik Senseでは予算と実績のテーブルを結合した状態で取り込む方法にした方が分析しやすいデータ構造となります。

リレーショナルデータベースに慣れた方であればつい実績テーブル・予算テーブルを別にしてしまいがちですが、Qlik Senseは実績テーブル・予算テーブルを結合するのがベターです。

よい例 実績テーブルと予算テーブルを結合したトランザクションテーブルを作成し、
マスターテーブルを関連付ける
よくない例 実績テーブル⇔実績カレンダー、予算テーブル⇔予算カレンダー
のように別々に扱う

それぞれの取り込み方法を図にするとこのようになります。

(画像)

実績テーブルと予算テーブルを結合するポイントはデータの関連付けにあります。

よくない例ではカレンダーが2つあることにお気づきでしょうか。

このように複数のカレンダーがあるとデータを絞り込むとき両方のカレンダーでいちいち絞り込みすることになります。

今回はカレンダーと店舗マスタが複数あるデータ構造ですが今後の改修でマスタが追加されるような変更があるとすべてのマスタテーブルが2つずつできてしまいます

これを解決しようとして実績テーブルと予算テーブルを無理に関連付けしようとするとループと呼ばれる現象が発生し、データの絞り込みがうまくいかなくなるなどの悪影響があります。

よい例のように実績と予算をトランザクションテーブルの形でひとまとめにすることでデータ分析に便利な構造を作ることができます。

取り込みスクリプトの作成

サンプルデータを使って、実際に取り込みを行うスクリプトを作ってみましょう!

データ接続の作成

新規アプリを作成しデータ ロード エディタを開き、データ接続を作成します。

(画像)

サンプルデータのあるフォルダに移動し、接続に名前をつけて「作成」をクリックします。

実績テーブルの読み込み

実績テーブルのLOAD文を作成します。以下のスクリプトを入力しましょう。

(画像)

トランザクション:
LOAD
年月日,
店舗,
商品コード,
売上金額
FROM [lib://データ/売上実績.csv]
(txt, utf8, embedded labels, msq);

LOAD文の直前にある「トランザクション:」がテーブルに名前をつける構文です。忘れないようにしておきましょう。

予算テーブルの読み込み

次は予算テーブルのLOAD文を作成します。

すでに実績テーブルを「トランザクション」という名前で読み込んでいるので、ここではすでにあるテーブルに結合するスクリプトを入力します。

Concatenate(テーブル名)の構文を使うとすでにあるテーブルの末尾に新しいレコードを追加できます。

項目名が完全に一致していないテーブルにも結合することができ、その場合不足する部分はNullで埋められます。

(画像)

Concatenate(トランザクション)
LOAD
Date(Date#(年月, 'YYYY/MM'),'YYYY/MM/DD') as 年月日,
店舗,
予算金額
FROM [lib://データ/売上予算.csv]
(txt, utf8, embedded labels, msq);

予算データを取り込みするときのポイントです。

  • Concatenate(トランザクション)で実績テーブルに結合する
  • 予算データは年月ごとなので年月日に変換しておく

カレンダーの取り込み

次にカレンダーの取り込みを行います。

(画像)

カレンダー:
LOAD
年月日,
,
,
,
年月,
曜日
FROM [lib://データ/カレンダー.csv]
(txt, utf8, embedded labels, msq);

店舗マスタの取り込み

最後に店舗マスタを取り込みましょう。

(画像)

店舗マスタ:
LOAD
店舗,
都道府県,
エリア
FROM [lib://データ/店舗マスタ.csv]
(txt, utf8, embedded labels, msq);

スクリプト全体

ここまで入力するとスクリプト全体はこのようになります。

トランザクション:
LOAD
年月日,
店舗,
商品コード,
売上金額
FROM [lib://データ/売上実績.csv]
(txt, utf8, embedded labels, msq);

Concatenate(トランザクション)
LOAD
Date(Date#(年月, 'YYYY/MM'),'YYYY/MM/DD') as 年月日,
店舗,
予算金額
FROM [lib://データ/売上予算.csv]
(txt, utf8, embedded labels, msq);

カレンダー:
LOAD
年月日,
,
,
,
年月,
曜日
FROM [lib://データ/カレンダー.csv]
(txt, utf8, embedded labels, msq);

店舗マスタ:
LOAD
店舗,
都道府県,
エリア
FROM [lib://データ/店舗マスタ.csv]
(txt, utf8, embedded labels, msq)

以上のスクリプトを入力してデータをリロードすると準備完了です。

次の記事に進んで、実際のデータ分析を行ってみましょう!