Connexion aux données spatiales dans une base de données
Vous pouvez utiliser des colonnes de données spatiales stockées dans votre base de données pour créer des visualisations de cartes dans Tableau. Vous pouvez vous connecter aux sources de données spatiales prises en charge et créer des visualisations avec elles pour analyser les données spatiales, ou vous pouvez vous connecter à des requêtes SQL ou RAWSQL personnalisées pour effectuer une analyse spatiale avancée.
Tableau supporte les connexions directes aux données spatiales à l’aide de ces connecteurs :
- Amazon Redshift
- Microsoft SQL Server
- PostgreSQL + PostGIS
- Pivotal Greenplum + PostGIS
- Oracle
- Snowflake
Pour des informations sur l’utilisation de ces connecteurs, consultez les exemples de connecteurs Microsoft SQL Server, PostgreSQL, Pivotal Greenplum Database, Oracle ou Snowflake.
Données spatiales prises en charge et SRID
Pour Microsoft SQL Server, seules les données spatiales de type Géographie sont prises en charge.
PostgreSQL + PostGIS, Oracle et Pivotal Greenplum + PostGIS prennent en charge les champs de type géographique et géométrique. Les champs de géométrie doivent spécifier le type Géo (par exemple POINT, LINESTRING) et SRID pour être reconnus comme champ spatial. Les champs de géographie doivent spécifier le type Géo pour pouvoir être reconnus.
Remarque : dans PostgreSQL + PostGIS, vous pouvez vous connecter aux tables comportant des types de géométrie mixtes (points, lignes et polygones), mais Tableau n’effectuera pas de rendu simultané.
Les SRID suivants sont pris en charge par ces connecteurs :
NAD83 (EPSG:4269)
ETRS89 (EPSG:4258)
WGS84 (EPSG:4326)
Dans PostgreSQL + PostGIS, SRID utilise toujours par défaut WGS84 (EPSG: 4326).
Tableau prend à la fois en charge les connexions en direct et à un extrait avec ces connecteurs.
Se connecter à des colonnes de données spatiales
- Ouvrez Tableau et connectez-vous aux données.
Pour plus d’informations sur la connexion aux données à l’aide de connecteurs pris en charge, consultez les exemples de connecteurs Microsoft SQL Server, PostgreSQL, Oracle, Pivotal Greenplum Database ou Snowflake. Dans la page Source de données, dans le volet gauche sous Table, faites glisser une table comportant des données spatiales sur l’espace de travail.
Les colonnes de données spatiales affichent le même nom que celui figurant dans votre base de données.
Vous êtes maintenant prêt à créer une carte dans Tableau en utilisant des données spatiales . Pour plus d’informations sur la création de cartes depuis des fichiers spatiaux, consultez Créer une carte à partir de données spatiales.
Utiliser SQL personnalisé et RAWSQL pour effectuer des analyses avancées de données spatiales
Se connecter à une requête SQL personnalisée
- Ouvrez Tableau et connectez-vous à votre base de données.
Dans le volet Source de données, volet de gauche, faites glisser Nouvelle requête SQL personnalisée sur l’espace de travail.
Entrez ou collez votre requête dans la boîte de dialogue Modifier SQL personnalisé qui s’affiche. Pour des exemples de SQL personnalisé que vous pouvez utiliser les données spatiales, consultez Exemples de requêtes SQL personnalisées.
Lorsque vous avez terminé, cliquez sur OK.
Pour plus d’informations, voir Se connecter à une requête SQL personnalisée.
Exemples de requêtes SQL personnalisées
Les requêtes suivantes sont des exemples. Notez que les requêtes SQL personnalisées varient selon les sources de données.
Si vos données comportent deux ensembles de points, tels que des écoles et des parcs, et que vous souhaitez montrer leurs points d’intersection :
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
Cet exemple de requête produit une ligne pour chaque cas où un polygone d’espace public se situe dans le rayon (mètres) d’une école. Le résultat de la requête se présente ainsi dans la grille de données :
Remarque : cet exemple référence un paramètre appelé « Rayon ». Il mesure la distance (en mètres) et inclut les paramètres suivants :
- Type de données : Flottant
- Valeur actuelle : 600
- Valeurs autorisées : Plage
- Minimum : 100
- Maximum : 2000
- Taille de pas : 50
À l’aide du paramètre, vous pouvez ajuster dynamiquement la relation entre les écoles et les espaces publics.
Pour plus d’informations, voir Utiliser des paramètres dans une requête SQL personnalisée.
Si vous souhaitez des données autour d’un certain point seulement
SELECT * FROM [Test_spatial_<username>].[dbo].[SDOT_Collisions] C WHERE C.geom.STIntersects(geography::STGeomFromText('POINT(-122.344706 47.650388)', 4326).STBuffer(1000))=1
Cet exemple de requête limite les données à 1000 mètres autour du POINT. Le rayon peut être un paramètre, par exemple le paramètre utilisé dans le premier exemple.
Ou, plutôt qu’un point ou un rayon, un rectangle peut être utilisé. Par exemple :
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
L’ordre de déroulement des points de polygone (sens horaire versus sens anti-horaire) détermine l’ensemble de points que vous obtenez. Vous pouvez inverser l’ordre de déroulement avec la fonction SQL Server ReorientObject().
Si vous obtenez une erreur relative aux types de données mixtes
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'
Cet exemple de requête filtre les données spatiales de type géométrie puisque Tableau ne peut effectuer un rendu de données spatiales de type géométrie pour les connexions Microsoft SQL Server. Vous pouvez également sélectionner d’autres types de données spatiales.
Si le rendu de vos données est trop lent dans 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'
Cet exemple de requête peut considérablement réduire la taille des données. (Certains objets sont réduits à des Points, et ceux-ci sont ignorés.)
Utiliser RAWSQL
Pour utiliser RAWSQL avec des données spatiales, vous pouvez créer un champ calculé à l’aide de la fonction RAWSQL_SPATIAL ou RAWSQLAGG_SPATIAL. Par exemple :
RAWSQL_SPATIAL("Select %1.STIntersection(%2.STBuffer(200))",[school_geom], [park_geom])
Cette formule retourne des données spatiales basées sur l’intersection de deux valeurs.
RAWSQLAGG_SPATIAL("ST_ConvexHull(ST_Collect(%1))", [Geog])
RAWSQLAGG_SPATIAL("ST_ConcaveHull(ST_Collect(%1), %2, false)", [Geog], [ParameterValue])
Chacune d’entre elles renvoie une zone de délimitation autour des points de données fournis. ConcaveHull est une zone de délimitation minimale basée sur la précision, qui, dans cette fonction, est la valeur du paramètre.
Pour plus d’informations sur l’utilisation de RAWSQL avec des données spatiales, voir Fonctions de passage direct (RAWSQL). Pour plus d’informations sur la création de champs calculés, consultez Créer un champ calculé.
Remarque : les fonctions spatiales RAWSQL ne sont pas disponibles en cas de connexion à Oracle.
Remarque : des erreurs peuvent se produire en cas d’utilisation de RAWSQL spécifique aux fonctions PostGIS avec PostgreSQL + PostGIS.
Résolution des problèmes de connexion aux données spatiales
Problèmes de performances
Lorsque vous utilisez des colonnes de données spatiales liées avec un grand nombre d’enregistrements, une duplication de repères peut se produire. Il en résulte généralement des performances lentes.
Pour améliorer les performances, extrayez la source de données liée. Pour plus d’informations, consultez Extraire vos données.
Messages d’erreur et solutions Microsoft SQL Server
Message d’erreur :
Une erreur s’est produite lors de la communication avec la source de données Microsoft SQL Server '<data source name>'.
Connexion de mauvaise qualité : Tableau n’a pas pu se connecter à la source de données.
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Operand type clash: géométrie incompatible avec la géographie
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Impossible de préparer la/les instruction(s).
Solution :
Exportez les données spatiales depuis Microsoft SQL Server vers un fichier de formes et connectez-vous à ce fichier dans Tableau. Les connexions aux fichiers de données spatiales passent par un processus de transformation des données qui prend en charge des milliers de projections.
Exportez les données depuis Microsoft SQL Server et transformez les données à l’aide d’un outil GIS tel que QGIS ou ArcGIS. Rechargez ensuite la table dans Microsoft SQL Server.
Message d’erreur :
Impossible de terminer l’action
L’opération spatiale a entraîné un MixedGeometry ou MixedGeography, que Tableau ne prend pas encore en charge.
L’opération spatiale a entraîné un MixedGeometry ou MixedGeography, que Tableau ne prend pas encore en charge.
Solution:
Utilisez SQL personnalisé pour filtrer les données. Pour plus d’informations, consultez l’exemple SQL personnalisé Si vous obtenez une erreur relative aux types de données mixtes.
Message d’erreur :
An error occurred while communicating with the Microsoft SQL Server data source '<data source name>' (Une erreur s’est produite lors de la communication avec la source de données Microsoft SQL Server '<data source name>')
Bad Connection: Tableau could not connect to the data source. (Connexion de mauvaise qualité : Tableau n’a pas pu se connecter à la source de données.)
Cannot perform an aggregate function on an expression containing an aggregate or a subquery. (Impossible d’exécuter une fonctions d’agrégation sur une expression contenant une agrégation ou une sou-requête.)
Solution :
Désagrégez les mesures dans la visualisation : sélectionnez Analyse, puis désélectionnez Agréger les mesures.
Messages d’erreur et solutions pour PostgreSQL + PostGIS, Oracle et Pivotal Greenplum + PostGIS
Message d’erreur :
An error occurred while communicating with the PostgreSQL data source '<data source name>' (Une erreur s’est produite lors de la communication avec la source de données PostgreSQL '<data source name>').
Bad Connection: Tableau could not connect to the data source. (Connexion de mauvaise qualité : Tableau n’a pas pu se connecter à la source de données.)
Erreur : Opération sur des SRID mixtes;
Erreur lors de l’exécution de la requête
<query> depuis <datasource>
ERREUR : Opération sur des SRID mixtes;
Erreur lors de l’exécution de la requête
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)
Solution :
Désagrégez les mesures dans la visualisation : sélectionnez Analyse, puis désélectionnez Agréger les mesures. Cette opération élimine le message d’erreur et les données sur lesquelles le SRID n’est pas pris en charge.
Dans PostgreSQL + PostGIS, vous pouvez vous connecter à une table avec des SRID non pris en charge, mais la colonne Géométrie s’affichera comme « Inconnu ».
Solution :
Exportez les données spatiales depuis PostgreSQL + PostGIS vers un fichier de formes et connectez-vous à ce fichier dans Tableau. Les connexions aux fichiers de données spatiales passent par un processus de transformation des données qui prend en charge des milliers de projections.
Exportez les données depuis PostgreSQL + PostGIS et transformez les données à l’aide d’un outil GIS tel que QGIS ou ArcGIS. Rechargez ensuite la table à nouveau dans PostgreSQL + PostGIS.
Message d’erreur :
ERROR: array size exceeds the maximum allowed (1073741823); Error while executing the query" (ERREUR : la taille de la table dépasse le maximum autorisé (1073741823); Erreur lors de l’exécution de la requête)
SELECT ST_Collect(geom) FROM <data source>
Solution :
Réécrivez le calcul afin de le rendre plus efficace. Consultez Meilleures pratiques pour la création de calculs dans Tableau ou Créer des calculs efficaces.
Exemple - Créer une carte à partir de données spatiales Microsoft SQL Server
L’exemple suivant montre comment créer la carte ci-dessous qui présente les écoles dans un rayon de 600 mètres des parcs à Seattle, Washington.
Cet exemple utilise une connexion Microsoft SQL Server à une base de données appelée TestSpatial. Les tables suivantes de cette base de donnée sont utilisées :
- seattle_schools
- seattle_public_space
Étape 1 : Connexion
Ouvrez Tableau et connectez-vous à Microsoft SQL Server.
Dans le volet Source de données, volet de gauche, faites glisser Nouvelle requête SQL personnalisée sur l’espace de travail.
Entrez ou collez une requête dans la boîte de dialogue Modifier SQL personnalisé qui s’affiche.
Pour cet exemple, la requête suivante est utilisée :
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
Remarque : cet exemple référence un paramètre appelé « Rayon ». Pour plus d’informations, voir Utiliser des paramètres dans une requête SQL personnalisée.
Le résultat de cette requête se présente comme suit :
Étape 2 : Créer la carte
Accédez à une nouvelle feuille de calcul.
Dans le volet Données, double-cliquez sur un champ spatial.
Dans cet exemple, Geog_School est utilisé. Lorsque vous double-cliquez dessus, il est automatiquement ajouté à Détails dans la fiche Repères et une carte est créée.
Depuis le volet Données, faites glisser un champ de dimension vers Étiquette sur la fiche Repères. Dans cet exemple, School Name est utilisé.
Sélectionnez Analyse > Créer un champ calculés.
Dans l’éditeur de calcul qui s’ouvre, procédez comme :
Nommez le champ calculé. Dans cet exemple, le champ calculé est appelé Intersection.
Entrez une formule RAWSQL. Cet exemple utilise la formule suivante :
RAWSQL_SPATIAL ("Select %1.STIntersection(%2)", [Geog_School], [Geog_Pub_Space])
Cette formule retourne des données spatiales basées sur l’intersection de deux géométries.
Lorsque vous avez terminé, cliquez sur OK.
Cliquez sur Analyse, puis désélectionnez Agréger les mesures.
Depuis le volet Données, faites glisser le nouveau champ calculé (dans ce cas, Intersection) vers une nouvelle couche dans la feuille de calcul.
La carte est mise à jour avec une nouvelle couche de polygones à partir du champ Intersection. Les repères sont des formes spatiales uniques du fait de la formule RAWSQL.Depuis le volet Données, faites glisser un champ de dimension vers Détail sur la fiche Repères. Ceci désagrège les repères.
Pour cet exemple, la dimension PubSpaceName est utilisée.
Depuis le volet Données, faites glisser le même champ de dimension vers Couleur dans la fiche Repères.
Dans cet exemple, une couleur est maintenant attribuée à chaque espace public.
Mettez en forme la carte. Pour plus d’informations consultez Personnaliser l’aspect de votre carte.
Dans cet exemple, la mise en forme suivante est utilisée :
Les repères School Buffer sont de couleur grise.
Les étiquettes de repère School Names sont de couleur blanche.
Le style de la carte d’arrière-plan est défini sur Foncé.
La couche Rues et autoroutes s’affiche dans la carte d’arrière-plan.
La carte est maintenant terminée.
Consultez également
Créer des cartes Tableau à partir de fichiers de données spatiales
Se connecter à une requête SQL personnalisée
Fonctions de passage direct (RAWSQL)
Démarrer avec les calculs dans Tableau