You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ar...@apache.org on 2024/03/27 21:02:49 UTC
(superset) 01/01: - demo
This is an automated email from the ASF dual-hosted git repository.
arivero pushed a commit to branch bn_time_comparison_current_api
in repository https://gitbox.apache.org/repos/asf/superset.git
commit a3a2d93a44cd6a86632cf0c1aee61819bc793833
Author: Antonio Rivero <an...@gmail.com>
AuthorDate: Wed Mar 27 22:02:23 2024 +0100
- demo
---
.../BigNumberPeriodOverPeriod/buildQuery.ts | 58 ++++++++----------
.../BigNumberPeriodOverPeriod/controlPanel.ts | 69 +---------------------
.../BigNumberPeriodOverPeriod/transformProps.ts | 30 ++++++----
3 files changed, 46 insertions(+), 111 deletions(-)
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
index abf9110403..96ef017319 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
@@ -18,50 +18,42 @@
*/
import {
buildQueryContext,
- getComparisonInfo,
- ComparisonTimeRangeType,
QueryFormData,
+ PostProcessingRule,
} from '@superset-ui/core';
+import {
+ isTimeComparison,
+ timeCompareOperator,
+} from '@superset-ui/chart-controls';
export default function buildQuery(formData: QueryFormData) {
- const {
- cols: groupby,
- time_comparison: timeComparison,
- extra_form_data: extraFormData,
- } = formData;
-
- const queryContextA = buildQueryContext(formData, baseQueryObject => [
- {
- ...baseQueryObject,
- groupby,
- },
- ]);
-
- const comparisonFormData = getComparisonInfo(
- formData,
- timeComparison,
- extraFormData,
- );
+ const { cols: groupby } = formData;
- const queryContextB = buildQueryContext(
- comparisonFormData,
- baseQueryObject => [
+ const queryContextA = buildQueryContext(formData, baseQueryObject => {
+ let postProcessing: PostProcessingRule[] = [];
+ postProcessing.push(timeCompareOperator(formData, baseQueryObject));
+ return [
{
...baseQueryObject,
+ columns: [
+ {
+ timeGrain: 'P1Y', // Group by the greatest grain to have less data points
+ columnType: 'BASE_AXIS',
+ sqlExpression: baseQueryObject.filters?.[0]?.col.toString() || '',
+ label: baseQueryObject.filters?.[0]?.col.toString() || '',
+ expressionType: 'SQL',
+ },
+ ],
groupby,
- extras: {
- ...baseQueryObject.extras,
- instant_time_comparison_range:
- timeComparison !== ComparisonTimeRangeType.Custom
- ? timeComparison
- : undefined,
- },
+ post_processing: postProcessing,
+ time_offsets: isTimeComparison(formData, baseQueryObject)
+ ? formData.time_compare
+ : [],
},
- ],
- );
+ ];
+ });
return {
...queryContextA,
- queries: [...queryContextA.queries, ...queryContextB.queries],
};
}
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
index f6f81d98d7..06984985b2 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
@@ -30,6 +30,7 @@ import {
ControlState,
getStandardizedControls,
sharedControls,
+ sections,
} from '@superset-ui/chart-controls';
import { headerFontSize, subheaderFontSize } from '../sharedControls';
import { ColorSchemeEnum } from './types';
@@ -42,70 +43,6 @@ const config: ControlPanelConfig = {
controlSetRows: [
['metric'],
['adhoc_filters'],
- [
- {
- name: 'time_comparison',
- config: {
- type: 'SelectControl',
- label: t('Range for Comparison'),
- default: 'r',
- choices: [
- ['r', 'Inherit range from time filters'],
- ['y', 'Year'],
- ['m', 'Month'],
- ['w', 'Week'],
- ['c', 'Custom'],
- ],
- rerender: ['adhoc_custom'],
- description: t(
- 'Set the time range that will be used for the comparison metrics. ' +
- 'For example, "Year" will compare to the same dates one year earlier. ' +
- 'Use "Inherit range from time filters" to shift the comparison time range' +
- 'by the same length as your time range and use "Custom" to set a custom comparison range.',
- ),
- },
- },
- ],
- [
- {
- name: `adhoc_custom`,
- config: {
- ...sharedControls.adhoc_filters,
- label: t('Filters for Comparison'),
- description:
- 'This only applies when selecting the Range for Comparison Type: Custom',
- visibility: ({ controls }) =>
- controls?.time_comparison?.value ===
- ComparisonTimeRangeType.Custom,
- mapStateToProps: (
- state: ControlPanelState,
- controlState: ControlState,
- ) => {
- const originalMapStateToPropsRes =
- sharedControls.adhoc_filters.mapStateToProps?.(
- state,
- controlState,
- ) || {};
- const columns = originalMapStateToPropsRes.columns.filter(
- (col: ColumnMeta) =>
- col.is_dttm &&
- (state.controls.adhoc_filters.value as AdhocFilter[]).some(
- (val: SimpleAdhocFilter) =>
- val.subject === col.column_name,
- ),
- );
- return {
- ...originalMapStateToPropsRes,
- columns,
- externalValidationErrors: validateTimeComparisonRangeValues(
- state.controls?.time_comparison?.value,
- controlState.value,
- ),
- };
- },
- },
- },
- ],
[
{
name: 'row_limit',
@@ -180,14 +117,12 @@ const config: ControlPanelConfig = {
],
],
},
+ sections.advancedAnalyticsControls,
],
controlOverrides: {
y_axis_format: {
label: t('Number format'),
},
- adhoc_filters: {
- rerender: ['adhoc_custom'],
- },
},
formDataOverrides: formData => ({
...formData,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/transformProps.ts
index a17fb8edd0..ad825ae6cc 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/transformProps.ts
@@ -87,17 +87,28 @@ export default function transformProps(chartProps: ChartProps) {
percentDifferenceFormat,
} = formData;
const { data: dataA = [] } = queriesData[0];
- const {
- data: dataB = [],
- from_dttm: comparisonFromDatetime,
- to_dttm: comparisonToDatetime,
- } = queriesData[1];
const data = dataA;
const metricName = getMetricLabel(metric);
+ const timeComparison = chartProps.rawFormData?.time_compare?.[0];
+
+ const { value1, value2 } = data.reduce(
+ (acc: { value1: any; value2: any }, curr: { [x: string]: any }) => {
+ for (const key in curr) {
+ if (key.includes(`${metricName}__${timeComparison}`)) {
+ acc.value2 += curr[key];
+ } else if (key.includes(metricName)) {
+ acc.value1 += curr[key];
+ }
+ }
+ return acc;
+ },
+ { value1: 0, value2: 0 },
+ );
+
let bigNumber: number | string =
- data.length === 0 ? 0 : parseMetricValue(data[0][metricName]);
+ data.length === 0 ? 0 : parseMetricValue(value1);
let prevNumber: number | string =
- data.length === 0 ? 0 : parseMetricValue(dataB[0][metricName]);
+ data.length === 0 ? 0 : parseMetricValue(value2);
const numberFormatter = getValueFormatter(
metric,
@@ -133,10 +144,7 @@ export default function transformProps(chartProps: ChartProps) {
prevNumber = numberFormatter(prevNumber);
valueDifference = numberFormatter(valueDifference);
const percentDifference: string = formatPercentChange(percentDifferenceNum);
- const comparatorText = formatTimeRange('%Y-%m-%d', [
- comparisonFromDatetime,
- comparisonToDatetime,
- ]);
+ const comparatorText = 'test';
return {
width,