はじめに

Qlik SenseではGUIでのウィザードベースの操作によるデータ追加や管理を行えますが、それに加えてロードスクリプトによる処理も可能です。実際のビジネスの現場では、分析する前に多岐に渡る複雑な変換処理が求められることが多いですが、ロードスクリプトによりそのような要求に対応することが出来ます。

image

ここでは、まずQlik Senseでのデータ管理のコンセプトをご紹介した上で、ロードスクリプトの基本をご説明したいと思います。

事前の準備

このエントリでは、「10分で試すQLIK SENSEでデータ分析」の手順に従ってQlik Sense Desktopのインストールとアプリの作成(「売上分析」アプリ)が完了していることを前提に作業を進めます。もし作業をまだ実施されていなければ、以下のリンク先の手順に従って作業を実施して下さい。

>>「10分で試すQLIK SENSEでデータ分析」

また今回、追加で「顧客マスタ.xlsx」のファイルを利用します。以下からダウンロードして下さい。

>> 「顧客マスタ」のダウンロード

Qlik Senseのデータ管理のコンセプト

Qlik Senseでは、取り込むデータの管理方法としては大きく2つの方法があります。

「データマネージャー」による管理

GUIでのウィザードベースの操作でデータの追加などを行える管理方法です。技術に精通しないユーザーでも簡単にデータの取り込みなどを行うことができ、これまでのチュートリアルの作業で主に利用してきた方法となります。ファイルのドラッグ&ドロップによるデータの追加(クイックデータロード)もこの方法に含まれます。

「データマネージャー」へはナビゲーションからアクセスすることが可能です。

image

以下の画面上でデータ追加のウィザードを呼び出したり、データの削除を行うことが可能です。

image

「データロードエディタ」による管理

Qlik Senseでは複雑な変換処理などを実装できる強力なロードスクリプトが提供されています。ロードスクリプトはこの「データロードエディタ」で管理を行うことができます。

「データロードエディタ」はナビゲーションから呼び出すことが可能です。

image

「データマネージャー」でデータが追加された場合には、それに対応するデータ追加のスクリプトが自動的に生成されます。これまで「データマネージャー」で行ったデータの取り込み、変換などの処理が、以下の形でスクリプトとして記述されていることが確認できます。

image

また、アプリ作成直後に以下の様なメニューが表示されていたかと思いますが、左側の「データの追加」が「データマネージャー」による管理、右側の「データロードエディタ」が「データロードエディタ」による管理をそれぞれ選択する形となります。

image

「データマネージャー」から「データロードエディタ」への管理切り替え

「データマネージャー」でデータが追加された場合には、「自動生成セクション」タブに対応するスクリプトが追加され、このタブはデータマネージャーの管理下に置かれます。この「自動生成セクション」はロックされ、編集が出来ない状態となっています。

image

これまでのチュートリアルで別のタブ追加してスクリプトで行いましたが、この「自動生成セクション」を編集しない限りでは「データマネージャー」と「データロードエディタ」の両方での管理を併存して行うことが可能です。

また、「自動生成セクション」のロックを解除して「データロードエディタ」上で編集を行うことも可能です。ただし、一旦ロックを解除するとデータマネージャーを使用してこの「自動生成セクション」に含まれていたデータの管理やこれらのデータに対するプロファイリングが出来なくなりますので注意が必要です。

ここでは、「自動生成セクション」のロック解除を行って編集をしていきたいと思います。「自動生成セクション」タブを選択し、「ロック解除」ボタンをクリックします。警告が表示されますので、再度「ロック解除」ボタンをクリックします。

image

データロードエディタでの基本作業

データ接続定義の追加

ダウンロードした「顧客マスタ」の解凍先フォルダを新たな接続定義として追加します。まず、「データロードエディタ」右側の「接続の新規作成」ボタンをクリックし、「フォルダ」を選択します。

1

追加データを保存したフォルダのパスを指定し、「名前」に「顧客マスタ」と入力して「追加」をクリックします。

2

データ接続の定義が追加されました。

3

データロードのスクリプト追加

