Le blog francophone consacré
aux technologies Esri

Conseils & Astuces ArcGIS Online - N°205

N°205 - Expressions de données ArcGIS Dashboards - Joindre des tables ou des couches d'entités

Dans ce précédent article, je vous présentais la notion très puissante d'expression de données dans ArcGIS Dashboards ainsi que l'interface permettant de les créer. Dans cet article, je vous propose un exemple d'expression de données permettant de réaliser une jointure entre deux sources de données avant d'utiliser le résultat de cette jointure dans votre tableau de bord.

Exemple:

Je dispose d'une couche contenant les contours des ilots statistiques IRIS de l'INSEE. Ces derniers contiennent notamment le code et le nom de l'IRIS ainsi que le code et le nom de la commune dans laquelle ils se trouvent. 

Cliquez sur l'image pour l'agrandir

Dans une autre table je dispose d'une série d'indicateurs statistiques de l'INSEE relatifs aux disparités de revenus par IRIS.

Cliquez sur l'image pour l'agrandir


L'objectif est de réaliser une jointure (de type "1 à 1" sur le code des IRIS) entre ces deux sources de données afin de isposer d'un jeu de données unique pour l'exploiter plus facilement dans mon tableau de bord.


L'expression de données suivante pourra alors être utilisée :

// Récupération du portail, ici ArcGIS Online
var myportal = Portal("https://www.arcgis.com/");

// Récupération de la couche contenant les descriptions des IRIS de l'INSEE
var IRIS_fs = FeatureSetByPortalItem(
    myportal,
    "0e189c922943465281c38f6274963405",
    0,
    ["*"],
    false
);

// Récupération de la table contenant les statistiques INSEE de revenus disponbles
var INSEE_fs = FeatureSetByPortalItem(
    myportal,
    "28e680ce40f44a1981792432d4250040",
    0,
    ["*"],
    false
);

// La couche contient tous les IRIS, on ne souhaite 
var IRIS_fs_filtre = Filter (IRIS_fs,"CODE_IRIS like '29%'")

// Créer le tableau pour les entités en sortie
var features = [];
var feat;

// Remplissage du tableau avec les attributs de la couche et de
// la table
for (var t in INSEE_fs) {
    var IRIS_ID = t["IRIS"]
    Console(IRIS_ID)
    for (var p in Filter(IRIS_fs_filtre, "CODE_IRIS = '"+IRIS_ID+"'")){
        feat = {
            attributes: {
                CODE_IRIS: IRIS_ID,
                NOM_IRIS: p["NOM_IRIS"],
                CODE_COMMUNE: p["INSEE_COM"],
                NOM_COMMUNE: p["NOM_COM"],
                DISP_GI21: t["DISP_GI21"],
                DISP_PACT21: t["DISP_PACT21"],
                DISP_PTSA21: t["DISP_PTSA21"],
                DISP_PCHO21: t["DISP_PCHO21"],
                DISP_PBEN21: t["DISP_PBEN21"],
                DISP_PPSOC21: t["DISP_PPSOC21"],
                DISP_PPFAM21: t["DISP_PPFAM21"],
                DISP_PPMINI21: t["DISP_PPMINI21"],
                DISP_PPLOGT21: t["DISP_PPLOGT21"],
                DISP_PIMPOT21: t["DISP_PIMPOT21"]
            }
        }
    Push(features, feat)
    }
}

// Dictionnaire pour définir le FeatureSet en sortie
var def_fs_output = {
    fields: [
        { name: "CODE_IRIS",
        alias:"Code IRIS", 
        type: "esriFieldTypeString" },
        { name: "NOM_IRIS", 
        alias:"Nom IRIS", 
        type: "esriFieldTypeString" },	
        { name: "CODE_COMMUNE", 
        alias:"Code INSEE Commune", 
        type: "esriFieldTypeString" },
        { name: "NOM_COMMUNE", 
        alias:"Nom Commune", 
        type: "esriFieldTypeString" },
        { name: "DISP_GI21", 
        alias: "Indice de Gini", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PACT21", 
        alias: "Part des revenus d’activité (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PTSA21", 
        alias: "dont part des salaires et traitements (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PCHO21", 
        alias: "dont part des indemnités de chômage (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PBEN21",
        alias: "dont part des revenus des activités non salariées (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PPSOC21", 
        alias: "Part de l'ensemble des prestations sociales (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PPFAM21", 
        alias: "dont part des prestations familiales (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PPMINI21", 
        alias: "dont part des minima sociaux (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PPLOGT21", 
        alias: "dont part des prestations logement (%)", 
        type: "esriFieldTypeInteger" },
        { name: "DISP_PIMPOT21", 
        alias: "Part des impôts (%)", 
        type: "esriFieldTypeInteger" },
    ],
    'geometryType': '',
    'features':features
};

// On renvoie le FeatureSet en sortie
return FeatureSet(def_fs_output);

Le jeu de données généré est alors le suivant :

Cliquez sur l'image pour l'agrandir

Vous pouvez par exemple le représenter dans votre tableau de bord à l'aide d'une fiche de détails et d'un diagramme en barres :



A travers cet exemple, vous avez pu découvrir comment utiliser des expressions de données avec Arcade pour réaliser une jointure entre les données de deux tables (ou couches d'entités). On notera que ce cette approche est intéressante car elle offre beaucoup de souplesse sur la manipulation des champs et des valeurs calculées à la volées, permettant par exemple des scenarii de jointure de type 1:N (multiplication). Cependant, elle ne doit être utilisée que sur des jeux de données peu volumineux (quelques centaines d'enregistrements maximum). Si vous souhaitez réaliser des jointures efficaces sur des volumes plus important, il est recommandé de créer une vue de couche. Une fois ces considérations prises en compte, il ne vous reste plus qu'à l'appliquer à vos propres cas d'usage.


Bonne route sur ArcGIS Online !

Pour retrouver l'ensemble des Conseils & Astuces ArcGIS Online, cliquez sur ce lien.

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: