Download - SQL Server 2008 R2 BI
1
BI を用いたログ管理(取込みから分析まで) ~SQL Server 2008 R2 編~
マクロソフト株式会社
エバンジェリスト
安納 順一
http://blogs.technet.com/junichia/
Ver 1.0 - 2010年01月29日版
2 2
本日の予定
13:30 – 17:15 メンセッション
17:15 - 18:00 ラトニングトーク
18:00 - 19:00 懇親会 “Happy Hour”
3 3
目次
はじめに 第0章 環境の準備 第1章 SSISの基本的な使い方 〓 EXCELフゔル → SQL Server 〓 CSVフゔル → SQL Server 〓 CSVフゔル → SQL Azure 第2章 SSISによるイベントログの取り込み 〓 ベントログ → SQL Server 第3章 PowerPivot を使用した分析 〓 PowerPivot for EXCEL 〓 PowerPivot for SharePoint
4 4
本セッションの内容と目的 SQL Server 2008 R2 が提供するBI機能を使用した、データ取込みから分析の手法について解説します。 • SSIS を使用してEXCELやCSVフゔルだけでなく、クラウド上の
SQL Server(SQL Azure)やベントログからのデータ取込みも可能であることを知ってください
• PowerPivot を使用することで、使い慣れたEXCEL上で容易にデータ分析が行えることを知ってください
加工/補正
・独自コンバーター ・スクリプト ・サードパーテゖ製品
SSIS
分析/レポート
・データの取り込み ・CUBEの作成 ・PivotTableの作成
PowerPivot
5 5
ご注意
• 本セミナーでは リリース前の製品を使用しております
• 製品の仕様は、正式リリース時に変更されている可能性があることをご了承ください
6 6
お願い
• 細かな手順を全てお話しすることができません!すみません! • 本日作成したプロジェクトと、その手順は「勉強会キット」に掲載
http://www.microsoft.com/japan/powerpro/study/
• より理解を深めるためにおすすめ ■SQL Server 2008 R2 自習書シリーズ http://www.microsoft.com/japan/sqlserver/2008/r2/prodinfo/ ■SQL Server 2008 自習書シリーズ http://technet.microsoft.com/ja-jp/sqlserver/dd610200.aspx ■SQL Server 2008 バーチャルラボ http://technet.microsoft.com/ja-jp/virtuallabs/cc879114.aspx
7
SQL Server の BI 機能とは
8 8
SQL Server BI ~ 3つの柱
【データの準備】SSIS:SQL Server Integration Service
【データの可視化】SSRS:SQL Server Reporting Service
【データの分析】SSAS:SQL Server Analysis Service
多次元データベースによる分析
データ移入作業の可視化と整形 ・外部フゔル、データベースからの取り込み ・データ変換
資料作成の単純化 • レポートテンプレートの作成、表示、印刷 • パラメタ化による動的なレポートの生成 • レポートの共有 • Report Builder での容易な作成
必要最小限のSQL文の知識と、若干のコーディング力が求められる
9 9
SQL Server 2008 のBI
SQL Server
SQL DB
SSIS
SSAS
SSRS
外部データソース
SharePoint
Report Builder
Business Intelligence Development Studio
Business Intelligence Development Studio
10 10
SQL Server 2008 R2 でBIはこう変わる
SQL Server
SQL DB
SSIS
SSAS
SSRS
外部データソース
SharePoint
PowerPivot for EXCEL
PowerPivot for SharePoint
EXCEL Services
従来からの機能はそのままに、より使いやすく
発行 編
集
Report Builder
レポート作成
発行
Reports BIという観点では影が薄れるがDWH構築
には継続的に必須
11
まずはインストール!
12 12
デモ環境
SQL01
CLI01
SQL Azure
SP01
Windows Server 2008 R2 x64 ・Active Directory ・SQL Server 2008 R2 EE x64 ・ンスタンス機能 〓データベースエンジンサービス(MSSQLSERVER) ・共有機能 〓Business Intelligence Development Studio 〓Integration Service
Windows Server 2008 R2 x64(ドメンに参加済み) ・SharePoint Server 2010 Beta ・SQL Server 2008 R2 EE x64 ・ンスタンス機能 〓データベースエンジンサービス(GEMINIBI) ・共有機能 〓Analysis Service integrated to SharePoint
Windows 7(※ドメンに参加済) ・EXCEL 2010 Beta ・SQL Server 2008 R2 PowerPivot for Excel 2010 - CTP 11 月版 ・SQL Server 2008 R2 CTP 11 月版レポート ビルダー 3.0 ・2007 Office system ドラバ: データ接続コンポーネント
13 13
デモ環境に必要なもの • Windows Server 2008 または 2008 R2 ■評価版ダウンロード [2008](最大240日) http://www.microsoft.com/japan/windowsserver2008/trial-software.mspx ※評価機関延長方法 http://support.microsoft.com/kb/948472 [2008R2](最大180日) http://technet.microsoft.com/ja-jp/evalcenter/dd459137.aspx
• SQL Server 2008 R2 CTP 11月版 http://www.microsoft.com/japan/sqlserver/2008/r2/prodinfo/ downloads.mspx • SharePoint Server Enterprise 2010 Beta版
「SharePoint サーバー 2010」で検索してください
• Office 2010 Beta 版 http://technet.microsoft.com/ja-jp/evalcenter/ee390818.aspx
• SQL Server 2008 R2 PowerPivot for Excel 2010 - CTP 11 月版 x64 http://go.microsoft.com/fwlink/?LinkID=168584&clcid=0x411 x86 http://go.microsoft.com/fwlink/?LinkID=168583&clcid=0x411
• SQL Server 2008 R2 CTP 11 月版レポート ビルダー 3.0 「 SQL Server 2008 R2 CTP 11 月版レポート ビルダー 3.0」で検索してください
• OLEDBドライバ(32ビット) 2007 Office system ドライバ: データ接続コンポーネント ※検索してください!
14
はじめの一歩
使用するツール
• SQL Server Business Intelligence Development Studio • SQL Server Management Studio
はじめにやること
• SQL Server Management Studio を起動 • SQL Server Business Intelligence Development Studioを起動
Access/EXCELから読み込む場合には
• SQL Server Business Intelligence Development Studioの[プロジェクト]-[プロパテゖ]-[デバッグ]で Run64bitRuntime = False に設定
※OLEDBドラバがx64に対応していないため
15
64bit ランタムを無効にする方法
16
EXCELとテキストファイルの取り込みを通じ、SSISの基礎を学びましょう
17
やりたいこと
郵便番号 全国一括データ
CSV/XSLX
差分削除
郵便番号 全国差分-削除データ
CSV/XSLX
郵便番号 全国差分-追加データ
CSV/XLSX
サンプルデータ(郵便番号データ)をSQL Serverに取り込む
初回
定例
18
デモデータ「郵便番号データ」の構成と構造
日本郵便が提供:http://www.post.japanpost.jp/zipcode/dl/kogaki.html
一括データ:最終差分まで吸収されたデータ(毎月末に更新) ├ 県別(<件名>_ALL.csv) └ 全国(KEN_ALL.csv)(約12万件) 差分データ:前回からの差分(毎月末にリリース) ├ 新規追加データ(add_xxxx.csv) └ 廃止データ(del_xxxx.csv)
全国地方公共団体コード(JIS X0401, X0402)(5桁) 半角数字 (旧)郵便番号(5桁) 半角文字列(空白あり) 郵便番号(7桁) 半角文字列(先頭0あり) 都道府県名 半角カタカナ(コード順に掲載) 市区町村名 半角カタカナ(コード順に掲載) 町域名 半角カタカナ(五十音順に掲載) 都道府県名 漢字(コード順に掲載) 市区町村名 漢字(コード順に掲載) 町域名 漢字(五十音順に掲載) 一町域が二以上の郵便番号で表される場合の表示 1-該当,0-該当せず 小字毎に番地が起番されている町域の表示 1-該当,0-は該当せず 丁目を有する町域の場合の表示 1-該当,0-該当せず 一つの郵便番号で二以上の町域を表す場合の表示 1-該当,0-該当せず) 更新の表示 0-変更なし,1-変更あり,2-廃止(廃止データのみ使用) 変更理由 0-変更なし,1-市区町政・分区・政令指定都市施行,2-住居表示の実施, 3-区画整理,4-郵便区調整等,5-訂正,6-廃止(廃止データのみ使用)
dantaicode pcode5 pcode7
ktodofuken kshikuchoson
kchoiki todofuken
shikuchoson choiki
flg1 flg2 flg3 flg4 flg5 flg6
19
ウゖザードを使ってあっという間に実装
まずは簡単に
20
変換元 変換先
一括ンポートの処理の流れ
SSIS
郵便番号 全国一括データ
XLS/XLSX
変換プロセス
接続マネージャ(変換元)
接続マネージャ(変換先)
テーブル作成
コピー
テーブル削除
カラムのマップ
21
SSISンポートおよびエクスポートウゖザード
• ウゖザードに回答するだけで、簡単なデータフローを作成することができる • Excel を SQL Server に変換するだけならば1分で実装可能
データソース(Excel)を選択
変換先デバス(SQL Server)を選択
データフローの設定
テーブル削除実施の有無 テーブル作成の有無
データ新規?/追加?/削除? コピー元カラムとコピー先カラムのマップ
ウゖザードの流れ
変換プロセス
接続マネージャ
接続マネージャ
テーブル作成
コピー
テーブル削除
カラムのマップ
新規コピー
22
SSISンポートおよびエクスポートウゖザード
(参考)データソースを選択
注意
UNCパスも使用可能
23
SSISンポートおよびエクスポートウゖザード
(参考)変換先の選択
24
SSISンポートおよびエクスポートウゖザード
(参考)コピー方法の選択
全体を複製する
一部を複製する
EXCELの場合はシート名
25
SSISンポートおよびエクスポートウゖザード
(参考)コピー元テーブルの選択
複製したいテーブル(Excelの場合にはシート)を選択
コピー先のテーブルを指定 既定の名前は変換元と同じになるが
変更することもできる
作成するテーブルの詳細設定
次ページへ
26
SSISンポートおよびエクスポートウゖザード
(参考)コピー先テーブルの詳細設定
指定したテーブルが既存存在しない場合には「作成する」が規定値
新規に作成する変換先テーブルの情報。 カラム名とデータ型は、変換元から自動判断された設定される 変更したら「SQLの編集」をクリックすること
27
SSIS デザナーで全体のフローを確認
制御タブ データフロー
移入処理の全体制御を行う データセット間のデータフローを制御する
変換プロセス
接続マネージャ
接続マネージャ
テーブル作成
コピー
テーブル削除
カラムのマップ
新規コピー
SSISデザナー
28
ウゖザード〒微調整
テキストからの読み込みはすこしだけ面倒
29
EXCELとの違い
• データソースとして「フラットファイルソース」を選択 • 入力フゔルの特性を設定する
• コードページ • フゔルの種類
• CSV/固定幅/幅合わせなし(「行区切り文字」で区切る) • カラムの装飾文字 • ヘッダー関連
• ヘッダーの区切り文字 • ヘッダーの行数
• カラム(列)の定義 • 行の区切り文字(改行文字 等) • 列(カラム)の区切り文字 • 列の属性(データ型、桁数 等)
入力フゔルの属性を定義する必要がある ※64ビット環境で使用可能
30
SSISンポートおよびエクスポートウゖザード(CSV→SQL Server)
(参考)データソースの選択(全般タブ)
UNC名を使用可能
注意
31
SSISンポートおよびエクスポートウゖザード(CSV→SQL Server)
(参考)データソースの選択(列タブ)
32
SSISンポートおよびエクスポートウゖザード(CSV→SQL Server)
(参考)データソースの選択(詳細設定)
これを使って事前に各列の属性を予測しておき、あとから微調整
各列の属性 ここで定義した値に沿って変換先テーブルの属性が決定する
33
SSISンポートおよびエクスポートウゖザード(CSV→SQL Server)
(参考)コピー元テーブルを選択(列マップ)
1バト符号付整数(DT_I1) 2バト符号付整数(DT_I2)
↓ smallint
文字列(DT_STR)
↓ varchar
カラム名も合わせてくれる
34
SSISンポートおよびエクスポートウゖザード(CSV→SQL Server)
(参考)データ型マッピングの確認
変換を伴う場合にはエラー処理についても設定が必要
失敗 or 無視
35
SSIS デザナーで全体のフローを確認
制御タブ データフロー
変換に関する処理はこの中に
36
外部列
出力列
エラー出力
入力列 エ
ラー出力 外部列
データフローの構成要素
変換元
入力列
変換
出力列
エラー出力
変換先
変換先
入力列 エ
ラー出力
外部列
変換先
入力列 エ
ラー出力
外部列
変換先
入力列 エ
ラー出力
外部列
37
データフローの変換元/変換/変換先
変換元 変換 変換先
38
エラー処理
エラー処理の種類 • エラーを無視する • エラーコンポーネントに渡す
• ベントハンドラーを使用して処理 • エラー行をリダレクト
• エラーが発生した「行」をリダレクトして別のテーブルやフゔルに保存する
どの時点でエラーを捕捉するのかを検討することが重要
カラム単位に設定できる
39
不備のある入力データを出力 • 出力先として「変換先」を指定 • 入力データの不備を捕捉するので「変換元」のエラーを取得 • 変換元の[エラー出力]先を「行リダレクト」に設定
外部列
出力列
エラー出力
変換元
出力列で定義されている 「各列の属性(データ型,長さなど)」 に合致しない場合にはエラー出力へ
リダレクトされる
40
ErrorCode と ErrorColumn ErrorCode : エラーコード ErrorColumn : エラーが発生した出力列の ID
41
変換元 変換先
差分データを削除
SSIS
郵便番号 全国差分
削除データ
CSV
変換プロセス
接続マネージャ(変換元)
接続マネージャ(変換先)
行削除 既存
入力行に合致する行を検索して削除する
郵便番号データは月に1度、差分データ(削除データ一覧)が発行される
42
OLE DB コマンド
• 条件に一致した行を更新/削除 • パラメータ化されたSQL文を指定
Delete from KEN_ALL where “dantaiCode” = ? and “pcode7” = ?
(例)KEN_ALL テーブルから、以下の条件に合致する行を削除 “dantaiCode” = “入力行のCode” “pcode7” = “入力行のcode7”
変換元の列と対応付ける
43
おぼえておきたい処理
• 抽出行のコピー SQL文に合致する行のみ処理
• 文字マップ ひらがな/カタカナ/全角/半角 変換
• 派生列変換 カラム結合して新しいカラムを生成
• 条件分岐 条件に合致した入力行ごとにコピー先を変える
• マルチキャスト変換 1行を複数のテーブルにコピー
• 文字列の置換 • カラム内文字列の特定文字を置き換え
44
処理の自動化 プロセスを実装し終えたら ・[ビルド]する - binフォルダに .dtsx フゔルが作成される ・SQL Server Agent ジョブとして登録 - SQL Server Agent サービスを起動しておく(自動起動にする) - .dtsxフゔル(パッケージフゔル)を登録
45
性能監視とチューニング
データフローエンジンのパフォーマンスの監視 http://msdn.microsoft.com/ja-jp/library/ms137622(SQL.105).aspx データフローのパドーマンスの向上 http://msdn.microsoft.com/ja-jp/library/ms141301(SQL.105).aspx
46
クラウドだってターゲット
47
変換元 変換先
一括ンポートの処理の流れ
SSIS
郵便番号 全国一括データ
CSV
変換プロセス
接続マネージャ(変換元)
接続マネージャ(変換先)
テーブル作成
コピー
テーブル削除
カラムのマップ
とデータ変換
流れはSQL Server と何も変わらない
SQL Azure
48
SQL Azureとの接続
.NETプロバダーを使用する
SQL Azureのホスト名を指定する
Windows統合認証は使えないので、SQL AzureのID/パスワードを使用する
49
SQL Azure のサーバー名をチェック
http://sql.azure.com/
これがサーバー名
50
日本語の取り扱い~カラムの定義
IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = N'dbo') BEGIN EXEC(N'CREATE SCHEMA "dbo"') END CREATE TABLE "dbo"."KEN_ALL" ( "ID" int Identity(1,1) PRIMARY KEY, "DantaiCode" int, "PCode5" nvarchar(5), "PCode7" nvarchar(7), "KTodofuken" nvarchar(255) COLLATE Japanese_CI_AS, "KShikuchoson" nvarchar(255) COLLATE Japanese_CI_AS, "KAzana" nvarchar(255) COLLATE Japanese_CI_AS, "Todofuken" nvarchar(255) COLLATE Japanese_CI_AS, "Shikuchoson" nvarchar(255) COLLATE Japanese_CI_AS, "Azana" nvarchar(255) COLLATE Japanese_CI_AS, "Flg1" smallint, "Flg2" smallint, "Flg3" smallint, "Flg4" smallint, "Flg5" smallint, "Flg6" smallint ) GO
51
日本語の取り扱い~データ変換
Unicode 文字列への変換
52
若干のコーデゖング力が必要です
53 53
テーブル
構築するシステムメージ
データベース:LogReport
ComputerList
Eventlog_Security
Eventlog_Application
Eventlog_System
SSIS
ログを収集するコンピューターとログフゔル
のリスト
ログフゔルごとにテーブルを
作成
ネットワーク上のWindows Server または Windows Client から、SSISのWMIデータリーダーを使用してベントログを収集し、SQL Server 2008 / R2 に保存する。 SSISで作成したパッケージは定期的に実行するものとし、前回実行時からの差分はベントログのTimeWritten を基準にして判断するものとする。
54
ソース:Eventlogレコードの形式 Category
CategoryString
ComputerName
Data
EventCode
EventIdentifier
InsertionStrings
Logfile
Message
RecordNumber
SourceName
TimeGenerated
TimeWritten
Type
User
カテゴリ番号
カテゴリ名
ベントを生成したコンピュータ名
ベントの付帯情報
Uint16 形式のベントID
Uint32 形式のベントID
ベントの付帯情報
ログフゔルの名前(System,Application,Security など)
ベントの説明文。4000文字(bstr)を超える可能性あり。 シングルクオーテーションが含まれることが多い。
ベントレコードの通番 int32(max 2,147,483,647 )
ベントを生成したソースプロセス(MSSQL,MSInstaller など)
ベントが発生した日時。標準時で生成。
ベントが書き込まれた日時。標準時で生成。
ベントのタプ(情報、エラー、警告、成功の監査、失敗の監査)
ベントを発生させたユーザー
55
テーブル構成
ComputerName(FQDN名)
LogFileName
ComputerList
EventLogData_<LogfileName> Number(int)(key)
Category(nvarchar(50))
CategoryString(nvarchar(50))
ComputerName(nvarchar(50))
Data(nvarchar(max))
EventCode(nvarchar(50))
EventIdentifier(nvarchar(50))
InsertionStrings(nvarchar(50))
Logfile(nvarchar(50))
Message(nvarchar(max))
RecordNumber(int)
SourceName(nvarchar(max))
TimeGenerated(datetime)
TimeWritten(datetime)
Type(nvarchar(50))
User(nvarchar(50))
<logfileName> には、Application, System, Security などが入る
Server01 Server02
ソースコンピュータのリスト
EventLogData_System
EventLogData_Application
EventLogData_Security
56
(参考)ベントログを取得するスクリプト例
strComputer = “.” Set objService = GetObject(“winmgmts:¥¥“ & strComputer & “¥root¥cimv2”) Set objEvtSet = objService.ExecQuery _
("Select * From Win32_NTLogEvent Where Logfile='System'") For Each e In objEvtSet wscript.echo e.ComputerName & "," & e.EventCode Next
57
Logfile 属性について
使用可能なLogfile属性は、以下のコマンドで調査できる
C:¥> wmic nteventlog list brief FileSize LogfileName Name NumberOfRecords 6361088 Application C:¥ ¥Logs¥Application.evtx 8022 69632 HardwareEvents C:¥ ¥Logs¥HardwareEvents.evtx 0 69632 Internet Explorer C:¥ ¥Logs¥Internet Explorer.evtx 0 69632 Key Management Service C:¥ ¥Logs¥Key Management Service.evtx 0 69632 Media Center C:¥ ¥Logs¥Media Center.evtx 0 1052672 OAlerts C:¥ ¥Logs¥OAlerts.evtx 254 69632 ODiag C:¥ ¥Logs¥ODiag.evtx 0 69632 Operations Manager C:¥ ¥Logs¥Operations Manager.evtx 120 69632 OSession C:¥ ¥Logs¥OSession.evtx 4 30740480 Security C:¥ ¥Logs¥Security.evtx 40359 8458240 System C:¥ ¥Logs¥System.evtx 20623 1118208 Windows PowerShell C:¥ ¥Logs¥Windows PowerShell.evtx
58
(参考)WINEVT¥Channels 配下のベント HKLM¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥WINEVT¥Channels 配下のベントは Win32_NTLogEvent では取得できない。
C:¥>wevtutil.exe 代替策 コマンド
59
取り込みプロセスをSSISでデザン
60
SSIS
制御フローを考えてみる
ComputerList 取り込みソースのリスト
ソース取得
開始
ソースごとに処理を繰り返し
テーブル作成
取り込み範囲のチェック
ベントログを一括取得
レコードを1件ずつ取り出し
Insert into …
EventLogData_<logfilename> 終了
Insert 文を生成
参照
61
制御フローを作成するには
• 部品(制御フロー項目)をデザン画面にドラッグ&ドロップ • 各部品のパラメタを設定する • 部品同士を矢印で接続して「フロー」を決める
事前に処理の流れを決めておくことが重要
SSIS
ソース取得
開始
ソースごとに処理を繰り返し
テーブル作成
取り込み範囲のチェック
ベントログを一括取得
レコードごとに Insert 繰り返し
Insert into …
終了
62
使用する部品(制御フロー項目)
• SQL文を発行するための部品 • 「接続マネージャー」の定義が必要
• 処理を繰り返すための部品 • フゔルや変数、レコードセットの読み込みに使用 • 処理回数が未定の場合に使用する
• VB.NETまたはC#を使用して柔軟な処理を実装したい場合に使用 • 文字列の細かな処理などに使用すると便利
• WMIを使用した処理結果を受け取る場合に使用 • 今回はベントログの取得に使用している ちなみに • EXEコマンドを実行したい場合には • unix/linux 等からログを収集する場合には
63
• 制御フロー項目のI/O • 接続マネージャー • 変数 • Expression属性
64
制御フロー項目
部品
各項目には、入力と出力を設定する
データベース
フゔル
変数
直接入力 データベース
フゔル
変数
(例)
SQL文
ループの中で処理する場合に、SQL文を変えながら処理が可能
結果のレコードセットを変数に格納し、次の処理で使用できる
結果セット
接続マネージャー
IN OUT
65
接続マネージャー • 各部品(制御フロー項目)が外部リソースに接続する際に使用 • 部品間で共有が可能
WMIデータリーダー
フゔル接続
WMI接続
変数
WQ
L
66
変数
処理フローの中で使用できる、俗にいう「変数」 スコープの設定が可能(プロジェクト全体/ループ内/部品内)
Boolean/Byte/Char/DateTime/DBNull/Doube/Int16/Int32/ Int64/Object/SByte/Single/String/Uint32/UInt64
選択可能な型
TIPS
• 受け取る値の型がよくわからない場合には、「Object」型を選択しておくとよい
• Expressions属性により、変数の値を動的に設定可能
超便利!
67
Expressions 属性 • 部品(制御フロー項目)、接続マネージャー、変数などに用意されてい
る属性の1つ • Expression(式)を記載することで、指定した他の属性にダナミック
に値を代入することができる
(例)SQL実行タスク SqlStatementSource属性にはSQL文を記載するが、処理によって接続先のテーブルを変えたい場合がある。 Expressions属性を使用することで、SqlStatementSourceの値を部品が呼ばれる都度変更することができる。
68
Expressions 属性の使用例
"IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[EventLogData_"+ @[User::tmpLogfileName] +"]') AND type in (N'U') ) "+ “CREATE TABLE [dbo].[EventLogData_”+ @[User::tmpLogfileName] +“] ( [Number] [int] IDENTITY(1,1) NOT NULL, [Category] [nvarchar](50) NULL, [CategoryString] [nvarchar](50) NULL, [ComputerName] [nvarchar](50) NULL, [Data] [nvarchar](max) NULL, ・ ・ ・
テーブル名に、変数@[User::tmpLogfileName] を使用することで、部品が呼ばれるたびに、異なるテーブルに対して処理を行うことができる
69
スクリプトタスク内での変数の使用
スクリプト内で変数取り扱うことで、VB.NETやC#を使用した柔軟な加工が可能
Dim strTimeGenerated As String = “19000101 00:00:00” If Not IsDBNull (Dts.Variables(“User::TimeGenerated”).Value) Then strTimeGenerated = Dts.Variables(“User::TimeGenerated”).Value strTimeGenerated = Mid(strTimeGenerated , 1, 8) & “ “ & _ Mid(strTimeGenerated , 9, 2) & “ “ & _ Mid(strTimeGenerated , 11, 2) & “ “ & _ Mid(strTimeGenerated , 13, 2)
(例)DateTimeカラムに保存する前にDateTime形式に変換
70
71
SSIS
制御フローの確認
ComputerList 取り込みソースのリスト
ソース取得
開始
ソースごとに処理を繰り返し
テーブル作成
取り込み範囲のチェック
ベントログを一括取得
レコードを1件ずつ取り出し
Insert into …
EventLogData_<logfilename> 終了
Insert 文を生成
参照 1
2
3
4
5
6
7
8
72
処理1:ソース(コンピュータ一覧)の取得
ベントログの取り込み元一覧を取得する
dbo.ComputerList
接続マネージャ
SQ
L
タスク
Select ComputerName,LogfileName From dbo.ComputerList
User::ComputerList
SQLStatement
ADO列挙子 (データセット)
結果セットを変数に保存
73
ForEach ループ
処理2:ソースごとに処理を繰り返し User::ComputerList
User::tmpComputerName
User::tmpLogfileName
テーブル作成
取り込み範囲のチェック
ベントログを一括取得
レコードを1件ずつ取り出し
Insert into …
Fore
ach
ループ
ADO列挙子 (データセット)
Insert 文を生成
Foreachコンテナの 入力パラメータ
74
Foreach の引数「User::ComputerList」について
ComputerList 変数は データセットであるため、これを1行ずつ取り込むための変数を定義し、ComputerList から読み込んだレコードの格納先を指定する。 なお、ComputerListは1行あたり2列(ComputerName, LogFileName)が含まれるので、2つの変数を定義する必要がある。
ComputerName
User::ComputerList
LogFileName
ComputerName LogFileName
User::ComputerName
User::LogFileName
列0 列1
列0
列1
行0
行1
75
処理3:テーブルを作成 <LogfileName>ベントログを格納するテーブルが無い場合には作成する
User::tmpComputerName
User::tmpLogfileName
SQ
L
文タスク
接続マネージャ
db
o.E
ven
tlog
"IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[EventLogData_"+ @[User::tmpLogfileName] +"]') AND type in (N'U') ) "+ "CREATE TABLE [dbo].[EventLogData_"+ @[User::tmpLogfileName] +"] ([Number] [int] IDENTITY(1,1) NOT NULL, [Category] [nvarchar](50) NULL, [CategoryString] [nvarchar](50) NULL, [ComputerName] [nvarchar](50) NULL, [Data] [nvarchar](max) NULL, [EventCode] [nvarchar](50) ・ ・ [User] [nvarchar](50) NULL, CONSTRAINT [PK_EventLogData_"+ @[User::tmpLogfileName] +"] PRIMARY KEY CLUSTERED ( [Number] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"
Expressions(SQLStatement)
完全なSQL文は 手順書で
76
処理4:取り込み範囲のチェック
SQ
L
タスク
Select MAX(TimeWritten) as MaxTimeWritten from [EventLog].[dbo].[EventLogData” + @[User::tmpLogfileName] + “] Where [ComputerName] Like ‘“ + @[User::tmpComputerName]” + “’%”
Expressions(SQLStatement)
接続マネージャ
db
o.E
ven
tlog
User::tmpComputerName
User::tmpLogfileName
変数はスコープ内であればどこででも使える
テーブルには複数のコンピュータのベントログが格納されていることに
注意
User::MaxTimeWritten
SQLタスクの入力パラメータ
戻り値
77
処理4:ベントログを一括取得
WM
I
データリーダー
WQLQuerySource
接続マネージャ(WMI)
User::tmpComputerName
User::tmpLogfileName
“Select * from Win32_NTLogEvent where logfile=“ + @[User::tmpLogfileName] + “’ and TimeWritten > “ + (DT_WSTR 20) @(User::MaxTimeWritten)
Expression(Value)
User::MaxTimeWritten
Expression(ConnectionString)
“ServerName=¥¥¥¥”+@[User::tmpComputerName]+”;Namespace=¥¥root¥¥cimv2;UserNtAuth;UserName=;”
Expression(Value)
User::EventData
属性値に変数を使用できる
Expressionsの中では「¥」は
制御記号
キャストが可能
入力パラメータ
User::WQL
User::ConnectionString
78
ForEach ループ
処理5:レコードを1件ずつ取り出し
User::EventData
Insert into を実行
Insert 文を生成
User::Category
User::CategoryString
User::ComputerName
User::Type
User::User
取り出した値が見えずらい場合には
Object形式にしておくと便利
79
処理6:Insert 文を生成
SQL文を生成するにあたり、各値をSQL Serverに取り込み可能な形式に整形する
User::Category
User::User
Scrip
t
タスク
Dim strCategory As String = "" If Not IsDBNull(Dts.Variables("User::Category").Value) Then strCategory = Dts.Variables("User::Category").Value.ToString End If Dim strMessage As String = "" If Not IsDBNull(Dts.Variables("User::Message").Value) Then strMessage = Dts.Variables("User::Message").Value.ToString strMessage = Replace(strMessage, "'", "-") End If
変数の値がNullかどうかをチェックしてから
取り出す
Messageにはシングルクオーテーションが含まれているので置き換え
次のページに続く
80
Scrip
t
タスク
Dim strTimeGenerated As String = "19000101 00:00:00" If Not IsDBNull(Dts.Variables("User::TimeGenerated").Value) Then strTimeGenerated = Dts.Variables("User::TimeGenerated").Value.ToString strTimeGenerated = Mid(strTimeGenerated, 1, 8) & " " & _ Mid(strTimeGenerated, 9, 2) & ":" & _ Mid(strTimeGenerated, 11, 2) & ":" & _ Mid(strTimeGenerated, 13, 2) End If Dim strSQL As String = "INSERT INTO [EventLog].[dbo].[EventLogData_" & strLogfile & "] ([Category]" & _ ",[CategoryString]" & _ ",[ComputerName]" & _ " VALUES('" & strCategory & "'," & _ "'" & strCategoryString & "'," & _ "'" & strComputerName & "'," & _ Dts.Variables("User::InsertSQL").Value = strSQL
DateTime列に取り込めるように整形
SQL文を生成
User::InsertSQL
81
処理7:Insert Into を実行 User::InsertSQL
SQ
L
タスク
')
SQLStatement
接続マネージャ
db
o.E
ven
tlog
INSERT INTO [EventLog].[dbo].[EventLogData_Application] ([Category],[CategoryString],[ComputerName],[Data],[EventCode],[EventIdentifier],[EventType],[InsertionStrings],[LogFile],[Message],[RecordNumber],[SourceName],[TimeGenerated],[TimeWritten],[Type],[User]) VALUES('0','','TF-SQL01-01.t6303.contoso.co.jp','','12290','1073819650','3','System.String[]','Application','Package "Package" has been cancelled.',3205,'SQLISPackage100','20090923 03:23:31','20090923 03:23:31','情報','T6303¥administrator')
Value
User::InsertSQL
82
セルフサービスBI
83 83
「BIを支えるIT」が抱える問題
• BIを求めているのはだれ?
– 経営層またはビジネス管理層、ただし実際に分析するのは IW ※決して ITPro や DEV ではない
• BIがうまく普及しない要因は?
– ツールの操作性とプラットフォームの柔軟性
– データベース管理者のBIに関するスキル
– データの散在による分析のための準備
• BIを取り巻く環境の変化
– ビジネススピード
– 分析データの散在とDB統合の煩雑さ
• 複数プラットフォーム(SQLSV、ORACLE、その他)
• エンドユーザーコンピューテゖングの浸透(EXCELやテキストデータ)
• WEB上のデータ
• クラウドの出現
– システム管理者へのニーズ
• システムの安定稼働
84 84
「BIを支えるIT」に必要なもの
IWの裁量を生かすプラットフォーム
IWのスキルを生かす操作性
セルフサービス BI
85 85
PowerPivot(CodeName Gemini)とは
データベース管理者が分析用のデータを準備することなく、 Information Worker にすべての作業を委託できる
PowerPivot for EXCEL 2010 • 使い慣れた Excel に Data Analysis エンジンを組み込み • 基本操作はピボットテーブル • 64bit インメモリ エンジンと圧縮ゕルゴリズムによる高速処理 • SQL Server SSASを介さず、さまざまなデータソースへ直接接続 • 100万件を超えるデータに対応(EXCELの上限は1,048,576件)
PowerPivot for SharePoint 2010 ※Excel Services 用の PowerPivot
• PowerPivot を使用したEXCELシートの共有 • EXCEL サービスに PowerPivot 処理機能を付加 • ブラウザを使用して PowerPivot を使用したEXCELブックを表示 • Silverlight ベースの PowerPivot ギャラリー • 保存されたBOOKは ReportBuilder で編集しレポートして発行 • サーバー負荷を監視するためのダッシュボード
86
CUBEの作成もEXCELで
87 87
PowerPivotの多彩なデータソース
88 88
オンプレミス
ローカルPC
PowerPivotの利用メージ
PowerPivot
SQL Azure SQL Server 2008 R2
CSV
CUBEの作成
ピボットテーブル
89 89
PowerPivotが埋め込まれたXLSXフゔルのブラウズ
PowerPivot
CUBEの作成
ピボットテーブル
XSLX
SharePoint with PowerPivot
CUBE ごと保存される
EXCEL 2010
Internet Explorer
PCのリソースを使用
SPのリソースを使用
90 90
PowerPivot for EXCEL 2010 を使用するには [フゔル]メニューから[オプション] を選択し[ゕドン]をクリック 「管理」から「COMゕドン」を選択し、[設定]をクリック [Microsoft.AnalysisSerice.Modeler.FieldList.AddinIntegration]を選択
91 91
どうしてもPowerPivotをンストールできない場合
【SQL】PowerPivot for EXCEL 2010 がうまくインストールできない場合の対処http://blogs.technet.com/junichia/archive/2010/01/20/3306943.aspx
92 92
PowerPivot 利用手順
1. 計画
2. 分析軸用のテーブルを準備
3. Excel 2010 から PowerPivotウゖンドウを 起動
4. 分析に使用するテーブルを読み込み
5. 計算列の追加
6. リレーションシップの作成
7. 分析を実行(ピボットテーブルを作成)
8. 保存 & 発行
93 93
1.計画 • メジャー(尺度)
– 分析したい要素
(例)エラーの数、CPU負荷、空メモリ
• ディメンジョン(分析軸)
– メジャーをマップする軸
(例)日時、サーバー名、ベントソース、ベントタプ
– 一意の値
Cm
pute
rN
am
e
Sourc
e
Nam
e
日時
エラー 0
重大
CPU
メモリ
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
94
ベントログ分析の計画
System Application Security パフォーマンス
ログ
日時
・・・・・・・・
• それぞれのデータの関連性を機械的に見出すのは難しい • 時間を軸にベントやパフォーマンスを関連付ける
ベントタプ コンピューター名
95 95
2.分析軸用テーブルを作成
• 時間軸テーブル
⁃ ベントログテーブルを時系列に関連付けるために使用
⁃ 形式 yyyy/mm/dd hh:nn:00
⁃ 1年分作成すると 60*24*365 = 525600 行
⁃ PowerPivot取込後に計算列(年、月、日、時、分)を作成
• ログタイプテーブル ⁃ ベントログを種別ごとに関連づけるために使用 ⁃ レコードは「情報」「警告」「エラー」「重大」
日時
2010/1/1 00:00:00
2010/1/1 00:01:00
2010/1/1 00:02:00
・
・
EXCELで以下のテーブルを作成する
ログタイプ
情報
警告
エラー
重大
• コンピューター名テーブル ⁃ ベントログ同志およびベントログとパフォーマンスロ
グを関連づけるために使用 ⁃ FQDN名でレコードを作成 ⁃ PowerPivot取込後に計算列(コンピューター名)を作成
コンピューター名
sql01.techfielders.com
cl01.techfielders.com
・
・
96 96
時間軸テーブルの作成について 最初の2行だけ入力して、「フゖル」を使用 行番号 525600 行(1年分)まで自動入力する
97 97
3.Excel 2010 から PowerPivot を 起動
この画面でCUBEを作成する
作成したCUBEをもとにピボットテーブル作成
98 98
4.分析に使用するテーブルを読み込み
• SQL Server より
– ベントログ テーブル
• Eventlog_System
• Eventlog_Application
– コンピューターリスト テーブル
• ComputerList
• EXCEL より
– 時間軸 シート
– ベントタプ シート
99 99
(TIPS)SQL Server からの読み込み SQL Server からの読み込みでエラーが出る場合には、 「.Net Framework Data Provider for SQL Server 」を使用
100 100
(注意)PowerPivotの留意点ー利用者のゕクセス権
• (できれば)AD統合認証を使用
• ADユーザーに対してDBへのゕクセス権を付与
– 3段階のゕクセス権に注意
• 第1段階:SQL Serverへのログン権限
• 第2段階:データベースへの接続権限
• 第3段階:テーブルの「選択(Select)」権限
【SQL】PowerPivotを使用してデータベースに接続するとアクセスが拒否される http://blogs.technet.com/junichia/archive/2010/01/21/3307187.aspx
101 101
5.計算列の追加
• 分析に使用する数値を既存の列をゕレンジして算出する • (例)受注金額 =「受注単価」列 × 「受注数量」列
• リレーションシップを作成するためにテーブル間で値の形式を合わせる • (例)日時のリレーションを構築するために、粒度を合わせる
受注コード 品番 受注単価 受注数量 受注金額
9999999 999 9999 999 999999
=[受注単価]*[受注数量]
日時 日時2
2010/01/01 9:21:15 2010/01/01 9:21:00
TimeGenerated 日時2
2010/01/01 9:21:59 2010/01/01 9:21:00
102 102
今回のシステムで追加する列
Eventlog_<ログファイル名> テーブル
TimeGenerated 列を 「yyyy/mm/dd hh:nn:00(日付形式)」に変換
ComputerName 列を 「コンピューター名」 のみに変換
ComputerList テーブル
ComputerName 列を 「コンピューター名」 のみに変換
時間軸 テーブル
日時 列を 「yyyy/mm/dd hh:nn:00(日付形式)」に変換
日時 列を 「YYYY」 に変換(年)
日時 列を 「MM」に変換(月)
日時 列を 「DD」に変換(日)
日時 列を 「HH」に変換(時)
日時 列を 「NN」に変換(分)
イベントタイプ テーブル
特に必要なし
103 103
(参考)計算列の書式
• [日時]列を「yyyy/mm/dd hh:nn:00」形式に変換 DATEVALUE( YEAR([日時]) & "/" & MONTH([日時]) & "/" & DAY([日時]) ) + TIMEVALUE( HOUR([日時]) & ":" & MINUTE([日時]) )
• [ComputerName]列からドメイン名を削除してコンピューター名に変換
SUBSTITUTE([ComputerName],“.techfielders.com","")
実際には1行で記載
104 104
ゕプリケーションログ
ID
日時2 Type
ServerName
システムログ
ID
日時2 Type
ServerName
セキュリテゖログ
ID
日時2 Type
ServerName
6.リレーションシップの作成
時間軸
日時
日時2
年
月
日
時
分
ベントタプ
Type
ComputerList
ComputerName
105 105
PowerPivot でリレーションを作成するには
106 106
分析:Step1 Σ値の設定
107 107
分析:Step2 列ラベルの設定
データ推移を参照するための軸を設定
108 108
分析:Step3 行ラベルの設定
109 109
分析:Step4 スラサーの追加
110 110
便利な機能ースパークラン
セルの中にグラフを表示
111
EXCELが無くてもブラウザでレポートを参照
112 112
BI における SharePoint の位置づけ
SharePoint
PowerPivot for EXCEL
PowerPivot for SharePoint
EXCEL Services
• 分析レポートの共有 • ゕクセス権の管理
発行 編
集
Report Builder
レポート作成
発行
Reports
SSAS
SSRS
113 113
PowerPivot for SharePoint へのゕクセス権設定 SharePointの利用者にWORKBOOKの発行権限を与えておく
114 114
115 115
PowerPivot ギャラリー SilverLightベースのGUIでレポート一覧を表示 ブラウザを使用して分析レポートを参照、操作
116 116
SSRS と Report Builder の立場は? • 従来からの業務はひきつづきSSRSで
• EXCELでは対応しづらい分野
– レゕウトの自由度 や 文字列データの一覧 など…
• Report Builder 3.0 は表現力がさらに向上
– BINGMAPとの連動
• 地図データと統計データの統合
117
118 118
まとめ
• SSIS で手離れの良い仕組みを作りましょう
• セルフサービス BI により
– ITPro は本来の業務に集中できます
– IW は自身の裁量で自由に分析が行えます
– レポートの表現力が向上します
119
募集「ID管理系 ブロガー」
TFの集い 特別編「Active Directory おかげさまで10周年」
2010.2.27(土)
今すぐ!
120