890 字
4 分鐘
臺北城市儀表板開發指南 — 2. 建立組件
2025-05-28
無標籤

前文說明了如何建置環境,本篇將說明如何「不修改程式」,建立一個新的組件。


建立組件流程#

以下為建立組件的流程,要先構思組件

  1. 構想一個組件的主題,尋找相關的開放資料,整理資料
  2. 規劃圖表的呈現方式,如:折線圖、長條圖,可以選擇多種圖表,圖表種類見官方文件

再來就可以建立組件,建立過程目前無法在後台完成,需要操作資料庫

  1. 匯入開放資料到 data 資料庫
  2. 寫入組件參數到 manager 資料庫
  3. 到後台將組件加入儀表板

第一步、構思組件#

這裡提供一個範例,關於雙北的公有市場,想要分析雙北各區的公有市場數量,以行政區圖(DistrictChart)、橫向長條圖(BarChart)。

找到相關的開放資料:

將上面資料進行整理,列出相關欄位包含名稱、地址、市、區、經緯度,由於新北市資料沒有經緯度,使用地址透過 Google Maps 來取得經緯度。


第二步、匯入開放資料到 data 資料庫#

將上面整理好的資料匯入 data 資料庫,位於 dashboard.public ,資料表命目為 market,我這裡使用 Navicat 匯入工具,將 CSV 匯入到資料庫。

臺北城市儀表板對於資料庫的結構、設計、命名,沒有任何規範,將整理好的資料匯入即可。


第三步、寫入組件參數到 manager 資料庫#

manager 中的 dashboardmanager.pubic 資料庫有三個相關的資料表要寫入,:

1. components 表:組件的主表#

  • 組件 ID (index):組件唯一識別,下面的表都會用到
  • 名稱 (name):中文名稱

components table

components table

2. component_charts 表:組件的參數表#

  • 組件 ID (index)
  • 顏色 (color):圖表用的顏色
  • 圖表類型 (types):詳見官方文件
  • 單位 (unit):資料的單位,如:條、輛

component_charts table

component_charts table

3. query_charts 表:圖表設定檔#

  • 組件 ID (index)
  • 文字描述 (short_desc, long_desc, use_case)
  • 資料來源連結 (links)
  • 資料樣式 (query_type):包含二維資料、三維資料,詳見官方文件
  • SQL 語法 (query_chart):從 data 資料庫讀取資料的 SQL 語法
  • 城市(city):taipei 為台北市資料,matrotaipei 為雙北資料

了解了上面表單資訊要來匯入資料,SQL 語法如下,query_charts 會需要新增兩筆,分別為雙北、台北,這裡使用二維資料。

-- 新增components
INSERT INTO "public"."components" (
"index",
"name"
) VALUES (
'market_map',
'公有市場地圖'
);
-- 新增component_charts
INSERT INTO "public"."component_charts" (
"index",
"color",
"types",
"unit"
) VALUES (
'market_map',
'{#24B0DD,#56B96D,#F8CF58,#F5AD4A,#E170A6,#ED6A45,#AF4137,#10294A}',
'{DistrictChart,BarChart}',
'個'
);
-- 新增query_charts:雙北
INSERT INTO "public"."query_charts" (
"index",
"time_from",
"source",
"short_desc",
"long_desc",
"use_case",
"links",
"contributors",
"query_type",
"query_chart",
"city"
) VALUES (
'market_map',
'static',
'主計處',
'短說明',
'長說明',
'情境說明'
'{https://data.taipei/dataset/detail?id=89bebb3a-990d-4070-bd67-631a575f6d4a,https://data.ntpc.gov.tw/datasets/785be91a-caaf-4e1c-91d6-f7d616d31a45}',
'{doit,ntpc}',
'two_d',
'SELECT district AS x_axis, COUNT(*) AS data FROM public.market GROUP BY district;',
'metrotaipei'
);
-- 新增query_charts:台北市
INSERT INTO "public"."query_charts" (
"index",
"time_from",
"source",
"short_desc",
"long_desc",
"use_case",
"links",
"contributors",
"query_type",
"query_chart",
"city"
) VALUES (
'market_map',
'static',
'主計處',
'短說明',
'長說明',
'情境說明'
'{https://data.taipei/dataset/detail?id=89bebb3a-990d-4070-bd67-631a575f6d4a,https://data.ntpc.gov.tw/datasets/785be91a-caaf-4e1c-91d6-f7d616d31a45}',
'{doit,ntpc}',
'two_d',
'SELECT district AS x_axis, COUNT(*) AS data FROM public.market WHERE city = ''臺北市'' GROUP BY district;',
'taipei');

第四步、到後台將組件加入儀表板#

到管理員後台「雙北儀表板示範」,新增一個公開儀表板,選擇我們建立好的組件

後台

後台

回到儀表板就會看到建立好的儀表板,可以切換雙北、台北,並有說明文字