Einführung
Dieser Beitrag dokumentiert einen experimentellen Workflow, der im ArcGIS Online Experience Builder für bedingte visuelle Formatierung innerhalb des Tabellen-Widgets entwickelt und getestet wurde. Der Ansatz verwendet eine Arcade Data-Quelle, um ein virtuelles FeatureSet mit berechneten Zeichenkettenfeldern zu erzeugen. Diese Felder können Unicode-Symbole oder HTML/CSS enthalten, die entsprechend den Attributwerten generiert werden.
Das resultierende FeatureSet wird dann als Quelle für eine Standard-Experience Builder Tabelle verwendet. In der getesteten Umgebung ermöglichte dies Unicode-Indikatoren, bedingt farbigen Text, farbige numerische Werte und einen experimentellen farbigen Block, der visuell eine bedingt formatierte Tabellenzelle annähert. Die ursprünglichen Quelldaten werden nicht verändert.
Hinweis zur erweiterten Formatierung im Experience Builder. Experience Builder unterstützt auch Arcade-basierte dynamische Inhalte und Styling in unterstützten Widget-Kontexten. Der hier beschriebene Workflow behandelt einen anderen Fall: die bedingte visuelle Formatierung von Werten, die innerhalb des Standard-Tabellen-Widgets angezeigt werden, durch Generierung formatierten Inhalts in einem Arcade Data FeatureSet. Dies sollte nicht als native zellbezogene bedingte Formatierung verstanden werden, die vom Tabellen-Widget bereitgestellt wird.
1. Grundidee
Workflow:
Originaltabelle 192 Arcade Data 192 Virtuelles FeatureSet 192 Tabellen-Widget
Für ein generisches reproduzierbares Beispiel nehmen wir an, dass die Quelltabelle OBJECTID, REACH_ID (ein eindeutiger gemeinsamer Schlüssel) und AREA (ein numerischer Wert) enthält. Die Demonstrationsregeln sind absichtlich willkürlich: AREA = -99999 bedeutet Keine Daten; AREA < 100 bedeutet NIEDRIG; AREA >= 100 bedeutet HOCH.
2. Erstellen der Arcade Data-Quelle
Verwenden Sie im Experience Builder Daten 192 Daten hinzufügen 192 Arcade und lesen Sie dann die Quelltabelle mit FeatureSetByPortalItem().
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
Ersetzen Sie YOURPORTAL, YOUR_ITEM_ID und die Tabellen-/Layer-ID durch Ihre eigenen Werte. Geometrie ist für dieses Tabellenbeispiel nicht erforderlich, daher ist includeGeometry false.
3. Vollständiges Arcade-Beispiel
Das folgende vollständige Skript behält die ursprünglichen Attribute bei und erstellt fünf experimentelle Felder, damit die Ergebnisse nebeneinander verglichen werden können.
// ============================================================
// 1. PORTALVERBINDUNG
// ============================================================
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
// ============================================================
// 2. ORIGINALTABELLE LESEN
// ============================================================
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
// ============================================================
// 3. DAS VIRTUELLE FEATURESET DEFINIEREN
// ============================================================
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: "HTML text",
type: "esriFieldTypeString",
length: 150
},
{
name: "TEST_VALUE",
alias: "Unicode + value",
type: "esriFieldTypeString",
length: 50
},
{
name: "TEST_HTML_VALUE",
alias: "HTML value",
type: "esriFieldTypeString",
length: 150
},
{
name: "TEST_BACKGROUND",
alias: "Background test",
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.
Begrenzung der Feature-Anzahl und beobachtetes Verhalten. Die Esri-Dokumentation gibt eine maximale Anzahl von 50.000 Features an, wenn ein FeatureSet zur Erstellung einer Feature-Collection verwendet wird. Die in diesem Beitrag erstellten virtuellen FeatureSets fallen in den Workflow-Typ, für den diese dokumentierte Begrenzung relevant ist. Allerdings wurden in derselben ArcGIS Online-Umgebung zusätzliche Tests mit 50.001 und 100.000 generierten Datensätzen im Table-Widget erfolgreich durchgeführt, einschließlich direkter Abfragen von OBJECTID 50001 und 100000. Abschnitt 9 dokumentiert diese Diskrepanz im Detail. Das beobachtete Verhalten ist experimentell und sollte nicht als unterstützter Ersatz für die dokumentierte Begrenzung von Esri betrachtet werden.
8. Zusätzliche Validierung: 1:N-Filterung und virtuelle Wide-to-Long-Transformation
Es wurden zwei zusätzliche Tests durchgeführt, um zu überprüfen, ob Arcade Data einen 1:N-Workflow unterstützt, der durch eine Kartenauswahl gesteuert wird. Beide Tests verwendeten denselben gemeinsamen Reach-Identifier in der Kartenebene und in der Tabelle oder dem virtuellen FeatureSet.
Test 1 - Bestehende physische 1:N-Tabelle.Eine Arcade Data-Quelle wurde aus einer bereits in Langform organisierten Tabelle erstellt, mit mehreren Abfluss-Dauer-Datensätzen für jeden Reach. Eine Kartenaktion (Datensatz-Auswahländerungen 16 Filterdaten-Datensätze) verband den Reach-Identifier in der Feature-Ebene mit demselben Identifier in der Arcade Data-Quelle. Die Auswahl eines Reachs filterte die Tabelle auf alle passenden Datensätze, nicht nur auf einen einzelnen Datensatz. Dies bestätigt, dass eine virtuelle Arcade Data-Quelle an einem 1:N-Filterworkflow teilnehmen kann.
Abbildung 2. Test 1: Die Auswahl des Reachs Arno_3629 filtert die 1:N Arcade Data-Tabelle auf mehrere Abfluss-Dauer-Datensätze für denselben Reach.
Test 2 - Virtuelle Wide-to-Long-Transformation.Die Quelltabelle wurde stattdessen in ihrer ursprünglichen breiten Struktur eingelesen, wobei Abflusswerte für verschiedene Dauern in separaten Feldern gespeichert sind. Arcade transformierte dynamisch jeden Quell-Datensatz in mehrere virtuelle Datensätze, die Reach ID, Abfluss, Dauerbezeichnung und numerische Dauer enthalten. Das resultierende virtuelle 1:N FeatureSet wurde dann mit demselben Karten-Auswahlfilter verbunden. Die Auswahl desselben Reachs lieferte die erwarteten mehrfachen Datensätze zurück, und die Abflusswerte stimmten mit der entsprechenden physischen Langform-Tabelle überein, abgesehen von Rundungsdifferenzen bei der Anzeige.
Abbildung 3. Test 2: Arcade erstellt eine virtuelle 1:N-Tabelle aus einer breiten Quelltabelle und das Ergebnis wird erfolgreich nach dem ausgewählten Reach gefiltert.
Diese Tests erweitern die ursprüngliche 1:1-Validierung. In der getesteten ArcGIS Online Experience Builder-Umgebung konnte Arcade Data sowohl eine bestehende 1:N-Struktur darstellen als auch eine abgeleitete 1:N-Struktur dynamisch erstellen, ohne den Quellservice zu modifizieren.
Für größere Datensätze sollte die resultierende Anzahl virtueller Datensätze daher zusammen mit dem oben genannten Limit für Feature-Collections betrachtet werden.
9. Zusätzliche Validierung: Verhalten jenseits der dokumentierten Grenze von 50.000 Features
Die Esri-Dokumentation besagt, dass wenn ein Arcade Data-Ergebnis zur Erstellung einer Feature-Collection verwendet wird, das zur Erstellung dieser Collection verwendete FeatureSet maximal 50.000 Features enthalten darf. Da die Beispiele in diesem Beitrag ein neues FeatureSet mit FeatureSet(Text(output)) erstellen, wurde ein zusätzlicher Test durchgeführt, um zu beobachten, was passiert, wenn diese dokumentierte Schwelle in der aktuellen ArcGIS Online Experience Builder-Umgebung überschritten wird.
Eine synthetische Arcade Data-Quelle wurde mit zwei Feldern (OBJECTID und TEST_VALUE) ohne Geometrie erstellt. Der Ausdruck generierte sequentielle Datensätze im Speicher und gab sie mit FeatureSet(Text(output)) zurück. Tests bei 49.999 und 50.000 Datensätzen liefen normal ab. Der Ausdruck wurde dann bei 50.001 Datensätzen getestet.
Bei 50.001 Datensätzen bewertete der Arcade-Editor den Ausdruck weiterhin erfolgreich aus. Nachdem die Datenquelle zum Experience Builder hinzugefügt wurde, meldete das Standard Table-Widget insgesamt 50.001 Datensätze. Ein Tabellenfilter mit OBJECTID = 50001 lieferte den erwarteten Datensatz zurück, was bestätigte, dass der Datensatz jenseits der dokumentierten Grenze von 50.000 nicht nur in der angezeigten Anzahl enthalten war, sondern direkt abfragbar war.
Der Test wurde dann mit 100.000 generierten Datensätzen wiederholt. Das Table-Widget akzeptierte die Datenquelle und ein Filter mit OBJECTID = 100000 lieferte den erwarteten Datensatz sowie TEST_VALUE = 100000 zurück. In dieser getesteten Umgebung blieb das virtuelle FeatureSet somit zumindest bis zu 100.000 Datensätzen nutzbar.
Diese Beobachtung sollte nicht so interpretiert werden, dass sie die dokumentierte Grenze von Esri von 50.000 Features außer Kraft setzt oder als unterstützte Garantie für Produktionsanwendungen gilt. Sie dokumentiert lediglich das im August 2026 im ArcGIS Online Experience Builder beobachtete Verhalten. Das tatsächliche Verhalten kann von Implementierungsdetails abhängen und sich mit zukünftigen ArcGIS Online-Updates ändern oder in ArcGIS Enterprise unterscheiden. Anwendungen sollten weiterhin unter Berücksichtigung der dokumentierten Grenze entworfen werden, sofern Esri die Spezifikation nicht klärt oder aktualisiert.
Praktische Implikation für Wide-to-Long-Transformationen. Eine Transformation kann die Anzahl virtueller Datensätze multiplizieren, die aus jedem Quelldatensatz erzeugt werden. Die obigen Tests zeigen, dass das Überschreiten von 50.000 im getesteten Umfeld nicht sofort fehlschlug, aber dieses beobachtete Verhalten sollte nicht als Grund verwendet werden, unbegrenzte clientseitige Transformationen zu entwerfen. Leistung, Speicherverbrauch, Browser-Ressourcen und zukünftige Kompatibilität sollten ebenfalls berücksichtigt werden.
Abbildung 4. Experimentelle Validierung jenseits der dokumentierten Grenze von 50.000 Features. Ein virtuelles Arcade FeatureSet mit 100.000 generierten Datensätzen wird vom Experience Builder Table-Widget verwendet. Das Filtern nach OBJECTID = 100000 liefert erfolgreich den entsprechenden Datensatz zurück und bestätigt damit, dass der Datensatz in der getesteten ArcGIS Online Umgebung (August 2026) direkt abfragbar ist.
Das in Abbildung 4 gezeigte Ergebnis ist ein beobachtetes experimentelles Verhalten und sollte nicht so interpretiert werden, dass es die dokumentierte Grenze von Esri von 50.000 Features außer Kraft setzt.
10. Warum die Technik über Formatierung hinaus nützlich sein kann
- Kombinieren Sie ausgewählte Attribute aus mehreren Tabellen mithilfe eines gemeinsamen Schlüssels.
- Berechnen Sie Felder ohne Änderung des Quellservices.
- Ersetzen Sie Sentinel-Werte wie -99999 durch ND.
- Aggregieren oder fassen Sie Datensätze aus 1:N-Beziehungen zusammen.
- Erstellen Sie abgeleitete Zusammenfassungstabellen.
- Behalten Sie einen Beziehungsschlüssel bei, damit das Ergebnis auf Kartenauswahlen reagiert.
- Erkunden Sie abgeleitete FeatureSets mit Geometrie für andere Workflows.
In diesem Sinne kann Arcade Data als leichte virtuelle Transformationsebene zwischen Quellservices und Experience Builder Widgets fungieren.
Fazit
Quelldaten 16 Arcade Data 16 Virtuelles FeatureSet 16 Berechnete HTML-Felder 16 Experience Builder Table 16 Bedingte visuelle Formatierung
Die Quelltabelle bleibt unverändert. Die Unicode- und <span>-basierten Ansätze sind die konservativeren Optionen. Die Block-Hintergrund-Technik ist visuell wirkungsvoll sollte aber ausdrücklich als experimentell gekennzeichnet werden.
Danksagungen und Transparenz
Dieser Workflow wurde durch eine iterative Reihe von Experimenten unter Verwendung von ChatGPT (OpenAI) als technischem Assistenten entwickelt.
ChatGPT half dabei, mögliche Ansätze zu erkunden sowie den Arcade-Code zu generieren und zu verfeinern, während jedes hier beschriebene Verhalten direkt im ArcGIS Online Experience Builder getestet wurde.
Die experimentelle Validierung war wichtig: Einige anfängliche Annahmen – einschließlich der Annahme, dass HTML-Formatierung vom Table Widget nicht gerendert würde – erwiesen sich bei Tests im tatsächlichen Widget als falsch. Diese Beobachtungen führten zu den anschließenden Tests mit farbigen numerischen Werten und dem Hintergrundfarbblock.
Testumgebung: ArcGIS Online Experience Builder, August 2026.
Dokumentationsverweise
022 Esri, ArcGIS Experience Builder Dokumentation, 22Daten auswählen22 14 Daten mit Arcade hinzufügen; Anforderungen an FeatureSet-Rückgaben und die dokumentierte Grenze von 50.000 Features für Feature Collections. Abschnitt 9 berichtet separat über höhere experimentell beobachtete Werte in der getesteten Umgebung.
022 Esri, ArcGIS Experience Builder Dokumentation, 22Erweiterte Formatierung22 14 Dynamische Inhalte und Styling auf Basis von Arcade in unterstützten Widget-Kontexten.