Preguntas de selección múltiple en Survey123
Cuando en una encuesta usamos preguntas de tipo selección múltiple el resultado se guarda en un campo de texto donde los ítems seleccionados se separen con una coma. En el ejemplo abajo el resultado se almacena como “Reducción del CO2 emitido,Ahorro en costos de energía electrica”:
Si visualizamos la información en un gráfico de barras el resultado puede verse así y no nos informe de manera fácil cual respuesta es más frecuente:
Con una expresión de datos en Arcade es posible crear un conjunto de datos (featureset) en memoria y usar estos datos para un elemento en ArcGIS Dashboards. Al agregar un elemento de “Gráfico de serie” abre la ventana donde debemos seleccionar la capa para alimentar el elemento. En este caso seleccionamos “Nueva expresión de datos”:
En el editor de Arcade se puede notar que para una expresión de datos no hay variables de perfil:
Es necesario conectarnos a la capa de la encuesta, analizar los datos, crear un esquema para el resultado del análisis y, llenar el esquema y devolverlo como featureset.
Una explicación de la expresión Arcade que se puede encontrar al final de este artículo:
- Línea 2: definir el portal donde están los datos
- Línea 3: definir una consultar para filtrar datos de interés
- Línea 4: acceder a la capa de la encuesta y filtrar los datos con la consulta definida
- Línea 6 a 22: crear un diccionario para almacenar los resultados, recorrer cada registro de la encuesta, separar los motivos de la respuesta de selección múltiple y almacenar el conteo de cada motivo.
- Línea 24 a 30: crear un esquema de datos con 2 campos y sin geometría. Un campo para registrar el motivo y otro campo para almacenar el conteo
- Línea 32 a 40: leer los resultados del diccionario y escribirlos al esquema de datos generado anteriormente
- Línea 43: Devolver el esquema (diccionario) como featureset
Al ejecutar la expresión se obtiene un featureset con cada motivo separado y con su respectivo conteo:
Así el gráfico que resulta es más fácil de interpretar:
El código Arcade
// 1: acceder a la capa de proyectos
var spx = Portal('https://utility-esri-co.maps.arcgis.com');
var sql = "Motivo <> ''";
var proyectos = Filter(FeatureSetByPortalItem(spx, 'bf4a31341a5d49be90de6ce471a0b647', 0, ["Motivo"], false), sql);
// 2: crear estadísticas por motivo
var dct = {};
var conteo = 0;
for (var proyecto in proyectos) {
var motivos = proyecto["Motivo"];
var lst = Split(motivos, ',');
for (var i in lst) {
var motivo = lst[i];
if (HasKey(dct, motivo)) {
conteo = dct[motivo]+1;
} else {
conteo = 1;
}
dct[motivo] = conteo;
}
}
Console(Text(dct));
// 3: crear esquema de datos para featureset el resultado
var Dict = {
'fields': [
{'name': 'Motivo', 'type': 'esriFieldTypeString' },
{'name': 'Conteo','type': 'esriFieldTypeInteger'}],
'geometryType': '',
'features': []};
// 4: llenar esquema con el resulatdo del análisis
var index = 0;
for (motivo in dct) {
Dict.features[index] = {
'attributes': {
'Motivo': motivo,
'Conteo': dct[motivo]
}}
index++; };
// 5: convertir a FeatureSet y devolver resultado
return FeatureSet(Text(Dict));