Build RadarAxes for your dimensions, Series for the subjects being compared, and Values for each subject/dimension pair. Values.CategoryKey references RadarAxes.Key. Use UseMaximum = True with a positive Maximum when an axis has a known bound; scores must be nonnegative and must not exceed that bound. SplitNumber accepts 2–8 grid divisions.
Create your own GetChartData Data Action or Server Action, authorize its query and return the typed Lists above. If an Aggregate returns entity records, map them explicitly into these public Structures using a For Each, Assign and ListAppend. Only bind a query result directly when its type already matches. The chart does not query your database.
RadarAxes · BluChartRadarAxis List · sample records and mapping
Create a screen local RadarAxes of type BluChartRadarAxis List. In your mapping action, use a temporary RowRadarAxes of type BluChartRadarAxis. Fill every field used by this chart before appending each row.
ListClear(List: RadarAxes)
For Each source record in your ordered query result:
Assign RowRadarAxes fields from that record
ListAppend(List: RadarAxes, Element: RowRadarAxes)
Example Assign values for the first sample row:
RowRadarAxes.Key = "capability-0"
RowRadarAxes.Label = "Delivery"
RowRadarAxes.UseMaximum = True
RowRadarAxes.Maximum = 100
RowRadarAxes.Color.Mode = Entities.ChartColorMode.Automatic
RowRadarAxes.Color.ThemeColor = Entities.ComponentColor.Primary
RowRadarAxes.Color.Hex = ""
The loop describes your action flow, not code to paste into a JavaScript node. Replace the sample literals with your query fields. Reset optional fields on every iteration so values do not carry over from the previous row.
For a quick fixture, use JSON Deserialize with Data Type BluChartRadarAxis List, then assign its Data output to RadarAxes. In the JSONString expression editor, wrap the copied JSON in a Text literal and double embedded quotes, or read it from a Text variable. The resulting Block input remains a typed List.
[
{
"Key": "capability-0",
"Label": "Delivery",
"UseMaximum": true,
"Maximum": 100,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "capability-1",
"Label": "Quality",
"UseMaximum": true,
"Maximum": 100,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "capability-2",
"Label": "Reliability",
"UseMaximum": true,
"Maximum": 100,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "capability-3",
"Label": "Security",
"UseMaximum": true,
"Maximum": 100,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "capability-4",
"Label": "Collaboration",
"UseMaximum": true,
"Maximum": 100,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "capability-5",
"Label": "Documentation",
"UseMaximum": true,
"Maximum": 100,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
}
]
Series · BluChartSeries List · sample records and mapping
Create a screen local Series of type BluChartSeries List. In your mapping action, use a temporary RowSeries of type BluChartSeries. Fill every field used by this chart before appending each row.
ListClear(List: Series)
For Each source record in your ordered query result:
Assign RowSeries fields from that record
ListAppend(List: Series, Element: RowSeries)
Example Assign values for the first sample row:
RowSeries.Key = "current"
RowSeries.Label = "Current team"
RowSeries.Color.Mode = Entities.ChartColorMode.Automatic
RowSeries.Color.ThemeColor = Entities.ComponentColor.Primary
RowSeries.Color.Hex = ""
The loop describes your action flow, not code to paste into a JavaScript node. Replace the sample literals with your query fields. Reset optional fields on every iteration so values do not carry over from the previous row.
For a quick fixture, use JSON Deserialize with Data Type BluChartSeries List, then assign its Data output to Series. In the JSONString expression editor, wrap the copied JSON in a Text literal and double embedded quotes, or read it from a Text variable. The resulting Block input remains a typed List.
[
{
"Key": "current",
"Label": "Current team",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "target",
"Label": "Target",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
}
]
Values · BluChartSeriesValue List · sample records and mapping
Create a screen local Values of type BluChartSeriesValue List. In your mapping action, use a temporary RowValues of type BluChartSeriesValue. Fill every field used by this chart before appending each row.
ListClear(List: Values)
For Each source record in your ordered query result:
Assign RowValues fields from that record
ListAppend(List: Values, Element: RowValues)
Example Assign values for the first sample row:
RowValues.SeriesKey = "current"
RowValues.CategoryKey = "capability-0"
RowValues.Value = 82
RowValues.IsMissing = False
The loop describes your action flow, not code to paste into a JavaScript node. Replace the sample literals with your query fields. Reset optional fields on every iteration so values do not carry over from the previous row.
For a quick fixture, use JSON Deserialize with Data Type BluChartSeriesValue List, then assign its Data output to Values. In the JSONString expression editor, wrap the copied JSON in a Text literal and double embedded quotes, or read it from a Text variable. The resulting Block input remains a typed List.
[
{
"SeriesKey": "current",
"CategoryKey": "capability-0",
"Value": 82,
"IsMissing": false
},
{
"SeriesKey": "current",
"CategoryKey": "capability-1",
"Value": 76,
"IsMissing": false
},
{
"SeriesKey": "current",
"CategoryKey": "capability-2",
"Value": 91,
"IsMissing": false
},
{
"SeriesKey": "current",
"CategoryKey": "capability-3",
"Value": 68,
"IsMissing": false
},
{
"SeriesKey": "current",
"CategoryKey": "capability-4",
"Value": 87,
"IsMissing": false
},
{
"SeriesKey": "current",
"CategoryKey": "capability-5",
"Value": 62,
"IsMissing": false
},
{
"SeriesKey": "target",
"CategoryKey": "capability-0",
"Value": 90,
"IsMissing": false
},
{
"SeriesKey": "target",
"CategoryKey": "capability-1",
"Value": 90,
"IsMissing": false
},
{
"SeriesKey": "target",
"CategoryKey": "capability-2",
"Value": 95,
"IsMissing": false
},
{
"SeriesKey": "target",
"CategoryKey": "capability-3",
"Value": 90,
"IsMissing": false
},
{
"SeriesKey": "target",
"CategoryKey": "capability-4",
"Value": 90,
"IsMissing": false
},
{
"SeriesKey": "target",
"CategoryKey": "capability-5",
"Value": 85,
"IsMissing": false
}
]