SQL Server 2012 自習書シリーズ 新機能編...

107
SQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ ウェアハウス)関連の新機能 Published: 2011 年 10 月 20 日 改訂版: 2012 年 8 月 24 日 有限会社エスキューエル・クオリティ

Transcript of SQL Server 2012 自習書シリーズ 新機能編...

Page 1: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書シリーズ 新機能編 No.3

DWH(データ ウェアハウス)関連の新機能

Published: 2011 年 10 月 20 日

改訂版: 2012 年 8 月 24 日

有限会社エスキューエル・クオリティ

Page 2: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

2

この文章に含まれる情報は、公表の日付の時点での Microsoft Corporation の考え方を表しています。市場の変化に応える必要

があるため、Microsoft は記載されている内容を約束しているわけではありません。この文書の内容は印刷後も正しいとは保障で

きません。この文章は情報の提供のみを目的としています。

Microsoft、SQL Server、Visual Studio、Windows、Windows XP、Windows Server、Windows Vista は Microsoft Corporation

の米国およびその他の国における登録商標です。

その他、記載されている会社名および製品名は、各社の商標または登録商標です。

© Copyright 2012 Microsoft Corporation. All rights reserved.

Page 3: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

3

目次

SSTTEEPP 11.. SSQQLL SSeerrvveerr 22001122 のの概概要要 ...................................................................................... 4

1.1 SQL Server 2012 の概要 ......................................................................................... 5

1.2 SQL Server 2012 で提供される主な DWH 新機能の概要 ................................................ 6

SSTTEEPP 22.. 列列スストトアア イインンデデッッククスス にによよるる飛飛躍躍的的なな性性能能向向上上 ........................................................ 13

2.1 列ストア インデックスによる飛躍的な性能向上 ............................................................ 14

2.2 列ストア インデックスの作成方法 .............................................................................. 16

2.3 列ストア インデックスでのデータ更新 ........................................................................ 28

2.4 列ストア インデックスのサイズの確認 ........................................................................ 31

SSTTEEPP 33.. DDWWHH//BBII でで役役立立つつ TTrraannssaacctt--SSQQLL 分分析析関関数数 ............................................................ 34

3.1 DWH/BI の T-SQL 分析関数(Analytic Functions)のサポート ..................................... 35

3.2 前年同月や累積金額の取得 ........................................................................................ 44

SSTTEEPP 44.. DDQQSS((DDaattaa QQuuaalliittyy SSeerrvviicceess)) にによよるるデデーータタ品品質質のの向向上上 ............................................ 47

4.1 DQS(Data Quality Services)による容易なデータ品質の向上 ........................................ 48

4.2 DQS(Data Quality Services)のインストール方法 ...................................................... 51

4.3 DQS(Data Quality Services)によるデータ クレンジング処理 ....................................... 54

4.4 データ品質プロジェクトの作成 .................................................................................. 71

4.5 Integration Services の「DQS クレンジング」タスク .................................................. 78

SSTTEEPP 55.. BBII 関関連連のの新新機機能能のの概概要要 ......................................................................................... 97

5.1 SQL Server 2012 で提供される BI 新機能の概要 ........................................................ 98

5.2 付録: サンプル データベース(NorthwindJ)の作成 .................................................. 104

Page 4: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

4

SSTTEEPP 11.. SSQQLL SSeerrvveerr 22001122 のの概概要要

この STEP では、SQL Server の最新バージョンである SQL Server 2012 で

提供される DWH(データ ウェアハウス)関連の新機能の概要を説明します。

この STEP では、次のことを学習します。

SQL Server 2012 の概要

SQL Server 2012 で提供される主な DWH 関連の新機能の概要

Page 5: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

5

1.1 SQL Server 2012 の概要

SQL Server 2012 の概要

SQL Server の最新バージョンである SQL Server 2012 には、非常に多くの新機能が提供さ

れています。その主なものは、次のとおりです。

SQL Server AlwaysOn による可用性の向上(新機能編 No.2 で詳しく説明)

列ストア インデックスによる飛躍的な性能向上(本自習書で詳しく説明)

DWH 関連の強化(本自習書で詳しく説明)

DQS(Data Quality Services)によるデータ品質の向上や、BI 分析関数の提供など

開発生産性の向上(新機能編 No.1 で概要を説明)

新しい Transact-SQL 関数や、SQL Server Data Tools(SSDT)の提供など

ビッグデータ対応のインメモリ BI(新機能編 No.4 で概要を説明)

インメモリのカラム ベース エンジン「xVelocity」による、ビッグデータ対応の高速 BI

機能(Analysis Services テーブル モデル:Tabular Model)

BI 関連の強化(新機能編 No.4 と No.5 で詳しく説明)

Power View による容易なデータ分析レポート作成や、Reporting Services のデータ

警告機能、PowerPivot のバージョンアップなど

SQL Server 2012 には、非常に多くの新機能が提供されていますが、この自習書では DWH(デ

ータ ウェアハウス)関連の新機能を詳しく説明します。その他の機能については、本自習書シリ

ーズの新機能編「No.1 新機能ダイジェスト」、「No.2 SQL Server AlwaysOn による可用性の

向上」、「No.4 BI新機能ダイジェスト」、「No.5 Power View」で詳しく説明していますので、

こちらもぜひご覧いただければと思います。

SQL Server 2012 評価版(Evaluation)のダウンロード

SQL Server 2012 には、6 ヶ月間限定で利用できる評価版もあります。これは、「SQL Server

2012 Evaluation」と呼ばれ、Enterprise エディションとまったく同じ機能を備えています。SQL

Server 2012 Evaluation は、以下の URL からダウンロードすることができます。

SQL Server 2012 Evaluation

http://www.microsoft.com/ja-jp/download/details.aspx?id=29066

Page 6: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

6

1.2 SQL Server 2012 で提供される主な DWH 新機能の概要

SQL Server 2012 で提供される主な DWH 新機能の概要

SQL Server 2012 には、非常に多くの DWH(データ ウェアハウス)関連の新機能が提供され

ています。ここでは次の 4 つに分けて概要を説明します。

列ストア インデックスによる飛躍的な性能向上

DQS(Data Quality Services)によるデータ品質の向上

DWH/BI(データ分析)で役立つ Transact-SQL 分析関数のサポート

BI(ビジネス インテリジェンス)関連の機能強化

列ストア インデックスによる飛躍的な性能向上

SQL Server 2012 では、データベース エンジンおよび DWH(データ ウェアハウス)エンジ

ンの機能強化として「列ストア インデックス」が提供されました。このインデックスは、SQL

Server 2008 R2 の PowerPivot で実装された xVelocity エンジン(インメモリのカラムベ

ース エンジン)を RDB へ応用したものです。このエンジンでは、列単位でインデックスを格納

し、それらは高度に圧縮されています。

列ストア インデックスは、大量のデータに対する集計処理時に大きな性能向上を期待できる機能

です。特に、夜間バッチ処理時(夜間バッチでの日次集計や月次集計処理など)や、DWH(デー

タ ウェアハウス)環境での集計処理時に大変役立つ機能です。弊社のお客様データ(1 億 2 千万

件の DWH)を利用して、列ストア インデックスの性能効果を検証したところ、以下のような結

果が得られました。

詳細は Step2 で説明していますが、列ストア インデックスを採用することで、25~102倍もの

性能向上を確認することができました。

102倍

59.7倍

46.9倍

25倍

テストに利用したハードウェア環境・Xeon 2.66GHz Quad*2(計8コア)・メモリ 32GB・RAID 10 ストレージ(2GB キャッシュ)

Page 7: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

7

列ストア インデックスは、作成も簡単で、次のように操作するだけで作成できます。

DQS(Data Quality Services)によるデータ品質の向上

DQS(Data Quality Services)は、データ ウェアハウスの構築に欠かせない、データ品質の向上

が可能になる機能です。DQS を利用すると、いわゆる「データ クレンジング」や「名寄せ」とい

った処理が可能になり、データ品質に問題がある場合(同一データが異なる形式で格納されていた

り、入力ミスなどで不正なデータが格納されていたりする場合)を解決することができるようにな

ります。

以下の画面は、DQS ツールを利用して、間違ったデータを正しいデータへ変換するためのルール

を定義しているときの様子です。

列ストア インデックスを作成しているところ

列ストア インデックスへ含める列の一覧

ここで入力した値へ修正するようにする→ 正しい値へ変換

DQS ツールで、データ品質を高めるためのルール作成が可能

間違った値

正しい値

Page 8: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

8

また、このような名前の修正(変換)だけでなく、文字列の長さが正しいかどうかをチェックした

り(たとえば商品コードが 5桁かどうかをチェックしたり)、正規表現を利用したデータのチェッ

クを行ったりすることも可能です。

このように DQS ツール上で作成したルール/品質チェックは、次のように Integration

Services の「DQS クレンジング」タスクを利用することで、実際の処理を実行することができ

ます。

データ品質を向上させるためのさまざまな

チェックが可能

DQS クレンジングタスクでクレンジン

グ処理を実行

Page 9: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

9

データ分析で役立つ分析関数のサポート

SQL Server 2012 では、DWH/BI で役立つ Transact-SQL 分析関数(Analytic Functions)

が多数サポートされるようになりました。LEAD や LAG、CUME_DIST 関数などのサポートや、

ウィンドウ操作が可能な OVER 句がサポートされたことによって、データ分析でよく利用する計

算値(累積値や比率、前年同月値、移動累計、移動平均など)を簡単に計算可能になりました。

以下の画面は、前年同月や、累積金額を取得しているときの様子です。

前年同月(2005年 1月)の受注金額

前年同月の取得

2005年 1月と 2月を足した金額

2005年 1月~12月までを足した金額

2006年 1月と 2月を足した金額

2005年 1月と 2月、3月 を足した金額

累積金額の取得

Page 10: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

10

BI 関連の主な新機能

SQL Server 2012 では、BI(ビジネス インテリジェンス)関連の機能も大きく強化されていま

す。その主なものは、次のとおりです。

Power View による、より容易なデータ分析レポートの作成

SQL Server 2012 では、Power View と呼ばれる、新しいデータ分析/レポーティ

ング ツールが提供されました。Power View を利用すると、従来のレポーティング ツ

ールであるレポートビルダーや、高度なデータ分析が可能な PowerPivot for Excel ツ

ールよりも、容易に見栄えの良いデータ分析レポートを作成することが可能です。以下の

画面は、データ分析レポートを作成しているときの様子です。

このように、より使いやすいレポーティング ツールが登場したことで、エンドユーザー

が自らレポートを作成する「セルフ サービス データ分析」がより実現しやすくなりまし

た。

PowerPivot for Excel の強化(バージョン アップ)

SQL Server 2012 では、PowerPivot for Excel がバージョン アップして、ダイアグ

ラム ビューや KPI、書式、並べ替え列、ドリルスルー、階層、親子階層、BLOB データ

のサポート、DAX 関数の強化など、多数の新機能の提供により、さらにパワフルなデー

タ分析レポートが作成可能になりました。以下の画面は、KPI をグラフィカルに設定し

ているときの様子です。

画像を表示可能

推移を確認可能な動的なバブル チャート

グラフが動的に変化。グラフ自身がスライサー(フィルター)となる

Power View で、データ分析レポートを作成しているときの様子

Page 11: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

11

Analysis Services でのテーブル モデルのサポート(xVelocity インメモリ BI)

SQL Server 2012 では、Analysis Services にテーブル モデル(Tabular Model)

が提供されました。テーブル モデルの最大の特徴は、「インメモリでの動作」と「ロール

を利用した行レベルのセキュリティ」、「パーティショニング」機能が利用できる点です。

これにより、セキュリティ強化やビッグデータへの対応、性能向上を実現することも可能

になりました。

テーブル モデルは、xVelocity モード(PowerPivot で採用されたインメモリのカラム

ベース エンジン)で動作する Analysis Services 上へ配置することが可能なモデル構造

です。以下の画面は、テーブル モデルのプロジェクトを作成しているときの様子です。

Reporting Services のデータ警告 Alert)機能

SQL Server 2012 では、Reporting Services の新機能の 1 つとして「データ警告」

KPI をグラフィカルに設定

Analysis Services テーブル モデル

(Tabular Model)

Page 12: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

12

機能が提供されました。この機能を利用すれば、レポート内のデータを利用して、特定の

ルールに基づいて、メールを送信するといったことを簡単に行えるようになります。たと

えば、「在庫<=発注点」というルールを設定して、在庫が発注点を下回ったら、メール

を送信する、という設定の場合は、次のように設定することができます。

Reporting Services での Excel エクスポート時のフォーマットの変更(xlsx 形式へ)

Integration Services のユーザー インターフェース変更(操作性の向上)

MDS(マスター データ サービス)の Excel アドイン

これらの BI 関連の新機能については、本自習書シリーズの新機能編 No.4「BI 新機能ダイジェ

スト」で詳しく説明しているので、こちらもぜひご覧いただければと思います。

このように、SQL Server 2012 では多くの DWH/BI 関連の新機能が提供されています。中で

も一番の目玉機能は、「列ストア インデックス」による飛躍的な性能向上です。以降では、これら

の新機能を簡単に試せるように、ステップ バイ ステップ形式で画面ショット満載で説明しますの

で、ぜひ試しながら読み進めてください。

データ警告の設定

「在庫 <= 発注点」というルールを設定し、在庫が発注点を下回ったらメールを送信するようにデータ警

告を設定

メールの送信先や件名の設定

警告を実行する間隔を設定

在庫 <= 発注点という条件に合致するデータのみが送信

されてきている

データ警告機能によって送信された

メール

Page 13: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

13

SSTTEEPP 22.. 列列スストトアア イインンデデッッククスス

にによよるる飛飛躍躍的的なな性性能能向向上上

この STEP では、SQL Server 2012 で提供される列ストア インデックスにつ

いて詳しく説明します。

この STEP では、次のことを学習します。

