データベースの空間データへの接続

データベースに格納されている空間列を使用して、Tableau でのマップの視覚化を構築できます。

Tableau では以下のコネクタによる空間データへの直接接続がサポートされています。

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

これらのコネクタの使用方法の詳細については、Microsoft SQL ServerPostgreSQLPivotal Greenplum DatabaseOracle コネクタの例を参照してください。

サポートされている空間データおよび SRIDs

Microsoft SQL Server では Geography 型の空間データのみがサポートされています。

PostgreSQL + PostGISOraclePivotal Greenplum + PostGIS は、Geography- 型と Geometry- 型のフィールドに対応しています。Geometry フィールドでは、空間フィールドとして認識するために geo- 型(例えば、POINT、LINESTRING)および SRID を指定する必要があります。地理的フィールドは、認識されるために geo-型を指定する必要があります。

注: 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. 完了後、[OK] をクリックします。

詳細については、カスタム SQL クエリへの接続を参照してください。

カスタム SQL クエリの例

以下のクエリは例です。カスタム SQL クエリはデータ ソースによって異なる点に注意してください。

データに学校や公園などポイントが 2 セット含まれ、交点を表示する場合:

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

このクエリ例ではデータをポイント周辺の 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 エラー メッセージと解決策

混在 SRID モードを使用していて、SRIDs の 1 つがサポートされていない場合

エラー メッセージ:

PostgreSQL のデータ ソース '<data source name>' との通信中にエラーが発生しました。。
接続不良: Tableau はデータ ソースに接続できませんでした。
エラー:混合 SRID geometries での操作;
クエリ実行中のエラー
<datasources>からの<query>
エラー:混合 SRID geometries での操作;
クエリ実行中のエラー
ST_ForceCollection(ST_Collect("mixed_SRID_geography"."location"::geometry)) を "clct:location:nk" として選択
FROM"Public"="mixed_SRID_geography""mixed_SRID_geographyHAVING(COUNT(1>0)

解決策:

ビジュアライゼーション内のメジャーを非集計する: [分析] を選択してから、[メジャーの集計] をクリアします。これにより、エラーメッセージとSRIDがサポートされていないデータを削除します。

空間表がサポートされていない空間参照を使用している場合

PostgreSQL + PostGIS では、サポートされていない SRID がある表に接続できますが、[ジオメトリ] 列には「不明」と表示されます。

解決策:

  • 空間データを PostgreSQL + PostGIS からシェープファイルにエクスポートし、それを Tableau に接続します。空間ファイル接続はデータ変換プロセスを経て、何千もの投影に対応するようになります。

  • PostgreSQL + PostGIS からデータをエクスポートし、QGIS や ArcGIS などの GIS ツールを使用してデータを変換します。その後、表を PostgreSQL + PostGIS に再読込みします。​​

クエリ結果が 1GB の制限を超える場合

エラー メッセージ:

エラー:配列サイズが最大許容値を超えています(0.1073741823)、クエリの実行中にエラーが発生しました
ST_Collect(geom)を<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. [行] シェルフで、Control を押しながらクリック (Mac では Command を押しながらクリック) し、右に "Latitude (generated) (緯度 (生成))" をドラッグします。フィールドがコピーされます。

    最初のマップの下に重複するマップが表示され、[マーク] カードが 2 つの "Latitude (generated) (緯度 (生成))" タブが含まれるように更新されます。上のタブは上のマップに対応し、下のタブは下のマップに対応します。

  5. [マーク] カードで、下の "Latitude (generated) (緯度 (生成))" タブをクリックし、フィールドを [データ] ペインにドラッグで戻して削除します。

    下のマップは空白のマップに更新されます。

  6. [分析] > [計算フィールドの作成] を選択します。

  7. 開いた計算エディターで、次の操作を実行します。

    • 計算フィールドに名前を付けます。この例では、計算フィールドに "Intersection (交点)" という名前を付けています。

    • RAWSQL 式を入力します。この例では次の式を使用します。

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

      この式により、2 つの値の交点に基づいて一意の空間データが返されます。

    • 完了後、[OK] をクリックします。

  8. [分析] を選択してから、[メジャーの集計] をクリアします。

  9. [データ] ペインから、新しい計算フィールド (この場合は "Intersection (交点)") を [マーク] カードの [詳細] にドラッグします。

    下のマップが新しいマークで更新されます。マークは RAWSQL 式のために一意の空間形状であることに注目してください。

  10. ディメンションを [データ] ペインから [マーク] カードの [詳細] にドラッグします。このようにしてもマークの集計は行われません。

    この例ではディメンションとして "ParkName (公園名)" を使用しています。

  11. 同じディメンションを [データ] ペインから [マーク] カードの [色] にドラッグします。

    この例では各公園に色が割り当てられています。

  12. [行] シェルフで、右側の "Latitude (generated) (緯度 (生成))" フィールドを右クリックして [二重軸] を選択します。

    マップが結合され、データが重ねて表示されています。詳細については、Tableau での二重軸 (レイヤー) マップの作成を参照してください。

  13. マップを書式設定します。詳細については、マップの外観のカスタマイズを参照してください。

    この例では次の書式設定を適用しています。

    • "School Name (学校名)" マークの色は灰色。

    • "School Name (学校名)" マーク ラベルの色はオレンジ色。

    • マップのバックグラウンド スタイルは [暗い] に設定。

    • 道路/高速道路レイヤーがバックグラウンド マップに表示されています。

    これでマップは完成です。

関連項目

空間ファイルから Tableau マップを作成する

カスタム SQL クエリへの接続

パススルー関数 (RAWSQL)

Tableau での計算の開始

ありがとうございます! フィードバックの送信中にエラが発生しました。もう一度やり直すか、メッセージをお送りください