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.
Dans une autre table je dispose d'une série d'indicateurs statistiques de
l'INSEE relatifs aux disparités de revenus par IRIS.
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.