🎨 ダッシュボードスタジオ【図形の動的制御】完全ガイド
インデックスデータで色・太さ・形状を自動変更!
📌 制御できる要素一覧
ダッシュボードスタジオで制御可能な要素
1. 線の色 (Line Color)
2. 線の太さ (Line Width)
3. 線のスタイル (Line Style: Solid/Dashed/Dotted)
4. マーカー形状 (Marker: Circle/Square/Diamond/Triangle)
5. マーカー色 (Marker Color)
6. マーカーサイズ (Marker Size)
7. エリア塗りつぶし (Area Fill)
8. 透明度 (Opacity)
🎯 パターン1: 線の太さを動的に変更
完成イメージ
データが低い時: 細い線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (細い線) │
│ │ ╱╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
データが高い時: 太い線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (太い線) │
│ │ ╱━━╲ │
│ 500│ ╱━━━━╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
SPLコード(1行ずつ解説)
| inputlookup server_data.csv
説明:
- CSVファイルを読み込むコマンド
-
server_data.csvはアップロード済みのファイル
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
説明:
-
strptime()で文字列を時刻に変換 -
_timeはSplunkの時刻フィールド
| timechart span=30m avg(cpu) as データ値
説明:
- 30分間隔でCPUの平均値を計算
- 結果を「データ値」という名前にする
| eval 基準線=1000
説明:
- Y軸の1000の位置に固定の基準線を作成
- この値は常に1000(絶対値)
| eval 細線基準=if(データ値<800, 1000, null())
説明:
if(条件, 真の時, 偽の時)- 条件: データ値 < 800
- 真の時: 1000 を返す(Y軸1000に線を表示)
- 偽の時: null() を返す(非表示)
- 結果: データが800未満の時だけ表示される
| eval 太線基準=if(データ値>=800, 1000, null())
説明:
- 条件: データ値 >= 800
- 真の時: 1000 を返す
- 偽の時: null() を返す
- 結果: データが800以上の時だけ表示される
UI設定(太さを変える)
Configuration > Series
細線基準の設定:
┌────────────────────────────────────────┐
│ Series: 細線基準 │
├────────────────────────────────────────┤
│ 🎨 Color: #FF0000 (赤) │
│ 📏 Line Width: 2 ← 細い │
│ ━━ Line Style: Solid │
│ [ Apply ] │
└────────────────────────────────────────┘
太線基準の設定:
┌────────────────────────────────────────┐
│ Series: 太線基準 │
├────────────────────────────────────────┤
│ 🎨 Color: #FF0000 (赤) │
│ 📏 Line Width: 6 ← 太い │
│ ━━ Line Style: Solid │
│ [ Apply ] │
└────────────────────────────────────────┘
結果:
- データ<800: 細い赤線(Width: 2)
- データ>=800: 太い赤線(Width: 6)
- 同じ色だが太さが変わる
🎯 パターン2: 線のスタイルを動的に変更
完成イメージ
通常時: 実線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (実線) │
│ │ ╱╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
警告時: 点線
┌────────────────────────────────────────┐
│ 1000│━ ━ ━ ━ ━ ━ ━ ━ ━ (点線) │
│ │ ╱╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
危険時: ドット
┌────────────────────────────────────────┐
│ 1000│・・・・・・・・・・ (ドット) │
│ │ ╱╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
SPLコード
| inputlookup server_data.csv
- CSVデータを読み込む
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
- タイムスタンプを時刻に変換
| timechart span=30m avg(cpu) as データ値
- 30分ごとの平均値を計算
| eval 実線基準=if(データ値<700, 1000, null())
説明:
- 条件: データ値 < 700
- 表示: Y=1000に線を表示
- UI設定で: Solid(実線)に設定
| eval 点線基準=if(データ値>=700 AND データ値<1000, 1000, null())
説明:
- 条件: 700 ≤ データ値 < 1000
- 表示: Y=1000に線を表示
- UI設定で: Dashed(点線)に設定
| eval ドット基準=if(データ値>=1000, 1000, null())
説明:
- 条件: データ値 >= 1000
- 表示: Y=1000に線を表示
- UI設定で: Dotted(ドット)に設定
UI設定(スタイルを変える)
Configuration > Series
実線基準:
┌────────────────────────────────────────┐
│ Color: #0066CC (青) │
│ Line Width: 4 │
│ Line Style: (●) Solid ← 実線 │
│ [ Apply ] │
└────────────────────────────────────────┘
点線基準:
┌────────────────────────────────────────┐
│ Color: #FFA500 (オレンジ) │
│ Line Width: 4 │
│ Line Style: (●) Dashed ← 点線 │
│ [ Apply ] │
└────────────────────────────────────────┘
ドット基準:
┌────────────────────────────────────────┐
│ Color: #FF0000 (赤) │
│ Line Width: 4 │
│ Line Style: (●) Dotted ← ドット │
│ [ Apply ] │
└────────────────────────────────────────┘
🎯 パターン3: マーカー(点)の形状を動的に変更
完成イメージ
データが低い: 丸いマーカー
┌────────────────────────────────────────┐
│ 1000│━━━━●━━━━●━━━━●━━━━ │
│ │ ● ● │
│ 500│ ● │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
データが高い: ダイヤモンドマーカー
┌────────────────────────────────────────┐
│ 1000│━━━━◆━━━━◆━━━━◆━━━━ │
│ │ ◆ ◆ │
│ 500│ ◆ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
SPLコード
| inputlookup server_data.csv
- CSVファイルを読み込む
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
- タイムスタンプを変換
| timechart span=30m avg(cpu) as データ値
- 30分ごとに集計
| eval 丸マーカー=if(データ値<800, データ値, null())
説明:
- 条件: データ値 < 800
- 真の時: データ値そのものを返す(データに追従)
- 偽の時: null()(非表示)
- 重要: 基準線(固定値)ではなく、データラインに使う
| eval ダイヤマーカー=if(データ値>=800, データ値, null())
説明:
- 条件: データ値 >= 800
- 真の時: データ値そのものを返す
- 偽の時: null()
- データが800以上の時だけダイヤモンド形で表示
UI設定(マーカー形状を変える)
Configuration > Series
丸マーカーの設定:
┌────────────────────────────────────────┐
│ Series: 丸マーカー │
├────────────────────────────────────────┤
│ Color: #00FF00 (緑) │
│ Line Style: Solid │
│ Show Marker: ON ← 重要 │
│ Marker: (●) Circle ← 丸 │
│ Marker Size: 8 │
│ [ Apply ] │
└────────────────────────────────────────┘
ダイヤマーカーの設定:
┌────────────────────────────────────────┐
│ Series: ダイヤマーカー │
├────────────────────────────────────────┤
│ Color: #FF0000 (赤) │
│ Line Style: Solid │
│ Show Marker: ON ← 重要 │
│ Marker: (●) Diamond ← ダイヤ │
│ Marker Size: 10 │
│ [ Apply ] │
└────────────────────────────────────────┘
利用可能なマーカー形状:
● Circle (丸)
■ Square (四角)
◆ Diamond (ひし形)
▲ Triangle (三角)
✕ Cross (バツ)
+ Plus (プラス)
🎯 パターン4: エリア塗りつぶし色を動的に変更
完成イメージ
通常時: 緑のエリア
┌────────────────────────────────────────┐
│ 1000│ │
│ │ ╱🟢🟢╲ │
│ 500│ ╱🟢🟢🟢🟢╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
警告時: 赤のエリア
┌────────────────────────────────────────┐
│ 1000│ ╱🔴🔴╲ │
│ │ ╱🔴🔴🔴🔴╲ │
│ 500│ ╱🔴🔴🔴🔴🔴🔴╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
SPLコード
| inputlookup server_data.csv
- CSVファイルを読み込む
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
- タイムスタンプを変換
| timechart span=30m avg(cpu) as データ値
- 30分ごとの平均値を計算
| eval 緑エリア=if(データ値<800, データ値, null())
説明:
- 条件: データ値 < 800
- 真の時: データ値そのものを返す
- 結果: データが800未満の時、データラインが緑エリアで塗りつぶされる
| eval 赤エリア=if(データ値>=800, データ値, null())
説明:
- 条件: データ値 >= 800
- 真の時: データ値そのものを返す
- 結果: データが800以上の時、データラインが赤エリアで塗りつぶされる
UI設定(エリア塗りつぶし)
Configuration > Visualization
ビジュアライゼーションタイプを変更:
┌────────────────────────────────────────┐
│ Visualization Type: │
│ ( ) Line Chart │
│ (●) Area Chart ← これを選択 │
└────────────────────────────────────────┘
Configuration > Series
緑エリアの設定:
┌────────────────────────────────────────┐
│ Series: 緑エリア │
├────────────────────────────────────────┤
│ Color: #00FF00 (緑) │
│ Opacity: 50% ← 透明度 │
│ Area Fill: ON │
│ [ Apply ] │
└────────────────────────────────────────┘
赤エリアの設定:
┌────────────────────────────────────────┐
│ Series: 赤エリア │
├────────────────────────────────────────┤
│ Color: #FF0000 (赤) │
│ Opacity: 50% │
│ Area Fill: ON │
│ [ Apply ] │
└────────────────────────────────────────┘
🎯 パターン5: 複合制御(色+太さ+スタイル)
完成イメージ
レベル1(データ<500): 細い緑の実線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (細緑実線) │
│ │ ╱╲ │
│ 500│╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
レベル2(500≤データ<800): 中太黄の点線
┌────────────────────────────────────────┐
│ 1000│━ ━ ━ ━ ━ ━ ━ ━ ━ (中黄点線) │
│ │ ╱╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
レベル3(データ≥800): 太い赤のドット
┌────────────────────────────────────────┐
│ 1000│・・・・・・・・・・ (太赤ドット) │
│ │ ╱╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
└────────────────────────────────────────┘
SPLコード(完全版)
| inputlookup server_data.csv
- CSVファイルを読み込む
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
- タイムスタンプを時刻に変換
| timechart span=30m avg(cpu) as データ値
- 30分間隔でCPUの平均値を計算
| eval レベル1基準=if(データ値<500, 1000, null())
説明:
- 条件: データ値 < 500
- 表示: Y軸の1000に基準線
- UI設定: 細い(Width:2) + 緑 + 実線(Solid)
| eval レベル2基準=if(データ値>=500 AND データ値<800, 1000, null())
説明:
- 条件: 500 ≤ データ値 < 800
- 表示: Y軸の1000に基準線
- UI設定: 中太(Width:4) + 黄 + 点線(Dashed)
| eval レベル3基準=if(データ値>=800, 1000, null())
説明:
- 条件: データ値 >= 800
- 表示: Y軸の1000に基準線
- UI設定: 太い(Width:6) + 赤 + ドット(Dotted)
UI設定表(複合制御)
| フィールド名 | 色 | Line Width | Line Style | 条件 |
|---|---|---|---|---|
| レベル1基準 | #00FF00 緑 | 2 | Solid | <500 |
| レベル2基準 | #FFFF00 黄 | 4 | Dashed | 500-799 |
| レベル3基準 | #FF0000 赤 | 6 | Dotted | ≥800 |
🎯 パターン6: 縦線マーカーの動的制御
完成イメージ
通常時: 青い小さい丸
┌────────────────────────────────────────┐
│ ┃ ┃ ┃ │
│ 1000│● ● ● │
│ │ ╱╲ ╱╲ │
│ 500│╱ ╲ ╱ ╲ │
│ └─────────────────────────→ │
│ 9時 12時 15時 │
└────────────────────────────────────────┘
警告時: 赤い大きいダイヤ
┌────────────────────────────────────────┐
│ ┃ ┃ ┃ │
│ 1000│ ◆ │
│ │ ╱ ╲ │
│ 500│ ╱ ╲ │
│ └─────────────────────────→ │
│ 9時 12時 15時 │
└────────────────────────────────────────┘
SPLコード
| inputlookup server_data.csv
- CSVファイルを読み込む
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
- タイムスタンプを変換
| timechart span=1h avg(cpu) as データ値
- 1時間ごとに集計(縦線マーカー用)
| eval 時刻文字列=strftime(_time, "%H:%M")
説明:
-
strftime()で時刻を文字列に変換 -
"%H:%M"は "09:00" のような形式 - 特定の時刻を判定するために使用
| eval 青マーカー09時=if(時刻文字列="09:00" AND データ値<800, データ値, null())
説明:
- 条件1: 時刻文字列 = "09:00"(9時ちょうど)
- AND
- 条件2: データ値 < 800(通常レベル)
- 真の時: データ値を返す(マーカーがデータの高さに表示)
- UI設定: 青い小さい丸マーカー
| eval 赤マーカー09時=if(時刻文字列="09:00" AND データ値>=800, データ値, null())
説明:
- 条件1: 時刻 = "09:00"
- AND
- 条件2: データ値 >= 800(警告レベル)
- 真の時: データ値を返す
- UI設定: 赤い大きいダイヤマーカー
| eval 青マーカー12時=if(時刻文字列="12:00" AND データ値<800, データ値, null())
| eval 赤マーカー12時=if(時刻文字列="12:00" AND データ値>=800, データ値, null())
説明:
- 12時の位置に同様のマーカーを配置
- データの値に応じて青/赤が切り替わる
| eval 青マーカー15時=if(時刻文字列="15:00" AND データ値<800, データ値, null())
| eval 赤マーカー15時=if(時刻文字列="15:00" AND データ値>=800, データ値, null())
説明:
- 15時の位置にマーカーを配置
UI設定(マーカー制御)
Configuration > Series
青マーカー09時:
┌────────────────────────────────────────┐
│ Color: #0066CC (青) │
│ Show Line: OFF ← 線を消す │
│ Show Marker: ON ← マーカーのみ表示 │
│ Marker: Circle (●) │
│ Marker Size: 6 ← 小さめ │
│ [ Apply ] │
└────────────────────────────────────────┘
赤マーカー09時:
┌────────────────────────────────────────┐
│ Color: #FF0000 (赤) │
│ Show Line: OFF │
│ Show Marker: ON │
│ Marker: Diamond (◆) │
│ Marker Size: 12 ← 大きめ │
│ [ Apply ] │
└────────────────────────────────────────┘
重要設定:
-
Show Line: OFF→ 線を消してマーカーだけ表示 -
Show Marker: ON→ マーカーを表示
🎯 実践: 総合制御(10要素)
全要素を組み合わせた例
| inputlookup server_data.csv
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
| timechart span=30m avg(cpu) as データ値
# === 線の色制御 ===
| eval 緑線=if(データ値<400, データ値, null())
| eval 青線=if(データ値>=400 AND データ値<700, データ値, null())
| eval 赤線=if(データ値>=700, データ値, null())
# === 線の太さ制御 ===
| eval 細基準=if(データ値<500, 1000, null())
| eval 太基準=if(データ値>=500, 1000, null())
# === 線のスタイル制御 ===
| eval 実線基準=if(データ値<600, 800, null())
| eval 点線基準=if(データ値>=600 AND データ値<900, 800, null())
| eval ドット基準=if(データ値>=900, 800, null())
# === マーカー形状制御 ===
| eval 時刻=strftime(_time, "%H:%M")
| eval 丸マーカー=if(時刻="09:00" AND データ値<700, データ値, null())
| eval ダイヤマーカー=if(時刻="09:00" AND データ値>=700, データ値, null())
# === エリア塗りつぶし制御 ===
| eval 緑エリア=if(データ値<500, データ値, null())
| eval 赤エリア=if(データ値>=500, データ値, null())
各行の説明:
# === 線の色制御 ===
- コメント行(実行されない)
- コードの区切りとして使用
| eval 緑線=if(データ値<400, データ値, null())
- データが400未満: 緑の線でデータを表示
- データが400以上: 非表示
| eval 青線=if(データ値>=400 AND データ値<700, データ値, null())
- データが400-699: 青の線でデータを表示
| eval 赤線=if(データ値>=700, データ値, null())
- データが700以上: 赤の線でデータを表示
# === 線の太さ制御 ===
| eval 細基準=if(データ値<500, 1000, null())
- データが500未満: Y=1000に細い基準線
- UI設定: Line Width = 2
| eval 太基準=if(データ値>=500, 1000, null())
- データが500以上: Y=1000に太い基準線
- UI設定: Line Width = 6
# === 線のスタイル制御 ===
| eval 実線基準=if(データ値<600, 800, null())
- データが600未満: Y=800に実線の基準線
- UI設定: Line Style = Solid
| eval 点線基準=if(データ値>=600 AND データ値<900, 800, null())
- データが600-899: Y=800に点線の基準線
- UI設定: Line Style = Dashed
| eval ドット基準=if(データ値>=900, 800, null())
- データが900以上: Y=800にドットの基準線
- UI設定: Line Style = Dotted
# === マーカー形状制御 ===
| eval 時刻=strftime(_time, "%H:%M")
- 時刻を "09:00" 形式の文字列に変換
- 特定時刻の判定に使用
| eval 丸マーカー=if(時刻="09:00" AND データ値<700, データ値, null())
- 9時 かつ データ<700: 丸マーカーを表示
- UI設定: Marker = Circle
| eval ダイヤマーカー=if(時刻="09:00" AND データ値>=700, データ値, null())
- 9時 かつ データ>=700: ダイヤマーカーを表示
- UI設定: Marker = Diamond
# === エリア塗りつぶし制御 ===
| eval 緑エリア=if(データ値<500, データ値, null())
- データが500未満: 緑のエリアで塗りつぶし
- Visualization Type = Area Chart で使用
| eval 赤エリア=if(データ値>=500, データ値, null())
- データが500以上: 赤のエリアで塗りつぶし
📋 制御要素の設定一覧表
| 制御要素 | SPL | UI設定場所 | 設定値例 |
|---|---|---|---|
| 線の色 | eval 緑線=if(条件, データ値, null()) |
Series > Color | #00FF00 |
| 線の太さ | eval 細線=if(条件, 1000, null()) |
Series > Line Width |
2 / 6
|
| 線のスタイル | eval 実線=if(条件, 1000, null()) |
Series > Line Style | Solid/Dashed/Dotted |
| マーカー形状 | eval 丸=if(条件, データ値, null()) |
Series > Marker | Circle/Diamond/Square |
| マーカーサイズ | 同上 | Series > Marker Size |
6 / 12
|
| マーカー色 | 同上 | Series > Color | #FF0000 |
| エリア塗り | eval 緑エリア=if(条件, データ値, null()) |
Visualization Type | Area Chart |
| 透明度 | 同上 | Series > Opacity |
30% / 70%
|
| 線表示/非表示 | 同上 | Series > Show Line | ON / OFF |
| マーカー表示/非表示 | 同上 | Series > Show Marker | ON / OFF |
💡 重要ポイント
✅ データラインと基準線の違い
# データライン(データに追従)
| eval 緑線=if(データ値<800, データ値, null())
↑
データ値そのもの
# 基準線(固定値)
| eval 緑基準=if(データ値<800, 1000, null())
↑
固定値1000
使い分け:
- データライン: 色やマーカーを変えたい時
- 基準線: 閾値ラインを引きたい時
✅ マーカーのみ表示する方法
UI設定:
┌────────────────────────────────────────┐
│ Show Line: OFF ← 線を消す │
│ Show Marker: ON ← マーカーだけ表示 │
└────────────────────────────────────────┘
SPL:
| eval マーカー=if(時刻="09:00", データ値, null())
↑
データ値を使う
✅ 複数条件の組み合わせ
# AND(かつ)
| eval 線=if(条件1 AND 条件2, 値, null())
↑ ↑
両方とも真の時
# OR(または)
| eval 線=if(条件1 OR 条件2, 値, null())
↑ ↑
どちらか真の時
# 複雑な条件
| eval 線=if((条件1 AND 条件2) OR 条件3, 値, null())
🔧 トラブルシューティング
Q1: マーカーが表示されない
原因:
Show Marker: OFF になっている
解決:
Configuration > Series > マーカー名
┌────────────────────────────────────────┐
│ Show Marker: ON ← これをONにする │
│ Marker: Circle │
│ Marker Size: 8 │
└────────────────────────────────────────┘
Q2: 線の太さが変わらない
原因:
同じフィールド名を使っている
解決:
❌ 間違い:
| eval 基準線=if(データ値<500, 1000, null())
| eval 基準線=if(データ値>=500, 1000, null())
↑
同じ名前(上書きされる)
✅ 正しい:
| eval 細基準=if(データ値<500, 1000, null())
| eval 太基準=if(データ値>=500, 1000, null())
↑ ↑
別々の名前
Q3: エリアが塗りつぶされない
原因:
Visualization Typeが Line Chart のまま
解決:
Configuration
┌────────────────────────────────────────┐
│ Visualization Type: │
│ (●) Area Chart ← これを選択 │
└────────────────────────────────────────┘
📊 完全版サンプルコード
| inputlookup server_data.csv
↑ CSVファイルを読み込む
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
↑ タイムスタンプを時刻に変換
| timechart span=30m avg(cpu) as データ値
↑ 30分ごとの平均値を計算
# 色制御: 3段階
| eval 緑線=if(データ値<500, データ値, null())
↑ データ<500: 緑の線
| eval 黄線=if(データ値>=500 AND データ値<800, データ値, null())
↑ データ500-799: 黄色の線
| eval 赤線=if(データ値>=800, データ値, null())
↑ データ>=800: 赤の線
# 太さ制御: 基準線
| eval 細基準=if(データ値<700, 1000, null())
↑ データ<700: 細い基準線(Width: 2)
| eval 太基準=if(データ値>=700, 1000, null())
↑ データ>=700: 太い基準線(Width: 6)
# スタイル制御: 基準線
| eval 実線基準=if(データ値<600, 800, null())
↑ データ<600: 実線基準線(Solid)
| eval 点線基準=if(データ値>=600, 800, null())
↑ データ>=600: 点線基準線(Dashed)
# マーカー制御: 時刻ポイント
| eval 時刻=strftime(_time, "%H:%M")
↑ 時刻を文字列化
| eval 青丸=if(時刻="09:00" AND データ値<700, データ値, null())
↑ 9時でデータ<700: 青い丸マーカー
| eval 赤ダイヤ=if(時刻="09:00" AND データ値>=700, データ値, null())
↑ 9時でデータ>=700: 赤いダイヤマーカー
🔬 インデックス使う vs 使わない【スモールテスト完全版】
3つの方法を比較!最速テスト手順
📌 3つの方法の比較
┌─────────────────────────────────────────────────┐
│ 方法1: インデックスを使わない(makeresults) │
│ ・最速(0分) │
│ ・データ投入不要 │
│ ・一時的なテストに最適 │
│ ・ダッシュボードを閉じるとデータ消える │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 方法2: インデックスを使わない(CSV Lookup) │
│ ・速い(5分) │
│ ・CSVアップロードのみ │
│ ・データ再利用可能 │
│ ・ダッシュボード間で共有可能 │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 方法3: インデックスを使う(本番運用) │
│ ・遅い(10-15分) │
│ ・インデックス作成+データ投入 │
│ ・本番環境向け │
│ ・大量データに対応 │
└─────────────────────────────────────────────────┘
🚀 方法1: インデックス使わない【最速0分】makeresults
特徴
✅ メリット:
・コピペだけで即実行
・インデックス不要
・CSV不要
・1分で動作確認完了
❌ デメリット:
・ダッシュボードを閉じるとデータ消える
・毎回データ生成が必要
・大量データには不向き
スモールテスト: 2色基準線(最小構成)
SPLコード(コピペ用)
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
| table _time データ値 緑基準線 赤基準線
各行の説明:
| makeresults count=20
-
makeresults→ ダミーデータを作るコマンド -
count=20→ 20行のデータを作成 - 結果: 20行の空データが生成される
| streamstats count as カウンター
-
streamstats→ 各行に連番を振るコマンド -
count as カウンター→ 1, 2, 3... という連番 - 結果: 各行に1~20の番号が付く
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
-
relative_time(now(), ...)→ 現在時刻から相対的な時刻を計算 -
now()→ 現在時刻 -
"-" + カウンター*30 + "m"→ カウンター×30分前 -
例:
- カウンター=1 → 30分前
- カウンター=2 → 60分前(1時間前)
- カウンター=20 → 600分前(10時間前)
- 結果: 30分刻みの時刻が生成される
| eval データ値=500 + (random()%600)
-
random()→ ランダムな数値を生成 -
random()%600→ 0~599のランダム値 -
500 +→ 500を足す - 結果: 500~1099の範囲のランダム値
| eval 緑基準線=if(データ値<700, 1000, null())
-
if(条件, 真, 偽)→ 条件分岐 - 条件: データ値 < 700
- 真の時: 1000(Y軸の1000に線を表示)
- 偽の時: null()(非表示)
| eval 赤基準線=if(データ値>=700, 1000, null())
- 条件: データ値 >= 700
- 真の時: 1000を返す
- 偽の時: null()を返す
| table _time データ値 緑基準線 赤基準線
-
table→ 指定したフィールドだけをテーブル表示 - グラフ化の準備
- 結果: 必要なフィールドだけが残る
実行手順(30秒)
STEP 1: Search & Reporting を開く
┌─────────────────────────────────────┐
│ 🔍 Search & Reporting ← クリック │
└─────────────────────────────────────┘
STEP 2: クエリをコピペ
┌─────────────────────────────────────┐
│ New Search │
│ ┌───────────────────────────────┐ │
│ │ 上記のSPLコードを貼り付け │ │
│ └───────────────────────────────┘ │
│ [ 🔍 Search ] ← クリック │
└─────────────────────────────────────┘
STEP 3: Visualization タブをクリック
┌─────────────────────────────────────┐
│ [ Statistics ] [ Visualization ] │
│ ↑ │
│ クリック │
└─────────────────────────────────────┘
STEP 4: Line Chart を選択
┌─────────────────────────────────────┐
│ 📊 Line Chart ← クリック │
└─────────────────────────────────────┘
完成! グラフが表示されます。
グラフ化バージョン(timechart使用)
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
追加された行の説明:
| timechart span=30m first(データ値) as データ値
-
timechart→ 時系列グラフを作成 -
span=30m→ 30分間隔 -
first(データ値)→ 各時間帯の最初の値を取得 - 結果: グラフ用のデータ形式に変換される
🎯 方法2: インデックス使わない【5分】CSV Lookup
特徴
✅ メリット:
・データを再利用できる
・複数のダッシュボードで共有
・データが保存される
・アップロードだけで完了
❌ デメリット:
・CSVファイルの準備が必要
・アップロード手順が必要
スモールテスト: CSV最小構成(10行)
CSVデータ作成
ファイル名: test_mini.csv
メモ帳に以下をコピペして保存:
timestamp,value
2026-01-22 10:00:00,600
2026-01-22 10:30:00,550
2026-01-22 11:00:00,750
2026-01-22 11:30:00,820
2026-01-22 12:00:00,680
2026-01-22 12:30:00,590
2026-01-22 13:00:00,730
2026-01-22 13:30:00,890
2026-01-22 14:00:00,640
2026-01-22 14:30:00,710
保存手順:
1. メモ帳を開く
2. 上記をコピペ
3. ファイル > 名前を付けて保存
4. ファイル名: test_mini.csv
5. ファイルの種類: すべてのファイル
6. 文字コード: UTF-8
7. 保存
アップロード手順(2分)
STEP 1: Settings > Lookups
┌─────────────────────────────────────┐
│ Settings > Lookups │
│ > Lookup table files │
└─────────────────────────────────────┘
STEP 2: New Lookup Table File
┌─────────────────────────────────────┐
│ [ + New Lookup Table File ] │
│ ↑ │
│ クリック │
└─────────────────────────────────────┘
STEP 3: ファイル選択
┌─────────────────────────────────────┐
│ Destination app: Search & Reporting│
│ Upload file: [ 参照 ] ← クリック │
│ test_mini.csv を選択 │
│ [ Save ] ← クリック │
└─────────────────────────────────────┘
SPLコード
| inputlookup test_mini.csv
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
| timechart span=30m avg(value) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
各行の説明:
| inputlookup test_mini.csv
-
inputlookup→ アップロードしたCSVを読み込む -
test_mini.csv→ ファイル名 - 結果: CSVの全データが読み込まれる
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
-
strptime→ 文字列を時刻に変換する関数 -
timestamp→ CSVのタイムスタンプ列 -
"%Y-%m-%d %H:%M:%S"→ 日付のフォーマット - 結果: "2026-01-22 10:00:00" が Splunkの時刻型に変換
| timechart span=30m avg(value) as データ値
- 30分ごとにvalueの平均値を計算
- 結果を「データ値」という名前にする
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
- 条件によって表示/非表示を切り替え
🏗️ 方法3: インデックス使う【15分】本番運用
特徴
✅ メリット:
・大量データに対応
・高速検索
・本番運用向け
・永続的にデータ保存
❌ デメリット:
・インデックス作成が必要
・データ投入に時間がかかる
・設定が複雑
スモールテスト: 最小インデックス(20イベント)
STEP 1: テストインデックス作成(2分)
Settings > Indexes
┌─────────────────────────────────────┐
│ [ + New Index ] ← クリック │
└─────────────────────────────────────┘
インデックス作成画面
┌─────────────────────────────────────┐
│ Index Name: │
│ [test_small_______________] │
│ │
│ Max Size of Entire Index: │
│ [100] MB (小さく設定) │
│ │
│ [ Save ] ← クリック │
└─────────────────────────────────────┘
STEP 2: データ投入(5分)
方法A: makeresultsから投入(簡単)
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval host="test-server"
| eval source="test-app"
| eval sourcetype="test:log"
| eval value=500 + (random()%600)
| eval _raw=_time + " value=" + value
| collect index=test_small sourcetype=test:log
各行の説明:
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
- 20行のデータを作成
- 時刻を30分刻みで設定
| eval host="test-server"
| eval source="test-app"
| eval sourcetype="test:log"
- Splunkのメタデータを設定
-
host→ サーバー名 -
source→ データソース -
sourcetype→ ログの種類
| eval value=500 + (random()%600)
- 500~1099のランダム値を生成
| eval _raw=_time + " value=" + value
-
_raw→ Splunkのイベントテキスト - 実際のログメッセージを作成
- 例: "1737528000 value=750"
| collect index=test_small sourcetype=test:log
-
collect→ インデックスにデータを投入するコマンド -
index=test_small→ 投入先のインデックス名 -
sourcetype=test:log→ ソースタイプを指定 - 結果: 20イベントがインデックスに書き込まれる
実行:
Search & Reporting で上記コードを実行
完了まで数秒~数十秒待つ
完了メッセージ:
✅ 20 events written to index=test_small
STEP 3: データ確認(1分)
index=test_small
| table _time host value
結果:
_time host value
2026-01-22 10:00:00 test-server 650
2026-01-22 10:30:00 test-server 720
2026-01-22 11:00:00 test-server 580
...
データが表示されればOK!
STEP 4: グラフ作成(2分)
index=test_small sourcetype=test:log
| timechart span=30m avg(value) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
各行の説明:
index=test_small sourcetype=test:log
-
index=test_small→ test_smallインデックスから検索 -
sourcetype=test:log→ test:log タイプのイベントのみ - 結果: 投入した20イベントが取得される
| timechart span=30m avg(value) as データ値
- 30分ごとにvalueの平均値を計算
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
- 条件によって基準線の色を変える
📊 3つの方法の比較表
| 項目 | makeresults | CSV Lookup | Index投入 |
|---|---|---|---|
| 所要時間 | 30秒 | 5分 | 15分 |
| 準備 | なし | CSVファイル | インデックス作成 |
| データ永続性 | ❌ なし | ✅ あり | ✅ あり |
| 再利用 | ❌ 不可 | ✅ 可能 | ✅ 可能 |
| 大量データ | ❌ 不向き | ⚠️ 制限あり | ✅ 対応 |
| 速度 | ⚡ 最速 | 🚀 速い | 🐢 遅い |
| 本番運用 | ❌ 不可 | ⚠️ 限定的 | ✅ 推奨 |
| 難易度 | ⭐ 簡単 | ⭐⭐ 普通 | ⭐⭐⭐ 難しい |
🎯 状況別おすすめ
今すぐテストしたい → makeresults
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
理由:
- コピペだけで即実行
- 0分で動作確認完了
- 何度でも試せる
データを保存したい → CSV Lookup
1. CSVファイル作成(10行程度)
2. アップロード
3. inputlookup で読み込み
理由:
- データが永続的に保存される
- 複数のダッシュボードで使い回せる
- 簡単に修正できる
本番運用する → Index投入
1. インデックス作成
2. データ投入(collectコマンド)
3. index=xxx で検索
理由:
- 大量データに対応
- 高速検索
- Splunkの標準的な使い方
🔬 超スモールテスト(最小構成)
1行で完結する最小テスト
| makeresults | eval _time=now(), データ値=800, 緑線=if(データ値<700,1000,null()), 赤線=if(データ値>=700,1000,null()) | table _time データ値 緑線 赤線
説明:
- 1イベントだけ作成
- データ値=800を設定
- 条件判定(800>=700なので赤線が表示される)
- テーブル表示
結果:
_time データ値 緑線 赤線
2026-01-22 15:30:00 800 null 1000
↑ ↑
非表示 表示
3行で完結する最小テスト
| makeresults count=3
| eval データ値=500+(random()%600)
| eval 緑線=if(データ値<700,1000,null()), 赤線=if(データ値>=700,1000,null())
説明:
- 3イベント作成
- ランダム値を生成
- 条件判定
💡 デバッグ用コマンド
データの中身を確認
# makeresultsのデータ確認
| makeresults count=5
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
| table _time データ値 緑基準線 赤基準線
↑ これでテーブル表示して確認
確認ポイント:
_time: 時刻が正しく設定されているか
データ値: 500~1100の範囲か
緑基準線: データ値<700の時だけ1000
赤基準線: データ値>=700の時だけ1000
条件の動作確認
| makeresults count=10
| eval データ値=random()%1000
| eval 判定結果=if(データ値<700, "緑が表示", "赤が表示")
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
| table データ値 判定結果 緑基準線 赤基準線
結果例:
データ値 判定結果 緑基準線 赤基準線
650 緑が表示 1000 null
820 赤が表示 null 1000
580 緑が表示 1000 null
750 赤が表示 null 1000
📋 完全コピペコード集
コード1: 超最小(2色、10行)
| makeresults count=10
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500+(random()%600)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
コード2: 標準(3色、20行)
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=400+(random()%700)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<600, 1000, null())
| eval 黄基準線=if(データ値>=600 AND データ値<900, 1000, null())
| eval 赤基準線=if(データ値>=900, 1000, null())
コード3: インデックス投入版
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval host="test-server"
| eval source="test-app"
| eval sourcetype="test:log"
| eval value=500+(random()%600)
| eval _raw=_time + " value=" + value
| collect index=test_small sourcetype=test:log
投入後の検索:
index=test_small
| timechart span=30m avg(value) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
🎓 eval完全ガイド【超初心者向け】
うさぎさんでもわかる!Splunkの基本
🐰 evalって何?【うさうさラーメン店で例える】
イメージ図
うさうさラーメン店のオーダー表
元のデータ(注文伝票)
┌──────────────────────────┐
│ 時刻 ラーメン 餃子 │
│ 12:00 1杯 0個 │
│ 12:30 2杯 1個 │
│ 13:00 1杯 1個 │
└──────────────────────────┘
evalで計算(合計金額を追加)
┌─────────────────────────────────────┐
│ 時刻 ラーメン 餃子 合計金額 │
│ 12:00 1杯 0個 800円 ← 新しい列!
│ 12:30 2杯 1個 2000円 │
│ 13:00 1杯 1個 1200円 │
└─────────────────────────────────────┘
↑
evalで「合計金額」という新しい列を作った
evalは「新しい列を追加する魔法」です!
📝 evalの基本形
文法
| eval 新しい列の名前 = 計算式
Excelで例えると:
Excelの新しい列に
=A1+B1
と入力するのと同じ!
🎯 例1: 簡単な計算【足し算】
Splunkデータ
元のデータ
┌──────────────────────┐
│ りんご みかん │
│ 3個 5個 │
│ 2個 4個 │
└──────────────────────┘
evalで合計を作る
| eval 合計 = りんご + みかん
結果:
┌──────────────────────────────┐
│ りんご みかん 合計 │
│ 3個 5個 8個 ← 新登場!
│ 2個 4個 6個 │
└──────────────────────────────┘
何が起きた?
-
eval→ 「新しい列を作るよ」という命令 -
合計→ 新しい列の名前 -
=→ 「これと等しい」 -
りんご + みかん→ 計算式
🎯 例2: 固定の数字を入れる
基準線を作る時に使う
| eval 基準線 = 1000
結果:
┌──────────────────────┐
│ 時刻 基準線 │
│ 10:00 1000 │
│ 10:30 1000 │
│ 11:00 1000 │
│ 11:30 1000 │
└──────────────────────┘
↑
全部の行に1000が入る
グラフにすると:
1000│━━━━━━━━━━━━━ ← まっすぐの横線
500│
└────────────────→
時刻
🎯 例3: 条件分岐【if文】
これが基準線の色を変える秘密!
| eval 判定 = if(点数 >= 60, "合格", "不合格")
意味:
もし 点数が60以上なら
「合格」
それ以外なら
「不合格」
データの変化:
元のデータ
┌──────────┐
│ 点数 │
│ 80 │
│ 45 │
│ 70 │
│ 55 │
└──────────┘
↓ evalで判定列を追加
┌──────────────────┐
│ 点数 判定 │
│ 80 合格 ← 80>=60なので合格
│ 45 不合格 ← 45<60なので不合格
│ 70 合格 │
│ 55 不合格 │
└──────────────────┘
🎯 例4: null()の使い方【非表示の魔法】
なぜnull()が必要?
グラフに線を引く時
・表示したい時 → 数字を入れる(例: 1000)
・表示したくない時 → null() を入れる
例: データが高い時だけ赤線を表示
| eval 赤線 = if(データ値 >= 800, 1000, null())
データの変化:
元のデータ
┌────────────┐
│ データ値 │
│ 750 │
│ 850 │
│ 600 │
│ 900 │
└────────────┘
↓ evalで赤線列を追加
┌──────────────────────┐
│ データ値 赤線 │
│ 750 null ← 750<800なので非表示
│ 850 1000 ← 850>=800なので表示
│ 600 null ← 600<800なので非表示
│ 900 1000 ← 900>=800なので表示
└──────────────────────┘
グラフでは:
1000│ ━━━━ ━━━━ ← 赤線
│ ╱╲ ╱╲ ╱╲ ← データライン
500│ ╱ ╲╱ ╲╱ ╲
└─────────────────→
750 850 600 900
非表示 表示 非表示 表示
🎨 実際の基準線の作り方【完全分解】
ステップ1: データを用意
元データ
┌────────────────────┐
│ 時刻 CPU使用率│
│ 10:00 650 │
│ 10:30 780 │
│ 11:00 550 │
│ 11:30 820 │
└────────────────────┘
ステップ2: 緑の線を作る(低い時)
| eval 緑線 = if(CPU使用率 < 700, 1000, null())
何をしている?
もし CPU使用率が700未満なら
1000(Y軸の1000の位置に線を引く)
それ以外なら
null()(線を引かない)
結果:
┌───────────────────────────────┐
│ 時刻 CPU使用率 緑線 │
│ 10:00 650 1000 ← 650<700なので表示
│ 10:30 780 null ← 780>=700なので非表示
│ 11:00 550 1000 ← 550<700なので表示
│ 11:30 820 null ← 820>=700なので非表示
└───────────────────────────────┘
ステップ3: 赤の線を作る(高い時)
| eval 赤線 = if(CPU使用率 >= 700, 1000, null())
何をしている?
もし CPU使用率が700以上なら
1000(Y軸の1000の位置に線を引く)
それ以外なら
null()(線を引かない)
結果:
┌─────────────────────────────────────┐
│ 時刻 CPU使用率 緑線 赤線 │
│ 10:00 650 1000 null ← 緑だけ
│ 10:30 780 null 1000 ← 赤だけ
│ 11:00 550 1000 null ← 緑だけ
│ 11:30 820 null 1000 ← 赤だけ
└─────────────────────────────────────┘
ステップ4: グラフにする
1000│━━━━ ━━━━ ━━━━
│🟢 🟢 🔴 🔴 🟢 🟢 ← 基準線の色が変わる
│ ╱╲ ╱╲ ╱╲ ╱╲
500│╱ ╲╱ ╲╱ ╲╱ ╲
└───────────────────────→
10:00 10:30 11:00 11:30
緑 赤 緑 赤
📚 evalの部品【辞書】
計算
| eval 合計 = A + B # 足し算
| eval 差 = A - B # 引き算
| eval 積 = A * B # 掛け算
| eval 商 = A / B # 割り算
例:
| eval 合計金額 = ラーメン代 + 餃子代
| eval 値引き後 = 定価 - 割引額
| eval 面積 = 縦 * 横
| eval 平均 = 合計 / 個数
比較(条件を作る)
A < B # AはBより小さい(未満)
A <= B # AはB以下
A > B # AはBより大きい(超過)
A >= B # AはB以上
A = B # AとBは同じ
A != B # AとBは違う
例:
点数 >= 60 # 点数が60以上
気温 < 20 # 気温が20度未満
在庫 = 0 # 在庫がゼロ
年齢 != 20 # 年齢が20歳ではない
論理演算子(複数の条件)
条件A AND 条件B # 両方とも当てはまる
条件A OR 条件B # どちらか当てはまる
例:
点数 >= 60 AND 出席日数 >= 10
# 点数が60以上 かつ 出席日数が10日以上
気温 < 10 OR 気温 > 35
# 気温が10度未満 または 35度超過
if文(条件分岐)
if(条件, 条件が当てはまる時, 当てはまらない時)
例:
| eval 判定 = if(点数 >= 60, "合格", "不合格")
意味:
もし 点数が60以上なら
「合格」を入れる
そうでなければ
「不合格」を入れる
null()(非表示)
null() # 何も表示しない
使い方:
| eval 線 = if(条件, 1000, null())
意味:
条件が当てはまる時 → 1000(線を表示)
条件が当てはまらない時 → null()(線を非表示)
🎓 練習問題【段階的に理解】
レベル1: 固定値を入れる
問題:
全ての行に「100」という数字を入れた「目標」という列を作ってください
答え:
| eval 目標 = 100
結果:
┌──────────┐
│ 目標 │
│ 100 │
│ 100 │
│ 100 │
└──────────┘
レベル2: 足し算
問題:
国語が80点、数学が70点。合計点を計算してください
答え:
| eval 合計点 = 国語 + 数学
結果:
┌──────────────────────────┐
│ 国語 数学 合計点 │
│ 80 70 150 │
└──────────────────────────┘
レベル3: 条件分岐(簡単)
問題:
点数が60以上なら「合格」、60未満なら「不合格」と表示してください
答え:
| eval 結果 = if(点数 >= 60, "合格", "不合格")
結果:
┌──────────────────┐
│ 点数 結果 │
│ 80 合格 │
│ 45 不合格 │
│ 70 合格 │
└──────────────────┘
レベル4: null()を使う
問題:
点数が80以上の時だけ「優秀」と表示し、それ以外は何も表示しないでください
答え:
| eval 評価 = if(点数 >= 80, "優秀", null())
結果:
┌──────────────────┐
│ 点数 評価 │
│ 85 優秀 │
│ 70 null │
│ 90 優秀 │
│ 65 null │
└──────────────────┘
レベル5: 基準線(実践)
問題:
データ値が700未満の時、Y軸の1000の位置に線を表示してください
答え:
| eval 緑線 = if(データ値 < 700, 1000, null())
結果:
┌──────────────────────┐
│ データ値 緑線 │
│ 650 1000 │
│ 780 null │
│ 550 1000 │
└──────────────────────┘
🔍 実際の動きを見てみよう
実行できるコード(今すぐ試せる)
| makeresults
| eval 国語=80
| eval 数学=70
| eval 合計=国語+数学
| eval 判定=if(合計>=140, "合格", "不合格")
| table 国語 数学 合計 判定
実行手順:
1. Splunk > Search & Reporting
2. 上記のコードをコピペ
3. Search ボタンをクリック
結果:
┌─────────────────────────────────┐
│ 国語 数学 合計 判定 │
│ 80 70 150 合格 │
└─────────────────────────────────┘
動きを確認(1行ずつ)
| makeresults
結果:
空のデータ1行ができる
| eval 国語=80
結果:
┌──────┐
│ 国語 │
│ 80 │
└──────┘
| eval 数学=70
結果:
┌──────────────┐
│ 国語 数学 │
│ 80 70 │
└──────────────┘
| eval 合計=国語+数学
結果:
┌────────────────────┐
│ 国語 数学 合計 │
│ 80 70 150 │
└────────────────────┘
| eval 判定=if(合計>=140, "合格", "不合格")
結果:
┌──────────────────────────────┐
│ 国語 数学 合計 判定 │
│ 80 70 150 合格 │
└──────────────────────────────┘
150 >= 140 なので「合格」が入る!
🎯 基準線の完全理解【最終確認】
全体のコード
| makeresults count=5
| streamstats count as 番号
| eval データ値=500+(番号*100)
| eval 緑線=if(データ値<700, 1000, null())
| eval 赤線=if(データ値>=700, 1000, null())
| table データ値 緑線 赤線
1行ずつ解説
| makeresults count=5
- 5行の空データを作る
| streamstats count as 番号
- 1,2,3,4,5 という番号を振る
| eval データ値=500+(番号*100)
- 番号=1 → 500+100=600
- 番号=2 → 500+200=700
- 番号=3 → 500+300=800
- 番号=4 → 500+400=900
- 番号=5 → 500+500=1000
結果:
┌──────────────┐
│ データ値 │
│ 600 │
│ 700 │
│ 800 │
│ 900 │
│ 1000 │
└──────────────┘
| eval 緑線=if(データ値<700, 1000, null())
- 600 < 700 → 真 → 1000
- 700 < 700 → 偽 → null
- 800 < 700 → 偽 → null
- 900 < 700 → 偽 → null
- 1000 < 700 → 偽 → null
結果:
┌────────────────────┐
│ データ値 緑線 │
│ 600 1000 │
│ 700 null │
│ 800 null │
│ 900 null │
│ 1000 null │
└────────────────────┘
| eval 赤線=if(データ値>=700, 1000, null())
- 600 >= 700 → 偽 → null
- 700 >= 700 → 真 → 1000
- 800 >= 700 → 真 → 1000
- 900 >= 700 → 真 → 1000
- 1000 >= 700 → 真 → 1000
最終結果:
┌──────────────────────────────┐
│ データ値 緑線 赤線 │
│ 600 1000 null ← 緑だけ
│ 700 null 1000 ← 赤だけ
│ 800 null 1000 ← 赤だけ
│ 900 null 1000 ← 赤だけ
│ 1000 null 1000 ← 赤だけ
└──────────────────────────────┘
📝 まとめ【これだけ覚えればOK】
evalの3つの役割
1. 新しい列を作る
| eval 新しい列名 = 値
2. 計算する
| eval 合計 = A + B
3. 条件で分ける
| eval 結果 = if(条件, 真の時, 偽の時)
基準線を作る公式
| eval 線の名前 = if(条件, 表示位置, null())
具体例:
| eval 緑線 = if(データ値<700, 1000, null())
↑ ↑ ↑ ↑
名前 条件 位置 非表示
🎓 超簡単バージョン(コピペ用)
2色の基準線(最小構成)
| makeresults count=10
| streamstats count as c
| eval v=500+(c*50)
| eval g=if(v<700,1000,null())
| eval r=if(v>=700,1000,null())
| table v g r
実行: Search & Reportingに貼り付けて実行!
見方:
-
v= データ値 -
g= 緑線(データが700未満の時だけ1000) -
r= 赤線(データが700以上の時だけ1000)
わかりましたか?😊
もっと詳しく知りたい部分があれば教えてください!
- 「ifをもっと詳しく」
- 「null()の仕組み」
- 「別の例で説明して」
など、何でも聞いてください!🎓
これで、ダッシュボードスタジオでインデックスデータによって図形(色・太さ・スタイル・マーカー)を動的に制御する方法のスキルを手に入れました!