列ストア インデックスによる飛躍的な性能向上

列ストア インデックスの作成方法

列ストア インデックスの無効化/有効化

列ストア インデックスのサイズの確認

Page 14: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

14

2.1 列ストア インデックスによる飛躍的な性能向上

列ストア インデックスによる飛躍的な性能向上

列ストア インデックスは、大量のデータに対する集計処理で大きな性能向上を期待できる新機能

です。特に、夜間バッチ処理時(夜間バッチでの日次集計や月次集計処理など)や、DWH(デー

タ ウェアハウス)環境での集計処理に大変役立つ機能です。

列ストア インデックスは、SQL Server 2008 R2 の PowerPivot for Excel で実装されたイ

ンメモリのカラムベース エンジン(xVelocity エンジン)を RDB へ応用したものです。このエ

ンジンでは、列単位でインデックスを格納し、それらは高度に圧縮されています。

列ストア インデックスの効果(弊社事例:1.2億件で 25~100倍の性能向上)

弊社のお客様データ(1億 2千万件の DWH)を利用して、列ストア インデックスの性能効果を

検証したところ、以下のような結果が得られました。

検証で利用したのは売上データが 1 億 2 千万件格納されている「売上」テーブルで、このテーブ

ルには「売上年月」、「売上金額」、「売上数量」列などがあり、以下の SELECT ステートメントを

実行したときの結果を比較しました。

-- DISTINCT

SELECT DISTINCT 売上年月 FROM 売上

-- GROUP BY

SELECT 売上年月, SUM(売上金額), SUM(売上数量) FROM 売上 GROUP BY 売上年月

グラフの FullScan は、インデックスが使用されないフル テーブル スキャンが実行されたとき

102倍

59.7倍

46.9倍

25倍

テストに利用したハードウェア環境・Xeon 2.66GHz Quad*2(計8コア)・メモリ 32GB・RAID 10 ストレージ(2GB キャッシュ)

Page 15: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

15

の速度、IndexScan は、非クラスター化インデックスを(売上年月, 売上金額, 売上数量)で作

成/利用したとき、ColumnStore が列ストア インデックスを作成/利用したときの実行速度で

す。ベンチマーク結果の公開は、使用許諾契約書で禁じられているので、グラフ内の結果は、それ

ぞれ列ストア インデックスでの実行時間を 100 とした場合の相対値で表しています。

列ストア インデックスを利用することで、DISTICT 処理では、フル スキャンに比べて 102倍、

インデックス スキャンに比べて 59.7倍の性能向上、GROUP BY 処理では、フル スキャンに比

べて 46.9倍、インデックス スキャンに比べて 25倍もの性能向上を確認することができました。

なお、各テストで使用したデータは、すべてメモリ上のデータ バッファ キャッシュ内へ格納され

ている状態でテストしました。したがって、初回アクセス時の(メモリ内にデータが存在しない場

合の)ディスクからの読み取りが伴う場合には、さらに性能差が顕著に現れることになります。

今回の結果の 25倍という差は非常に大きいもので、たとえば次のような「売上年月ごとの売上金

額を表示するレポート」を思い浮かべてみてください。

このレポートを表示するのに今まで 10 秒かかっていたとします。ここに列ストア インデックス

を利用できるとすれば、25倍もの性能向上が得られるので、わずか 0.4秒(10秒の 25分の 1

のスピード)でレポートが表示されるわけです。コンピューターの世界では、3秒以上の待ち時間

があったとすると、ユーザーが "遅い" と感じると言われています。しかし、従来のインデックス

の作成方法では、データ件数の規模が数億件レベルになる場合には、数秒間もの待ち時間が発生し

てしまうのです。これを列ストア インデックスに変更することができれば、1 秒以内でのレスポ

ンスを期待できるようになります。

また、列ストア インデックスは、このように GROUP BY 演算などによる集計処理で大きな効果

を発揮するので、夜間バッチ処理時(夜間バッチでの日次集計や月次集計処理など)にも大きな性

能向上を期待できます。

Page 16: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

16

2.2 列ストア インデックスの作成方法

列ストア インデックスの作成方法

列ストア インデックスの作成方法は、非常に簡単です。Management Studio を利用する場合は、

次のように[インデックス]フォルダーを右クリックして[新しいインデックス]の[非クラスタ

ー化 Columnstore インデックス]をクリックします。

[新しいインデックス]ダイアログが表示されたら、次のように[追加]ボタンをクリックします。

["テーブル名" から列を選択]ダイアログが表示されるので、列ストア インデックスに含めたい

列を選択して、[OK]ボタンをクリックします。

列ストア インデックスに含めたい列を選択

2

1

3

Page 17: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

17

[新しいインデックス]ダイアログへ戻ったら、[OK]ボタンをクリックします。

以上の操作だけで列ストア インデックスの作成が完了です。

CREATE INDEX ステートメントを利用して作成したい場合にも、次のように COLUMNSTORE

キーワードを追加するだけで列ストア インデックスを作成することができます。

CREATE NONCLUSTERED COLUMNSTORE INDEX インデックス名

ON テーブル名 (列名 1, 列名 2, 列名 3, …)

従来の非クラスター化インデックスを作成するときと同様、列名には、インデックスに含めたい列

をカンマ区切りで指定するだけです。

なお、[新しいインデックス]ダイアログでは、次のように[スクリプト]ボタンをクリックすれ

ば、GUI で操作したものをスクリプト化(CREATE INDEX を生成)することも可能です。

生成されたスクリプト

Page 18: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

18

Let's Try

それでは、列ストア インデックスを試してみましょう。

1. まずは、列ストア インデックスをテストするためのデータベースを作成するために、次のよう

に CREATE DATABASE ステートメントを実行します。

-- データベース「CSItestDB」の作成。C:\CSItest フォルダーへ作成

CREATE DATABASE CSItestDB

ON PRIMARY ( NAME = 'CSItestDB'

, FILENAME = 'C:\CSItest\CSItestDB.mdf'

, SIZE = 5120MB )

LOG ON ( NAME = 'CSItestDB_log'

, FILENAME = 'C:\CSItest\CSItestDB.ldf'

, SIZE = 300MB )

go

データベース名は「CSItestDB」として、データ ファイル(.mdf)は 5GB、ログ ファイ

ル(.ldf)は 300MB で作成しています。データベースの作成先には「C:\CSItest」フォル

ダーを指定していますが、このフォルダーは任意のパスへ変更してください。

2. 次に、データベース内にテーブル「t1」を作成して、1,000万件のデータを追加します

-- テーブル「t1」の作成

USE CSItestDB

CREATE TABLE t1

( a int IDENTITY PRIMARY KEY

, b int

, c varchar(3) DEFAULT DATEPART(ms, GETDATE())

, d char(200) DEFAULT 'dummy1'

, e char(200) DEFAULT 'dummy2'

)

-- 10,000,000(1000万件)のデータを追加

SET NOCOUNT ON

DECLARE @i int = 1, @b int = 1

WHILE @i <= 10000000

BEGIN

IF @i % 10000 = 0 SET @b = @i

INSERT INTO t1(b) VALUES(@b)

SET @i += 1

END

SET NOCOUNT OFF

1,000 万件のデータを追加しているので、環境にもよりますが、実行には 30 分~2 時間くら

いの時間がかかります(ディスクが低速な場合には、さらに実行時間が長くなります)。

3. データの追加が完了したら、次のように SELECT ステートメントを実行して、追加されたデー

タを確認しておきましょう。

Page 19: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

19

-- 上位 10万件を確認

SELECT TOP 100000 * FROM t1

t1 テーブルには a列(IDENTITY による連番)、b列、c列(現在時刻のミリ秒の部分を抜

き出したものを格納 07:55.333(7 分 55.333 秒)なら 333 の部分を格納)を用意して、

WHILE ループで 1,000 万回 INSERT ステートメントを実行しています。b 列には、

10,000件ごとに、10,000、20,000、30,000 という値が入るようにしています。

4. 次に、COUNT 関数を利用して、データ件数が 1,000万件であることを確認しておきましょう。

SELECT COUNT(*) FROM t1

列ストア インデックスの作成

次に、列ストア インデックスを作成してみましょう。

1. ここでは、次のように a列、b列、c列を含めた列ストア インデックスを「cidx1」という名

前で作成します。

CREATE NONCLUSTERED COLUMNSTORE INDEX cidx1

ON t1(a, b, c)

a 列には1 からの連番

b 列は 10000ごとに同じ値

c 列には実行時のミリ秒 を格納

1000万件のデータがあることを確認

Page 20: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

20

「コマンドは正常に完了しました」と表示されれば、列ストア インデックスの作成が完了で

す。

2. 次に、b 列に対して DISTINCT キーワードを付けて SELECT ステートメントを実行してみ

ましょう。このとき、ツールバーの[実際の実行プランを含める]をクリックして、クエリ実

行後に実行プラン(実行計画)を表示するようにします。

-- 実行プランの確認

SELECT DISTINCT b FROM t1

b 列の重複値を除いた結果を取得できていることを確認できます。確認後、次のように[実行

プラン]タブをクリックして、実行プランを確認します。

一番右に「Columnstore インデックス スキャン t1.cidx1」があることを確認できます。

このアイコンは、列ストア インデックスがスキャンされたときに表示されるものです。

3. 次に、クエリ ヒントとして「WITH(INDEX=0)」を付けて、全件スキャンをするように明示

指定して(インデックスを利用しないようにして)、同じクエリを実行してみます。

-- 全件スキャンを明示指定

SELECT DISTINCT b FROM t1 WITH(INDEX=0)

3

クエリを記述2

「実際の実行プランを含める」をクリック

1

b 列の重複値を除いた結果

列ストア インデックスのインデックス スキャン

1

Page 21: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

21

今度は、一番右に「Clustered Index Scan」と表示されて、クラスター化インデックスの

全件スキャン(=テーブルの全スキャンと同等)が実行されていることを確認できます。

IO 数や CPU 時間、実行時間の確認

次に、SET STATISTICS コマンドを利用して、クエリ実行時の IO 数や CPU 時間、実行時間

などを比較してみましょう。

1. 次のように SET STATISTICS コマンドで IO ON、TIME ON を実行して、前述のクエリを

実行します(列ストア インデックスに関しては、クエリヒントで「WITH INDEX=cidx1」

を付けて、確実に列ストア インデックスを利用するように指定して実行します)。

SET STATISTICS IO ON

SET STATISTICS TIME ON

SELECT DISTINCT b FROM t1 WITH(INDEX=0) -- 全件スキャン

SELECT DISTINCT b FROM t1 WITH(INDEX=cidx1) -- 列ストア インデックス

このクエリの実行時は、より正確な時間を計測するために、ツールバーの[実際の実行プラン

を含める]をクリックして、選択状態を外して、実行プランを表示しないようにしておいてく

ださい。

クラスター化インデックスのフル スキャン(全件スキャン)

1

3

クエリを記述2

「実際の実行プランを含める」をクリックして、実行プランを

表示しないようにする

1

Page 22: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

22

2. 実行後、[メッセージ]タブを開くと、I/O 数や CPU 時間、実行時間などが表示されることを

確認できます。

全件スキャンでは、論理読み取り数(メモリ上のデータ バッファ キャッシュから読み取った

ページ数)が 538,063 ページ(約 4.2GB)、列ストア インデックス利用時は、わずか 80

ページ(約 0.6MB)であることを確認できます。CPU 時間や実行時間(経過時間)に関し

ては、ハードウェア環境によって大きく異なりますが、桁違いの性能差が出ていることを確認

できると思います(画面は、実行時間は 22倍、CPU 時間は 2000倍もの差が出ています。

この結果のハードウェア環境は、Core i7-2600K、16GB メモリを搭載した PC 上の仮想マ

シンを利用していて、仮想マシン対しては 4 コア、8GB メモリを割り当てています)。

Note: メモリが少ない場合は、さらに性能差が大きくなる

全件スキャンでは、約 4.2GB の読み取りが発生するため、SQL Server に割り当て可能なメモリが 4.2GB 未満

の場合には、ディスクからの読み取りが発生することになる(先行読み取りが発生してしまう)ので、列ストア イ

ンデックスとの性能差はさらに開くことになります。

たとえば、弊社環境で、仮想マシンへのメモリ割り当てを 4GB へ減らした場合は、以下のような結果になります。

全件スキャンでの実行時間が約 39秒かかっているのに対して、列ストア インデックスではわずか 149ミリ秒で

完了していて、その差はなんと約 265倍にもなっています。

全件スキャン時の I/O 数、CPU 時間、実行時間

列ストア インデックス利用時のI/O 数、CPU 時間、実行時間

1

全件スキャン時の I/O 数、CPU 時間、実行時間

列ストア インデックス利用時のI/O 数、CPU 時間、実行時間

先行読み取り数はディスクから読み取った I/O 数

Page 23: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

23

Note: 大量データになればなるほど、性能差が大きくなる

列ストア インデックスは、データ件数が大量になればなるほど、性能差が大きくなります(列ストア インデック

スのほうが高速にデータを取得できます)。これは、列ストア インデックスの高度な圧縮によって、読み取り I/O

数の差が大きくなるためです。また、データベースを格納しているストレージが低速な場合にも、性能差が大きく

なります(列ストア インデックスのほうが、より高速にデータを取得することができます)。

Note: 列ストア インデックスは並列クエリに最適化されている

後述の Note で詳しく説明しますが、列ストア インデックスは、並列クエリ(パラレル クエリ)で最も効果を発

揮するように設計/最適化されています。このため、CPU コアが 1 つのマシンや仮想環境で上記のクエリを検証

している場合は、本文中のような大きな性能効果を確認することができません。

なお、ベンチマーク結果の公開は、使用許諾契約書で禁じられていますが、本自習書では特別

な許可を得て、実行結果を掲載しています。また、実行結果は、筆者のハードウェア環境に依

