您可以使用儲存在資料庫中的空間欄,在 Tableau 中建立對應的視覺效果。

Tableau 支援使用以下連接器直接連線至空間資料:

  • Microsoft SQL Server
  • PostgreSQL + PostGIS
  • Pivotal Greenplum + PostGIS
  • Oracle

如需使用這些連接器的詳細資訊,請參閱 Microsoft SQL ServerPostgreSQLPivotal Greenplum DatabaseOracle 連接器範例。

支援的空間資料和 SRID

對於 Microsoft SQL Server,只支援地理類型空間資料。

PostgreSQL + PostGISOraclePivotal Greenplum + PostGIS 支援 Geography- 和 Geometry- 類型欄位。幾何欄位必須指定 geo-type(例如,POINT、LINESTRING)和 SRID,才能識別為空間欄位。地理位置欄位必須指定 geo-type 才能加以識別。

附註:在 PostgreSQL + PostGIS 中,您可以連結至兼具這些幾何類型(點、線和多邊形)的資料表,但 Tableau 不會同時呈現這些幾何類型。

這些連接器支援下列 SRID

  • NAD83 (EPSG:4269)

  • ETRS89 (EPSG:4258)

  • WGS84 (EPSG:4326)

在 PostgreSQL + PostGIS 中,SRID 一律預設為 WGS84 (EPSG:4326)。

Tableau 支援使用這些連接器進行即時和擷取連線。

連接至空間欄

  1. 開啟 Tableau 並連接至您的資料。如需有關如何使用支援的連接器連接至資料的詳細資訊,請參閱 Microsoft SQL ServerPostgreSQLOraclePivotal Greenplum Database 連接器範例。
  2. 在 [資料來源] 頁面左側窗格中的 [表] 下,將一個包含空間資料的表拖到畫布上。

    空間欄會顯示與您資料庫中的相同名稱。

    現在即可使用空間資料在 Tableau 中建立地圖。有關如何依據空間檔案建立地圖詳情,請參閱依據空間資料構建地圖檢視

使用自訂 SQL 和 RAWSQL 執行進階空間分析

連線到自訂 SQL 查詢

  1. 開啟 Tableau 並連接至您的資料庫。
  2. 在 [資料來源] 頁面的左側窗格中,將 [新建自訂 SQL] 拖到畫布上。

  3. 在出現的 [編輯自訂 SQL] 對話方塊中鍵入或粘貼您的查詢。有關可用於空間資料的自訂 SQL 的範例,請參閱自訂 SQL 查詢範例

  4. 完成後,按一下 [確定]

有關詳情,請參閱連線到自訂 SQL 查詢

自訂 SQL 查詢範例

下面是一些查詢範例。請注意,自訂 SQL 查詢將因資料來源而異。

如果您的資料有兩組點(例如學校和公園),並且您想要顯示它們的相交位置:

SELECT S.[common nam] as SchoolName, P.[common nam] as ParkName, S.geom.STBuffer(<Parameters.Radius>) as school_geom, P.geom as park_geom FROM TestSpatial.dbo.seattleelementaryschools S LEFT JOIN TestSpatial.dbo.allseattleparks P on S.geom.STBuffer(<Parameters.Radius>).STIntersects(P.geom) = 1

此範例查詢將為公園在學校半徑距離(米)內的每種情況產生一列。查詢結果在資料網格中如下所示:

附註:此範例引用名為 "Radius" 的參數。該參數測量距離(米),並具有以下設定:

  • 資料類型:浮點
  • 當前值:600
  • 允許的值:範圍
  • 最小值:100
  • 最大值:2,000
  • 級距:50

有關詳情,請參閱在自訂 SQL 查詢中使用參數

如果只需要特定的點周圍的資料

SELECT * FROM [Test_spatial_<username>].[dbo].[SDOT_Collisions] C WHERE C.geom.STIntersects(geography::STGeomFromText('POINT(-122.344706 47.650388)', 4326).STBuffer(1000))=1

此範例查詢只查詢 POINT 周圍 1000 米範圍內的資料。像第一個範例中使用的參數一樣,半徑可以是參數。

或者也可以使用矩形,而不是點和半徑。例如:

SELECT * FROM [Test_spatial_<username>].[dbo].[SDOT_Collisions] C
WHERE C.geom.STIntersects(geography::STGeomFromText('POLYGON ((-122.3625 47.6642,-122.3625 47.6493,-122.3427 47.6493,-122.3422 47.6642,-122.3625 47.6642))', 4326))=1

附註:多邊形點的捲繞順序(順時針或逆時針)確定您將獲得哪一組點。您可以使用 SQL Server 函數 ReorientObject() 反轉捲繞順序。

如果看到有關混合資料類型的錯誤

SELECT *, F.geom.STGeometryType() as geomtype FROM [Test_spatial_<username>].[dbo].[us_historic_fire_perimeters_dd83] F
WHERE F.geom.STGeometryType() = 'MultiPolygon' OR F.geom.STGeometryType() = 'Polygon'

