mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 18:46:02 +00:00
chart - show relative values
This commit is contained in:
@@ -111,6 +111,7 @@ export default function ChartEditor({ data, config, setConfig, sql, conid, datab
|
|||||||
<option value="end">End (most recent data for datetime)</option>
|
<option value="end">End (most recent data for datetime)</option>
|
||||||
</FormSelectField>
|
</FormSelectField>
|
||||||
<FormTextField label="Truncate limit" name="truncateLimit" />
|
<FormTextField label="Truncate limit" name="truncateLimit" />
|
||||||
|
<FormCheckboxField label="Show relative values" name="showRelativeValues" />
|
||||||
</ManagerInnerContainer>
|
</ManagerInnerContainer>
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
<WidgetColumnBarItem title="Data" name="data">
|
<WidgetColumnBarItem title="Data" name="data">
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export async function loadChartStructure(driver: EngineDriver, conid, database,
|
|||||||
|
|
||||||
export async function loadChartData(driver: EngineDriver, conid, database, sql, config) {
|
export async function loadChartData(driver: EngineDriver, conid, database, sql, config) {
|
||||||
const dataColumns = extractDataColumns(config);
|
const dataColumns = extractDataColumns(config);
|
||||||
const { labelColumn, truncateFrom, truncateLimit } = config;
|
const { labelColumn, truncateFrom, truncateLimit, showRelativeValues } = config;
|
||||||
if (!labelColumn || !dataColumns || dataColumns.length == 0) return null;
|
if (!labelColumn || !dataColumns || dataColumns.length == 0) return null;
|
||||||
|
|
||||||
const select: Select = {
|
const select: Select = {
|
||||||
@@ -76,11 +76,30 @@ export async function loadChartData(driver: EngineDriver, conid, database, sql,
|
|||||||
const dmp = driver.createDumper();
|
const dmp = driver.createDumper();
|
||||||
dumpSqlSelect(dmp, select);
|
dumpSqlSelect(dmp, select);
|
||||||
const resp = await axios.post('database-connections/query-data', { conid, database, sql: dmp.s });
|
const resp = await axios.post('database-connections/query-data', { conid, database, sql: dmp.s });
|
||||||
if (truncateFrom == 'end' && resp.data.rows) {
|
let { rows, columns } = resp.data;
|
||||||
return {
|
if (truncateFrom == 'end' && rows) {
|
||||||
...resp.data,
|
rows = _.reverse([...rows]);
|
||||||
rows: _.reverse([...resp.data.rows]),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
return resp.data;
|
if (showRelativeValues) {
|
||||||
|
const maxValues = dataColumns.map((col) => _.max(rows.map((row) => row[col])));
|
||||||
|
for (const [col, max] of _.zip(dataColumns, maxValues)) {
|
||||||
|
if (!max) continue;
|
||||||
|
if (!_.isNumber(max)) continue;
|
||||||
|
if (!(max > 0)) continue;
|
||||||
|
rows = rows.map((row) => ({
|
||||||
|
...row,
|
||||||
|
[col]: (row[col] / max) * 100,
|
||||||
|
}));
|
||||||
|
// columns = columns.map((x) => {
|
||||||
|
// if (x.columnName == col) {
|
||||||
|
// return { columnName: `${col} %` };
|
||||||
|
// }
|
||||||
|
// return x;
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
columns,
|
||||||
|
rows,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user