Cette page vous a-t-elle été utile ?
Oui Non

Se connecter à des données spatiales dans Microsoft SQL Server

Lorsque vous vous connectez à Microsoft SQL Server, vous pouvez utiliser les colonnes de données spatiales qui y sont stockées pour créer des visualisations de carte dans Tableau.

Cet article utilise des exemples pour montrer comment :

Remarque importante :

Pour Microsoft SQL Server, seules les données spatiales de type Géographie sont prises en charge.

Les SRID sont également pris en charge :

  • NAD83 (EPSG:4269)

  • ETRS89 (EPSG:4258)

  • WGS84 (EPSG:4326)


Se connecter à des colonnes de données spatiales dans Microsoft SQL Server

  1. Ouvrez Tableau et connectez-vous à Microsoft SQL Server. Pour plus d'informations sur la connexion à Microsoft SQL Server, consultez l'exemple du connecteur Microsoft SQL Server.
  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.

    Vous êtes maintenant prêt à créer des cartes dans Tableau à l'aide des données spatiales Microsoft SQL Server. 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 à Microsoft SQL Server. Pour plus d'informations sur la connexion à Microsoft SQL Server, consultez l'exemple du connecteur 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 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. 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. 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é.

Résolution des problèmes de connexion aux données spatiales Microsoft SQL Server

Problèmes de performances

Lorsque vous utilisez des colonnes de données spatiales avec un grand nombre d'enregistrements dans Microsoft SQL Server, 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 courants

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.


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

Exemple de connecteur Microsoft SQL Server

Se connecter à une requête SQL personnalisée

Fonctions de passage direct (RAWSQL)

Démarrer avec les calculs dans Tableau