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.

Tableau supporte les connexions directes aux données spatiales à l'aide de ces connecteurs :

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

Pour des informations sur l'utilisation de ces connecteurs, consultez les exemples de connecteurs Microsoft SQL Server, PostgreSQL ou Pivotal Greenplum Database.

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.

Les bases de données PostgreSQL + PostGIS et Pivotal Greenplum + PostGIS prennent en charge les champs du type Géographie et Géométrie. 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 est toujours WGS84 (EPSG:4326) par défaut.

Tableau prend à la fois en charge les connexions en direct et à un extrait avec ces connecteurs.

Se connecter à des colonnes de données spatiales

  1. 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 ou Pivotal Greenplum Database.
  2. 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 afficheront le même nom que celui figurant dans votre base de données.

    Vous êtes maintenant prêt à créer une carte dans Tableau à l'aide 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

  1. Ouvrez Tableau et connectez-vous à votre base de données.
  2. Dans le volet Source de données, volet de gauche, faites glisser Nouvelle requête SQL personnalisée sur l'espace de travail.

  3. 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.

  4. 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.[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

Cet exemple de requête produit une ligne pour chaque cas où un parc 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

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

Remarque : 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 : 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

Lorsque la table de données spatiales utilise une référence de données spatiales non prise en charge

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. ​​

Lorsque la table de données spatiales inclut plusieurs types d'objets spatiaux

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.

Si les mesures sont agrégées dans la visualisation

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 et Pivotal Greenplum + PostGIS

Si vous utilisez des SRID mixtes et que l'un des SRID n'est pas pris en charge

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. (Mauvaise connexion : 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 éliminera le message d'erreur et les données sur lesquelles le SRID n'est pas pris en charge.

Lorsque la table de données spatiales utilise une référence de données spatiales non prise 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. ​​

Si le résultat d'une requête dépasse la limite de 1 Go

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 :

  • seattleelementaryschools
  • allseattleparks

Étape 1 : Connexion

  1. Ouvrez Tableau et connectez-vous à Microsoft SQL Server.

  2. Dans le volet Source de données, volet de gauche, faites glisser Nouvelle requête SQL personnalisée sur l'espace de travail.

  3. 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.[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

    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

  1. Accédez à une nouvelle feuille de calcul.

  2. Dans le volet Données, double-cliquez sur un champ spatial.

    Dans cet exemple, school_geom est utilisé. Lorsque vous double-cliquez dessus, il est automatiquement ajouté à Détails dans la fiche Repères et une carte est créée.

  3. Depuis le volet Données, faites glisser une dimension vers Étiquette sur la fiche Repères. Dans cet exemple, School Name est utilisé.

  4. Dans l'étagère Lignes, faites un contrôle+clic (Command-Clic sur un Mac) et faites glisser Latitude (générée) vers la droite. Le champ est alors copié.

    Une carte en double apparaît sous la première carte et la fiche Repères se met à jour avec les deux onglets Latitude (générée). L'onglet supérieur correspond à la carte du haut et l'onglet inférieur correspond à la carte du bas.

  5. Dans la fiche Repères, cliquez sur l'onglet inférieur Latitude (générée) et supprimez des champs en les faisant glisser à nouveau vers le volet Données.

    La carte du bas se met à jour en une carte vide.

  6. Sélectionnez Analyse > Créer un champ calculés.

  7. 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.STBuffer(200))",[school_geom], [park_geom])

      Cette formule retourne des données spatiales basées sur l'intersection de deux valeurs.

    • Lorsque vous avez terminé, cliquez sur OK.

  8. Cliquez sur Analyse, puis désélectionnez Agréger les mesures.

  9. Depuis le volet Données, faites glisser le nouveau champ calculé (dans ce cas, Intersection) vers Détails dans la fiche Repères.

    La carte du bas se met à jour avec les nouveaux repères. Notez que les repères sont des formes spatiales uniques raison de la formule RAWSQL.

  10. Depuis le volet Données, faites glisser une dimension vers Détails dans la fiche Repères. Ceci désagrège les repères.

    Pour cet exemple, la dimension ParkName est utilisée.

  11. Depuis le volet Données, faites glisser la même dimension vers Couleur dans la fiche Repères.

    Dans cet exemple, une couleur est maintenant affectée à chaque parc.

  12. Dans l'étagère Lignes, faites un clic droit sur le champ Latitude (générée) à droite et sélectionnez Axe double.

    Les cartes sont maintenant combinées et les données sont superposées. Pour plus d'informations, consultez Créer des cartes à axe double (superposées) dans Tableau.

  13. 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 Name sont colorés en gris.

    • Les étiquettes de repère School Names sont colorées en orange .

    • Le style de la carte d'arrière-plan est défini sur Foncé.

    • La couche Streets et Highways 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

Merci pour vos commentaires ! Il y a eu une erreur lors de l’envoi de vos commentaires. Essayez à nouveau ou envoyez-nous un message.