「自動生成セクション」タブを開いて最後尾を改行してカーソルを合わせ、データ接続の「顧客マスタ」の「データを選択」アイコンをクリックします。

4

「顧客マスタ.xlsx」を選択し、「選択」をクリックします。

5

「スクリプトを挿入」をクリックします。

image

データロードのスクリプトが挿入されました。

image

ロードスクリプトによる変換処理

ロード文での変換処理

追加されたスクリプトには先頭にLOAD文が含まれています。このLOAD文に変換処理を追加することで、FROM以下で定義されたファイルから取り込まれたデータに対してQlik Sense内で様々な変換処理を行うことが出来ます。

6

先ほど取り込んだ顧客マスタのデータ形式は以下の様になっています。

image

ここでは、このデータに対して以下の変換処理を行います。

  • 「顧客登録番号」の項目名を「顧客コード」に変換
  • 「顧客登録番号」に含まれるデータの先頭の「CU-」の部分を削除
  • 「生年月日」の項目を削除

これらの変換処理の実装後のスクリプトは以下になります。

顧客マスタ:
LOAD
    SubField(顧客登録番号, '-', 2) AS 顧客コード,
    氏名,
    性別,
    //生年月日,
    年齢,
    血液型
FROM [lib://顧客マスタ/顧客マスタ.xlsx]
(ooxml, embedded labels, table is 顧客マスタ);

ここでは以下の様な処理を行っています。

  • SubFieldでは区切り文字を指定してサブストリングを取得することが出来ます。ここでは「-」を区切り文字に指定し、2番目のサブストリング(入力値が「CU-1001」の場合は「1001」の部分)を取得しています。
  • ASにより項目名の指定・変更を行えます。ここでは1項目の名称として「顧客コード」を指定しています。
  • 「生年月日」は「//」でコメントアウトすることで取り込み対象から外しています。

また、先頭に「顧客マスタ:」を追加していますが、これにより格納先のテーブル名を明示的に指定できます。(既定ではファイル名がテーブル名に設定されます。)

スクリプトの修正が完了したら右上の「データのロード」ボタンをクリックし、ロードを実行します。

image

ロードの完了後、「データモデルビューア」を開いて取り込まれたデータを確認します。以下の形で「顧客コード」で「売上明細」と自動的に関連付けがなされ、想定通りに変換されたデータが格納されていることがプレビューから確認できます。

image

先行ロード文

ここまでロード文に変換処理を追加してきましたが、さらに先頭にロード文を追加し、下のロード文の出力データを入力として数珠つなぎでさらに変換処理を継続することができます。ここでは以下の変換処理をさらに追加したいと思います。

  • 「顧客連番」の項目を追加し、1からの連番を格納
  • 「顧客コード」と「氏名」をハイフンで連結した「顧客コード・氏名」の項目を追加

以下の赤字の部分が追加されたスクリプトになります。

顧客マスタ:
LOAD 
    *,
    RowNo() AS 顧客連番,
    顧客コード & '-' & 氏名 AS 顧客コード・氏名
    ;
LOAD
    SubField(顧客登録番号, '-', 2) AS 顧客コード,
    氏名,
    性別,
    //生年月日,
    年齢,
    血液型
FROM [lib://顧客マスタ/顧客マスタ.xlsx]
(ooxml, embedded labels, table is 顧客マスタ);

追加された部分では以下の様な処理を行っています。

  • 「*(ワイルドカード)」により下のロード文から入力として受け取った全ての項目をそのまま出力しています。
  • 読み取られているレコードの行数を1から始まる整数で返すRowNo()関数を使い、「顧客連番」の列を生成しています。
  • 「&」で顧客コード、ハイフン、氏名の文字列の連結を行った新たな項目を生成し、「顧客コード・氏名」の項目名称としています。

再度ロード処理を実行します。実行後データを確認すると、以下の形で項目が追加されていることが確認できます。

image

まとめ

Qlik Senseでは複雑な変換処理などを実装できる強力なロードスクリプトが提供されており、このエントリでは基本的なロードスクリプトの利用と変換処理の追加方法をご説明しました。