Introducción
Esta publicación documenta un flujo de trabajo experimental desarrollado y probado en ArcGIS Online Experience Builder para el formato visual condicional dentro del widget Tabla. El enfoque utiliza una fuente de datos Arcade para generar un FeatureSet virtual que contiene campos de cadena calculados. Esos campos pueden contener símbolos Unicode o HTML/CSS generados según los valores de los atributos.
El FeatureSet resultante se usa luego como la fuente de una Tabla estándar de Experience Builder. En el entorno probado, esto permitió indicadores Unicode, texto coloreado condicionalmente, valores numéricos coloreados y un bloque coloreado experimental que aproxima visualmente una celda de tabla con formato condicional. Los datos fuente originales no se modifican.
Nota sobre el formato avanzado en Experience Builder. Experience Builder también soporta contenido dinámico y estilos basados en Arcade en contextos de widgets compatibles. El flujo de trabajo descrito aquí aborda un caso diferente: formato visual condicional de valores mostrados dentro del widget Tabla estándar generando contenido formateado en un FeatureSet de datos Arcade. No debe interpretarse como formato condicional nativo a nivel de celda proporcionado por el widget Tabla.
1. Idea básica
Flujo de trabajo:
Tabla original 192; Arcade Data 192; FeatureSet virtual 192; widget Tabla
Para un ejemplo genérico reproducible, suponga que la tabla fuente contiene OBJECTID, REACH_ID (una clave común única) y AREA (un valor numérico). Las reglas de demostración son deliberadamente arbitrarias: AREA = -99999 significa Sin Datos; AREA < 100 significa BAJO; AREA >= 100 significa ALTO.
2. Crear la fuente de datos Arcade
En Experience Builder use Datos 192; Agregar datos 192; Arcade, luego lea la tabla fuente con FeatureSetByPortalItem().
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
Reemplace YOURPORTAL, YOUR_ITEM_ID y el ID de tabla/capa con sus propios valores. La geometría no es necesaria para este ejemplo de tabla, por lo que includeGeometry es false.
3. Ejemplo completo en Arcade
El siguiente script completo mantiene los atributos originales y crea cinco campos experimentales para que los resultados puedan compararse lado a lado.
// ============================================================
// 1. CONEXIÓN AL PORTAL
// ============================================================
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
// ============================================================
// 2. LEER LA TABLA ORIGINAL
// ============================================================
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
// ============================================================
// 3. DEFINIR EL FEATURESET VIRTUAL
// ============================================================
var output = {
fields: [
{
name: "OBJECTID",
alias: "OBJECTID",
type: "esriFieldTypeOID"
},
{
name: "REACH_ID",
alias: "Reach ID",
type: "esriFieldTypeString",
length: 50
},
{
name: "AREA",
alias: "Area",
type: "esriFieldTypeDouble"
},
{
name: "TEST_UNICODE",
alias: "Unicode",
type: "esriFieldTypeString",
length: 50
},
{
name: "TEST_HTML",
alias: "Texto HTML",
type: "esriFieldTypeString",
length: 150
},
{
name: "TEST_VALUE",
alias: "Unicode + valor",
type: "esriFieldTypeString",
length: 50
},
{
name: "TEST_HTML_VALUE",
alias: "Valor HTML",
type: "esriFieldTypeString",
length: 150
},
{
name: "TEST_BACKGROUND",
alias: "Prueba de fondo",
type: "esriFieldTypeString",
length: 300
}
],
geometryType: "",
features: []
};
// ============================================================
// 4. LOOP THROUGH SOURCE RECORDS
// ============================================================
for (var f in fs) {
var reachID = f.REACH_ID;
var area = f.AREA;
// TEST 1 - Unicode indicator
var unicodeResult = "";
if (area == -99999) {
unicodeResult = "⚪ ND";
}
else if (area < 100) {
unicodeResult = "🔴 LOW";
}
else {
unicodeResult = "🟢 HIGH";
}
// TEST 2 - HTML colored text
var htmlResult = "";
if (area == -99999) {
htmlResult = "<span style='color:gray'>ND</span>";
}
else if (area < 100) {
htmlResult = "<span style='color:red'>LOW</span>";
}
else {
htmlResult = "<span style='color:green'>HIGH</span>";
}
// TEST 3 - Unicode indicator + original value
var valueResult = "";
if (area == -99999) {
valueResult = "⚪ ND";
}
else if (area < 100) {
valueResult = "🔴 " + Text(area, "#,##0.00");
}
else {
valueResult = "🟢 " + Text(area, "#,##0.00");
}
// TEST 4 - Original value colored with HTML
var htmlValue = "";
if (area == -99999) {
htmlValue = "<span style='color:gray'>ND</span>";
}
else if (area < 100) {
htmlValue =
"<span style='color:red'>" +
Text(area, "#,##0.00") +
"</span>";
}
else {
htmlValue =
"<span style='color:green'>" +
Text(area, "#,##0.00") +
"</span>";
}
// TEST 5 - Experimental simulated cell background
// This styles a block inside the field; it does NOT
// modify the native Table cell itself.
var backgroundResult = "";
if (area == -99999) {
backgroundResult =
"<div style='" +
"background-color:gray;" +
"color:white;" +
"width:100%;" +
"padding:6px;" +
"text-align:center;" +
"font-weight:bold" +
"'>ND</div>";
}
else if (area < 100) {
backgroundResult =
"<div style='" +
"background-color:red;" +
"color:white;" +
"width:100%;" +
"padding:6px;" +
"text-align:center;" +
"font-weight:bold" +
"'>" +
Text(area, "#,##0.00") +
"</div>";
}
else {
backgroundResult =
"<div style='" +
"background-color:green;" +
"color:white;" +
"width:100%;" +
"padding:6px;" +
"text-align:center;" +
"font-weight:bold" +
"'>" +
Text(area, "#,##0.00") +
"</div>";
}
// BUILD OUTPUT RECORD
Push(
output.features,
{
attributes: {
OBJECTID: f.OBJECTID,
REACH_ID: reachID,
AREA: area,
TEST_UNICODE: unicodeResult,
TEST_HTML: htmlResult,
TEST_VALUE: valueResult,
TEST_HTML_VALUE: htmlValue,
TEST_BACKGROUND: backgroundResult
}
}
);
}
// ============================================================
// 5. RETURN THE VIRTUAL FEATURESET
// ============================================================
return FeatureSet(
Text(output)
);
4. Use the Arcade Data source in the Table widget
Run and apply the expression, then configure a Table widget to use the Arcade Data source. The output should expose OBJECTID, REACH_ID, AREA, TEST_UNICODE, TEST_HTML, TEST_VALUE, TEST_HTML_VALUE, and TEST_BACKGROUND.
Practical observation: after adding fields to the Arcade expression, the Table may continue to use the previous schema. If a new field appears in the Arcade output but not in the Table, make the Table re-read/refresh the Arcade Data source.
5. Filter the virtual table from a map selection
Retain the same common key in the source feature layer and in the virtual FeatureSet. Configure Map → Action → Record selection changes → Filter data.
Setting | Value |
|---|
Trigger data | Feature layer |
Trigger field | REACH_ID |
Action data | Arcade Data |
Action field | REACH_ID |
Mode | Default |
With a 1:1 relationship, selecting a map feature filters the virtual Table to the corresponding record.
6. Results verified in the tested environment
- Unicode indicators: worked.
- Unicode indicator + numeric value: worked.
- HTML text color using <span>: worked.
- HTML-colored numeric values: worked.
- Background-color block using <div>: worked experimentally.
Figure 1. Conditional visual formatting verified in the Experience Builder Table: Unicode indicator, HTML-colored text, Unicode indicator with numeric value, HTML-colored numeric value, and experimental simulated cell background.
7. Important distinction and limitations
This should not be described as native conditional formatting of the Table widget. A more accurate description is conditional visual formatting of the content of a virtual Arcade field displayed by the Table widget.
The background test does not style the native table cell. It renders an HTML block inside the field content and uses width, padding, background-color, text alignment, and font weight to visually approximate a colored cell.
The <div>-based background behavior should be treated as experimental. It was verified in the tested ArcGIS Online environment, but it should not be assumed to be a stable supported API contract. HTML/CSS sanitization or rendering behavior may change between updates or between ArcGIS Online and ArcGIS Enterprise. Keep production HTML simple and retest after updates.
Limitación de conteo de entidades y comportamiento observado. La documentación de Esri establece un máximo de 50,000 entidades cuando se utiliza un FeatureSet para construir una colección de entidades. Los FeatureSets virtuales construidos en esta publicación se encuentran dentro del tipo de flujo de trabajo para el cual ese límite documentado es relevante. Sin embargo, pruebas adicionales en el mismo entorno de ArcGIS Online usaron con éxito 50,001 y 100,000 registros generados en el widget Tabla, incluyendo consultas directas de OBJECTID 50001 y 100000. La Sección 9 documenta esta discrepancia en detalle. El comportamiento observado es experimental y no debe considerarse como un reemplazo soportado para el límite documentado por Esri.
8. Validación adicional: filtrado 1:N y transformación virtual de ancho a largo
Se realizaron dos pruebas adicionales para verificar que Arcade Data puede soportar un flujo de trabajo 1:N impulsado por una selección en el mapa. Ambas pruebas usaron el mismo identificador común de tramo en la capa del mapa y en la tabla o FeatureSet virtual.
Prueba 1 - Tabla física 1:N existente. Se creó una fuente de datos Arcade a partir de una tabla existente ya organizada en forma larga, con múltiples registros de descarga-duración para cada tramo. Una acción del Mapa (Cambios en la selección de registros 192 Filtrar registros de datos) conectó el identificador del tramo en la capa de entidades con el mismo identificador en la fuente de datos Arcade. Seleccionar un tramo filtró la Tabla a todos los registros coincidentes, no solo a un registro único. Esto confirma que una fuente de datos Arcade virtual puede participar en un flujo de trabajo de filtrado 1:N.
Figura 2. Prueba 1: seleccionar el tramo Arno_3629 filtra la tabla Arcade 1:N a múltiples registros descarga-duración para el mismo tramo.
Prueba 2 - Transformación virtual de ancho a largo. La tabla fuente se leyó en su estructura ancha original, donde los valores de descarga para diferentes duraciones se almacenan en campos separados. Arcade transformó dinámicamente cada registro fuente en múltiples registros virtuales que contienen ID del tramo, Descarga, etiqueta Duración y Duración numérica. El FeatureSet virtual 1:N resultante se conectó luego al mismo filtro de selección del mapa. Seleccionar el mismo tramo devolvió los múltiples registros esperados y los valores de descarga coincidieron con la tabla física correspondiente en forma larga, aparte del redondeo visual.
Figura 3. Prueba 2: Arcade crea una tabla virtual 1:N desde una tabla fuente ancha y el resultado se filtra exitosamente por el tramo seleccionado.
Estas pruebas amplían la validación original 1:1. En el entorno probado ArcGIS Online Experience Builder, Arcade Data pudo tanto exponer una estructura 1:N existente como crear una estructura derivada 1:N dinámicamente sin modificar el servicio fuente.
Para conjuntos de datos más grandes, el conteo resultante de registros virtuales debe considerarse junto con el límite para colecciones de entidades mencionado arriba.
9. Validación adicional: comportamiento más allá del límite documentado de 50,000 entidades
La documentación de Esri establece que cuando un resultado Arcade Data se usa para construir una colección de entidades, el FeatureSet usado para construir esa colección puede contener un máximo de 50,000 entidades. Debido a que los ejemplos en esta publicación construyen un nuevo FeatureSet con FeatureSet(Text(output)), se realizó una prueba adicional para observar qué sucede cuando ese umbral documentado es excedido en el entorno actual ArcGIS Online Experience Builder.
Se creó una fuente sintética Arcade Data con dos campos (OBJECTID y TEST_VALUE) y sin geometría. La expresión generó registros secuenciales en memoria y los devolvió con FeatureSet(Text(output)). Las pruebas con 49,999 y 50,000 registros se ejecutaron normalmente. Luego se probó la expresión con 50,001 registros.
Con 50,001 registros, el editor Arcade aún evaluó la expresión exitosamente. Después de agregar la fuente de datos a Experience Builder, el widget estándar Tabla reportó un total de 50,001 registros. Un filtro Tabla usando OBJECTID = 50001 devolvió el registro esperado, confirmando que el registro más allá del umbral documentado de 50,000 no solo fue incluido en el conteo mostrado sino que fue directamente consultable.
Luego se repitió la prueba con 100,000 registros generados. El widget Tabla aceptó la fuente de datos y un filtro usando OBJECTID = 100000 devolvió el registro esperado y TEST_VALUE = 100,000. En este entorno probado, por lo tanto, el FeatureSet virtual permaneció utilizable al menos hasta 100,000 registros.
Esta observación no debe interpretarse como una anulación del límite documentado por Esri de 50,000 entidades ni como una garantía soportada para aplicaciones productivas. Solo documenta el comportamiento observado en ArcGIS Online Experience Builder en agosto de 2026. El comportamiento efectivo puede depender de detalles de implementación y puede cambiar con futuras actualizaciones de ArcGIS Online o diferir en ArcGIS Enterprise. Las aplicaciones deben seguir diseñándose considerando el límite documentado a menos que Esri aclare o actualice la especificación.
Implicación práctica para transformaciones ancho a largo. Una transformación puede multiplicar la cantidad de registros virtuales producidos desde cada registro fuente. Las pruebas anteriores muestran que exceder los 50,000 no falló inmediatamente en el entorno probado, pero este comportamiento observado no debe usarse como razón para diseñar transformaciones ilimitadas del lado cliente. También deben considerarse rendimiento, uso de memoria, recursos del navegador y compatibilidad futura.
Figura 4. Validación experimental más allá del umbral documentado de 50,000 entidades. Un FeatureSet virtual Arcade que contiene 100,000 registros generados es usado por el widget Tabla Experience Builder. Filtrar por OBJECTID = 100000 devuelve exitosamente el registro correspondiente, confirmando que dicho registro es directamente consultable en el entorno probado ArcGIS Online (agosto 2026).
El resultado mostrado en la Figura 4 es un comportamiento experimental observado y no debe interpretarse como que reemplaza el límite documentado por Esri de 50,000 entidades.
10. Por qué la técnica puede ser útil más allá del formato
- Combinar atributos seleccionados desde múltiples tablas usando una clave común.
- Calcular campos sin modificar el servicio fuente.
- Reemplazar valores centinela como -99999 con ND.
- Agregar o resumir registros desde relaciones 1:N.
- Crear tablas resumen derivadas.
- Conservar una clave relacional para que el resultado reaccione a selecciones del mapa.
- Explorar FeatureSets derivados que incluyan geometría para otros flujos de trabajo.
En este sentido, Arcade Data puede actuar como una capa ligera virtual de transformación entre servicios fuente y widgets Experience Builder.
Conclusión
Datos fuente 192 Arcade Data 192 FeatureSet Virtual 192 Campos HTML calculados 192 Tabla Experience Builder 192 Formato visual condicional
La tabla fuente permanece intacta. Los enfoques basados en Unicode y <span> son las opciones más conservadoras. La técnica del fondo bloque es visualmente poderosa pero debe identificarse explícitamente como experimental.
Agradecimientos y transparencia
Este flujo fue desarrollado mediante una serie iterativa de experimentos usando ChatGPT (OpenAI) como asistente técnico.
ChatGPT ayudó a explorar posibles enfoques y generar y refinar código Arcade, mientras que cada comportamiento descrito en esta publicación fue probado directamente en ArcGIS Online Experience Builder.
La validación experimental fue importante: algunas suposiciones iniciales - incluyendo que el formato HTML no sería renderizado por el widget Tabla - resultaron incorrectas al probarse en el widget real. Esas observaciones condujeron a las pruebas posteriores con valores numéricos coloreados y bloque con color de fondo.
Entorno de prueba: ArcGIS Online Experience Builder, agosto 2026.
Referencias documentales
022 Esri, documentación ArcGIS Experience Builder, 22Seleccionar datos22 140 Añadir datos con Arcade; requisitos para retorno FeatureSet y límite documentado para colecciones con máximo 50,000 entidades. La Sección 9 reporta separadamente los conteos mayores observados experimentalmente en este entorno probado.
022 Esri, documentación ArcGIS Experience Builder, 22Formato avanzado22 140 Contenido dinámico basado en Arcade y estilo en contextos soportados por widgets.