in dashboard/new-dashboard/src/configurators/PredefinedGroupingMeasureConfigurator.ts [76:133]
function configureWithQueryProducers(dataList: (string | number)[][][], configuration: DataQueryExecutorConfiguration, chartStyle: ChartStyle): Promise<BarChartOptions> {
let useDurationFormatter = true
const dimensionNameSet = new Set<string>()
const source: Record<string, string | number>[] = []
// outer cycle over measures to group it together (e.g. if several machines are selected)
for (let measureIndex = 0; measureIndex < configuration.measures.length; measureIndex++) {
for (let dataIndex = 0, n = dataList.length; dataIndex < n; dataIndex++) {
if (useDurationFormatter && !isDurationFormatterApplicable(configuration.measureNames[dataIndex])) {
useDurationFormatter = false
}
const measure = configuration.measures[measureIndex]
const classifier = configuration.seriesNames[dataIndex]
let dimension = measure
if (classifier.length > 0) {
dimension += ` | ${classifier}`
}
const column: Record<string, string | number> = { dimension }
source.push(column)
const result = dataList[dataIndex]
for (let i = 0; i < result[0].length; i++) {
const valueKey = result[0][i] as string
dimensionNameSet.add(valueKey)
column[valueKey] = result[measureIndex + 1][i]
}
}
}
// https://echarts.apache.org/examples/en/editor.html?c=dataset-simple1
const dimensions: DimensionDefinition[] = []
dimensions.push({ name: "dimension", type: "ordinal" })
for (const name of dimensionNameSet) {
dimensions.push({ name, type: "number" })
}
const series = new Array<BarSeriesOption>(dimensions.length - 1)
const formatter = getSeriesLabelFormatter(useDurationFormatter, chartStyle.valueUnit)
for (let i = 0; i < series.length; i++) {
series[i] = {
type: "bar",
label: {
show: true,
formatter,
position: chartStyle.barSeriesLabelPosition,
},
}
}
return Promise.resolve({
dataset: {
dimensions,
source,
},
series,
})
}