# Superset 儀表板建置指南

> MOMO Pro System - BI 分析平台
> 建立日期: 2026-02-07

---

## 存取資訊

| 項目 | 值 |
|------|-----|
| URL | https://monitor.wooo.work/superset/ |
| 帳號 | admin |
| 密碼 | <SUPERSET_ADMIN_PASSWORD> |

---

## 已建立的資料集

| 資料集 | 說明 | 主要時間欄位 |
|--------|------|--------------|
| `daily_sales_snapshot` | 每日銷售快照 | snapshot_date |
| `realtime_sales_monthly` | 即時業績月度資料 | - |
| `monthly_summary_analysis` | 月度總結分析 | report_month |
| `products` | 商品資料 | updated_at |
| `price_records` | 價格記錄 | timestamp |

---

## 需建立的儀表板

### 1. 銷售分析總覽 (Sales Analysis Dashboard)

**對應頁面**: `/sales_analysis`

**建議圖表**:

| 圖表名稱 | 圖表類型 | 資料集 | 說明 |
|----------|----------|--------|------|
| 每日銷售趨勢 | Line Chart | daily_sales_snapshot | X軸: snapshot_date, Y軸: SUM(金額) |
| 銷售額 TOP 10 商品 | Bar Chart | daily_sales_snapshot | 依商品名稱群組，取前 10 名 |
| 銷售通路分佈 | Pie Chart | daily_sales_snapshot | 依通路群組 |
| 星期銷售熱力圖 | Heatmap | daily_sales_snapshot | X軸: 星期, Y軸: 時段 |
| 銷售數據表格 | Table | daily_sales_snapshot | 詳細銷售記錄 |

**建立步驟**:

1. 前往 **Charts** > **+ Chart**
2. 選擇資料集 `daily_sales_snapshot`
3. 選擇圖表類型 (如 Line Chart)
4. 設定 X 軸、Y 軸、分組欄位
5. 點擊 **Save** 儲存圖表
6. 將圖表加入儀表板

---

### 2. 當日業績追蹤 (Daily Sales Dashboard)

**對應頁面**: `/daily_sales`

**建議圖表**:

| 圖表名稱 | 圖表類型 | 資料集 | 說明 |
|----------|----------|--------|------|
| 當日業績總覽 | Big Number | daily_sales_snapshot | 顯示今日總銷售額 |
| 業績達成率 | Gauge Chart | daily_sales_snapshot | 對比目標達成率 |
| 時段業績分佈 | Area Chart | daily_sales_snapshot | X軸: 時段, Y軸: 金額 |
| 商品銷售排行 | Bar Chart | daily_sales_snapshot | 今日銷售 TOP 20 |
| 業績明細表 | Table | daily_sales_snapshot | 可篩選日期的明細 |

**篩選器設定**:
- 新增 **Time Filter** 設定為 `snapshot_date`
- 預設顯示今天的資料

---

### 3. 成長分析 (Growth Analysis Dashboard)

**對應頁面**: `/growth_analysis`

**建議圖表**:

| 圖表名稱 | 圖表類型 | 資料集 | 說明 |
|----------|----------|--------|------|
| 月度成長趨勢 | Line Chart | realtime_sales_monthly | 顯示月度成長率 |
| 年增率比較 | Bar Chart | realtime_sales_monthly | YoY 比較 |
| 成長率 KPI | Big Number with Trendline | realtime_sales_monthly | 月成長率指標 |
| 品類成長分析 | Treemap | realtime_sales_monthly | 各品類成長貢獻 |

**計算欄位** (Metrics):
```sql
-- 月增長率
(SUM(本月金額) - SUM(上月金額)) / SUM(上月金額) * 100
```

---

### 4. 月度總結 (Monthly Summary Dashboard)

**對應頁面**: `/monthly_summary_analysis`

**建議圖表**:

| 圖表名稱 | 圖表類型 | 資料集 | 說明 |
|----------|----------|--------|------|
| 月度業績總覽 | Big Number | monthly_summary_analysis | 當月總業績 |
| 月度趨勢比較 | Line Chart | monthly_summary_analysis | 12 個月趨勢 |
| 月度業績表格 | Pivot Table | monthly_summary_analysis | 月份 x 指標 |
| 月環比分析 | Bar Chart | monthly_summary_analysis | MoM 比較 |

---

### 5. ABC 分析 (ABC Analysis Dashboard)

**對應頁面**: `/abc_analysis/detail`

**建議圖表**:

| 圖表名稱 | 圖表類型 | 資料集 | 說明 |
|----------|----------|--------|------|
| ABC 分類圓餅圖 | Pie Chart | products | A/B/C 類商品佔比 |
| 帕累托曲線 | Dual Line Chart | products | 累計銷售貢獻 |
| ABC 商品列表 | Table | products | 可篩選分類的商品表 |
| 分類銷售佔比 | Sunburst Chart | products | 階層式銷售分佈 |

**計算欄位** (需在 SQL Lab 建立虛擬資料集):
```sql
SELECT
    i_code,
    product_name,
    total_sales,
    SUM(total_sales) OVER (ORDER BY total_sales DESC) as cumulative_sales,
    SUM(total_sales) OVER () as grand_total,
    CASE
        WHEN SUM(total_sales) OVER (ORDER BY total_sales DESC) / SUM(total_sales) OVER () <= 0.7 THEN 'A'
        WHEN SUM(total_sales) OVER (ORDER BY total_sales DESC) / SUM(total_sales) OVER () <= 0.9 THEN 'B'
        ELSE 'C'
    END as abc_class
FROM products
WHERE total_sales > 0
ORDER BY total_sales DESC
```