此範例查詢篩選出幾何圖形類型空間資料,因為 Tableau 無法呈現 Microsoft SQL Server 連線的幾何圖形類型空間資料。您也可以選取其他空間類型。

如果資料在 Tableau 中呈現太慢

SELECT [Id], [OBJECTID], [fire_num], [year_], [acres], [fire_name], [unit_id], [Shape_Leng], [Shape_Area], [geom].Reduce(500) as SimpleGeom
FROM [Test_spatial_<username>].[dbo].[us_historic_fire_perimeters_dd83]
WHERE [geom].Reduce(500).STGeometryType() = 'MultiPolygon' OR [geom].Reduce(500).STGeometryType() = 'Polygon'

此範例查詢可以大大減小資料大小。(某些物件會縮小為點,這些物件將被丟棄。)

使用 RAWSQL

若要將 RAWSQL 用於空間資料,您可以使用 RAWSQL_SPATIAL 或 RAWSQLAGG_SPATIAL 函數建立一個導出欄位。例如: 

RAWSQL_SPATIAL("Select %1.STIntersection(%2.STBuffer(200))",[school_geom], [park_geom])

此公式根據兩個值的交集返回唯一的空間資料。

RAWSQLAGG_SPATIAL("ST_ConvexHull(ST_Collect(%1))", [Geog])

RAWSQLAGG_SPATIAL("ST_ConcaveHull(ST_Collect(%1), %2, false)", [Geog], [ParameterValue])

以上每個都會傳回所提供資料點周圍的周邊區域。根據精度,ConcaveHull 是最小的周邊區域,其為此函數中的參數值。

有關將 RAWSQL 用於空間資料詳情,請參閱直通函數 (RAWSQL)。有關如何建立計算欄位詳情,請參閱建立計算欄位

附註:連線到 Oracle 時 RAWSQL 空間函數不可用。

附註:使用 PostgreSQL + PostGIS 時,可能會導致在使用 PostGIS 專屬的 RAWSQL 函數時發生錯誤。

空間連結疑難排解

效能問題

在使用包含大量記錄的聯接空間欄時,可能會出現重複標記。這可能會導致效能變慢。

為了提高效能,請擷取聯接的資料來源。有關詳情,請參閱擷取資料

Microsoft SQL Server 錯誤訊息與解決方案

當空間表使用不支援的空間參照時

錯誤訊息:

與 Microsoft SQL Server 資料來源 [<資料來源名稱>] 通訊時出錯
連線錯誤:Tableau 無法連線到資料來源。
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]運算元類型衝突: 幾何圖形與幾何圖形不相容
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]無法預定義語句。

解決方案:

  • 將空間資料從 Microsoft SQL Server 匯出為 Shapefile,並在 Tableau 中連線到該檔案。空間檔案連線將完成支援數千種投影的資料轉換過程。

  • 從 Microsoft SQL Server 中匯出資料,並使用諸如 QGIS 或 ArcGIS 等 GIS 工具轉換資料。然後將表重新載入 Microsoft SQL Server。​​

當空間表包括多種類型的空間對象時

錯誤訊息:

無法完成動作
空間運算產生了 Tableau 尚不支援的 MixedGeometry 或 MixedGeography。
空間運算產生了 Tableau 尚不支援的 MixedGeometry 或 MixedGeography。

解決方案:

使用自訂 SQL 篩選資料。有關詳情,請參閱如果看到有關混合資料類型的錯誤自訂 SQL 範例。

在視覺效果中彙總度量時

錯誤訊息:

與 Microsoft SQL Server 資料來源 [<資料來源名稱>] 通訊時出錯
連線錯誤:Tableau 無法連線到資料來源。
無法對包含彙總或子查詢的運算式執行彙總函式。

解決方案

在視覺效果中分解度量:選取 [分析] ,然後清除 [彙總度量]

PostgreSQL + PostGIS、Oracle 和 Pivotal Greenplum + PostGIS 錯誤訊息與解決方案

使用混合 SRID 而其中某個 SRID 不受支援時

錯誤訊息:

與 PostgreSQL 資料來源「<資料來源名稱>」通訊時出錯。
連線錯誤:Tableau 無法連線到資料來源。
錯誤:針對混合的幾何執行作業
執行查詢時發生錯誤
來自 <資料來源> 的 <查詢>
錯誤:針對混合的幾何執行作業
執行查詢時發生錯誤
SELECT ST_ForceCollection(ST_Collect("mixed_SRID_geography"."location"::geometry)) AS "clct:location:nk"
FROM "public"."mixed_SRID_geography" "mixed_SRID_geography"HAVING (COUNT(1) > 0)

解決方案:

在視覺效果中分解度量:選取 [分析] ,然後清除 [彙總度量] 。這將可免除錯誤訊息以及不支援之 SRID 的資料。

當空間表使用不支援的空間參照時

在 PostgreSQL + PostGIS 中,您可以使用不支援的 SRID 連接至資料表,但是 [幾何] 欄會顯示為 [未知的]。

