mirror of
https://github.com/apache/superset.git
synced 2026-04-13 21:24:28 +00:00
feat(chart): add toggle for percentage metric calculation mode in Table chart (#33656)
This commit is contained in:
@@ -148,5 +148,92 @@ describe('plugin-chart-table', () => {
|
||||
expect(queries[1].extras?.time_grain_sqla).toEqual(TimeGranularity.MONTH);
|
||||
expect(queries[1].extras?.where).toEqual("(status IN ('In Process'))");
|
||||
});
|
||||
|
||||
describe('Percent Metric Calculation Modes', () => {
|
||||
const baseFormDataWithPercents: TableChartFormData = {
|
||||
...basicFormData,
|
||||
query_mode: QueryMode.Aggregate,
|
||||
metrics: ['count'],
|
||||
percent_metrics: ['sum_sales'],
|
||||
groupby: ['category'],
|
||||
};
|
||||
|
||||
it('should default to row_limit mode with single query', () => {
|
||||
const { queries } = buildQuery(baseFormDataWithPercents);
|
||||
|
||||
expect(queries).toHaveLength(1);
|
||||
expect(queries[0].metrics).toEqual(['count', 'sum_sales']);
|
||||
expect(queries[0].post_processing).toEqual([
|
||||
{
|
||||
operation: 'contribution',
|
||||
options: {
|
||||
columns: ['sum_sales'],
|
||||
rename_columns: ['%sum_sales'],
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('should create extra query in all_records mode', () => {
|
||||
const formData = {
|
||||
...baseFormDataWithPercents,
|
||||
percent_metric_calculation: 'all_records',
|
||||
};
|
||||
|
||||
const { queries } = buildQuery(formData);
|
||||
|
||||
expect(queries).toHaveLength(2);
|
||||
|
||||
expect(queries[0].post_processing).toEqual([
|
||||
{
|
||||
operation: 'contribution',
|
||||
options: {
|
||||
columns: ['sum_sales'],
|
||||
rename_columns: ['%sum_sales'],
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
expect(queries[1]).toMatchObject({
|
||||
columns: [],
|
||||
metrics: ['sum_sales'],
|
||||
post_processing: [],
|
||||
row_limit: 0,
|
||||
row_offset: 0,
|
||||
orderby: [],
|
||||
is_timeseries: false,
|
||||
});
|
||||
});
|
||||
|
||||
it('should work with show_totals in all_records mode', () => {
|
||||
const formData = {
|
||||
...baseFormDataWithPercents,
|
||||
percent_metric_calculation: 'all_records',
|
||||
show_totals: true,
|
||||
};
|
||||
|
||||
const { queries } = buildQuery(formData);
|
||||
|
||||
expect(queries).toHaveLength(3);
|
||||
expect(queries[1].metrics).toEqual(['sum_sales']);
|
||||
expect(queries[2].metrics).toEqual(['count', 'sum_sales']);
|
||||
});
|
||||
|
||||
it('should handle empty percent_metrics in all_records mode', () => {
|
||||
const formData = {
|
||||
...basicFormData,
|
||||
query_mode: QueryMode.Aggregate,
|
||||
metrics: ['count'],
|
||||
percent_metrics: [],
|
||||
percent_metric_calculation: 'all_records',
|
||||
groupby: ['category'],
|
||||
};
|
||||
|
||||
const { queries } = buildQuery(formData);
|
||||
|
||||
expect(queries).toHaveLength(1);
|
||||
expect(queries[0].post_processing).toEqual([]);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user