私は業務の中でシステムやアプリケーションのログを分析することが多く、主にExcelへログを取り込んで確認しています。
分析の仕方はいろいろありますが、「前の値との差分を計算して、変化が大きい部分に着目する」といった方法もよく使います。
| A | B | C | |
|---|---|---|---|
| 1 | time | Available_Bytes | Available Bytes(delta) |
| 2 | 09:42:14 | 760,311,808 | |
| 3 | 09:42:19 | 767,492,096 | =B3-B2 |
| 4 | 09:42:24 | 785,698,816 |
ただ最近は、データ量が多すぎてExcelへ取り込めないといったことも多くなり、その代わりとしてSQL Serverを利用することが増えてきました。
SQL Serverで、「前の値との差分を計算して、変化が大きい部分に着目する」といったことができないかと調べたところ、LAG関数で実現できることが分かりました。
例えば、以下のようなクエリを使用します。
SELECT *,
Available_Bytes - (LAG(Available_Bytes) OVER (ORDER BY [time])) Available_Bytes_Delta
FROM [Memory]
| time | Available_Bytes | Available_Bytes_Delta |
|---|---|---|
| 09:42:14 | 760,311,808 | NULL |
| 09:42:19 | 767,492,096 | 7,180,288 |
| 09:42:24 | 785,698,816 | 18,206,720 |
このクエリではLAG関数を使用して、前の行のAvailable_Bytesの値を取得し、現在の行のAvailable_Bytesとの差分を計算しています。
SQL ServerではExcelで計算しにくかった日時の差分など、少し凝った分析も進めやすくなりそうですので、使いこなせるように勉強していきたいと思います。

