Le blog francophone consacré
aux technologies Esri

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 :

Cliquez sur l'image pour l'agrandir

Ou encore représenter la proportion de certaines cultures oopour chaque région à l'aide d'un diagramme de séries empilées :

Cliquez sur l'image pour l'agrandir


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.

Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: