You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2019/07/01 22:44:08 UTC

[incubator-superset] branch master updated: [Viz] transpose pivot table (#7325)

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

maximebeauchemin 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 459276f  [Viz] transpose pivot table (#7325)
459276f is described below

commit 459276f00d87b3368366941d781baf9ef2acf1f1
Author: Yongjie Zhao <yo...@gmail.com>
AuthorDate: Tue Jul 2 06:44:01 2019 +0800

    [Viz] transpose pivot table (#7325)
---
 .../assets/src/explore/controlPanels/PivotTable.js |  1 +
 superset/assets/src/explore/controls.jsx           |  7 +++++++
 superset/viz.py                                    | 22 ++++++++++++++++------
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/superset/assets/src/explore/controlPanels/PivotTable.js b/superset/assets/src/explore/controlPanels/PivotTable.js
index 71e754e..38b1078 100644
--- a/superset/assets/src/explore/controlPanels/PivotTable.js
+++ b/superset/assets/src/explore/controlPanels/PivotTable.js
@@ -36,6 +36,7 @@ export default {
       controlSetRows: [
         ['pandas_aggfunc', 'pivot_margins'],
         ['number_format', 'combine_metric'],
+        ['transpose_pivot'],
       ],
     },
   ],
diff --git a/superset/assets/src/explore/controls.jsx b/superset/assets/src/explore/controls.jsx
index feba265..2ae104b 100644
--- a/superset/assets/src/explore/controls.jsx
+++ b/superset/assets/src/explore/controls.jsx
@@ -471,6 +471,13 @@ export const controls = {
     description: t('Display total row/column'),
   },
 
+  transpose_pivot: {
+    type: 'CheckboxControl',
+    label: t('Transpose Pivot'),
+    default: false,
+    description: t('Swap Groups and Columns'),
+  },
+
   show_markers: {
     type: 'CheckboxControl',
     label: t('Show Markers'),
diff --git a/superset/viz.py b/superset/viz.py
index a9a1aa0..7404a7f 100644
--- a/superset/viz.py
+++ b/superset/viz.py
@@ -654,15 +654,21 @@ class PivotTableViz(BaseViz):
 
     def query_obj(self):
         d = super().query_obj()
-        groupby = self.form_data.get("groupby")
-        columns = self.form_data.get("columns")
-        metrics = self.form_data.get("metrics")
+        groupby = self.form_data.get('groupby')
+        columns = self.form_data.get('columns')
+        metrics = self.form_data.get('metrics')
+        transpose = self.form_data.get('transpose_pivot')
         if not columns:
             columns = []
         if not groupby:
             groupby = []
         if not groupby:
             raise Exception(_("Please choose at least one 'Group by' field "))
+        if transpose and not columns:
+            raise Exception(_((
+                "Please choose at least one 'Columns' field when "
+                "select 'Transpose Pivot' option"
+            )))
         if not metrics:
             raise Exception(_("Please choose at least one metric"))
         if any(v in groupby for v in columns) or any(v in columns for v in groupby):
@@ -679,10 +685,14 @@ class PivotTableViz(BaseViz):
         if aggfunc == "sum":
             aggfunc = lambda x: x.sum(min_count=1)  # noqa: E731
 
+        groupby = self.form_data.get('groupby')
+        columns = self.form_data.get('columns')
+        if self.form_data.get('transpose_pivot'):
+            groupby, columns = columns, groupby
         df = df.pivot_table(
-            index=self.form_data.get("groupby"),
-            columns=self.form_data.get("columns"),
-            values=[utils.get_metric_name(m) for m in self.form_data.get("metrics")],
+            index=groupby,
+            columns=columns,
+            values=[utils.get_metric_name(m) for m in self.form_data.get('metrics')],
             aggfunc=aggfunc,
             margins=self.form_data.get("pivot_margins"),
             dropna=False,