---

### 6. 商品價格趨勢 (Price Trends Dashboard)

**對應頁面**: 商品看板的價格趨勢

**建議圖表**:

| 圖表名稱 | 圖表類型 | 資料集 | 說明 |
|----------|----------|--------|------|
| 價格變動時間線 | Line Chart | price_records | 選定商品的價格歷史 |
| 今日價格變動 | Table | price_records | 今日有變動的商品 |
| 漲價/降價統計 | Bar Chart | price_records | 漲降價商品數量 |
| 價格變動熱力圖 | Heatmap | price_records | 時間 x 商品類別 |

**篩選器**:
- 商品篩選器 (product_id)
- 時間範圍篩選器 (timestamp)

---

## 建立儀表板步驟

### Step 1: 建立圖表

1. 登入 Superset
2. 點擊 **Charts** > **+ Chart**
3. 選擇資料集 (如 `daily_sales_snapshot`)
4. 選擇圖表類型
5. 設定維度 (Dimensions) 和指標 (Metrics)
6. 設定篩選條件
7. 點擊 **Run** 預覽
8. 點擊 **Save** 儲存

### Step 2: 建立儀表板

1. 點擊 **Dashboards** > **+ Dashboard**
2. 輸入儀表板名稱 (如「銷售分析總覽」)
3. 點擊 **Edit dashboard**
4. 從右側 Charts 清單拖曳圖表到畫布
5. 調整圖表大小和位置
6. 新增篩選器 (Filter box)
7. 點擊 **Save**

### Step 3: 設定篩選器

1. 在儀表板編輯模式
2. 點擊 **+ Add filter** (左上角)
3. 選擇篩選類型:
   - **Time Filter**: 時間範圍
   - **Select Filter**: 下拉選單
   - **Range Filter**: 數值範圍
4. 選擇要影響的圖表

---

## SQL Lab 進階查詢

對於複雜的分析需求，可以使用 SQL Lab 建立虛擬資料集:

### 範例: 銷售成長分析虛擬表

```sql
-- 建立虛擬資料集: sales_growth_analysis
WITH monthly_sales AS (
    SELECT
        DATE_TRUNC('month', snapshot_date) as month,
        SUM(金額) as total_amount,
        COUNT(DISTINCT 商品代碼) as product_count,
        COUNT(*) as order_count
    FROM daily_sales_snapshot
    GROUP BY DATE_TRUNC('month', snapshot_date)
)
SELECT
    month,
    total_amount,
    product_count,
    order_count,
    LAG(total_amount) OVER (ORDER BY month) as prev_month_amount,
    (total_amount - LAG(total_amount) OVER (ORDER BY month)) /
        NULLIF(LAG(total_amount) OVER (ORDER BY month), 0) * 100 as growth_rate
FROM monthly_sales
ORDER BY month DESC
```

**使用步驟**:
1. 點擊 **SQL Lab** > **SQL Editor**
2. 貼上 SQL 查詢
3. 執行查詢確認結果
4. 點擊 **Save** > **Save Dataset**
5. 使用此虛擬資料集建立圖表

---

## 權限設定

### 建立唯讀角色

1. 前往 **Settings** > **List Roles**
2. 點擊 **+ Add**
3. 角色名稱: `MOMO_Viewer`
4. 權限設定:
   - `can read on Chart`
   - `can read on Dashboard`
   - `datasource access on [MOMO_UAT].[daily_sales_snapshot]`
   - (其他需要的資料集權限)

### 建立用戶

1. 前往 **Settings** > **List Users**
2. 點擊 **+ Add**
3. 設定帳號密碼
4. 指派角色 `MOMO_Viewer`

---

## 嵌入儀表板到現有系統

### iframe 嵌入

```html
<!-- 嵌入完整儀表板 -->
<iframe
    src="https://monitor.wooo.work/superset/superset/dashboard/1/?standalone=true"
    width="100%"
    height="800px"
    frameborder="0">
</iframe>
```

### Superset 嵌入設定

1. 前往 **Settings** > **Feature Flags**
2. 啟用 `ENABLE_DASHBOARD_EMBEDDING`
3. 在儀表板設定中允許嵌入

---

## 排程報告 (未來功能)

Superset 支援排程發送報告:

1. 前往儀表板
2. 點擊 **...** > **Schedule Report**
3. 設定:
   - 收件人 (Email)
   - 排程頻率 (Daily/Weekly)
   - 報告格式 (PDF/Image)

> 注意: 需要額外設定 SMTP 和 Celery Beat

---

## 常見問題

### Q1: 圖表顯示「No data」
- 檢查時間篩選器範圍
- 確認資料集有資料
- 檢查 SQL 查詢條件

### Q2: 連線到 MOMO_UAT 失敗
- 確認 PostgreSQL Pod IP 正確
- 檢查 superset_readonly 用戶權限
- 驗證網路連通性

### Q3: 儀表板載入緩慢
- 減少單一儀表板的圖表數量
- 使用時間範圍限制資料量
- 考慮建立物化視圖

---

## 下一步

1. 依照本指南建立 6 個儀表板
2. 測試所有圖表功能
3. 設定用戶權限
4. 評估是否嵌入或取代現有頁面
