はじめに

Qlik Sense/QlikView (Qlik製品)の主な特長は、「インメモリ(In-memory)」による高速レスポンスにより途切れることなく、「連想技術(Associative Technology)」により思考の流れに従って探索・データ分析ができる、ということにあります。

ここでは、改めてQlikのコア技術である連想技術とインメモリについて解説させて頂きたいと思います。

連想技術による思考の流れに従ったデータ探索

まず、Qlikの非常にユニークな機能として挙げられるのが連想技術になります。この技術は複数のデータソースから取り込んだ全てのデータに含まれるレコード間のアソシエーション(関連付け)を自動的に作成・保持するという点で他のBIツールと大きく異なります。

では、他の一般的なBIツールとどう異なるのでしょうか?まずは他の一般的なBIツールの動きを見ていきたいと思います。

一般的なBIツールでは、以下の様に中心に位置する注文明細などのファクトテーブルと、周辺に紐付けられる複数のマスタテーブルで構成されます。そして、例えばある製品を選択すると対象の売上が絞り込まれ、事前に定義された軸を元に集計されます。

image

この場合、例えば「ある商品で絞り込んで得意先別の売上はどうなっているか」といった集計値の確認できますが、そこからそれ以上の洞察を得ることができず、そこから新たに生じる「では、その商品を販売していない得意先はどこか?」「それらの得意先を担当している営業は誰か?」といった疑問にまでは答えることができません。

そこで分析作業の流れが断絶してしまったり、またはあるチャートで分析した結果を、手間をかけて別のチャートに条件として設定し直して分析するなど、いずれにしてもデータに対して部分的なビューしか得れない結果となります。

それに対し、Qlik製品ではどのような分析が行えるでしょうか?Qlik製品では、全レコード間のアソシエーションが保持されており、以下の形である商品を選択すると、いつどこでどれだけ売れたかという情報に加えて、どの得意先が販売していないか、いつ売れていないか、どの地域で売れていないか、どの営業担当が売っていないかといったことまで判別することができます。

image

この時、選択したレコードは「緑」、関連するレコードは「白」で表示され、関連しないレコードも「灰色」で表示されます。(選択のクリック毎に全レコードの緑・白・グレーの状態が都度更新されるこの仕組みを、Qlikでは「論理推論: Logical Inference」と呼んでいます。)

これにより、例えば「売上高や利益率の高い売れ筋の商品はどれか」を分析で見い出し、そこで得られた洞察に基づいて「これらの商品の販促アプローチをすべき、商品を販売していない得意先はどこか?」「それらの得意先を担当している営業は誰か?」といった疑問に対して答えを見出来たり、その商品に紐付く注文ヘッダーの一覧も判別できますので、その注文ヘッダーに選択を絞り込んでその商品と併売されている商品を特定するなど、思考の流れに従った一連の分析を行うことができます。

image

より深い洞察は選択対象と結びつきがあるデータではなく、結びつきが無いデータから得られることが多く、このような洞察を導き出せる連想技術の力をQlikではパワー・オブ・グレー(Power of Gray)と呼んでいます。

また、見たい項目を一覧から探すのではなく、キーワードを直接指定してインメモリ上の全データセットに対して高速な検索を実行することも可能です。このようにQlik製品の連想技術は人間が頭で考えるような流れで動くということを目指して設計されています。

取りこぼしなくデータを分析

データ分析を行う際には1つの業務システムからのデータ分析を行うことは稀で、売上管理システムの売上データと顧客管理システムのCRMデータを紐付けたり、また外部提供の市場調査データや社員が個別で管理しているExcelデータと紐付けるなど、複数データソースのデータを結合して分析を行うことが一般的です。

全てのデータ品質や整合性が担保されていることが理想的ですが、異なるシステムで管理されていたり、社員が手作業で管理していることなどの理由からデータ不備や不整合が起きているようなケースは多くあります。

一般的なBI製品では先ほどご説明したファクトテーブルとマスタテーブルで構成されたデータモデルを構成し、一般的にはLeft-Outer Joinと呼ばれる方式で結びつけられます。この方式では基本的にトランザクションデータに含まれるデータは全てマスタに紐付くことが前提となっています。

image

しかし、例えばデータ不整合で以下の形で担当者レコードがマスタから欠落している場合、そのレコードに紐付く売上データは存在しないものとしてチャート上からは完全に欠落してしまします。そうすると、この誤った集計結果に気づかないまま、ユーザーはその数値に従って意思決定を行ってしまうというリスクがあります。

data_quality

それに対し、Qlikでは連想技術によるデータ間の関連付け(アソシエーション)に基づいたデータ分析をおこなうエンジンとなっているため、対象となる複数のデータソースから全てのデータを取得します。これは、一般的なBIツールがLeft-Outer Joinとなっているのに対し、Full-Outer Joinという形となっています。

ですので、例えば上記のようなケースでもQlik製品ではマスタデータに紐付かないデータも、紐付かないデータとして表示され、データ不備も可視化することができます。このことをQlikではデータの取りこぼしがない(No data is left behind)と表現しています。

そして、このような形で全てのデータを対象としてデータのアソシエーションを保持する連想技術により分析をおこなうことで、データの部分的なビューではなくデータの全てのストーリー(Whole story in data)を分析することができる形となります。

QIXエンジンによる高速なインメモリ処理

そして、以上の様な形で思考の流れを途切れさせることなく探索・データ分析を行うためには、その思考の流れの速さに合わせたレスポンスが要求されます。それを支えるのがQlikのインメモリエンジンとなります。

Qlikのインメモリエンジンは「QIX (Qlik Indexing)エンジン」と呼ばれており、このエンジンにより高速にデータ集計が行われます。

この高速処理は圧縮列指向型(Columnar)などに支えられているのですが、Qlikの内部データ保持形式を理解する必要がありますので少しご説明をしたいと思います。

Qlik製品にデータを取り込むと、以下の形で「データ・テーブル」と「シンボル・テーブル」という2つのテーブルに分けられて格納されます。(これはあくまでも内部的なデータ保持形式の話ですので、利用しているユーザーからは元のテーブルのイメージで利用されます。)

image

まず、データの実際の値はテーブルの各列ごとに作成される「シンボル・テーブル」に格納されます。この時、列ごとに重複するレコードは排除されて一意のレコードのみ保存されるため、一般的にデータは元のサイズの10~20%程度まで圧縮されます。分析ではこのようにサイズが圧縮されたデータを扱うため、パフォーマンスの向上に繋がります。

そして、これらのシンボルテーブル間の紐付情報は「データ・テーブル」に保存されます。データはビット・スタッフド・ポインタと呼ばれるサイズの小さなビット形式で、かつ列方向でのサーチや集計が得意な列指向型で保存されています。

このように列指向型のサイズがコンパクトなビット形式のデータが、高速にアクセス可能なメモリ上に展開されるため、高速な検索や集計、そして連想技術による思考の流れに従った探索・データ分析などが可能となります。

まとめ

以上、Qlik Sense/QlikViewの主な特長である連想技術やインメモリ処理についてご紹介させて頂きました。

<< Qlik Senseで始める「セルフサービス型のデータ分析」 | 目次 | Qlik Sense Desktopのダウンロードと導入の手順 >>