簡易ETLツールとしてのQlikView


qiitaにQlikViewのタグが無かったため、本稿ではQlikViewについて概念的に簡単に説明しつつ、さらっとETLツールとしての利用法を提唱してみる実験を行っています。

QlikViewとは

概要

  • データを分析するためのツールです。
  • 処理がかなり高速です。
  • 操作感は、Excelでピボットテーブルやピボットグラフを作ったり、Accessでテーブルを結合したりするのと近いものがあります。
  • 分析にあたって、RDBに近いデータの持ち方をします。

メリットをもう少し細かく

  • 分析に特化しているため、分析に関する操作感はExcel/Accessよりも上です。具体的には、
    • Excelのピボットテーブルで言う「スライシング」や「フィルタリング」の部分が簡単です。
    • テーブル同士の結合をきちんと設計しておくと、あるテーブルにフィルタをかけたとき、直接・間接的に結合しているすべてのテーブルに対してフィルタがかかります。
    • フィルタをかけるときは、例えばテーブルならテーブルの項目をクリックするだけでOKです。
  • データの取得元としては、次のようなものに対応しています。したがって、特別なETLツールのようなものを導入しなくても、QlikViewで直接データを見ることができます。
    • エクセルやcsvのファイル
    • 各種RDB
    • html、xml等のファイル

ここで述べているメリットはExcelやAccessとの比較がベースになっていますが、QlikViewはデータ分析に関する様々な集計や統計操作等が、高速で簡潔にできるツールです。この機能性を用いて、今まで気づいていないような「事実」を発見する(=Data Discovery)というのがQlikViewの主要な用途の一つであると思います。
ちなみに、QlikViewにはPersonal Editionという、いわゆる無料版があります。若干の制約はありますが、個人使用に関してはフル機能を利用できます。

QlikViewのデータの持ち方について

  • 各ファイルやDBから取り込んだデータは、テーブル形式で格納されます。
  • テーブル同士は、同じ名称の列をキーとして結合します。同じ名称の列がある場合は、必ずキーとして結合されます。これがRDBと少し異なる部分です。
  • 各ファイルからのデータの取り込みは、SQLに似た構文のスクリプトをベースに行いますが、GUIを使えば直接スクリプトを書く必要はありません。
  • 一度データを読み込むと、読み込んだデータはQlikViewのファイルの中に保持され続けます。QlikViewのデータの読み込みは、分析に必要なデータセットを一式読み込んで、複数のテーブルからなる小さなDBを作り出すイメージです。
  • この「小さなDB」は、同じ名前の列はすべて結合した、いわば「データの塊」のようなものです。
  • 従来のデータ抽出・集計作業における「クエリ」は、QlikViewでは「必要なデータを塊の中から選び取る」ことに対応します。QlikViewの世界では、データは常にすべて読み込まれた状態であり、クエリとは次のような対応があります。
    • 読み込まれたデータの中から必要な値を指定する → 条件抽出に対応
    • 計算に必要な項目をオブジェクトの軸・数式として指定する → 集計に対応

QlikViewに関しては、特許である連想技術と超正規化の観点から製品特徴が説明されることが多いですが、概念的に整理すると、今述べたような説明の仕方もできます。
※連想技術、超正規化については様々なところで紹介されているので、検索してみてください。

古くからあるBIツールでは、クエリをしばしばテキストベースで都度作成していました。一方のQlikViewでは、クエリの作成がそのまま
オブジェクトの作成+画面のクリック(値の選択)
に置き換わっています。
そういう考えで改めて見てみると、処理の高速化に限らず「欲しいデータのクエリ」自体が劇的に高速に行えるようになった、という部分がQlikViewの最も優れた部分(のひとつ)ではないかと思います。
Excelを振り返ってみると、たとえ一つのテーブルに対してであっても、ピボットテーブルは非常に有効な手段で、多くの人が使用しています。ピボットテーブルは、特別な訓練を積んだプログラマでなくても、ある程度Excelが使える人であれば問題なく利用できます。
これが、複数のテーブルを結合したデータの塊に対しても柔軟に行える、というところがひとつの革新ではないか、というところです。特殊なプログラムスキルを持たない、業務部門のユーザが簡易ETLを構築できたりもする訳です。

さて、この長い前置きを受けて、簡易ETLツールとしてQlikViewを使用する「ススメ」を書いてみます。つまり、QlikViewを用いて複数のデータソースからデータを読み込み、結合して別の形で出力する、という方法です。

QlikViewでETL(概要)

処理の段階は次のようになります。

  • データ読込(Load Scriptで実行)
  • データ加工(オブジェクトで実行)
  • データ出力(マクロで実行)

データ読込

GUIにしたがって、ぽんぽんとデータソースを指定し、ロードスクリプトを作ります。

データ加工

読み込んだデータを利用して、ぽんぽんとピボットテーブルやテーブル等のオブジェクトを作ります。

データ出力

オブジェクトのデータを、そのままCSV等の形式で出力します。
QlikViewのエクスポート機能ではExcel2007のxlsx形式では出力ができない為、xlsまたはcsvとして出力します。csv出力する場合のイメージ…

macro.vbs
Sub ExportToFile
set sObject = ActiveDocument.GetSheetObject("TB01")
sObject.Export "C:\path\to\your\file.csv", ", "
End Sub

この出力を、データ読込の直後に行わせることも可能です。
さらに、タスクスケジューラと合わせて個人のPCで毎日CSVを出力させる、というようなことも可能です。
これで、あなたのPCも明日からcsv生産工場として機能する訳ですね。

QlikViewでETL(詳細)

そのうち書くかもしれません。