config/genie/skills/lakeview-pitfalls/SKILL.md
Lakeview ダッシュボードのウィジェット JSON 編集時に踏みやすい pitfall の回避策と共通ルールを提供する参照スキル。 ウィジェット編集前に必ず読むこと。 Use when: - Lakeview ウィジェットの JSON を編集するとき - bar / line / table / pivot / counter / pie のいずれかを扱うとき - 30KB を超える JSON のデプロイが必要なとき - encoding type / NULL 表示 / 数値整形 / filter の設計判断をするとき
npx skillsauth add kumewata/dotfiles lakeview-pitfallsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
このスキルの位置付け: Lakeview ウィジェット編集時の 横断的な pitfall カタログと共通ルール をまとめた主参照スキル。ウィジェットの JSON 構造の細部 (rows/columns/cell の組み立て等) は、ハンドオフファイルの仕様 + 既存ダッシュボードの JSON エクスポート + Databricks 公式ドキュメントを参照する。
このスキルは Databricks workspace 上では SKILL.md 単体としてデプロイされるため、参照ファイル (references/) は workspace 上に存在しない。主要情報はすべて本ファイルにインライン化されている。
Dashboard context の Genie Code は SQL warehouse にバインドされている。マークダウンファイルの直接編集は成功するケースと失敗するケースの両方が確認されており、安定条件は未特定。
Unsupported cell during execution. SQL warehouses only support executing SQL cells. エラーsteering-lakeview-handoff スキルの Step 4 で「直接書き戻し → 失敗時はチャット欄に出力」のフォールバック構成を採用type は必ず明示する (quantitative / nominal / temporal)。省略すると列が空欄になるバグを踏むCOALESCE(col, '—') に変換。JSON 側で NULL 表示制御は不可FORMAT_NUMBER(val, '#,##0') を適用。JSON 側 numberFormat は制限多いdatabricks lakeview update <ID> --json @file.json で CLI 経由更新type 省略 → 列が消える| 非対応機能 | 詳細 | 代替策 |
| ------------------ | ------------------------------------------- | ------------------------------------------- |
| 軸のカスタムソート | axis.sort で任意順序を指定不可 | SQL ORDER BY で並びを SQL 側で固定 |
| データラベル表示 | mark.showLabels 等の指定が無視される | tooltip で代替、または title でサマリ表示 |
| Marimekko | 横幅と高さの両方をカテゴリ別に変える表現 | bar + 別カラムで近似 |
| Y軸目盛りカスタム | axis.values / axis.tickCount が効かない | 軸範囲を限定したい場合は SQL でデータを絞る |
実プロジェクトのダッシュボード開発で v10-v12 にかけて 3 回やり直した実例あり。
| 非対応機能 | 詳細 | 代替策 |
| -------------- | ----------------------------------------------- | -------------------------------------------- |
| セグメント連結 | NULL 行があると線が途切れる (gap bridging なし) | SQL 側で COALESCE(col, 0) 等で NULL 埋め |
| 多色凡例 | 凡例の並び順カスタム不可 | SQL 側でラベル接頭辞 ('01_xxx') で順序制御 |
| 非対応機能 | 詳細 | 代替策 |
| ------------------------ | ------------------------- | ------------------------------------- |
| encoding type 省略 | 推論失敗で列が空欄になる | "type": "quantitative" 等を必ず明示 |
| 行クリックでドリルダウン | カスタムリンク等 設定不可 | 別ダッシュボードへの link tile で代替 |
| 非対応機能 | 詳細 | 代替策 |
| ------------------ | -------------------------------- | --------------------------------- |
| セル内条件付き書式 | セル値による色付け 不可 | 色付け不要なメトリクスに絞る |
| 小計行 | 自動小計表示 不可 | SQL UNION ALL で小計行を行展開 |
| 行・列の動的入替 | UI で自由に入替不可 (定義時固定) | rows / columns を要件確定後に設計 |
知っておくと便利なパターン:
columns=[] (空配列) で 1 軸 pivot が作れる: columns ディメンションなしの pivot が通る。rows にメトリクス名、values に値を置く「縦持ちテーブル」パターン。実績確認済みrows の値に ' スタンダード' / ' プレミアム' のように先頭全角スペースを付けると、Lakeview のデフォルトソートで意図した順序になる。SQL 側でカテゴリ値を制御するtype は省略可: pivot では fieldName / displayName のみ指定し type を省略しても安全動作する (テーブルの新規カラム type 例外と同様)| 非対応機能 | 詳細 | 代替策 | | ---------------- | ------------------------------------------ | ------------------------------------- | | 複数値の並列表示 | 1 counter で複数 KPI を表示 不可 | counter を複数配置 (1 widget = 1 KPI) | | 値の比較表示 | 前年比などを副表示 不可 (counter 単体では) | counter + bar / line で構成 |
| 非対応機能 | 詳細 | 代替策 | | ------------ | ------------------------------ | ------------------------------ | | 10+ カテゴリ | 多すぎると凡例で潰れて読めない | SQL で TOP N + "その他" に集約 | | ドーナツ | 内側ラベル設定 不可 | bar に変更を検討 |
type 明示ルール根拠: Lakeview の encoding は type を明示しないと SQL の型から推論しようとするが、スキーマキャッシュ不一致や型推論失敗で 列が空欄になる。
// NG (列が空欄になる)
{
"encoding": {
"x": { "field": "sales_date" },
"y": { "field": "revenue" }
}
}
// OK
{
"encoding": {
"x": { "field": "sales_date", "type": "temporal" },
"y": { "field": "revenue", "type": "quantitative" }
}
}
type の値: "quantitative" (数値) / "nominal" (カテゴリ) / "temporal" (日時) / "ordinal" (順序つきカテゴリ)
例外 (table widget): table の場合、新規追加カラムで type を明示すると逆に空欄になるケースがある (Lakeview 側のスキーマキャッシュ不一致)。table の新規カラム追加時は、まず type 省略で Lakeview 推論に任せる方が安全。既存カラムは type 明示で問題ない。要 case-by-case 検証。
JSON 側で nullValue / defaultValue 設定は 未対応。NULL を表示したい/ハイフンに変えたい場合は SQL 側で対処。
-- NULL を "—" に置換
SELECT
shop_name,
COALESCE(CAST(revenue AS STRING), '—') AS revenue_display,
COALESCE(growth_rate, 0) AS growth_rate
FROM mart_sales
数値計算が後段で必要なら COALESCE(col, 0)、表示専用なら COALESCE(CAST(col AS STRING), '—')。
FORMAT_NUMBER の使い方-- 整数カンマ区切り
FORMAT_NUMBER(revenue, '#,##0') -- 1,234,567
-- 小数 2 桁
FORMAT_NUMBER(growth_rate, '0.00') -- 12.34
-- パーセント (0.1234 → 12.34%)
CONCAT(FORMAT_NUMBER(growth_rate * 100, '0.00'), '%')
JSON 側の numberFormat も存在するが、桁区切り・パーセント表示で動作が安定しないため SQL 側で整形済み文字列を用意するのが安全。
-- ページパラメータ {{shop_id}} を WHERE 句にバインド
SELECT * FROM mart_sales
WHERE shop_id = {{shop_id}}
ウィジェット個別の絞り込みが必要なら、別データセットを作って事前絞り込みする。
# JSON サイズを確認
wc -c dashboard.json
# 30000 (30KB) を超えていれば UI 貼り付け不可
# Lakeview ダッシュボードを CLI で更新
databricks lakeview update <DASHBOARD_ID> --json @dashboard.json
@ プレフィックスでファイル指定する。stdin 経由は同様にサポート:
cat dashboard.json | databricks lakeview update <DASHBOARD_ID> --json -
サイズが大きすぎる場合:
description / comment フィールドを削除config/genie/skills/lakeview-pitfalls/references/ にローカル保守用のファイルがある (workspace にはデプロイされない):
widget-negatives.md: widget 型別の非対応機能カタログ (本 SKILL.md と同内容)common-rules.md: 共通ルールの詳細とコード例 (本 SKILL.md と同内容)large-json.md: 30KB JSON デプロイ手順詳細 (本 SKILL.md と同内容)新しい pitfall を発見した場合、まず本 SKILL.md を更新し (workspace 反映のため)、次に references/ も同期する。
steering-lakeview-handoff: lakeview-handoff.md を読んでウィジェット実装するスキル。本スキルを Step 0 で先読みするこのスキルは pitfall と共通ルールに特化している。ウィジェット型ごとの JSON 構造 (例: pivot の rows/columns/cell の組み立て、bar の encoding/mark の入れ子) を知りたい場合は次の順で参照する:
databricks lakeview get <DASHBOARD_ID> --output json で取得できる、似た構造のウィジェットを参考にするdevelopment
Generate a private monthly Codex usage and workflow insights report from local ~/.codex/sessions JSONL without exposing raw transcripts. Use when the user explicitly asks for $codex-insights, Codex insights, monthly AI-agent usage review, or a Codex replacement for Claude Code /insights.
tools
Use when creating a new skill or making a substantial change to an existing skill and you also need to design, update, or review Waza-based executable evaluations. This includes deciding whether Waza is warranted, mapping `evals.json` cases into Waza tasks, choosing fixtures and graders, selecting a valid model with `waza models --json`, and running a local-first `waza run` workflow. Do NOT use for installing the Waza CLI itself or for general skill-authoring advice that does not involve Waza; use `skill-creator` for skill design and this skill for the Waza execution layer. Trigger especially when the user mentions Waza, `waza run`, `waza models`, executable evals, compare, graders, fixtures, or wants to validate a skill change with model-backed evaluation.
tools
Use when the user wants Codex to ask Claude Code for a second opinion or review on code, docs, diffs, PR changes, or design notes without modifying files. This delegates bounded review-only analysis through the Claude Code CLI (`claude -p`). Do NOT use for implementation or file edits; keep this skill review-only. Trigger especially when the user says ask Claude, ask Claude Code, cc-delegate, Claude review, second opinion from Claude, compare Codex and Claude, or review this diff/document with Claude Code.
tools
Airflow DAG development skill for writing, reviewing, testing, and debugging Apache Airflow workflows. Use whenever the user mentions Airflow, DAGs, tasks, operators, sensors, schedules, retries, catchup, DAG import errors, DAG parse performance, or workflow orchestration in Python. Also use for Amazon MWAA / Managed Workflows for Apache Airflow work, including MWAA DAG deployment, requirements.txt, plugins.zip, aws-mwaa-docker-images, S3 DAG folders, CloudWatch logs, and MWAA-specific dependency or IAM issues.