存するものであり、すべての環境に当てはまるものではないことにこ注意ください。

非クラスター化インデックスの作成/比較

次に、列ストア インデックスではない通常の非クラスター化インデックスを作成して、列ストア

インデックスと比較してみましょう。

1. 次のように、非クラスター化インデックスを b列と c列に対して作成してみます。

-- 非クラスター化インデックスの作成

CREATE NONCLUSTERED INDEX idx_bc

ON t1(b, c)

2. 作成後、クエリ ヒントを指定せずに同じクエリを実行して、実行プランを確認します。

SELECT DISTINCT b FROM t1

2「実際の実行プランを含める」をクリック

1

列ストア インデックスのインデックス スキャン

Page 24: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

24

非クラスター化インデックスを作成した場合にも、クエリ オプティマイザーによって列スト

ア インデックスが選択されていることを確認できます。

なお、データ件数が少ない場合(100 万件などで試している場合)には、クエリ オプティマ

イザーが非クラスター化インデックス(idx_bc)を利用したほうが効率的だと判断して、非

クラスター化インデックスの Index Scan が実行される場合もあります。

3. 次に、クエリ ヒントを利用して、全件スキャンや非クラスター化インデックスを明示指定して、

I/O 数や CPU 時間、実行時間などを比較してみましょう(このクエリの実行時は、より正確

な時間を計測するために、実行プランを表示しないようにしておいてください)。

SELECT DISTINCT b FROM t1 WITH(INDEX=0) -- 全件スキャン

SELECT DISTINCT b FROM t1 WITH(INDEX=idx_bc) -- 非クラスター化 Index Scan

SELECT DISTINCT b FROM t1 WITH(INDEX=cidx1) -- 列ストア インデックス

論理読み取り数は、全件スキャンでは 538,063 ページ(約 4.2GB)、非クラスター化インデ

ックスでは 26,274ページ(約205MB)、列ストア インデックスでは 80ページ(約0.6MB)

であることを確認できます。CPU 時間や実行時間に関しては、ハードウェア環境によっても

大きく異なりますが、非クラスター化インデックスを作成することで、全件スキャンよりも速

く実行することができるようになっていますが、列ストア インデックスと比べると、桁違い

の大きな性能差が出ていることを確認できます。

全件スキャン時の I/O 数、CPU 時間、実行時間

列ストア インデックス利用時のI/O 数、CPU 時間、実行時間

非クラスター化の Index Scan 時のI/O 数、CPU 時間、実行時間

Page 25: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

25

データ バッファ キャッシュをクリアした場合

次に、データ バッファ キャッシュをクリアした場合を比較してみましょう。

1. データ バッファ キャッシュをクリアするには、次のように「DBCC DROPCLEANBUFFERS」

を実行します。

DBCC DROPCLEANBUFFERS

SELECT DISTINCT b FROM t1 WITH(INDEX=0) -- 全件スキャン

DBCC DROPCLEANBUFFERS

SELECT DISTINCT b FROM t1 WITH(INDEX=idx_bc) -- 非クラスター化 Index Scan

DBCC DROPCLEANBUFFERS

SELECT DISTINCT b FROM t1 WITH(INDEX=cidx1) -- 列ストア インデックス

データ バッファ キャッシュをクリアしたことで、ディスクからの読み取り(先行読み取り)

が発生するため、全件スキャンでの結果が著しく低速になっていることを確認できます(画面

では、全件スキャンでの実行時間が 39秒かかっているのに対して、列ストア インデックス

ではわずか 158ミリ秒で完了していて、その差は 247倍にもなります)。

全件スキャン時の I/O 数、CPU 時間、実行時間

列ストア インデックス利用時のI/O 数、CPU 時間、実行時間

非クラスター化の Index Scan 時のI/O 数、CPU 時間、実行時間

先行読み取り数はディスクから読み取った I/O 数

先行読み取り数

先行読み取り数

Page 26: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

26

GROUP BY の場合

次に、GROUP BY 演算を行った場合を比較してみましょう。

1. 次のように GROUP BY 句に b 列を指定して、b 列でグループ化し、a 列の MAX 値を取得

してみます、

SELECT b, MAX(a) FROM t1 WITH(INDEX=0) -- 全件スキャン

GROUP BY b

SELECT b, MAX(a) FROM t1 WITH(INDEX=idx_bc) -- 非クラスター化 Index Scan

GROUP BY b

SELECT b, MAX(a) FROM t1 WITH(INDEX=cidx1) -- 列ストア インデックス

GROUP BY b

論理読み取り数は、全件スキャンでは 538,063 ページ(約 4.2GB)、非クラスター化インデ

ックスでは 26,274 ページ(約 205MB)、列ストア インデックスでは 10,091 ページ(約

b 列でグループ化してa 列の MAX 値を取得

全件スキャン時の I/O 数、CPU 時間、実行時間

カラム ストア インデックス利用時のI/O 数、CPU 時間、実行時間

非クラスター化の Index Scan 時のI/O 数、CPU 時間、実行時間

1

Page 27: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

27

78.8MB)であることを確認できます。CPU 時間や実行時間に関しては、ハードウェア環境

によって大きく異なりますが、列ストア インデックスでは桁違いの性能が出ていることを確

認できます。このように、列ストア インデックスは、GROUP BY 演算や DISTINCT 処理な

どで大きな効果を発揮する、性能向上に大変役立つ機能です。

Note: 列ストア インデックスは、並列クエリに最適化されている。MAXDOP 1 を避ける

列ストア インデックスは、複数コアを利用した並列クエリ(パラレル クエリ)での処理で最も効果を発揮できる

ように設計/最適化されています。このため、MAXDOP 1 のように並列度を 1 に設定(つまり並列クエリを利

用しない設定)をした場合は、列ストア インデックスが効果的に働きません。

これは次のような状況です。

上記のように OPTION(MAXDOP 1) を指定して、前述の GROUP BY 演算を実行した場合は、列ストア イン

デックスによる性能向上の恩恵が低くなっていることを確認できると思います。

したがって、列ストア インデックスを利用する場合は、MAXDOP 1 を利用せずに、並列クエリで処理すること

をお勧めします。

全件スキャン時の I/O 数、CPU 時間、実行時間

列ストア インデックス利用時のI/O 数、CPU 時間、実行時間

非クラスター化の Index Scan 時のI/O 数、CPU 時間、実行時間

MAXDOP 1 を付けた場合

Page 28: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

28

2.3 列ストア インデックスでのデータ更新

列ストア インデックスでのデータ更新

次に、列ストア インデックスがある場合のデータ更新を試してみましょう。

1. 次のように UPDATE ステートメントを実行して、a=1 のデータを更新してみます。

-- データ更新

UPDATE t1

SET b = 999

WHERE a = 1

結果は、上画面のエラーになり、UPDATE ステートメントは失敗します。列ストア インデ

ックスを設定した場合は、データの更新(UPDATE/DELETE/INSERT)ができなくなりま

す。データ更新を行うには、列ストア インデックスを無効化または削除する必要があります。

2. 列ストア インデックスを無効化するには、次のように ALTER INDEX ステートメントで

DISABLE を指定します。

-- 列ストア インデックスの無効化

ALTER INDEX cidx1

ON t1

DISABLE

「コマンドは正常に完了しました」と表示されれば、無効化が完了です。

3. 次に、もう一度 UPDATE ステートメントを実行して、データを更新してみましょう。

Page 29: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

29

-- データ更新

UPDATE t1

SET b = 999

WHERE a = 1

今度は、データ更新が成功していることを確認できます。

4. 次に、SELECT ステートメントを実行して、更新された結果を確認しておきましょう。

-- 確認

SELECT * FROM t1

WHERE a = 1

a=1 のデータの b 列の値が 999 に更新されていることを確認できます。

5. 次に、列ストア インデックスを明示的に指定して、GROUP BY 演算を実行してみましょう。

SELECT b, MAX(a)

FROM t1 WITH(INDEX=cidx1)

GROUP BY b

結果は、エラーとなります。列ストア インデックスが無効化されている場合は、列ストア イ

ンデックスを利用することができません。

Page 30: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

30

6. 無効化した列ストア インデックスを有効化するには、次のように ALTER INDEX ステートメ

ントで REBUILD(再構築)を指定します。

-- 列ストア インデックスの有効化

ALTER INDEX cidx1

ON t1

REBUILD

「コマンドは正常に完了しました」と表示されれば、有効化が完了です。有効化にかかる時間

は、再構築(再作成)にかかる時間と同じなので、列ストア インデックスを作成したときと、

ほぼ同じぐらいの時間がかかります。

7. 有効化が完了したら、列ストア インデックスを指定して、GROUP BY 演算を行ってみましょ

う。

-- 有効化したことで実行できることを確認

SELECT b, MAX(a)

FROM t1 WITH(INDEX=cidx1)

GROUP BY b

今度は、結果を取得できたことを確認できます。

このように、列ストア インデックスでは、データ更新を行うことができないので、データを

更新する前に、無効化または削除を行っておく必要があります。

Page 31: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

31

2.4 列ストア インデックスのサイズの確認

列ストア インデックスのサイズの確認

次に、列ストア インデックスのサイズを確認してみましょう。

1. まずは、sys.indexes カタログ ビューを参照して、インデックス ID を確認します。

-- index_id の確認

SELECT index_id, name, * FROM sys.indexes

WHERE object_id = OBJECT_ID('t1')

画面では、列ストア インデックス(cidx1)が index_id=2、非クラスター化インデックス

(idx_bc)が index_id=4 となっていることを確認できます(インデックス ID は、皆さ

んの環境によって異なります)。PK_~ と表示されるインデックスは、クラスター化インデッ

クスです。

2. 次に、sys.dm_db_index_physical_stats 動的管理関数を利用して、クラスター化インデ

ックスと非クラスター化インデックスのサイズを確認してみましょう。

-- インデックス サイズの確認(リーフレベルのみ)

SELECT OBJECT_NAME(fg.object_id) AS objName, fg.index_id, i.name as IndexName

, fg.page_count, fg.page_count * 8 /1024.0 AS sizeMB

FROM

(SELECT * FROM

sys.dm_db_index_physical_stats ( DB_ID(), NULL, NULL, NULL , 'LIMITED') ) fg

INNER JOIN sys.indexes i

ON fg.object_id = i.object_id AND fg.index_id = i.index_id

クラスター化インデックスは、526,316 ページ(約 4.1GB)、非クラスター化インデックス

Page 32: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

32

は、25,835 ページ(約 202MB)であることを確認できます。この関数では、第 5 引数に

LIMITED を指定しているので、リーフページのサイズを取得することができています。

前述の GROUP BY や DISTINCT 処理時の論理読み取り数は、全件スキャンでは

538,063ページ(約4.2GB)、非クラスター化インデックスでは 26,274ページ(約205MB)、

列ストア インデックスでは 10,091 ページ(約 78.8MB)であることを思い出すと、イン

デックスのサイズ分の読み取りが発生していたことを確認できます。

column_store_segments、column_store_dictionaries

次に、列ストア インデックスのサイズを確認してみましょう。列ストア インデックスのサイズは、

dm_db_index_physical_stats 動的管理関数では確認することができません。サイズを確認す

るには、column_store_segments および column_store_dictionaries カタログ ビューを

利用する必要があります。

1. まずは、column_store_segments ビューを参照してみましょう。

-- column_store_segments

SELECT on_disk_size, *

FROM sys.column_store_segments

結果は、列ストア インデックスによって内部利用されているデータ(セグメントと呼ばれま

す)ごとに結果が出力されていることを確認できます。

2. column_store_segments ビューの結果のうち、on_disk_size がディスク上の実際のサ

イズになるので、次のように SUM 関数で合計サイズを確認できます。

-- segments の合計サイズ

SELECT SUM(on_disk_size)

FROM sys.column_store_segments

Page 33: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

33

結果は、51.2MB であることを確認できます。

3. 列ストア インデックスでは、ディクショナリと呼ばれるデータも存在して、このデータのサイ

ズを確認するためのビューが column_store_dictionaries です。これも SUM 関数で次の

ように合計を取得してみましょう。

-- dictionaries の合計サイズ

SELECT SUM(on_disk_size)

FROM sys.column_store_dictionaries

結果は、23.7KB であることを確認できます。

このように、列ストア インデックスのサイズを確認したい場合には、column_store_

segments および column_store_dictionaries カタログ ビューを利用する必要があり

ます。実際のテーブル サイズが 4.1GB(リーフのみ)、非クラスター化インデックスのサイ

ズが 202MB(リーフのみ)であることを考えると、列ストア インデックスは高度に圧縮さ

れていることを確認できると思います。

以上で、列ストア インデックスの確認が完了です。

このように、列ストア インデックスは、桁違いに性能を向上させることができ、夜間バッチ処理

時(夜間バッチでの日次集計や月次集計処理など)や、DWH(データ ウェアハウス)環境での集

計処理時に大変役立つ機能なので、ぜひ活用してみてください。

その他の列ストア インデックスの詳細(インデックスに含めることができる機能や、データ型な

どの制限事項、作成時のメモリ使用量、内部動作など)については、オンライン ブック(SQL Server

のヘルプ)や、以下の FAQ ページなどを参考にしてみてください。

SQL Server Columnstore Index FAQ

http://social.technet.microsoft.com/wiki/contents/articles/sql-server-columnstore-index-

faq.aspx

Page 34: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

34

SSTTEEPP 33.. DDWWHH//BBII でで役役立立つつ

TTrraannssaacctt--SSQQLL 分分析析関関数数

この STEP では、SQL Server 2012 で提供される DWH /BI で役立つ

Transact-SQL の分析関数(Analytic Functions)について説明します。

この STEP では、次のことを学習します。

分析関数(Analytic Functions)の概要

LAG、LEAD、FIRST_VALUE、LAST_VALUE 関数の利用

PERCENT_RANK、CUME_DIST 関数の利用