解決方案:

  • 將空間資料從 PostgreSQL + PostGIS 匯出為 Shapefile,並在 Tableau 中連線至該檔案。空間檔案連線將完成支援數千種投影的資料轉換過程。

  • 從 PostgreSQL + PostGIS 中匯出資料,並使用 QGIS 或 ArcGIS 之類的 GIS 工具轉換資料。然後將資料表重新載入 PostgreSQL + PostGIS。​​

當查詢結果超出 1GB 的限制時

錯誤訊息

錯誤:陣列大小超過允許的上限 (1073741823);執行查詢時發生錯誤
SELECT ST_Collect(geom) FROM <data source>

解決方案

重新撰寫計算更有效率。請參閱Tableau 中建立計算的最佳做法建立高效的計算

 

範例 - 依據 Microsoft SQL Server 空間資料組建地圖

以下範例示範如何建立下面的地圖,該地圖顯示位於華盛頓州西雅圖各個公園 600 米範圍內的學校。

此範例使用一個名為 TestSpatial 的 Microsoft SQL Server 資料庫連線。將使用此資料庫中的以下各表:

  • seattleelementaryschools
  • allseattleparks

步驟 1:連線

  1. 開啟 Tableau Desktop 並連線到 Microsoft SQL Server。

  2. 在 [資料來源] 頁面的左側窗格中,將 [新建自訂 SQL] 拖到畫布上。

  3. 在出現的 [編輯自訂 SQL] 對話方塊中鍵入或粘貼查詢。

    此範例使用以下查詢:

    SELECT S.[common nam] as SchoolName, P.[common nam] as ParkName, S.geom.STBuffer(<Parameters.Radius>) as school_geom, P.geom as park_geom FROM TestSpatial.dbo.seattleelementaryschools S LEFT JOIN TestSpatial.dbo.allseattleparks P on S.geom.STBuffer(<Parameters.Radius>).STIntersects(P.geom) = 1

    附註:此範例引用名為 "Radius" 的參數。有關詳情,請參閱在自訂 SQL 查詢中使用參數

    此查詢的結果如下所示:

步驟 2:組建地圖

  1. 轉到一個新工作表。

  2. [資料] 窗格中,按兩下某個空間欄位。

    此範例中使用 [school_geom] 。按兩下後,該欄位將自動新增至 [標記] 卡上的 [詳細資料] ,並且會建立一個地圖檢視。

  3. [資料] 窗格中,將維度拖到 [標記] 卡上的 [標籤] 。此範例中使用 [School Name] (學校名稱)。

  4. 在 [列] 架上,按住 Ctrl 按一下(在 Mac 上按住 Command 按一下)並將 [緯度(產生)] 向右拖動。這將複製欄位。

    一個重複的地圖將出現在第一個地圖下,並且 [標記] 卡將更新為包含兩個 [緯度(產生)] 索引標籤。頂端的索引標籤表示頂端的地圖,底部的索引標籤表示底部的地圖。

  5. 在 [標記] 卡上,按一下底部的 [緯度(產生)] 索引標籤,並透過將欄位拖回到 [資料] 窗格來移除欄位。

    底部地圖將更新為空白地圖。

  6. 選取 [分析] > [建立計算欄位]

  7. 在開啟的計算編輯器中,執行以下操作:

    • 為計算欄位命名。在此範例中,計算欄位稱為 [Intersection] (交集)。

    • 輸入 RAWSQL 公式。此範例使用以下公式:

      RAWSQL_SPATIAL("Select %1.STIntersection(%2.STBuffer(200))",[school_geom], [park_geom])

      此公式根據兩個值的交集返回唯一的空間資料。

    • 完成後,按一下 [確定]

  8. 選取 [分析] ,然後清除 [彙總度量]

  9. 從 [資料] 窗格中,將新的計算欄位(本例中為 [Intersection] )拖到 [標記] 卡上的 [詳細資料]

    底部地圖將更新為包含新標記。請注意,由於 RAWSQL 公式的原因,標記為唯一的空間形狀。

  10. [資料] 窗格中,將維度拖到 [標記] 卡上的 [詳情] 。這會將標記分解。

    此範例中使用維度 [ParkName] (公園名稱)。

  11. [資料] 窗格中,將同一維度拖到 [標記] 卡上的 [色彩]

    在此範例中,每個公園現在指派有一種色彩。

  12. 在 [列] 架上,以右鍵按一下右側的 [緯度(產生)] 欄位,並選取 [雙軸]

    地圖現在將合併,資料將分層。有關詳情,請參閱在 Tableau 中建立雙軸(分層)地圖

  13. 設定地圖的格式。有關詳情,請參閱自訂地圖的外觀

    在此範例,將應用以下格式設定:

    • [School Name] (學校名稱)標記顯示為灰色。

    • [School Name] (學校名稱)標記標籤顯示為橙色。

    • 地圖背景樣式設定為深色。

    • 街道和高速公路層顯示在背景地圖上。

    地圖現在已完成。

另請參閱

依據空間檔案建立 Tableau 地圖

連線到自訂 SQL 查詢

直通函數 (RAWSQL)

Tableau 中的計算入門

感謝您的意見回饋!