Skip to main content
Yuki_Suzuki
Employee
Employee

■ はじめに

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

スクリーンショット 2022-04-03 153051.png

 

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

 

■事前の準備

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

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

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

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

 

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

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

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

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

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

図1.png

 

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

スクリーンショット 2022-04-03 153503.png

 

 

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

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

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

図2.png

 

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

スクリーンショット 2022-04-03 153609.png

 

また、アプリ作成直後に以下の様なメニューが表示されていたかと思いますが、右側の「ファイルおよびその他のソース」が「データマネージャー」による管理、下段の「データロードエディタ」が「データロードエディタ」による管理をそれぞれ選択する形となります。「データカタログ」はクラウド版のみの機能で、ここからもデータの追加が行えます。

スクリーンショット 2022-04-03 153717.png

 

 

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

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

スクリーンショット 2022-04-03 153848.png

 

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

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

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

図3.png

 

 

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

顧客マスタのアップロード

ダウンロードした「顧客マスタ」を新たにクラウド上にアップロードして追加します。まず、「自動生成セクション」タブを開いて「商品マスタ」のロード文の最後尾を改行してカーソルを合わせます。

図8.png

 

そして「データロードエディタ」右側の「データ接続」欄の DataFiles フォルダのテーブルアイコンをクリックします。

図5.png

 

「ファイルを選択」画面の下部、「ここにファイルをドロップするか、ファイルをクリックして選択します。」欄に、「顧客マスタ」をドラッグアンドドロップします。

図6.png

 

データがアップロードされました。

 

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

次に同じ画面で一覧から「顧客マスタ」を選択し「選択」をクリックします。

図9.png

 

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

図10.png

 

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

図11.png

 

 

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

ロード文での変換処理

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

スクリーンショット 2022-04-03 165527.png

 

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

スクリーンショット 2022-04-03 154812.png

 

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

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

 

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

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


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

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


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

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

図12.png

 

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

スクリーンショット 2022-04-03 155537.png

 

 

先行ロード文

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

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

 

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

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


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

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

 

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

スクリーンショット 2022-04-03 155738.png

 

 

■まとめ

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