2009年5月19日火曜日

SAS Log Utilityの画面イメージ(2)




データセット単位で、入出力回数、処理時間を集計する画面です。ボトルネックの解析に使います。







この画面は、データセット、ファイルの入出力を解析するものです。データセットの読み取り、書き込み、読み書き、削除を処理のステップ順に表します。ひとことで言うとCRUD表です。



2009年5月17日日曜日

SAS Log Utilityの画面イメージ

SAS Log Utilityの画面イメージを貼り付けます。これは、SASログから処理時間の情報を抽出した画面です。



バージョン情報のダイアログを追加

週末に以下の作業を行った。

バージョン情報のダイアログを追加
製品名、バージョン、著作権情報、このブログのURLを記載したダイアログを追加した。URLをクリックすると、ブログを表示するようにした。

メモリリークの対応
ReportMemoryLeaksOnShutdown := True の1行をdprファイル中に追加して、メモリリークの調査を行った。クラスの実装をやり直して、解放漏れを無くした。

ListViewのクリア
解析ボタンを2回押すと、前の結果がクリアされずに追加される問題を修正した。

多言語対応の機能をチェック
英語に対応させる機能をチェックしたが、コード中でハードコードした部分はどうやってマルチリンガルにするのか不明。要調査。

2009年5月12日火曜日

SAS Log Utilityの概要

SAS Log Utilityの概要について説明します。

概要
SAS Log Utilityは、SASプログラムが出力するログファイルを分析して、パフォーマンス診断や入出力の解析に役立つ情報を作成します。SAS Log Utilityを使うと以下のことができます。

  • SASプログラムの処理時間をDATAステップで集計して、ボトルネックとなっている処理を見つけることができます。
  • SASプログラムがどのようなデータを読み書きしているか、DATAステップ又はプロシージャ単位で捉えて、データの流れを理解することができます。
  • MPRINTのログを捉えて、マクロ単位の処理時間を集計します。
  • 複数のSASプログラムがどのようなデータを読み書きし、プログラム間でのデータの連携を可視化します。

機能

  • SASログからDATAステップ/プロシージャ単位の処理時間を抽出
  • SASログから処理時間を抽出し、データセット単位で処理に要した時間を集計
  • SASログからDATAステップ/プロシージャの入出力を抽出し、データの生成、読み取り、更新、削除の流れを表形式に出力
  • SASログからMPRINTのログを抽出し、マクロ単位の処理時間を集計
  • SASログの分析結果をExcelに出力

動作環境

SAS Log Utilityの動作環境は次のとおりです。

動作環境

  • 動作OS: Windows 2000/XP
  • 動作機種: 汎用 
  • ソフトの種類: フリーソフト又はシェアウエア
  • 作者: mining

検証環境

  • SAS 8.2(日本語 及び 英語)
  • SAS 9.1.3 SP4(日本語 及び 英語)
  • Microsoft Office Excel 2003
制約
  • タグソートの入力データセットはSASログから補足できないため、分析の対象外となります。
  • データセットの削除については、PROC DATASETSで削除されたデータだけが分析の対象となります。
  • 分析対象のデータセットは999件を上限とします。

2009年5月10日日曜日

SAS Utilityの開発

はじめに
このブログは、SAS言語のユーティリティを開発するための日記です。

SAS言語のユーティリティとは?
これから開発しようとしているSAS言語のユーティリティとは、SASのプログラムやログを分析して、パフォーマンス解析や データセットの入出力を可視化するプログラムです。

何故、ユーティリティを作ろうと思ったのか
私がBase SASを仕事で使い始めて、数年が過ぎました。 最初は古いシンタックス、わからないマクロに手を焼きましたが、だいぶ身体が慣れてSASでできることが広がってきています。それでも、質より量をこなさなければならない仕事もあり、使えるユーティリティを作る必要が出てきました。

過去にExcelとVBAの組み合わせで簡単なものを作ってみましたが、複数の機能を1つのExcelファイルに組み込み難いという 問題がありました。欲しいのは「これ1本で簡単に使える」というツールです。

そこで新しくDelphiを学び、ネイティブのWindowsアプリケーションとしてユーティリティを開発することを決めました。Delphiを選んだ理由は、ランタイム不要で動くバイナリを生成できるからです。