中央値の取得(PERCENTILE_CONT、PERCENTILE_DISC 関数)

前年同月や累積金額の取得

Page 35: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

35

3.1 DWH/BIの T-SQL 分析関数(Analytic Functions)のサポート

DWH/BI の T-SQL 分析関数(Analytic Functions)のサポート

SQL Server 2012 では、DWH(データ ウェアハウス)および BI(Business Intelligence)環

境で役立つ Transact-SQL の分析関数(Analytic Functions)が多数サポートされるようになり

ました。その主なものは、次のとおりです。

これらの分析関数では、ウィンドウ操作を行うことができるので、累積値や比率、前年同月値、移

動累計、移動平均などといったデータ分析でよく利用する計算値を簡単に導き出せるようになりま

す。これらの分析関数の基本構文は、次のとおりです。

関数名(引数1, 引数2, …)

OVER(

[PARTITION BY 列1, 列2, …] ORDER BY 列1, 列2, …)

[ROWS | RANGE BETWEEN .. AND ..]

ROW_NUMBER や RANK 関数などを利用する場合と同様、OVER 句で PARTITION BY や

ORDER BY を利用して、パーティション化(グループ化)や並べ替え列の指定を行います。ROWS

または RANGE では、BETWEEN .. AND .. で指定した範囲のウィンドウを作成することができ

ます。

Let's Try

それでは、分析関数を試してみましょう。

1. まずは、分析関数を試すためのデータベースとテーブルを次のように作成します。

-- データベース「afTestDB」の作成

CREATE DATABASE afTestDB

go

-- テーブル「afTest」の作成

CREATE TABLE afTest

( a int PRIMARY KEY

,b int

,c int )

分析関数 説明

LAG 指定した行数前の行を取得

LEAD 指定した行数後の行を取得

FIRST_VALUE 最初の行を取得

LAST_VALUE 最後の行を取得

PERCENT_RANK RANK のパーセント表示

CUME_DIST 累積分布値をパーセント表示

PERCENTILE_CONT 連続分布での指定したパーセントの値を取得

PERCENTILE_DISC 連続分布での指定したパーセントに近い最小値を取得

Page 36: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

36

-- データを 7件追加

INSERT INTO afTest VALUES(1, 111, 1)

INSERT INTO afTest VALUES(2, 222, 1)

INSERT INTO afTest VALUES(3, 333, 2)

INSERT INTO afTest VALUES(4, 444, 2)

INSERT INTO afTest VALUES(5, 555, 1)

INSERT INTO afTest VALUES(6, 111, 3)

INSERT INTO afTest VALUES(7, 222, 3)

-- データの確認

SELECT * FROM afTest

データベースを「afTestDB」という名前で作成して、その中に「afTest」テーブルを作成し、

データを 7件追加しています。

LAG 関数(前の行を取得)

まずは、LAG 関数を試してみましょう。この関数は、前の行を取得することができます。

1. 次のように LAG 関数の引数へ b 列を与えて、OVER 句の ORDER BY 句で a 列を指定し

て実行してみましょう。

SELECT a, b, LAG(b) OVER(ORDER BY a)

FROM afTest

これにより、a 列で並べ替えた結果に対して、b 列の 1 つ前の値を取得できていることを確

1つ前の行

Page 37: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

37

認できます。

2. 次に、LAG 関数の第 2 引数に「2」を指定して、実行してみましょう。

SELECT a, b, LAG(b, 2) OVER(ORDER BY a)

FROM afTest

今度は、b 列の 2 つ前の値を取得できていることを確認できます。このように、LAG 関数で

は、指定した値より前の値を取得することができます。

3. 次に、c 列でパーティション化(グループ化)して、前の行を取得してみましょう。

SELECT a, c, b, LAG(b) OVER(PARTITION BY c ORDER BY a)

FROM afTest

今後は、c 列でグループ化されて、その中で b 列の 1 つ前の値を取得できていることを確認

できます。このように、LAG 関数の OVER 句では、PATITION BY 句を利用して、パーテ

ィション化(グループ化)を行うことができます。

LEAD 関数(後の行を取得)

次に、LEAD 関数を試してみましょう。この関数は、LAG とは逆に、後ろの行を取得することが

できます。

2つ前の行

Page 38: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

38

1. まずは、LEAD 関数の引数へ b 列を与えて、ORDER BY 句で a 列を指定して実行してみま

しょう。

SELECT a, b, LEAD(b) OVER(ORDER BY a)

FROM afTest

a 列で並べ替えた結果に対して、b 列の 1 つ後ろの値を取得できていることを確認できます。

2. 次に、LEAD 関数の第 2 引数に「2」を指定して、実行してみましょう。

SELECT a, b, LEAD(b, 2) OVER(ORDER BY a)

FROM afTest

今度は、b 列の 2つ後ろの値を取得できていることを確認できます。

3. 次に、c 列でパーティション化して、後の行を取得してみましょう。

SELECT a, c, b, LEAD(b) OVER(PARTITION BY c ORDER BY a)

FROM afTest

Page 39: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

39

今後は、c 列でグループ化されて、その中で b 列の 1 つ後ろの値を取得できていることを確

認できます。

FIRST_VALUE(最初の値を取得)

次に、FIRST_VALUE 関数を試してみましょう。この関数は、その名のとおり、最初の値を取得

することができます。

1. まずは、FIRST_VALUE 関数の引数へ b 列を与えて実行してみましょう。

SELECT a, b, FIRST_VALUE(b) OVER(ORDER BY a)

FROM afTest

a 列で並べ替えた結果に対して、b 列の最初の値を取得できていることを確認できます。

2. 次に、c 列でパーティション化して、最初の行を取得してみましょう。

SELECT a, c, b, FIRST_VALUE(b) OVER(PARTITION BY c ORDER BY a)

FROM afTest

今後は、c 列でグループ化されて、その中で b 列の最初の値を取得できていることを確認で

きます。

Page 40: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

40

LAST_VALUE(最後の値を取得。ウィンドウ操作)

次に、LAST_VALUE 関数を試してみましょう。この関数も、その名のとおり、最後の値を取得

することができます。

1. まずは、LAST_VALUE 関数の引数へ b 列を与えて実行してみましょう。

SELECT a, b, LAST_VALUE(b) OVER(ORDER BY a)

FROM afTest

しかし、結果は全体としての最後の値ではなく、b 列と同じ値が取得されてしまっていること

を確認できます。これは、現在の行が最後の行と見なされてしまっているために発生していま

す。これを解決するには、ウィンドウ操作をする必要があります。

2. LAST_VALUE 関数は、次のように OVER 句でウィンドウ操作を利用して、実行する必要が

あります。

SELECT a, b

, LAST_VALUE(b)

OVER(ORDER BY a

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING )

FROM afTest

OVER 句では、ROWS または RANGE で、BETWEEN .. AND を利用して、ウィンドウ

Page 41: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

41

を作ることができ、UNBOUNDED PRECEDING でウィンドウの開始点、UNBOUNDED

FOLLOWING でウィンドウの終了点を最後の行にすることができます。これで、全体として

最後の値を取得することができます。

3. 次に、c 列でパーティション化して、最後の行を取得してみましょう。

SELECT a, c, b

, LAST_VALUE(b)

OVER(PARTITION BY c ORDER BY a

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING )

FROM afTest

PARTITION BY でパーティション化を行うことで、UNBOUNDED PRECEDING でパー

ティションの最初の行をウィンドウの開始点、UNBOUNDED FOLLOWING でパーティシ

ョンの最後の行をウィンドウの終了点にすることができます。

PERCENT_RANK(ランキング)

次に、PERCENT_RANK 関数を試してみましょう。この関数は、RANK 関数のパーセント表示

版で、指定した列のランキングを取得することができます。

1. まずは、ORDER BY 句に a列を指定して実行してみましょう。

SELECT a, b

, RANK() OVER(ORDER BY a)

, PERCENT_RANK() OVER(ORDER BY a)

FROM afTest

Page 42: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

42

RANK 関数では、1、2、3 位とランキングが表示されるのに対して、PERCENT_RANK 関

数では、0~1 の間のパーセンテージ(1 位が 0%、0.166 は 16.6%、最下位は 1 で 100%)

でランキングが表示されていることを確認できます。

2. 次に、ORDER BY 句に b 列を指定して、PERCENT_RANK を実行してみましょう。

SELECT a, b

, RANK() OVER(ORDER BY b)

, PERCENT_RANK() OVER(ORDER BY b)

FROM afTest

RANK 関数と同様、同じ値がある場合には飛び番が発生していること(RANK 関数では 1

位が 2 つあるので、2 位がなくて 3 位となる、PERCENT_RANK 関数では 0% が 1 位な

ので、これが 2 つ、3 位が 33.3%となっていること)を確認できます。

CUME_DIST(累積分布値)

1. 次に、COME_DIST 関数を試してみましょう。これは累積分布値を取得できる関数です。

SELECT a, b

, RANK() OVER(ORDER BY a)

, PERCENT_RANK() OVER(ORDER BY a)

, CUME_DIST() OVER(ORDER BY a)

FROM afTest

Page 43: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

43

0~1 の間のパーセンテージで累積分布値(最大値が 1 で、0.143(14.3%))ずつ累積され

た値)を取得できていることを確認できます。

中央値の取得(PERCENTILE_CONT、PERCENTILE_DISC)

次に、PERCENTILE_CONT と PERCENTILE_DISC 関数を試してみましょう。この 2 つは、

中央値(メジアン)を取得する場合に便利な関数です。

1. 中央値を取得するには、次のように引数に 0.5(50%)を指定して実行します。

SELECT a, c, b

, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY b) OVER(PARTITION BY c)

, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY b) OVER(PARTITION BY c)

FROM afTest

PERCENTILE_CONT と PERCENTILE_DISC 関数では、WITHIN GROUP で ORDER

BY 句を指定する必要があり、ここでは b 列で並べ替えるように指定しています。OVER 句

では、c 列でパーティション化しているので、c列でグループ化されて、その中の中央値を取

得しています。c 列が 1 のグループは、b 列が 111、222、555 なので中央値が 222、c

列が 2 のグループは、b列が 333、444 なので中央値が 388.5、PERCENTILE_DISC で

は、最小値を取るので 333 となっていることを確認できます。

以上が分析関数の基本的な利用方法になります。

Page 44: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

44

3.2 前年同月や累積金額の取得

前年同月や累積金額の取得

次に、分析関数の実用的な利用方法として、前年同月や累積金額を取得する方法を説明します。こ

こでは、サンプル スクリプトに含まれている NorthwindJ データベースを利用します(このデ

ータベースの作成手順については、付録へ記載しています)。

Let's Try

それでは、これを試してみましょう。

1. まずは、結果を取得しやすくするために、受注年月ごとの受注金額を取得するビューを次のよ

うに作成しておきます。

USE NorthwindJ

go

CREATE VIEW 年月毎売上

AS

SELECT YEAR(受注日) AS 年, MONTH(受注日) AS 月

, SUM( od.数量 * od.単価 ) AS 受注金額

FROM 受注明細 od

INNER JOIN 受注 o ON o.受注コード = od.受注コード

GROUP BY YEAR(受注日), MONTH(受注日)

go

2. 作成後、このビュー(年月毎売上)に対して SELECT ステートメントを実行して、結果を確認

します。

SELECT * FROM 年月毎売上

ORDER BY 年, 月

2005年の月ごとの売上金額

2006年の月ごとの売上金額

Page 45: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

45

前年同月値の取得(LAG 関数)

次に、前年同月の値を取得してみましょう。

1. 前年同月の値は、LAG 関数を利用して、次のように簡単に取得することができます。

SELECT *, LAG(受注金額, 12) OVER(ORDER BY 年, 月) AS 前年同月

FROM 年月毎売上

ORDER BY 年, 月

LAG 関数では ORDER BY 句で「年, 月」で並べ替えて、第 2 引数に「12」を指定してい

るので、12ヶ月前(1 年前)の売上金額(前年同月値)を取得することができています。

累積金額の取得(OVER .. ROWS ..)

次に、累積金額を取得してみましょう。

1. 累積金額は、ウィンドウ操作を行うことで取得することができます。次のように OVER 句で

ROWS BETWEEN .. AND .. を指定して実行してみます。

SELECT *, SUM(受注金額) OVER(

PARTITION BY 年 ORDER BY 年, 月

ROWS BETWEEN UNBOUNDED PRECEDING

AND CURRENT ROW ) AS 累積金額

FROM 年月毎売上

ORDER BY 年, 月

前年同月(2005年 1月)の受注金額

Page 46: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

46

OVER 句での ROWS または RANGE で、BETWEEN .. AND を利用したウィンドウ操作

は、SUM や AVG、MAX などの集計関数でも利用することができます。UNBOUNDED

PRECEDING を指定することで、そこからウィンドウを開始することができ、CURRENT

ROW で現在の行まで(処理を行っている行まで)と指定できるので、SUM 関数によって、

累積値を取得することができています。

なお、「ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW」は、

「ROWS UNBOUNDED PRECEDING」に省略して、次のように記述することも可能です。

SELECT *, SUM(受注金額) OVER(

PARTITION BY 年 ORDER BY 年, 月

ROWS UNBOUNDED PRECEDING ) AS 累積金額

FROM 年月毎売上

ORDER BY 年, 月

このように、SQL Server 2012 からは、ウィンドウ操作と分析関数がサポートされるよう

になったので、DWH/BI 環境でのデータ分析でよく利用する計算値(累積値や比率、前年同

月値、移動累計、移動平均など)を簡単に計算できるようになって大変便利になりました。

2005年 1月と 2月を足した金額

2005年 1月~12月までを足した金額

2006年 1月と 2月を足した金額

2005年 1月と 2月、3月 を足した金額

Page 47: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

47

SSTTEEPP 44.. DDQQSS((DDaattaa QQuuaalliittyy SSeerrvviicceess))

