連線到資料庫中的空間資料
您可以使用儲存在資料庫中的空間欄,在 Tableau 中建立對應的視覺效果。您可以連線至支援的空間資料裡哀怨並使用它們建立可視化以分析空間資料,也可以連線至自訂 SQL 或 RAWSQL 查詢以執行進階空間分析。
Tableau 支援使用以下連接器直接連線至空間資料:
- Amazon Redshift
- Microsoft SQL Server
- PostgreSQL + PostGIS
- Pivotal Greenplum + PostGIS
- Oracle
- Snowflake
如需使用這些連接器的詳細資訊,請參閱 Microsoft SQL Server、PostgreSQL、Pivotal Greenplum Database、Oracle、或者 Snowflake 連接器範例。
支援的空間資料和 SRID
對於 Microsoft SQL Server,只支援地理類型空間資料。
PostgreSQL + PostGIS、Oracle 及 Pivotal 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 支援使用這些連接器進行即時和擷取連線。
連接至空間欄
- 開啟 Tableau 並連接至您的資料。
如需有關如何使用支援的連接器連線至資料的詳細資訊,請參閱 Microsoft SQL Server、PostgreSQL、Oracle 或 Pivotal Greenplum Database、或者 Snowflake 連接器範例。 在 [資料來源] 頁面左側窗格中的 [表] 下,將一個包含空間資料的表拖到畫布上。
空間欄顯示的名稱與其在資料庫中的名稱相同。
現已準備好使用空間資料在 Tableau 中建立地圖。有關如何依據空間檔案建立地圖詳情,請參閱依據空間資料構建地圖檢視。
使用自訂 SQL 和 RAWSQL 執行進階空間分析
連線到自訂 SQL 查詢
- 開啟 Tableau 並連接至您的資料庫。
在 [資料來源] 頁面的左側窗格中,將 [新建自訂 SQL] 拖到畫布上。
在出現的 [編輯自訂 SQL] 對話方塊中鍵入或粘貼您的查詢。有關可用於空間資料的自訂 SQL 的範例,請參閱自訂 SQL 查詢範例。
完成後,按一下 [確定]。
有關詳情,請參閱連線到自訂 SQL 查詢。
自訂 SQL 查詢範例
下面是一些查詢範例。請注意,自訂 SQL 查詢將因資料來源而異。
如果您的資料有兩組點(例如學校和公園),並且您想要顯示它們的相交位置:
選取 S.[name] 作為 SchoolName,P.[name] 作為 PubSpaceName,S.geog_schools.STBuffer(<Parameters.Radius>) 作為 Geog_School, P.geog_pub_space 作為 Geog_Pub_Space FROM TestSpatial.dbo.seattle_public_schools S LEFT JOIN TestSpatial.dbo.seattle_pub_space P ON S.geog_schools.STBuffer(<Parameters.Radius>)。STIntersects(P.geog_pub_space) = 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 錯誤訊息與解決方案
錯誤訊息:
與 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。
錯誤訊息:
錯誤:陣列大小超過允許的上限 (1073741823);執行查詢時發生錯誤
SELECT ST_Collect(geom) FROM <data source>
解決方案:
重新撰寫計算更有效率。請參閱Tableau 中建立計算的最佳做法或建立高效的計算。
範例 - 依據 Microsoft SQL Server 空間資料組建地圖
以下範例示範如何建立下面的地圖,該地圖顯示位於華盛頓州西雅圖各個公園 600 米範圍內的學校。
此範例使用一個名為 TestSpatial 的 Microsoft SQL Server 資料庫連線。將使用此資料庫中的以下各表:
- seattle_schools
- seattle_public_space
步驟 1:連線
開啟 Tableau Desktop 並連線到 Microsoft SQL Server。
在 [資料來源] 頁面的左側窗格中,將 [新建自訂 SQL] 拖到畫布上。
在出現的 [編輯自訂 SQL] 對話方塊中鍵入或粘貼查詢。
此範例使用以下查詢:
選取 S.[name] 作為 SchoolName,P.[name] 作為 PubSpaceName,S.geog_schools.STBuffer(<Parameters.Radius>) 作為 Geog_School, P.geog_pub_space 作為 Geog_Pub_Space FROM TestSpatial.dbo.seattle_public_schools S FULL JOIN TestSpatial.dbo.seattle_public_space P ON S.geog_schools.STBuffer(<Parameters.Radius>)。STIntersects(P.geog_pub_space) = 1
附註:此範例參考名為「Radius」的參數。有關詳情,請參閱在自訂 SQL 查詢中使用參數。
此查詢的結果如下所示:
步驟 2:組建地圖
轉到一個新工作表。
在 [資料] 窗格中,按兩下某個空間欄位。
此範例中使用「Geog_School」。按兩下後,該欄位將自動新增至 [標記] 卡上的 [詳細資料] ,並且會建立一個地圖檢視。
在「資料」窗格中,將維度拖到「標記」卡上的「標籤」。此範例中使用 [School Name] (學校名稱)。
選取 [分析] > [建立計算欄位] 。
在開啟的計算編輯器中,執行以下操作:
為計算欄位命名。在此範例中計算欄位稱為「Intersection(交集)」。
輸入 RAWSQL 公式。此範例使用以下公式:
RAWSQL_SPATIAL ("Select %1.STIntersection(%2)", [Geog_School], [Geog_Pub_Space])
此公式根據兩個幾何交集返回唯一的空間資料。
完成後,按一下 [確定]。
選取 [分析] ,然後清除 [彙總度量] 。
在「資料」窗格中,將新的計算欄位(本例中為「交集」)該工作簿的新層中。
地圖使用「交集」欄位的新多邊形圖層進行更新。鑑於 RAWSQL 公式,標記為唯一的空間形狀。在「資料」窗格中,將維度拖到「標記」卡上的「標籤」。這會將標記分解。
此範例中使用維度「PubSpaceName」。
在「資料」窗格中,將同一維度拖到「標記」卡上的「色彩」。
在此範例中,現在為每個公共空間指派一種色彩。
設定地圖的格式。有關詳情,請參閱自訂地圖的外觀。
在此範例,將應用以下格式設定:
學校緩衝標記 (Geog_School) 呈灰色。
「School Name(學校名稱)」 標記標籤顯示為白色。
地圖背景樣式設定為深色。
街道和高速公路層顯示在背景地圖上。
地圖現在已完成。
另請參閱
使用從 Shapefile 或 GeoJSON 匯入的 KML 或 SQL 空間資料進行空間連線緩慢並返回反轉結果