Conseils & Astuces ArcGIS Online - N°206
N°206 - Expressions de données ArcGIS Dashboards - Faire pivoter les données de votre table
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 faire pivoter des lignes en colonnes dans les données
avant de les utiliser dans votre tableau de bord.
Exemple:
Je dispose d'une table contenant pour chaque région française, le type
de culture et la quantité produite correspondante.
Cliquez sur l'image pour l'agrandir |
Pour mon tableau de bord ArcGIS, je souhaiterais faire pivoter les
valeurs du champ "Culture" pour obtenir un enregistrement par
région et autant de champs qu'il y a de type de culture. Le champ
"Production" sera utilisé pour remplir les valeurs de production
dans chacun de ces champs. On pourra également créer un champ
contenant la production totale.
Cliquez sur l'image pour l'agrandir |
L'expression de données suivante pourra alors être utilisée :
// Récupération du portail ArcGIS, ici ArcGIS Online
var myportal = Portal('https://www.arcgis.com');
// Récupération de la couche d'entités d'origine
var fs = FeatureSetByPortalItem(
myportal,
'329dbc62855e4b8780af7ef56bcd5fc9',
0,
['*'],
false
);
// Extraire toutes les valeurs uniques de "Culture"
var cultures = Distinct(fs, "Culture");
// Construire une liste dynamique des noms de produits
var listeCultures = [];
for (var p in cultures) {
Push(listeCultures, p["Culture"]);
}
// Construire la structure de pivot
var pivot = {};
// Boucle sur les enregistrements pour agréger les ventes
for (var f in fs) {
var region = f["Région"];
var culture = f["Culture"];
var productions = f["Production_milliers_de_tonnes"];
// Initialiser la région si nécessaire
if (!(HasKey(pivot, region))) {
var dictCultures = {};
for (var lp in listeCultures) {
dictCultures[listeCultures[lp]] = 0;
}
dictCultures["Production totale"] = 0;
pivot[region] = dictCultures;
}
// Ajouter les valeurs
pivot[region][culture] += productions;
pivot[region]["Production totale"] += productions;
}
// Définir les champs dynamiquement
var fields = [
{ name: "Région", type: "esriFieldTypeString" }
];
for (var lp in listeCultures) {
Push(fields, { name: listeCultures[lp], type: "esriFieldTypeInteger" });
}
Push(fields, { name: "Production totale", type: "esriFieldTypeInteger" });
// Construire le FeatureSet en sortie
var outDict = {
fields: fields,
geometryType: "",
features: []
};
for (var r in pivot) {
var attrs = { "Région": r };
for (var lp in listeCultures) {
var prod = listeCultures[lp];
attrs[prod] = pivot[r][prod];
}
attrs["Production totale"] = pivot[r]["Production totale"];
Push(outDict.features, { attributes: attrs });
}
// On renvoie le featureset en sortie
return FeatureSet(Text(outDict));
Le jeu de données généré est alors le suivant :
Vous pouvez par exemple représenter ces données pivotées dans votre tableau de bord à
l'aide de diagrammes à secteurs :
A travers cet exemple, vous avez pu découvrir comment utiliser une expression de données avec Arcade pour faire pivoter des lignes en colonnes. 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.
0 comments :
Enregistrer un commentaire