ダッシュボードのゲージチャート2と3は、静的なベースラインに対する進捗を測定する特殊なメトリクスだ。Gauge 1(総エントリ数)とは異なり、これらは時間経過に基づく評価を行う。
Gauge 2(Backlog Pressure)は、未処理データの蓄積状況を測定する。理想的には50%(中立)だが、14日以上更新がないと黄色ゾーン、30日以上で赤ゾーンに突入する。
実装の鍵は、Script Propertiesに保存されたベースラインタイムスタンプとの比較だった:
function calculateBacklogPressure() {
const lastUpdate = getLastUpdateTimestamp('S02_Folder');
const baseline = getBaselineTimestamp('S02_Folder');
const daysSinceBaseline = (Date.now() - baseline) / (1000 * 60 * 60 * 24);
if (daysSinceBaseline < 14) {
return 50 + (daysSinceBaseline / 14) * 25; // 50-75%
} else if (daysSinceBaseline < 30) {
return 75 + ((daysSinceBaseline - 14) / 16) * 15; // 75-90%
} else {
return 90 + Math.min((daysSinceBaseline - 30) / 10, 10); // 90-100%
}
}
Gauge 3(Chain Completion)は、5段階のデータ処理チェーン(S02→S03→S04→S05→S06)の完了状況を追跡する。各段階が完了すると20%ずつ増加する。
当初、メニューの不安定性にも悩まされた。Code.gsのメニュー構築関数が、他の関数と競合していた。解決策は、メニュー初期化をonOpen()トリガーから分離し、専用の関数に移動することだった。
ベースライン情報の管理も重要だった。管理者が各フォルダのベースラインタイムスタンプを設定・表示できる関数を追加した:
function setBaseline(folderName, timestamp) {
PropertiesService.getScriptProperties()
.setProperty('BASELINE_' + folderName, timestamp.toString());
}
function viewBaselines() {
const props = PropertiesService.getScriptProperties();
const baselines = props.getKeys()
.filter(key => key.startsWith('BASELINE_'))
.map(key => ({
folder: key.replace('BASELINE_', ''),
timestamp: new Date(parseInt(props.getProperty(key)))
}));
return baselines;
}
現在、Gauge 2と3は正確に動作しており、プロジェクトの健全性を視覚的に示している。時間ベースの評価メトリクスは、データ処理の遅延を早期に検出するのに有効だ。