にによよるるデデーータタ品品質質のの向向上上

この STEP では、SQL Server 2012 で提供さ れる DQS (Data Quality

Services:データ品質サービス)機能について説明します。

この STEP では、次のことを学習します。

DQS(Data Quality Services)の概要

DQS のインストール方法

ナレッジ ベースの作成

データ品質プロジェクトの作成

Integration Services の「DQS クレンジング」タスクの利用

Page 48: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

48

4.1 DQS(Data Quality Services)による容易なデータ品質の向上

DQS(Data Quality Services)による容易なデータ品質の向上

SQL Server 2012 では、DQS(Data Quality Services:データ品質サービス)と呼ばれるデ

ータ品質を向上させるためのサービスが提供されました。DQS は、いわゆる「データ クレンジン

グ」(Data Cleansing)や「名寄せ」と呼ばれる処理が可能なサービスで、複数の業務システム(散

在したマスター データ)から DWH(データ ウェアハウス)を構築する際に大変役立つ機能です。

普段私たちが利用している業務システムでは、データの入力ミスや、システム上のイレギュラーな

処理によるデータの不整合や不一致などが起こり得ます。また、複数の業務システム(マスター デ

ータ)が存在する場合には、それぞれのマスター内でデータの格納方法がバラバラである場合があ

ります。たとえば、A というシステムでは「XXX株式会社」として登録している取引先が、B という

システムでは「XXX(株)」のように省略系で登録されていたりするケースなどがあります。また、

あるシステムでは「第一営業部」として登録されている部署名が、別のシステムでは「第 1 営業部」

のように漢字の「一」が数字の「1」として登録されてしまっているようなケースもあり得ます。

このようにデータ品質に問題がある場合(同一データが異なる形式で格納されていたり、入力ミス

などで不正なデータが格納されていたりする場合)を解決するための処理が「データ クレンジン

グ」と呼ばれています。クレンジング(Cleansing)は、「洗浄」という意味なので、データ クレン

ジングは、「データをきれいに洗う」=「データを正しい状態へ整える」という意味で使われてい

ます。このようなデータ クレンジングが可能なサービスが DQS(Data Quality Services)です。

その他のデータ

メイン フレーム(汎用機)や UNIX など

SQL Server

DWH(データ ウェアハウス)

さまざまな業務システム

さまざまな業務システムから DWH を構築取引先マスター

XXX株式会社

取引先マスター

XXX(株)

部署マスター

第一営業部

部署マスター

第1営業部

システムが違うと同一データが異なる形式で格納されている場合がある

システムが違うと同一データが異なる形式で格納されている場合がある

株が省略されている...

漢字の 一 と数字の 1 の違い

データの品質に問題がある可能性

DQS Client ツールのホーム画面

Page 49: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

49

DQS では、次の画面のように、データの修正先を簡単に定義することができるツールが用意され

ています。

この画面では、間違っているデータ「マイクロソフト日本株式会社」などの場合に、正しいデータ

「日本マイクロソフト株式会社」へ修正するようなルールの作成(シノニム:同一値の定義)を行

っています。

また、このような名前の修正(変換)だけでなく、文字列の長さが正しいかどうかのチェック(た

とえば商品コードが 5 桁かどうかのチェックなど)や、正規表現を利用したデータのチェックな

どを行うことも可能です。

ここで指定した値へ修正するようにする→ 正しい値へ変換

間違った値 正しい値

データ品質を向上させるためのさまざまな

チェックが可能

Page 50: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

50

このように DQS ツール上で作成したルール/品質チェックは、次のように Integration

Services の「DQS クレンジング」タスクを利用することで、実際の処理を実行することができ

ます。

DQS クレンジングタスクでクレンジン

グ処理を実行

Page 51: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

51

4.2 DQS(Data Quality Services)のインストール方法

DQS(Data Quality Services)のインストール方法

DQS(Data Quality Services)を利用するには、SQL Server 2012 のインストール時の[機

能の選択]ダイアログで、次のように「Data Quality Services」と「Data Quality Client」、

「Integration Services」の 3 つを選択しておく必要があります。

「Data Quality Services」はサーバー機能、「Data Quality Client」はルールを設定するため

の GUI ツール(前述の画面は、この Client ツールです)、「Integration Services」は、前述

の「DQS クレンジング」タスクを利用するためにインストールしておく必要があります。

インストールの実行(Data Quality Server のインストール)

Data Quality Services をインストール後は、次のように[スタート]メニューの[すべてのプ

ログラム]→[Microsoft SQL Server 2012]→[Data Quality Services]から[Data Quality

Server Installer]をクリックして、Data Quality Server(サーバー機能)をインストールし

ておく必要があります。

Page 52: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

52

このインストーラーでは、上記のようにデータベース マスター キーへ設定するパスワードの入力

が求められるので、任意のパスワード(8 文字以上の大文字/小文字/数字/特殊文字のうちの 3

種類を含んだもの。たとえば P@ssword123 など)を指定して、Enter キーを押下します。こ

れにより、パスワードの確認が求められるので、再度同じパスワードを入力すればインストールが

始まります。インストール中は、次のように表示されます(いくつかの警告が表示されますが、す

べて無視して大丈夫です)。

Page 53: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

53

インストールが完了すると、次のように「DQS インストーラーが正常に終了しました」と表示さ

れます。

Page 54: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

54

4.3 DQS(Data Quality Services)によるデータ クレンジング処理

DQS(Data Quality Services)によるデータ クレンジング処理

それでは、DQS を利用したデータ クレンジングを試してみましょう。

1. まずは、次のようにデータベース(DQStest)とテーブル(取引先マスター)を作成して、ク

レンジング対象のデータを INSERT しておきます。

CREATE DATABASE DQStest

go

USE DQStest

CREATE TABLE 取引先マスター

( 取引先コード nvarchar(10) PRIMARY KEY

,取引先名 nvarchar(60) )

go

INSERT INTO 取引先マスター VALUES('TR001', '日本マイクロソフト株式会社')

INSERT INTO 取引先マスター VALUES('TR002', 'マイクロソフト日本株式会社')

INSERT INTO 取引先マスター VALUES('TR003', '日本マイクロソフト(株)')

INSERT INTO 取引先マスター VALUES('TR004', 'dummy1')

INSERT INTO 取引先マスター VALUES('TR005', 'dummy2')

INSERT INTO 取引先マスター VALUES('TR006', 'dummy3')

INSERT INTO 取引先マスター VALUES('TR0333', 'dummy4')

INSERT INTO 取引先マスター VALUES('XX011', 'dummy5')

go

SELECT * FROM 取引先マスター

2. 次に、「SQL Server 構成マネージャー」ツールを利用して、[SQL Server ネットワークの構

成]の["インスタンス名" のプロトコル](既定のインスタンスの場合は MSSQLSERVER)に

1

クエリを記述2

3

Page 55: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

55

表示される「TCP/IP」プロトコルが有効化されていることを確認します(Developer エディ

ションを利用している場合は、既定で無効化されているので、有効化します)。

3. 次に、データ クレンジングのルール作成を行うために、「Data Quality Client」ツールを起動

します。このツールは、[スタート]メニューの[すべてのプログラム]→[Microsoft SQL

Server 2012]→[Data Quality Services]から起動することができます。

4. 「Data Quality Client」ツールが起動したら、DQS サーバーの名前(画面は SERVER1)

を入力して、[接続]ボタンをクリックします。

DQS サーバーへの接続が完了すると、以下のようにホームページが表示されます。

1 2

1

2

Page 56: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

56

ナレッジ ベースの作成

DQS では、ナレッジ ベースという単位で、クレンジングのための各種ルールを作成します。

1. ナレッジ ベースを作成するには、次のように[新しいナレッジ ベース]をクリックします。

2. [新しいナレッジ ベース]ページが表示されたら、[名前]へ「KB取引先」など任意の名前を

入力して、[アクティビティの選択]で「ナレッジ検出」を選択し、[作成]ボタンをクリック

します。

1

Page 57: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

57

ナレッジ検出を選択することで、既存のデータをもとにクレンジングのためのルールを作成し

ていくことができます。

3. 次の[マップ]ページでは、[データソース]に「SQL Server」、[データベース]と[テーブ

ルまたはビュー]には、前の手順で作成したデータベース(DQStest)とテーブル(取引先マ

スター)を選択します。

なお、データソースには「Excel」を選択することもできるので、Excel シート内のデータを

もとにルールを作成していくことも可能です。

4. 次に、[マッピング]セクションで、[基になる列]で「取引先コード」列を選択し、[ドメイン

の作成]ボタンをクリックします。

1

2

3

1

2

Page 58: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

58

DQS では、ドメインという単位でルールを作成します。[ドメインの作成]ダイアログが表

示されたら、[ドメイン名]へ任意の名前(列名と同じ名前など)、[データ型]を適宜設定(文

字列なら「String」を選択など)、[言語]ではスペル チェックを行いたい言語を選択(日本

語は存在しないので、日本語データのみの場合は「その他」を選択)して[OK]ボタンをク

リックします。

Note: スペル チェックに使用する言語

スペル チェックに使用する言語には、日本語を選択することができませんが(日本語のスペルチェックはできな

い)、次のように[言語]で[英語]を選択して、英語のデータがあった場合には、スペル ミスを検出することが

できるので、入力ミスやイレギュラーなデータを検出するのに大変役立ちます。

1

2

3

4

6

スペルチェックに利用する言語

5

作成されたドメインの確認

1

スペル ミスがある場合に赤波線で表示してくれる

2

Page 59: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

59

5. 「取引先名」列についても、取引先コードと同じようにドメインを作成します。

6. ドメインの作成が完了したら[次へ]ボタンをクリックして、次のページへ進みます。

7. 次の[検出]ページでは、[開始]ボタンをクリックします。

1

2 3

4

6

5

1

Page 60: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

60

これにより、SQL Server 上の「取引先マスター」テーブルへアクセスして、データを取得し、

取得が完了すると、次のように表示されます。

データ件数や一意なデータ件数などが表示されます。確認後、[次へ]ボタンをクリックしま

す。

8. 次の[ドメインの値の管理]ページでは、[ドメイン]セクションで「取引先コード」が選択さ

1

検出された結果

2

1

Page 61: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

61

れていて、右ペインに「取引先マスター」テーブルの「取引先コード」列の値が表示されてい

ることを確認します。

9. 次に、[ドメイン]セクションで[取引先名]をクリックして、右ペインに「取引先名」列の値

が表示されることを確認します。

10. 次に、間違っているデータである「マイクロソフト日本株式会社」と「日本マイクロソフト(株)」、

正しいデータである「日本マイクロソフト株式会社」の 3 つを Ctrl キーを押しながら選択し、

右クリックして、[シノニムとして設定]をクリックします。

1

取引先コードの値が表示される

取引先名の値が表示される

1

Page 62: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

62

これにより、この 3 つのデータをシノニム(同一データ)と見なすことができるようになり

ます。

ただし、このままでは、先頭に設定されたデータが間違っている値(マイクロソフト日本株式

会社)なので、これを正しいデータへ修正する必要があります。

11. シノニムの先頭の値を変更するには、次のように正しいデータ(日本マイクロソフト株式会社)

を右クリックして、[先頭として設定]をクリックします。

これで、間違ったデータを正しいデータへ変更できるようになります。

12. シノニムの設定が完了したら、次のように[完了]ボタンをクリックします。

1

2

1

シノニムに設定される

先頭に設定されたものが代表値となる

どの値に修正されるかが表示される

1

2

↓ 3

一番上に上がる

先頭に指定したものが修正先に変更される

Page 63: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

63

13. これにより、作成したナレッジ ベースを DQS サーバーへパブリッシュするのかどうかを尋ね

られるので、[パブリッシュ]ボタンをクリックします。

パブリッシュが完了すると、次のようにダイアログが表示されるので、[OK]ボタンをクリッ

クします。

以上でナレッジ ベースの作成が完了です。

ドメイン ルールの追加

次に、作成したナレッジ ベースへドメイン ルールを追加してみましょう。ドメイン ルールを利

用すると、文字列の長さが正しいかどうかをチェックしたり(たとえば取引先コードが 5 桁かど

うかをチェックしたり)、正規表現を利用したデータのチェックを行ったりすることができます。

1

1

1

Page 64: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

64

1. ドメイン ルールを追加するには、次のように[最近利用したナレッジ ベース]から作成した

ナレッジ ベース(画面は KB取引先)をクリックして、[ドメイン管理]をクリックします。

2. [ドメイン管理]ページが表示されたら、次のように[ドメイン]セクションで「取引先コー

ド」が選択されていて、右ペインには[ドメイン プロパティ]タブが表示されていることを確

認します。

このタブでは、ドメインに設定したデータ型(画面は String)などを確認できます。

1

1

ドメイン名やデータ型の確認

2

Page 65: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

65

3. 次に、[ドメイン]セクションから「取引先名」をクリックして、右ペインで[ドメインの値]

タブを開きます。

このタブでは、シノニムの設定などを確認/変更することができます。

4. 次に、[ドメイン]セクションで「取引先コード」をクリックして、右ペインで[ドメイン ル

ール]タブを開きます。

このタブでは、ドメイン ルールを設定することができます。

1 2

設定したシノニムを確認

1 2

Page 66: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

66

文字列の長さをチェックするドメイン ルールの作成

ここでは、取引先コードの "長さ" が 5文字であるかどうかをチェックするためのドメイン ルー

ルを作成してみましょう。

1. ドメイン ルールを作成するには、次のように[新しいドメイン ルールを追加]ボタンをクリ

ックします。

[名前]には、「長さが 5 文字」など任意のドメイン ルール名を入力して、[ルールの作成]

セクションでは、[長さが次の値と等しい]を選択して、「5」と入力します。これで、取引先

コードの "長さ" が 5 文字であるかどうかをチェックすることができます。設定後、[すべて

のルールを適用]ボタンをクリックします。

