データベースの空間データへの接続
データベースに格納されている空間列を使用して、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 のコネクタの例を参照してください。
サポートされている空間データおよび SRIDs
Microsoft SQL Server では Geography 型の空間データのみがサポートされています。
PostgreSQL + PostGIS、Oracle、Pivotal Greenplum + PostGIS は、Geography 型と Geometry 型のフィールドに対応しています。Geometry フィールドでは、空間フィールドとして認識するために geo 型 (例えば、POINT、LINESTRING) および SRID を指定する必要があります。Geography フィールドでは、認識されるために geo 型を指定する必要があります。
注: 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 クエリの例を参照してください。
終了したら、[OK] をクリックします。
詳細については、カスタム SQL クエリへの接続を参照してください。
カスタム SQL クエリの例
以下のクエリは例です。カスタム SQL クエリはデータ ソースによって異なる点に注意してください。
データに学校や公園などポイントが 2 セット含まれ、交点を表示する場合:
SELECT S.[name] as SchoolName, P.[name] as PubSpaceName, S.geog_schools.STBuffer(<Parameters.Radius>) as Geog_School, P.geog_pub_space as 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
このクエリ例ではデータをポイント周辺の 1,000 メートルに制限します。最初の例で使用したパラメーターのように、半径をパラメーターにできます。
または、ポイントと半径ではなく、長方形を使用できます。例は次のとおりです。
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 接続で geometry 型の空間データをレンダリングできないため、このクエリ例では geometry 型の空間データを除外するようにフィルターします。他の空間型も選択可能です。
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])
この式により、2 つの値の交点に基づいて一意の空間データが返されます。
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 のデータ ソース '<data source name>' との通信中にエラーが発生しました。
接続不良: Tableau はデータ ソースに接続できませんでした。
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]オペランド型のクラッシュ: geography にはジオメトリとの互換性がありません
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]ステートメントを準備できませんでした。
解決策:
空間データを Microsoft SQL Server からシェープファイルにエクスポートし、それを Tableau に接続します。空間ファイル接続はデータ変換プロセスを経て、何千もの投影に対応するようになります。
Microsoft SQL Server からデータをエクスポートし、QGIS や ArcGIS などの GIS ツールを使用してデータを変換します。その後、表を Microsoft SQL Server に再読込みします。
エラー メッセージ:
アクションを完了できません
空間操作により、MixedGeometry または MixedGeography になりましたが、これはまだ Tableau でサポートされていません。
空間操作により、MixedGeometry または MixedGeography になりましたが、これはまだ Tableau でサポートされていません。
解決策:
カスタム SQL を使用してデータをフィルターします。詳細については、混合データ型でエラーが発生する場合のカスタム SQL の例を参照してください。
エラー メッセージ:
Microsoft SQL Server のデータ ソース '<data source name>' との通信中にエラーが発生しました。
接続不良: Tableau はデータ ソースに接続できませんでした。
集計やサブクエリが含まれる式に対して集計関数を実行することはできません。
解決策:
ビジュアライゼーション内のメジャーを非集計する: [分析] を選択してから、[メジャーの集計] をクリアします。
PostgreSQL + PostGIS、Oracle、Pivotal Greenplum + PostGIS エラー メッセージと解決策
エラー メッセージ:
PostgreSQL のデータ ソース '<data source name>' との通信中にエラーが発生しました。
接続不良: Tableau はデータ ソースに接続できませんでした。
エラー:混合 SRID geometries での操作;
クエリ実行中のエラー
<datasource> からの <query>
エラー:混合 SRID geometries での操作;
クエリ実行中のエラー
ST_ForceCollection(ST_Collect("mixed_SRID_geography"."location"::geometry)) を "clct:location:nk" として選択
FROM "public"."mixed_SRID_geography" "mixed_SRID_geography"HAVING (COUNT(1) > 0)
解決策:
ビジュアライゼーション内のメジャーを非集計する: [分析] を選択してから、[メジャーの集計] をクリアします。これにより、エラーメッセージとSRIDがサポートされていないデータを削除します。
PostgreSQL + PostGIS では、サポートされていない SRID がある表に接続できますが、[ジオメトリ] 列には「不明」と表示されます。
解決策:
空間データを PostgreSQL + PostGIS からシェープファイルにエクスポートし、それを Tableau に接続します。空間ファイル接続はデータ変換プロセスを経て、何千もの投影に対応するようになります。
PostgreSQL + PostGIS からデータをエクスポートし、QGIS や ArcGIS などの GIS ツールを使用してデータを変換します。その後、表を PostgreSQL + PostGIS に再読込みします。
エラー メッセージ:
エラー:配列サイズが最大許容値を超えています(0.1073741823)、クエリの実行中にエラーが発生しました
ST_Collect(geom)を<data source>から選択
解決策:
計算をより効率的に書き直します。Tableau での計算作成のベスト プラクティス または 効果的な計算の作成を参照してください。
例 - Microsoft SQL Server の空間データによるマップの作成
次の例では、ワシントン州シアトルで公園の 600 メートル以内にある学校を表示する以下のマップの作成方法について説明します。
この例では、"TestSpatial (テスト空間)" という名前のデータベースに対する Microsoft SQL Server 接続を使用します。このデータベースより次の表を使用します。
- seattle_schools
- seattle_public_space
ステップ 1: 接続
Tableau Desktop を開き、Microsoft SQL Server に接続します。
[データ ソース] ページの左側のペインより、[新しいカスタム SQL] をキャンバスにドラッグします。
表示された [カスタム SQL の編集] ダイアログ ボックスにクエリを入力するか、貼り付けます。
この例では次のクエリを使用しています。
SELECT S.[name] as SchoolName, P.[name] as PubSpaceName, S.geog_schools.STBuffer(<Parameters.Radius>) as Geog_School, P.geog_pub_space as 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])
この式により、2 つのジオメトリの交点に基づいて一意の空間データが返されます。
終了したら、[OK] をクリックします。
[分析] を選択してから、[メジャーの集計] をクリアします。
[データ] ペインから、新しい計算フィールド (この場合は Intersection (交点)) を [マーク] カードの [詳細] にドラッグします。
マップが、交点フィールドからの多角形の新しいレイヤーで更新されます。マークは RAWSQL 式のために一意の空間形状になっています。[データ] ペインから、ディメンション フィールドを [マーク] カードの [詳細] にドラッグします。このようにしてもマークの集計は行われません。
この例では、ディメンションとして「PubSpaceName (公共スペース名)」が使用されています。
[データ] ペインから、同じディメンションを [マーク] カードの [色] にドラッグします。
この例では、各公共スペースに色が割り当てられました。
マップを書式設定します。詳細については、マップの外観のカスタマイズを参照してください。
この例では次の書式設定を適用しています。
[School] (学校) バッファー マーク (Geog_School) の色は灰色。
[School Name] (学校名) マーク ラベルの色は白。
マップのバックグラウンド スタイルは [暗い] に設定。
道路/高速道路レイヤーがバックグラウンド マップに表示されています。
これでマップは完成です。
関連項目
シェープファイルまたは GeoJSON からインポートされた KML または SQL 空間データを使用するとき、空間結合が遅く、反転した結果を返す