This is an automated email from the ASF dual-hosted git repository.

yjc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new a6751bf  fix(table-viz): format non-numeric metrics (#10234)
a6751bf is described below

commit a6751bf49a39a42042564c04e2abe7f38f6aec95
Author: Jesse Yang <jesse.y...@airbnb.com>
AuthorDate: Thu Jul 2 14:44:15 2020 -0700

    fix(table-viz): format non-numeric metrics (#10234)
---
 .../explore/visualizations/shared.helper.js        | 46 +++++++++++++++++++++
 .../explore/visualizations/table.test.ts           | 47 ++++++++++++++++++----
 superset-frontend/package-lock.json                |  6 +--
 superset-frontend/package.json                     |  2 +-
 4 files changed, 90 insertions(+), 11 deletions(-)

diff --git 
a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/shared.helper.js
 
b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/shared.helper.js
index 77c3ee5..4d4eafd 100644
--- 
a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/shared.helper.js
+++ 
b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/shared.helper.js
@@ -63,6 +63,52 @@ export const NUM_METRIC = {
   optionName: 'metric_1de0s4viy5d_ly7y8k6ghvk',
 };
 
+export const MAX_DS = {
+  aggregate: 'MAX',
+  column: {
+    column_name: 'ds',
+    description: null,
+    expression: null,
+    filterable: true,
+    groupby: true,
+    id: 333,
+    is_dttm: true,
+    optionName: '_col_ds',
+    python_date_format: null,
+    type: 'TIMESTAMP WITHOUT TIME ZONE',
+    verbose_name: null,
+  },
+  expressionType: 'SIMPLE',
+  hasCustomLabel: false,
+  isNew: false,
+  label: 'MAX(ds)',
+  optionName: 'metric_pbib7j9m15a_js80vs9vca',
+  sqlExpression: null,
+};
+
+export const MAX_STATE = {
+  expressionType: 'SIMPLE',
+  column: {
+    id: 337,
+    column_name: 'state',
+    verbose_name: null,
+    description: null,
+    expression: null,
+    filterable: true,
+    groupby: true,
+    is_dttm: false,
+    type: 'VARCHAR(10)',
+    python_date_format: null,
+    optionName: '_col_state',
+  },
+  aggregate: 'MAX',
+  sqlExpression: null,
+  isNew: false,
+  hasCustomLabel: false,
+  label: 'MAX(state)',
+  optionName: 'metric_kvval50pvbo_hewj3pzacb',
+};
+
 export const SIMPLE_FILTER = {
   expressionType: 'SIMPLE',
   subject: 'name',
diff --git 
a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts
 
b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts
index b7db68e..061fe2d 100644
--- 
a/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts
+++ 
b/superset-frontend/cypress-base/cypress/integration/explore/visualizations/table.test.ts
@@ -16,7 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { FORM_DATA_DEFAULTS, NUM_METRIC, SIMPLE_FILTER } from 
'./shared.helper';
+import {
+  FORM_DATA_DEFAULTS,
+  NUM_METRIC,
+  MAX_DS,
+  MAX_STATE,
+  SIMPLE_FILTER,
+} from './shared.helper';
 import readResponseBlob from '../../../utils/readResponseBlob';
 
 // Table
@@ -29,13 +35,40 @@ describe('Visualization > Table', () => {
     cy.route('POST', '/superset/explore_json/**').as('getJson');
   });
 
-  it('Test table with adhoc metric', () => {
-    cy.visitChartByParams({ ...VIZ_DEFAULTS, metrics: NUM_METRIC });
-    cy.verifySliceSuccess({
-      waitAlias: '@getJson',
-      querySubstring: NUM_METRIC.label,
-      chartSelector: 'table',
+  it('Format non-numeric metrics correctly', () => {
+    cy.visitChartByParams({
+      ...VIZ_DEFAULTS,
+      include_time: true,
+      granularity_sqla: 'ds',
+      time_grain_sqla: 'P0.25Y',
+      metrics: [NUM_METRIC, MAX_DS, MAX_STATE],
+    });
+    // when format with smart_date, time column use format by granularity
+    cy.get('.chart-container td:nth-child(1)').contains('2008 Q1');
+    // other column with timestamp use raw timestamp
+    cy.get('.chart-container td:nth-child(3)').contains('2008-01-01T00:00:00');
+    cy.get('.chart-container td').contains('other');
+  });
+
+  it('Format with table_timestamp_format', () => {
+    cy.visitChartByParams({
+      ...VIZ_DEFAULTS,
+      include_time: true,
+      granularity_sqla: 'ds',
+      time_grain_sqla: 'P0.25Y',
+      table_timestamp_format: '%Y-%m-%d %H:%M',
+      metrics: [NUM_METRIC, MAX_DS, MAX_STATE],
     });
+    // time column and MAX(ds) metric column both use UTC time
+    cy.get('.chart-container td:nth-child(1)').contains('2008-01-01 00:00');
+    cy.get('.chart-container td:nth-child(3)').contains('2008-01-01 00:00');
+    cy.get('.chart-container td')
+      .contains('2008-01-01 08:00')
+      .should('not.exist');
+    // time column should not use time granularity when timestamp format is set
+    cy.get('.chart-container td').contains('2008 Q1').should('not.exist');
+    // other num numeric metric column should stay as string
+    cy.get('.chart-container td').contains('other');
   });
 
   it('Test table with groupby', () => {
diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index 28e9270..b28d042 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -6159,9 +6159,9 @@
       }
     },
     "@superset-ui/plugin-chart-table": {
-      "version": "0.14.6",
-      "resolved": 
"https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.14.6.tgz";,
-      "integrity": 
"sha512-UkFI+H6EYeRVEijT4XDyxoNVD0IGk2s2pYK2TkV45Fjp/ZX8eAumJGYaC66I1pGwWnkubmsGeNQuA2z9DcMruw==",
+      "version": "0.14.8",
+      "resolved": 
"https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.14.8.tgz";,
+      "integrity": 
"sha512-xfu1y/6Vo4DXtvaaXBjUOPGrEEKkbtgVKHXDEWrk3MATmODMlut11vrNs/UcllTkzHGOhTCdg3eHEPfAM2+crw==",
       "requires": {
         "@emotion/core": "^10.0.28",
         "@types/d3-array": "^2.0.0",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index e51e42b..4684e5c 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -85,7 +85,7 @@
     "@superset-ui/legacy-plugin-chart-sankey": "^0.14.1",
     "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.14.1",
     "@superset-ui/legacy-plugin-chart-sunburst": "^0.14.1",
-    "@superset-ui/plugin-chart-table": "^0.14.6",
+    "@superset-ui/plugin-chart-table": "^0.14.8",
     "@superset-ui/legacy-plugin-chart-treemap": "^0.14.1",
     "@superset-ui/legacy-plugin-chart-world-map": "^0.14.1",
     "@superset-ui/legacy-preset-chart-big-number": "^0.14.1",

Reply via email to