2. これにより、次のように「この操作はドメイン "取引先コード" の値に影響します」と表示され

て、「無効な値」が 1個増加した主旨のメッセージが表示されることを確認できます。

取引先コード列には、「TR0333」という長さが 6文字のデータがあるため、ルールに違反し

たデータ(無効な値)が 1件あるという主旨のメッセージです。[はい]ボタンをクリックし

て、ダイアログを閉じます。

3. 続いて、次のように[ドメイン ルールが正常に適用されました]と表示されれば、ドメイン ル

ールの作成が完了です。[OK]ボタンをクリックして、ダイアログを閉じます。

1 2

3

4

1

1個が無効になると表示される

1

Page 67: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

67

ドメイン ルールのテスト/影響分析

作成したドメイン ルールは、実際にルールが正しく設定されているかどうかをテストすることが

できます。これも試してみましょう。

1. まずは、次のように[ドメインの値に対するドメイン ルールの影響を分析します]ボタンをク

リックします。

これにより、先ほどと同様のダイアログが表示されて、「無効な値」が 1個増加した主旨のメ

ッセージが表示されることを確認できます。このボタンでは、既存のデータをもとに、ルール

を満たしたデータとそうでないデータが何件あるかをチェックすることができます。

2. 次に、[テスト データについて選択したドメイン ルールを実行します]ボタンをクリックしま

す。

3. 次のように[ドメイン ルールのテスト]ダイアログが表示されたら、[テスト データの追加]

ボタンをクリックして、[取引先コード]へ「TR123」と「TR1234」を追加します。

1

2

1個が無効になると表示される

1

1

2

Page 68: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

68

4. テスト データを追加したら、次のように[テストの実行]ボタンをクリックします。

「TR123」は 5 文字のデータなので、有効(緑のチェックマーク)、「TR1234」は 6 文字

のデータなので、無効(警告マーク)が表示されて、ドメイン ルールが正しく動作している

ことを確認することができます。確認後、[閉じる]ボタンをクリックしてダイアログを閉じ

ます。

正規表現を利用したドメイン ルールの追加

ドメイン ルールでは、正規表現を利用することもできます。これも試してみましょう。

1. まずは、[新しいドメイン ルールを追加]ボタンをクリックして、新しいドメイン ルールを追

加します。

[名前]には、「先頭が TR で始まる」など任意のドメイン ルール名を入力して、[ルールの

作成]セクションでは、[値が正規表現と一致します]を選択して、「TR[0-9]*」と入力しま

す。これで、取引先コードが "TR" で始まって、その後に任意の数値(0~9)が複数回の文

字であるかどうかをチェックすることができます。設定後、[すべてのルールを適用]ボタン

をクリックします。

2. 「この操作はドメイン "取引先コード" の値に影響します」ダイアログが表示されると、「無効

な値」が 1個増加した主旨のメッセージが表示されることを確認できます。

1 TR123 は有効

TR1234 は無効

3

2

1

2

3

4

Page 69: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

69

取引先コード列には、「XX011」という TR で始まらないデータがあるので、ルールに違反

したデータ(無効な値)が 1件あるという主旨のメッセージです。[はい]ボタンをクリック

して、ダイアログを閉じます。

3. 次のように[ドメイン ルールが正常に適用されました]と表示されれば、ドメイン ルールの

作成が完了です。[OK]ボタンをクリックして、ダイアログを閉じます。

4. 続いて、作成したドメイン ルールをテストするために、[テスト データについて選択したドメ

イン ルールを実行します]ボタンをクリックします。

[ドメイン ルールのテスト]ダイアログが表示されたら、次のように[テスト データの追加]

ボタンをクリックして、[取引先コード]へ「TR111」と「AA123」を追加します。

テスト データの追加後、[テストの実行]ボタンをクリックすると、「TR111」は TR で始

まるので、有効(緑のチェックマーク)、「AA123」は TR で始まらないので、無効(警告マ

ーク)が表示されて、ドメイン ルールが正しく動作していることを確認できます。

確認後、[閉じる]ボタンをクリックしてダイアログを閉じます。

5. [ドメイン管理]ページへ戻ったら、右下の[完了]ボタンをクリックします。

1

1個が無効になると表示される

1

3 TR111 は有効

AA123 は無効

5

4

1 2

Page 70: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

70

作成したナレッジ ベースを DQS サーバーへパブリッシュするのかどうかを尋ねられたら、

[パブリッシュ]ボタンをクリックします。

以上でドメイン ルールの追加が完了です。

1

2

3

Page 71: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

71

4.4 データ品質プロジェクトの作成

データ品質プロジェクトの作成

ナレッジ ベースの効果(シノニムの設定やドメイン ルールの効果)を検証したい場合は、データ

品質プロジェクトを作成することで行うことができます。次の画面は、シノニムの効果を確認して

いるときの様子です。

Let's Try

それでは、これを試してみましょう。

1. データ品質プロジェクトを作成するには、次のように[新しいデータ品質プロジェクト]をク

リックします。

2. [新しいデータ品質プロジェクト]ページが表示されたら、[名前]に「取引先クレンジング 1」

データ品質プロジェクトを作成してナレッジベースのルールに従って

データ クレンジングを実施

1

Page 72: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

72

など任意のプロジェクト名を入力して、[ナレッジ ベースを使用]で前の Step で作成したナ

レッジ ベース(KB取引先)を選択します。

[アクティビティの選択]では[クレンジング]を選択して、[作成]ボタンをクリックしま

す。

3. 次の[マップ]ページでは、[データ ソース]で「SQL Server」、[データベース]で「DQStest」、

[テーブルまたはビュー]で「取引先マスター」を選択します。

[マッピング]セクションでは、[基になる列]と[ドメイン]で、「取引先コード」と「取引

先名」がそれぞれ対応するように選択して、[次へ]ボタンをクリックします。

1

2

3

4

1

2

3

Page 73: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

73

4. 次の[最適化]ページでは、[開始]ボタンをクリックします。

これでナレッジ ベースに基づいたクレンジング処理が開始されます。

5. クレンジングが完了すると、次のように表示されます。

[修正されたレコード]が「2」、[無効なレコード]が「2」と表示されていることを確認で

きます。これは、[修正されたレコード]は、シノニムを設定したデータで、[無効なレコード]

は、作成したドメイン ルールに違反しているデータです(次のページで確認できます)。

1

3

修正されたレコードが 2

無効なレコードが 2

1

2

Page 74: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

74

確認後、[次へ]ボタンをクリックして、次のページへ進みます。

6. 次の[結果の管理と表示]ページでは、[ドメイン]で「取引先コード」を選択して、[無効]

タブをクリックします。

作成したドメイン ルール(長さが 5文字、先頭が TRで始まる)に違反しているデータが 2

件(TR0333、XX011)表示されていることを確認できます。

7. 次に、[適正]タブをクリックします。

このタブでは、ドメイン ルールを満たしている、有効なデータを確認することができます。

8. 次に、[ドメイン]で「取引先名」と選択して、[適正]タブを開きます。

適正な値が 6 件(dummy1~5 と日本マイクロソフト株式会社)表示されていることを確

1

1

無効な値。設定したルールに反しているデータ

1

適正な値。ルールを満たし

ている値

2 1

適正な値

Page 75: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

75

認できます。

9. 次に、[取引先名]の[修正済み]タブを開きます。

ここでは、シノニムへ設定した間違ったデータ(マイクロソフト日本株式会社、日本マイクロ

ソフト(株))が、正しいデータ(日本マイクロソフト株式会社)へ修正されていることを確認

できます([次に修正]列へシノニムの先頭へ設定した値が表示されていることを確認できま

す)。また、このタブでは、[承認]と[拒否]のどちらかを選択することで、この修正を承認

するか(既定は承認)、拒否するかを設定することもできます。

確認後、[次へ]ボタンをクリックします。

10. 次の[エクスポート]ページでは、クレンジング処理した結果をエクスポートするかどうかを

選択することができます。

[出力データのプレビュー]には、クレンジング処理した結果が表示されていることを確認で

きます。

1 2

「次に修正」に正しい値が提案されていることを確認

承認するか拒否するか

3

1

Page 76: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

76

11. [出力データのプレビュー]を次のように右側へスクロールすると、ドメイン ルールに違反し

た 2 つのデータ(TR0333、XX011)は、[取引先コード_状態]が「無効」と設定されてい

ることを確認できます。

また、シノニムを設定した間違ったデータ(マイクロソフト日本株式会社、日本マイクロソフ

ト(株))には、[取引先名_Output]に、正しいデータ(日本マイクロソフト株式会社)が設

定されていることを確認できます。

12. 次に、[クレンジング結果をエクスポートします]セクションで、[エクスポート先の種類]で

「SQL Server」、[データベース名]で「DQStest」、[テーブル名]で「exp1」など任意のテ

ーブル名を入力して、[エクスポート]ボタンをクリックします。

13. エクスポートが完了すると、次のようにダイアログが表示されます。

14. エクスポートが完了したら、[完了]ボタンをクリックして、データ品質プロジェクトを完了し

ます。

2

1

1

2

1

Page 77: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

77

15. 最後に、Management Studio を起動して、クエリ エディターでエクスポートされたテーブ

ル(exp1)の中身を参照します。

USE DQStest

SELECT * FROM exp1

[出力データのプレビュー]で確認したように、ドメイン ルールに違反した 2 つのデータ

(TR0333、XX011)は、[取引先コード_状態]が「無効」と設定され、シノニムを設定し

た間違ったデータ(マイクロソフト日本株式会社、日本マイクロソフト(株))には、[取引先

名_Output]に、正しいデータ(日本マイクロソフト株式会社)が設定されていることを確

認できます。このように、データ品質プロジェクトを利用すると、シノニムやドメイン ルー

ルといったナレッジ ベースで設定したクレンジング処理が正しく動作しているかどうかを簡

単に確認することできます。

1

1

クエリを記述2

3

Page 78: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

78

4.5 Integration Services の「DQS クレンジング」タスク

Integration Services の「DQS クレンジング」タスク

次に、Integration Services の「DQS クレンジング」タスクを利用して、ナレッジ ベースを

基にしたクレンジング処理を行ってみましょう。ここでは、次のような Integration Services パ

ッケージ(SSIS パッケージ)を作成します。

「DQS クレンジング」タスクは、データ フローの変換コンポーネントとして提供されていて、

次のようにナレッジ ベースを指定して、それをもとにデータを出力させることが可能です。

DQS クレンジングタスクでクレンジン

グ処理を実行

ナレッジベースを指定

ドメイン名を指定

Page 79: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

79

Let's Try

それでは、これを試してみましょう。

1. まずは、[スタート]メニューから SQL Server Data Tools(以前のバージョンの Business

Intelligence Development Studio)を起動します。

2. SQL Server Data Tools が起動したら、[スタート ページ]の「新しいプロジェクト」をクリ

ックして、新しいプロジェクトを作成します。

[新しいプロジェクト]ダイアログでは、[インストールされたテンプレート]から「ビジネ

ス インテリジェンス」の「Integration Services」を選択して、「Integration Services プ

ロジェクト」を選択します。[名前]へ任意のプロジェクト名(画面は Integration Services

プロジェクト 1)、[場所]へ任意の保存場所を指定して、[OK]ボタンをクリックします。

3. パッケージ デザイナーが表示されたら、次のように[SSIS ツールボックス]の[お気に入り]

1

1

2

3

4

5

Page 80: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

80

セクションから「データ フロー タスク」を[制御フロー]タブへドラッグ&ドロップして配置

します。

配置後、[データ フロー タスク]をダブル クリックして、[データ フロー]タブを開きます。

4. [データ フロー]タブが開いたら、[SSIS ツールボックス]の[お気に入り]セクションか

ら[変換元アシスタント]をドラッグ&ドロップして配置します。

[変換元アシスタント]ダイアログが表示されたら、[変換元の型を選択します]で「SQL

Server」、[接続マネージャーの選択]で「新規」を選択して、[OK]ボタンをクリックしま

す。

5. [接続マネージャー]ダイアログが表示されたら、[サーバー名]に SQL Server の名前(画面

は SERVER1)、[データベース名]に「DQStest」を選択して、[OK]ボタンをクリックしま

す。

2

配置した「データ フロー タスク」をダブル クリック

3

「制御フロー」タブ1

パッケージデザイナー

「データ フロー」タブ1

2

3

5

4

Page 81: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

81

6. これで、次のように[OLE DB ソース]が作成されるので、これをダブル クリックします。

[OLE DB ソース エディター]ダイアログが表示されたら、[テーブル名またはビュー名]

で「取引先マスター」テーブルを選択して、[OK]ボタンをクリックします。

7. 次に、[SSIS ツールボックス]の[その他の変換]セクションから[DQS クレンジング]タ

スクを[OLE DB ソース]タスクの下へドラッグ&ドロップして配置します。

1

2

3

「OLE DB ソース」が作成されるので、これをダブル クリック

1

2

3

1

Page 82: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

82

8. 続いて、次のように[OLE DB ソース]を選択して、表示される「青の矢印」(成功の場合の処

理の流れ)を、[DQS クレンジング]タスクへドラッグ&ドロップして接続します。

9. 次に、[DQS クレンジング]タスクをダブル クリックして、[DQS クレンジング変換エディ

ター]ダイアログを表示します。

このダイアログでは、[接続マネージャー]タブで、[新規]ボタンをクリックします。[DQS

クレンジング接続マネージャー]ダイアログが表示されたら、[サーバー名]に DQS サーバ

ーの名前(画面は SERVER1)を入力して、[OK]ボタンをクリックします。

10. 次に、[データ品質ナレッジ ベース]で、前の Step で作成したナレッジ ベース(KB取引先)

を選択します。

1

1

2

3

4

1

2

Page 83: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

83

[使用できるドメイン]には、ナレッジ ベース内で作成した「取引先コード」と「取引先名」

が表示されていることを確認できます。

11. 次に、[マッピング]タブを開いて、[使用できる入力列]で「取引先コード」と「取引先名」

の両方をチェックします。

[入力列]の「取引先コード」と「取引先名」に、それぞれ[ドメイン]で「取引先コード」

と「取引先名」がマッピングされるようにして、[OK]ボタンをクリックします。

これで、[OLE DB ソース]タスクで取得した「取引先マスター」テーブルの「取引先コード」

と「取引先名」を、ナレッジ ベースの「取引先コード」と「取引先名」ドメインへマッピン

グすることができます。

12. 次に、[変換先アシスタント]をドラッグ&ドロップして配置します。

1

2

3

「出力の別名」が「取引先名_出力」となっていることを確認

4

5

1

2 3

4

Page 84: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

84

[変換先アシスタント]ダイアログが表示されたら、[変換先の型を選択します]で「SQL

Server」、[接続マネージャーの選択]で、[OLE DB ソース]タスクのときに作成した接続

マネージャー(画面は SERVER1.DQStest)を選択して、[OK]ボタンをクリックします。

13. これで、次のように[OLE DB 変換先]タスクが作成されるので、[DQS クレンジング]タス

クの「青」(成功)の矢印を[OLE DB 変換先]タスクへ接続します。

14. 次に、[OLE DB 変換先]タスクをダブル クリックして、[OLE DB 変換先エディター]ダイ

アログを開きます。

このダイアログでは、[テーブル名またはビュー名]で[新規作成]ボタンをクリックして、

新しいテーブルを作成します。

[テーブルの作成]ダイアログが表示されたら、CREATE TABLE の隣のテーブル名を「[結

果 1]」へ変更して、[OK]ボタンをクリックします。

15. [OLE DB 変換先エディター]ダイアログへ戻ったら、[マッピング]ページを開きます。

1

1

テーブル名を「結果1」へ変更

2

3

Page 85: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

85

[使用できる入力列]と[使用できる変換先列]が 1 対 1 にマッピングされていることを確

認して、[OK]ボタンをクリックします。

16. 次に、[DQS クレンジング]と[OLE DB 変換先]タスクの間の「青」の矢印を右クリックし

て、[データ ビューアーの有効化]をクリックします。

これで、デバッグ実行時に、[DQS クレンジング]と[OLE DB 変換先]タスクの間を流れ

ているときのデータをグラフィカルに表示できるようになります。

17. 次に、ツールバーの[デバッグ開始]ボタンをクリックして、デバッグを開始します。

1

3

使用できる入力列

2使用できる変換先列

2

2

右クリック1

データ ビューアーアイコンが追加される↓

1

Page 86: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

86

18. デバッグが開始されると、次のように[OLE DB ソース]が緑のチェックマークが付いた後に、

[DQS クレンジング]と[OLE DB 変換先]タスクが処理中の黄色のアイコンに変わって、

データ ビューアーにデータが表示されます。

データ ビューアーでは、[DQS クレンジング]タスクによって、ドメイン ルールに違反し

た 2 つのデータ(TR0333、XX011)は、[取引先コード_状態]および[レコードの状態]

が「無効」と設定され、シノニムを設定した間違ったデータ(マイクロソフト日本株式会社、

日本マイクロソフト(株))には、[取引先名_状態]および[レコードの状態]が「修正済み」、

[取引先名_出力]に正しいデータ(日本マイクロソフト株式会社)が設定されていることを

確認できます。

確認後、データ ビューアーの[実行]ボタンをクリックして、処理を続行します。

19. これにより、次のように[DQS クレンジング]と[OLE DB 変換先]タスクも緑のチェック

マークに変わって、デバッグが正常に完了したことを確認することができます。

20. 確認後、データ ビューアーの右上の[終了]ボタンをクリックして、データ ビューアーを閉

じます。

21. 次に、ツールバーの[デバッグの停止]ボタンをクリックして、デバッグを停止します。

データ ビューアー ウィンドウが表示されて、処理されている

データを確認できる

1

3

「取引先コードの状態」が「適正」や「無効」

と表示されている

2 「取引先名の状態」が「修正済み」と表示されている

2 「レコードの状態」が

「適正」や「修正済み」、「無効」と表示されている

3

正常に完了した場合は緑のチェック マークが

表示される

Page 87: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

87

22. 次に、Management Studio を起動して、クエリ エディターでクレンジング処理された結果

(結果 1 テーブルの中身)を参照します。

USE DQStest

SELECT * FROM 結果1

データ ビューアーで確認したように、ドメイン ルールに違反した 2 つのデータ(TR0333、

XX011)は、[取引先コード_状態]と[レコードの状態]が「無効」と設定され、シノニム

を設定した間違ったデータ(マイクロソフト日本株式会社、日本マイクロソフト(株))には、

[取引先名_状態]と[レコードの状態]が「修正済み」、[取引先名_出力]に正しいデータ

(日本マイクロソフト株式会社)が設定されていることを確認できます。

1

1

クエリを記述2

3

Page 88: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

88

条件分岐の追加(無効なデータを別テーブルへ出力)

次に、条件分岐を追加して、無効なデータは別テーブルへ出力するように変更してみましょう。

1. まずは、次のように[DQS クレンジング]と[OLE DB 変換先]タスクの間の「青」の矢印

を右クリックして、[削除]をクリックします。

2. 次に、[SSIS ツールボックス]から[条件分割]タスクをドラッグ&ドロップして配置します。

3. 次に、[DQS クレンジング]タスクの「青」の矢印を[条件分割]タスクへ接続します。

4. 次に、[条件分割]タスクをダブル クリックして、[条件分割変換エディター]ダイアログを表

2

右クリック1

1

1

Page 89: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

89

示します。

[列]フォルダーを展開して、[レコードの状態]を[条件]へドラッグ&ドロップします。

5. 次に、[条件]へ「== "無効"」を追加して、[出力名]を「無効の場合」へ変更します。

[既定の出力名]は「有効の場合」へ変更して、[OK]ボタンをクリックします。

これで、レコードの状態が無効の場合とそうでない場合で条件分岐できるようになります。

6. 次に、[条件分割]タスクの「青」の矢印を[OLE DB 変換先]タスクへ接続します。

1

1 2

3

4

Page 90: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

90

[入出力の選択]ダイアログが表示されたら、[出力]で「無効な場合」を選択して、[OK]

ボタンをクリックします。

これで、「[レコードの状態]== "無効"」の場合のデータを[OLE DB 変換先]タスクへ流す

ことができるようになります。

7. 次に、[OLE DB 変換先]タスクをダブル クリックして、[OLE DB 変換先エディター]を開

きます。

このダイアログでは、[テーブル名またはビュー名]で[新規作成]ボタンをクリックして、

1

2

3

1

テーブル名を「無効の場合」へ変更

2

Page 91: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

91

新しいテーブルを作成します。[テーブルの作成]ダイアログが表示されたら、CREATE

TABLE の隣のテーブル名を「[無効の場合]」へ変更して、[OK]ボタンをクリックします。

8. [OLE DB 変換先エディター]ダイアログへ戻ったら、[マッピング]ページを開きます。

[使用できる入力列]と[使用できる変換先列]が 1 対 1 にマッピングされていることを確

認して、[OK]ボタンをクリックします。

9. 次に、[変換先アシスタント]をドラッグ&ドロップして配置します。

[変換先アシスタント]ダイアログが表示されたら、[変換先の型を選択します]で「SQL

Server」、[接続マネージャーの選択]で、[OLE DB ソース]タスクのときに作成した接続

マネージャー(画面は SERVER1.DQStest)を選択して、[OK]ボタンをクリックします。

10. これで、次のように[OLE DB 変換先 1]タスクが作成されるので、[条件分割]タスクの「青」

の矢印を[OLE DB 変換先 1]タスクへ接続します。

1

2

使用できる入力列

2使用できる変換先列

2

1

2 3

4

Page 92: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

92

今度は、[既定の出力名]で設定した「有効の場合」の流れができるようになります。

これで、「[レコードの状態]== "無効"」という条件を満たさなかった場合のデータ(つまり、

有効な場合のデータ)を[OLE DB 変換先 1]タスクへ流すことができるようになります。

11. 次に、[OLE DB 変換先 1]タスクをダブル クリックして、[OLE DB 変換先エディター]ダ

イアログを開きます。

このダイアログでは、[テーブル名またはビュー名]で[新規作成]ボタンをクリックして、

1

1

テーブル名を「有効の場合」へ変更

2

Page 93: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

93

新しいテーブルを作成し、[テーブルの作成]ダイアログでは、CREATE TABLE の隣のテー

ブル名を「[有効の場合]」へ変更して、列定義を「取引先コード」と「取引先名」のみに変更

します。

変更後、[OK]ボタンをクリックします。

12. 次に、[OLE DB 変換先エディター]ダイアログへ戻ったら、[マッピング]ページを開きます。

「取引先コード_出力」を「取引先コード」、「取引先名_出力」を「取引先名」にマッピング

するように設定して、[OK]ボタンをクリックします。

これで、シノニムで設定した値へ変換したもののみを転送できるできるようになります。

13. 次に、[条件分割]タスクから伸ばした「青」の矢印を右クリックして、[データ ビューアーの

有効化]をクリックします。

14. 両方の「青」の矢印(無効の場合と有効の場合)に対して[データ ビューアーの有効化]を設

定して、デバッグ中のデータを参照できるようにします。

1

2

3

2

2

右クリック1

Page 94: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

94

15. 次に、ツールバーの[デバッグ開始]ボタンをクリックして、デバッグを開始します。

16. デバッグが開始されると、次のように[OLE DB ソース]と[DQS クレンジング]タスクが

緑のチェックマークが付いた後に、[条件分割]と[OLE DB 変換先]タスクが処理中の黄色の

アイコンに変わって、データ ビューアーにデータが表示されます。

「無効の場合」のデータ ビューアーでは、ドメイン ルールに違反した 2 つのデータ

(TR0333、XX011)が表示されて、[レコードの状態]が「無効」と設定されていることを

確認できます。「有効の場合」のデータ ビューアーには、6 件の有効なデータ(無効なデータ

データ ビューアーを両方に追加

1

1

1

2

有効の場合のデータ

無効の場合のデータ

Page 95: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

95

2 件が入っていないもの)が表示されていることを確認できます。

確認後、それぞれのデータ ビューアーの[実行]ボタンをクリックして、処理を続行します。

17. 処理が完了すると、「無効の場合」のデータは「2行」、「有効の場合」のデータは「6 行」と表

示されて、緑のチェックマークが付いて、デバッグが正常に完了したことを確認できます。

18. 最後に、Management Studio を起動して、クエリ エディターで処理された結果(テーブル

の中身)を参照します。

USE DQStest

SELECT * FROM 無効の場合

「無効の場合」テーブルには、ドメイン ルールに違反した 2 つのデータ(TR0333、XX011)

が格納されていることを確認できます。

19. 「有効の場合」テーブルについても、内容を参照します。

USE DQStest

SELECT * FROM 有効の場合

1

有効な場合は6行転送されている

無効な場合は2行転送されている

1

クエリを記述2

3

Page 96: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

96

シノニムを設定した間違ったデータ(マイクロソフト日本株式会社、日本マイクロソフト(株))

が、正しいデータ(日本マイクロソフト株式会社)に修正されて、格納されていることを確認

できます。

このように、Integration Services の[DQS クレンジング]タスクを利用すれば、ナレッジ

ベースへ設定したシノニムやドメイン ルールを基に、簡単にクレンジング処理を行うことが

できます。

DQS のまとめ

ここまで紹介してきたものは、DQS(Data Quality Services)機能のほんの一部です。まだま

ださまざまなルールを作成したデータのクレンジングが可能ですし、似たようなレコードを検出す

るマッチング(照合)ルールの作成機能、Azure Marketplace のデータを利用したマッチング

検出機能などもあるので、オンライン ブック(SQL Server のヘルプ)などを参考にぜひチャレ

ンジしてみてください。DQS は、データの品質を向上させるために大変役立つ機能です。

修正された取引先名

Page 97: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

97

SSTTEEPP 55.. BBII 関関連連のの新新機機能能のの概概要要

この STEP では、DWH とは切り離すことのできない BI(ビジネス インテリジ

ェンス)機能について、SQL Server 2012 で提供される BI 関連の新機能の概要

を説明します。

この STEP では、次のことを学習します。

Power View による容易なデータ分析レポートの作成

PowerPivot for Excel の進化(バージョン アップ)

Analysis Services でのテーブル モデル(Tabular Model)のサポート

(xVelocity エンジン)

Reporting Services のデータ警告(Alert)機能

Page 98: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

98

5.1 SQL Server 2012 で提供される BI 新機能の概要

SQL Server 2012 で提供される主な BI 新機能の概要

SQL Server 2012 には、非常に多くの BI(Business Intelligence)関連の新機能が提供され

ています。ここでは次の 4 つに分けて概要を説明します。

Power View による容易なデータ分析レポートの作成

PowerPivot for Excel の進化(バージョン アップ)

Analysis Services でのテーブル モデル(Tabular Model)のサポート(xVelocity)

Reporting Services のデータ警告機能によるメール送信

Power View による容易なデータ分析レポートの作成

SQL Server 2012 では、Power View と呼ばれる、新しいデータ分析/レポーティング ツー

ルが提供されています。Power View を利用すると、従来のレポーティング ツールであるレポー

トビルダーや、高度なデータ分析が可能な PowerPivot for Excel ツールよりも、容易に見栄え

の良いデータ分析レポートを作成することが可能です。

以下の画面は、Power View を利用してデータ分析レポートを作成しているときの様子です。

このように、より使いやすいレポーティング ツールが登場したことで、エンドユーザーが自らレ

ポートを作成する「セルフ サービス データ分析」がより実現しやすくなりました。

画像を表示可能

推移を確認可能な動的なバブル チャート

グラフが動的に変化。グラフ自身がスライサー(フィルター)となる

Power View で、データ分析レポートを作成しているときの様子

Page 99: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

99

PowerPivot for Excel の進化(バージョン アップ)

PowerPivot for Excel は、SQL Server 2008 R2 から提供されたデータ分析ツールですが、SQL

Server 2012 の PowerPivot for Excel はバージョン アップして、多くの新機能が提供されま

した。その主なものは、以下のとおりです。

KPI(Key Performance Indicator:重要業績評価指標)への対応

書式(Format)設定の永続化により、書式がピボットテーブルへ反映可能に

並べ替え列のサポートにより、別の列で並べ替えが可能に

ダイアグラム ビューによるグラフィカルなリレーションシップ管理のサポート

階層のサポートにより、階層関係のあるフィールド(たとえば、大分類→中分類→小分類

→商品のような関係)をワンクリックで配置可能に

フィールド一覧に表示されるフィールドの表示順序の変更が可能に

パースペクティブのサポートにより、不要な列/メジャーを簡単に非表示に可能

ドリルスルーのサポート

BLOB データ(varbinary(max))のサポート

DAX(Data Analysis Expressions)関数の大幅強化。PATH や PATHITEM 関数によ

って親子階層への対応も可能

以下の画面は、ダイアグラム ビューでリレーションシップを設定しているときの様子です。

以下の画面は、KPI をグラフィカルに設定しているときの様子です。

階層の作成が可能

リレーションシップをグラフィカルに編集可能

KPI や計算メジャー

並べ替え列も設定可能

Page 100: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

100

このように PowerPivot for Excel はバージョン アップして、さらに本格的なデータ分析レポー

トが簡単に作成できるようになりました。

また、後述の Analysis Services テーブル モデル(Tabular Model)を利用した場合には、以

下の機能も利用できるようになるので、ビッグデータ対応や性能向上、セキュリティの強化を実現

することも可能になりました。

大量データへの対応(ビッグデータ対応)

パーティショニング

ロールを利用した行レベル セキュリティ

Analysis Services でのテーブル モデルのサポート(xVelocity インメモリ BI)

SQL Server 2008 R2 では、PowerPivot で採用されたインメモリのカラムベース エンジン

「VertiPaq」で動作する Analysis Services は「PowerPivot for SharePoint」としてイン

ストールした場合にのみ利用することができましたが、SQL Server 2012 からは、VertiPaq エ

ンジンが進化して、「xVelocity」という名称へ変更され、単体でも動作させることができるよう

になりました。SQL Server 2012 では、インストール時に以下の画面のように「表形式モード」

(Tabular Mode)を選択することで、単体の Analysis Services エンジンとして xVelocity モ

ードで動作させることが可能です。

KPI をグラフィカルに設定

表形式モード (Tabular Mode)選択するとxVelocity モードの Analysis Services

(インメモリ BI)としてインストール可能。

Page 101: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

101

また、SQL Server Data Tools(以前のバージョンの Business Intelligence Development

Studio)では、新規プロジェクトの作成時に、次のように「Analysis Services 表形式プロジェ

クト」(Tabular Project)を選択することで、xVelocity モードの Analysis Services へ配置可

能なデータベース(テーブル モデル)を作成できるようになりました。

以下の画面は、テーブル モデル(表形式モデル:Tabular Model)のプロジェクトを作成してい

るときの様子です。

テーブル モデルは、PowerPivot for Excel と同じような操作性で作成することができます。ま

た、このモデルでは、「ロールを利用した行レベルのセキュリティ」や「パーティショニング」機

能が利用できるので、セキュリティ強化やビッグデータへの対応、性能向上を実現することも可能

新モデルテーブル モデル(Tabular Model)

従来型の MOLAP/ROLAP キューブ

PowerPivot ファイルからテーブル モデルを作成する

ことも可能

Analysis Services テーブル モデル

(Tabular Model)

Page 102: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

102

になりました。

Reporting Services のデータ警告(Alert/通知)機能

SQL Server 2012 では、Reporting Services の新機能の 1 つとして「データ警告」機能が提供

されました。この機能を利用すれば、レポート内のデータを利用して、特定のルールに基づいて、

メールを送信するといったことを簡単に行えるようになります。たとえば、「在庫<=発注点」とい

うルールを設定して、在庫が発注点を下回ったら、メールを送信する、という設定の場合は、次の

ように設定します。

このように、データ警告を利用すれば、フィールド間あるいは特定の値に対してルールを設定する

ことができ、その結果を定期的にメールとして通達することができるので、大変便利です。

データ警告の設定

「在庫 <= 発注点」というルールを設定し、在庫が発注点を下回ったらメールを送信するようにデータ警

告を設定

メールの送信先や件名の設定

警告を実行する間隔を設定

在庫 <= 発注点という条件に合致するデータのみが送信

されてきている

データ警告機能によって送信された

メール

Page 103: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

103

その他の BI/DWH 新機能

SQL Server 2012 には、まだまだ多くの BI/DWH 関連の新機能が提供されています。その主

なものは、次のとおりです。

Reporting Services での Excel エクスポート時のフォーマットの変更(xlsx 形式へ)

Integration Services の操作性向上、CDC(変更データキャプチャ)のサポート、

MDS(マスター データ サービス)の Excel アドイン

15,000 パーティションのサポート

Apache Hadoop への対応(Hadoop Connector による連携など)

このように、SQL Server 2012 では多くの BI/DWH 関連の新機能が提供されています。これ

らのうち、BI 関連の注目の新機能(Power View やデータ警告、PowerPivot のバージョン アッ

プ、テーブル モデルなど)については、ステップ バイ ステップ形式で説明した本自習書シリー

ズの新機能編「No.4 BI 新機能ダイジェスト」も用意しているので、こちらもぜひご覧いただけ

ればと思います。

おわりに

最後までこの自習書を試された皆さま、いかがでしたでしょうか? SQL Server 2012 には、多

くの DWH/BI 関連の新機能が提供されていることを確認していただけたのではないでしょうか。

特に、列ストア インデックスは、大きな性能向上を実現することができ、さまざまな場面で活用

できるものなので、ぜひ活用してみてください。

この自習書は、「DWH 関連の新機能」版ということで、DWH 関連の新機能に絞ったものでした

が、SQL Server 2012 ではどんな新機能が提供されているのか?ということを知りたい方は、本

自習書シリーズの新機能編「No.1 新機能ダイジェスト」をぜひご覧いただければと思います。

http://www.microsoft.com/ja-jp/sqlserver/2012/technology/self-learning.aspx

また、オンライン ブック(SQL Server のヘルプ)にも詳細手順が記載されているので、こちら

もご覧いただければと思います。

http://msdn.microsoft.com/ja-jp/library/ms130214.aspx

Page 104: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

104

5.2 付録: サンプル データベース(NorthwindJ)の作成

付録: サンプル データベース(NorthwindJ)の作成

この自習書では、Step3 でサンプル スクリプトに含まれる「NorthwindJ」データベースを利用

しているので、このデータベースを SQL Server 2012 上へ作成しておく必要があります。作成

の手順は、次のとおりです。

1. まずは、[スタート]メニューの[すべてのプログラム]から[Microsoft SQL Server 2012]

の[SQL Server Management Studio]をクリックして、Management Studio を起動し

ます。

2. 起動後、次のように[サーバーへの接続]ダイアログが表示されたら、[サーバー名]へ SQL

Server の名前を入力し、[接続]ボタンをクリックします。

3. 接続完了後、次のようにツールバーの[ファイルを開く]ボタンをクリックします。

1

SQL Server の名前を入力1

2

Page 105: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

105

これにより、[ファイルを開く]ダイアログが表示されるので、サンプル スクリプトを解凍し

たフォルダーを展開して、「NorthwindJ.sql」ファイルを選択し、[開く]ボタンをクリック

します。

4. 次のようにデータベースを作成するためのスクリプトが表示されるので、ツールバーの[実行]

ボタンをクリックして、スクリプトを実行します。

サンプル スクリプトを解凍した場所を展開してNorthwindJ.sql を選択

2

3

1

2

データベースを作成するためのスクリプト

が表示される

1

Page 106: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

106

5. 数秒後に実行が完了して、次のように画面下に「クエリが正常に実行されました」と表示され

ることを確認します。

以上でデータベースの作成が完了です。

なお、この NorthwindJ データベースは、Microsoft Access 2003 に付属のサンプル データベ

ース「Norhwind」を SQL Server 上へアップサイズしたものを利用していますが、この自習書

の手順を試すために、一部のデータを加工しています。。

「クエリが正常に実行されました」と表示されることを確認

1

Page 107: SQL Server 2012 自習書シリーズ 新機能編 Nodownload.microsoft.com/.../SQL11_SelfLearning03_DWH.pdfSQL Server 2012 自習書シリーズ 新機能編 No.3 DWH(データ

SQL Server 2012 自習書 No.3 DWH 関連の新機能

107

執筆者プロフィール

有限会社エスキューエル・クオリティ(http://www.sqlquality.com/)

SQLQuality(エスキューエル・クオリティ)は、日本で唯一の SQL Server 専門の独立系コンサルティン

グ会社です。過去のバージョンから最新バージョンまでの SQL Server を知りつくし、多数の実績と豊富な

経験を持つ、OS や .NET にも詳しい SQL Server の専門家(キャリア 17年以上)がすべての案件に対応

します。人気メニューの「パフォーマンス チューニング サービス」は、100%の成果を上げ、過去すべての

お客様環境で驚異的な性能向上を実現。チューニング スキルは世界トップレベルを自負、検索エンジンでは

(英語情報を含めて)ヒットしないノウハウを多数保持。ここ数年は BI/DWHシステム構築支援のご依頼

が多い。

主なコンサルティング実績

大手映像制作会社の BI システム構築支援(会計/業務システムにおける予実管理/原価管理など)

大手流通系の DWH/BI システム構築支援(POS データ/在庫データ分析)

大規模テラバイト級データ ウェアハウスの物理・論理設計支援および運用管理設計支援

大手アミューズメント企業の BI システム構築支援(人事システムにおける人材パフォーマンス管理)

外資系医療メーカーの Analysis Services による「販売分析」システムの構築支援(売上/顧客データ分析)

9 TB データベースの物理・論理設計支援(パーティショニング対応など)

ハードウェア リプレイス時のハードウェア選定(最適なサーバー、ストレージの選定)、高可用性環境の構築

SQL Server 2000(32 ビット)から SQL Server 2008(x64)への移行/アップグレード支援

複数台の SQL Server の Hyper-V 仮想環境への移行支援(サーバー統合支援)

2時間かかっていた日中バッチ実行時間を、わずか 5分へ短縮(95.8% の性能向上)

ピーク時の CPU 利用率 100% のシステムを、わずか 10% にまで軽減し、大幅性能向上

平均 185.3ms かかっていた処理を、わずか 39.2ms へ短縮(78.8% の性能向上)

Java 環境(Tomcat、Seasar2、S2Dao)の SQL Server パフォーマンス チューニング etc

コンサルティング時の作業例(パフォーマンス チューニングの場合)

アプリケーション コード(VB、C#、Java、ASP、VBScript、VBA)の解析/改修支援

ストアド プロシージャ/ユーザー定義関数/トリガー(Transact-SQL)の解析/改修支援

インデックス チューニング/SQL チューニング/ロック処理の見直し

現状のハードウェアで将来のアクセス増にどこまで耐えられるかを測定する高負荷テストの実施

IIS ログの解析/アプリケーション ログ(log4net/log4j)の解析

ボトルネック ハードウェアの発見/ボトルネック SQL の発見/ボトルネック アプリケーションの発見

SQL Server の構成オプション/データベース設定の分析/使用状況(CPU, メモリ, ディスク, Wait)解析

定期メンテナンス支援(インデックスの再構築/断片化解消のタイミングや断片化の事前防止策など)etc

松本美穂(まつもと・みほ)

有限会社エスキューエル・クオリティ 代表取締役

Microsoft MVP for SQL Server(2004 年 4 月~)

経産省認定データベース スペシャリスト/MCDBA/MCSD for .NET/MCITP Database Administrator

SQL Server の日本における最初のバージョンである「SQL Server 4.21a」から SQL Server に携わり、現在、SQL Server

を中心とするコンサルティングを行っている。得意分野はパフォーマンス チューニングと Reporting Services。コンサル

ティング業務の傍ら、講演や執筆も行い、マイクロソフト主催の最大イベント Tech・Ed などでスピーカーとしても活躍

中。SE や ITPro としての経験はもちろん、記名/無記名含めて多くの執筆実績も持ち、様々な角度から SQL Server に

携わってきている。著書の『SQL Server 2000 でいってみよう』と『ASP.NET でいってみよう』(いずれも翔泳社刊)は、

トップ セラー(前者は 28,500 部、後者は 16,500 部発行)。近刊に『SQL Server 2012 の教科書』(ソシム刊)がある。

松本崇博(まつもと・たかひろ)

有限会社エスキューエル・クオリティ 取締役

Microsoft MVP for SQL Server(2004 年 4 月~)

経産省認定データベース スペシャリスト/MCDBA/MCSD for .NET/MCITP Database Administrator

SQL Server の BI システムとパフォーマンス チューニングを得意とするコンサルタント。過去には、約 3,000 本のスト

アド プロシージャのチューニングや、テラバイト級データベースの論理・物理設計、運用管理設計、高可用性設計、BI・

DWH システム設計支援などを行う。アプリケーション開発(ASP/ASP.NET、C#、VB 6.0、Java、Access VBA など)

やシステム管理者(IT Pro)経験もあり、SQL Server だけでなく、アプリケーションや OS、Web サーバーを絡めた、

総合的なコンサルティングが行えるのが強み。Analysis Services と Excel による BI システムも得意とする。マイクロソ

フト認定トレーナー時代の 1998 年度には、Microsoft CPLS トレーナー アワード(Trainer of the Year)を受賞。