You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2024/01/26 21:30:19 UTC

(superset) branch tech-debt-dashboard created (now 29a66007e6)

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

rusackas pushed a change to branch tech-debt-dashboard
in repository https://gitbox.apache.org/repos/asf/superset.git


      at 29a66007e6 the main ingredients

This branch includes the following new commits:

     new 29a66007e6 the main ingredients

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(superset) 01/01: the main ingredients

Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch tech-debt-dashboard
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 29a66007e613b31a8235b48b10dc6bf53f84e34e
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Fri Jan 26 14:30:11 2024 -0700

    the main ingredients
---
 .../examples/configs/charts/10_Worst_Files_76.yaml |  43 ++
 .../configs/charts/Backlog_-_ESLint_75.yaml        |  53 +++
 .../configs/charts/Debt_Timeline_by_Rule_74.yaml   |  83 ++++
 .../charts/Low_Hanging_Fruit_by_File_80.yaml       |  69 ++++
 .../charts/Low_Hanging_Fruit_by_Rule_79.yaml       |  69 ++++
 .../charts/Ten_Worst_Violations_ESLint_77.yaml     |  43 ++
 .../configs/charts/Total_Rule_Violations_78.yaml   |  62 +++
 .../dashboards/Superset_Technical_Debt_9.yaml      | 448 +++++++++++++++++++++
 .../examples/Superset_Tech_Debt_-_Aggregated.yaml  |  90 +++++
 .../examples/Superset_Tech_Debt_-_ESLint.yaml      | 114 ++++++
 10 files changed, 1074 insertions(+)

diff --git a/superset/examples/configs/charts/10_Worst_Files_76.yaml b/superset/examples/configs/charts/10_Worst_Files_76.yaml
new file mode 100644
index 0000000000..c8741f9b54
--- /dev/null
+++ b/superset/examples/configs/charts/10_Worst_Files_76.yaml
@@ -0,0 +1,43 @@
+slice_name: 10 Worst Files
+description: null
+certified_by: null
+certification_details: null
+viz_type: pie
+params:
+  datasource: 22__table
+  viz_type: pie
+  slice_id: 76
+  groupby:
+  - File
+  metric: count
+  adhoc_filters:
+  - clause: WHERE
+    comparator: No filter
+    expressionType: SIMPLE
+    operator: TEMPORAL_RANGE
+    subject: Timestamp
+  row_limit: 10
+  sort_by_metric: true
+  color_scheme: supersetColors
+  show_labels_threshold: 5
+  show_legend: true
+  legendType: scroll
+  legendOrientation: top
+  label_type: key
+  number_format: SMART_NUMBER
+  date_format: smart_date
+  show_labels: true
+  labels_outside: true
+  outerRadius: 70
+  donut: true
+  innerRadius: 30
+  extra_form_data: {}
+  dashboards:
+  - 9
+query_context: '{"datasource":{"id":22,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"having":"","where":""},"applied_time_extras":{},"columns":["File"],"metrics":["count"],"orderby":[["count",false]],"annotation_layers":[],"row_limit":10,"series_limit":0,"order_desc":true,"url_params":{},"custom_params":{},"custom_form_data":{}}],"form_data":{"datasource":"22__table","viz_type":"pie","slice_id":76,"groupby":["File"],"metric":"count","adhoc_filters":[{"clause":"WHERE","comparator":"No
+  filter","expressionType":"SIMPLE","operator":"TEMPORAL_RANGE","subject":"Timestamp"}],"row_limit":10,"sort_by_metric":true,"color_scheme":"supersetColors","show_labels_threshold":5,"show_legend":true,"legendType":"scroll","legendOrientation":"top","label_type":"key","number_format":"SMART_NUMBER","date_format":"smart_date","show_labels":true,"labels_outside":true,"outerRadius":70,"donut":true,"innerRadius":30,"extra_form_data":{},"dashboards":[9],"force":false,"result_format":"json","r [...]
+cache_timeout: null
+uuid: e34a4358-0681-43b1-839e-82f1399b97ce
+version: 1.0.0
+dataset_uuid: 12fa12ec-9d44-4eb8-8222-9f495849ad82
diff --git a/superset/examples/configs/charts/Backlog_-_ESLint_75.yaml b/superset/examples/configs/charts/Backlog_-_ESLint_75.yaml
new file mode 100644
index 0000000000..6b5fc2524f
--- /dev/null
+++ b/superset/examples/configs/charts/Backlog_-_ESLint_75.yaml
@@ -0,0 +1,53 @@
+slice_name: Backlog - ESLint
+description: null
+certified_by: null
+certification_details: null
+viz_type: table
+params:
+  datasource: 22__table
+  viz_type: table
+  slice_id: 75
+  query_mode: raw
+  groupby: []
+  time_grain_sqla: P1D
+  temporal_columns_lookup:
+    Timestamp: true
+  all_columns:
+  - Rule
+  - Rule Description
+  - File
+  - Line
+  - Column
+  - ESLint Message
+  percent_metrics: []
+  adhoc_filters:
+  - clause: WHERE
+    comparator: No filter
+    expressionType: SIMPLE
+    operator: TEMPORAL_RANGE
+    subject: Timestamp
+  order_by_cols: []
+  row_limit: 1000
+  server_page_length: 10
+  order_desc: true
+  table_timestamp_format: smart_date
+  show_cell_bars: false
+  color_pn: true
+  allow_rearrange_columns: false
+  column_config:
+    File:
+      truncateLongCells: true
+      columnWidth: 160
+  conditional_formatting: []
+  extra_form_data: {}
+  dashboards:
+  - 9
+query_context: '{"datasource":{"id":22,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"time_grain_sqla":"P1D","having":"","where":""},"applied_time_extras":{},"columns":["Rule","Rule
+  Description","File","Line","Column","ESLint Message"],"orderby":[],"annotation_layers":[],"row_limit":1000,"series_limit":0,"order_desc":true,"url_params":{},"custom_params":{},"custom_form_data":{},"post_processing":[]}],"form_data":{"datasource":"22__table","viz_type":"table","slice_id":75,"query_mode":"raw","groupby":[],"time_grain_sqla":"P1D","temporal_columns_lookup":{"Timestamp":true},"all_columns":["Rule","Rule
+  Description","File","Line","Column","ESLint Message"],"percent_metrics":[],"adhoc_filters":[{"clause":"WHERE","comparator":"No
+  filter","expressionType":"SIMPLE","operator":"TEMPORAL_RANGE","subject":"Timestamp"}],"order_by_cols":[],"row_limit":1000,"server_page_length":10,"order_desc":true,"table_timestamp_format":"smart_date","show_cell_bars":false,"color_pn":true,"allow_rearrange_columns":false,"column_config":{"File":{"truncateLongCells":true,"columnWidth":160}},"conditional_formatting":[],"extra_form_data":{},"dashboards":[9],"force":false,"result_format":"json","result_type":"full","include_time":false}," [...]
+cache_timeout: null
+uuid: 68cf3d84-afe6-496e-8960-401fe27d0c58
+version: 1.0.0
+dataset_uuid: 12fa12ec-9d44-4eb8-8222-9f495849ad82
diff --git a/superset/examples/configs/charts/Debt_Timeline_by_Rule_74.yaml b/superset/examples/configs/charts/Debt_Timeline_by_Rule_74.yaml
new file mode 100644
index 0000000000..0956e6dca2
--- /dev/null
+++ b/superset/examples/configs/charts/Debt_Timeline_by_Rule_74.yaml
@@ -0,0 +1,83 @@
+slice_name: Debt Timeline (by Rule)
+description: null
+certified_by: null
+certification_details: null
+viz_type: echarts_timeseries_line
+params:
+  datasource: 21__table
+  viz_type: echarts_timeseries_line
+  x_axis: Timestamp
+  x_axis_sort_asc: true
+  x_axis_sort_series: name
+  x_axis_sort_series_ascending: true
+  metrics:
+  - expressionType: SIMPLE
+    column:
+      advanced_data_type: null
+      certification_details: null
+      certified_by: null
+      column_name: Count
+      description: null
+      expression: null
+      filterable: true
+      groupby: true
+      id: 736
+      is_certified: false
+      is_dttm: false
+      python_date_format: null
+      type: INT
+      type_generic: 0
+      verbose_name: null
+      warning_markdown: null
+    aggregate: SUM
+    sqlExpression: null
+    datasourceWarning: false
+    hasCustomLabel: false
+    label: SUM(Count)
+    optionName: metric_vcw1vg4u1l_fusr72nuyki
+  groupby:
+  - Process
+  - Rule
+  adhoc_filters:
+  - clause: WHERE
+    subject: Timestamp
+    operator: TEMPORAL_RANGE
+    comparator: No filter
+    expressionType: SIMPLE
+  order_desc: true
+  row_limit: 1000
+  truncate_metric: true
+  show_empty_columns: true
+  comparison_type: values
+  annotation_layers: []
+  forecastPeriods: 10
+  forecastInterval: 0.8
+  x_axis_title_margin: 15
+  y_axis_title_margin: 15
+  y_axis_title_position: Left
+  sort_series_type: sum
+  color_scheme: supersetColors
+  seriesType: line
+  only_total: true
+  opacity: 0.2
+  markerSize: 6
+  show_legend: true
+  legendType: scroll
+  legendOrientation: top
+  x_axis_time_format: smart_date
+  rich_tooltip: true
+  tooltipTimeFormat: smart_date
+  y_axis_format: SMART_NUMBER
+  truncateXAxis: true
+  y_axis_bounds:
+  - null
+  - null
+  extra_form_data: {}
+  dashboards: []
+query_context: '{"datasource":{"id":21,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"having":"","where":""},"applied_time_extras":{},"columns":[{"columnType":"BASE_AXIS","sqlExpression":"Timestamp","label":"Timestamp","expressionType":"SQL"},"Process","Rule"],"metrics":[{"expressionType":"SIMPLE","column":{"advanced_data_type":null,"certification_details":null,"certified_by":null,"column_name":"Count","description":null,"expression":null,"filterable":true,"groupby":true,"id":736,"is_certified":false,"is_dttm":false,"python_date_format":null,"type": [...]
+  filter","expressionType":"SIMPLE"}],"order_desc":true,"row_limit":1000,"truncate_metric":true,"show_empty_columns":true,"comparison_type":"values","annotation_layers":[],"forecastPeriods":10,"forecastInterval":0.8,"x_axis_title_margin":15,"y_axis_title_margin":15,"y_axis_title_position":"Left","sort_series_type":"sum","color_scheme":"supersetColors","seriesType":"line","only_total":true,"opacity":0.2,"markerSize":6,"show_legend":true,"legendType":"scroll","legendOrientation":"top","x_a [...]
+cache_timeout: null
+uuid: 93f3714b-8401-415e-9d4c-2c8806dfc02f
+version: 1.0.0
+dataset_uuid: a3b0a980-a1b4-4463-89fd-91e6d3347313
diff --git a/superset/examples/configs/charts/Low_Hanging_Fruit_by_File_80.yaml b/superset/examples/configs/charts/Low_Hanging_Fruit_by_File_80.yaml
new file mode 100644
index 0000000000..5dd4786db8
--- /dev/null
+++ b/superset/examples/configs/charts/Low_Hanging_Fruit_by_File_80.yaml
@@ -0,0 +1,69 @@
+slice_name: Low Hanging Fruit by File
+description: null
+certified_by: null
+certification_details: null
+viz_type: table
+params:
+  datasource: 22__table
+  viz_type: table
+  slice_id: 79
+  query_mode: aggregate
+  groupby:
+  - File
+  temporal_columns_lookup:
+    Timestamp: true
+  metrics:
+  - aggregate: COUNT
+    column:
+      advanced_data_type: null
+      certification_details: null
+      certified_by: null
+      column_name: ESLint Message
+      description: null
+      expression: null
+      filterable: true
+      groupby: true
+      id: 745
+      is_certified: false
+      is_dttm: false
+      python_date_format: null
+      type: STRING
+      type_generic: 1
+      verbose_name: null
+      warning_markdown: null
+    datasourceWarning: false
+    expressionType: SIMPLE
+    hasCustomLabel: false
+    label: COUNT(ESLint Message)
+    optionName: metric_n27rlniqi4h_23ktjxr2plb
+    sqlExpression: null
+  all_columns: []
+  percent_metrics: []
+  adhoc_filters:
+  - clause: WHERE
+    comparator: No filter
+    expressionType: SIMPLE
+    operator: TEMPORAL_RANGE
+    subject: Timestamp
+  timeseries_limit_metric: count
+  order_by_cols: []
+  row_limit: 50
+  server_page_length: 10
+  order_desc: false
+  table_timestamp_format: smart_date
+  show_cell_bars: true
+  color_pn: true
+  extra_form_data: {}
+  dashboards:
+  - 9
+query_context: '{"datasource":{"id":22,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"having":"","where":""},"applied_time_extras":{},"columns":["File"],"metrics":[{"aggregate":"COUNT","column":{"advanced_data_type":null,"certification_details":null,"certified_by":null,"column_name":"ESLint
+  Message","description":null,"expression":null,"filterable":true,"groupby":true,"id":745,"is_certified":false,"is_dttm":false,"python_date_format":null,"type":"STRING","type_generic":1,"verbose_name":null,"warning_markdown":null},"datasourceWarning":false,"expressionType":"SIMPLE","hasCustomLabel":false,"label":"COUNT(ESLint
+  Message)","optionName":"metric_n27rlniqi4h_23ktjxr2plb","sqlExpression":null}],"orderby":[["count",true]],"annotation_layers":[],"row_limit":50,"series_limit":0,"series_limit_metric":"count","order_desc":false,"url_params":{},"custom_params":{},"custom_form_data":{},"post_processing":[]}],"form_data":{"datasource":"22__table","viz_type":"table","slice_id":79,"query_mode":"aggregate","groupby":["File"],"temporal_columns_lookup":{"Timestamp":true},"metrics":[{"aggregate":"COUNT","column" [...]
+  Message","description":null,"expression":null,"filterable":true,"groupby":true,"id":745,"is_certified":false,"is_dttm":false,"python_date_format":null,"type":"STRING","type_generic":1,"verbose_name":null,"warning_markdown":null},"datasourceWarning":false,"expressionType":"SIMPLE","hasCustomLabel":false,"label":"COUNT(ESLint
+  Message)","optionName":"metric_n27rlniqi4h_23ktjxr2plb","sqlExpression":null}],"all_columns":[],"percent_metrics":[],"adhoc_filters":[{"clause":"WHERE","comparator":"No
+  filter","expressionType":"SIMPLE","operator":"TEMPORAL_RANGE","subject":"Timestamp"}],"timeseries_limit_metric":"count","order_by_cols":[],"row_limit":50,"server_page_length":10,"order_desc":false,"table_timestamp_format":"smart_date","show_cell_bars":true,"color_pn":true,"extra_form_data":{},"dashboards":[9],"force":false,"result_format":"json","result_type":"full"},"result_format":"json","result_type":"full"}'
+cache_timeout: null
+uuid: 63a1ac01-9daf-4064-a455-ef9f5b64933f
+version: 1.0.0
+dataset_uuid: 12fa12ec-9d44-4eb8-8222-9f495849ad82
diff --git a/superset/examples/configs/charts/Low_Hanging_Fruit_by_Rule_79.yaml b/superset/examples/configs/charts/Low_Hanging_Fruit_by_Rule_79.yaml
new file mode 100644
index 0000000000..36e7e4c913
--- /dev/null
+++ b/superset/examples/configs/charts/Low_Hanging_Fruit_by_Rule_79.yaml
@@ -0,0 +1,69 @@
+slice_name: Low Hanging Fruit by Rule
+description: null
+certified_by: null
+certification_details: null
+viz_type: table
+params:
+  datasource: 22__table
+  viz_type: table
+  slice_id: 79
+  query_mode: aggregate
+  groupby:
+  - Rule
+  temporal_columns_lookup:
+    Timestamp: true
+  metrics:
+  - aggregate: COUNT
+    column:
+      advanced_data_type: null
+      certification_details: null
+      certified_by: null
+      column_name: ESLint Message
+      description: null
+      expression: null
+      filterable: true
+      groupby: true
+      id: 745
+      is_certified: false
+      is_dttm: false
+      python_date_format: null
+      type: STRING
+      type_generic: 1
+      verbose_name: null
+      warning_markdown: null
+    datasourceWarning: false
+    expressionType: SIMPLE
+    hasCustomLabel: false
+    label: COUNT(ESLint Message)
+    optionName: metric_n27rlniqi4h_23ktjxr2plb
+    sqlExpression: null
+  all_columns: []
+  percent_metrics: []
+  adhoc_filters:
+  - clause: WHERE
+    comparator: No filter
+    expressionType: SIMPLE
+    operator: TEMPORAL_RANGE
+    subject: Timestamp
+  timeseries_limit_metric: count
+  order_by_cols: []
+  row_limit: 50
+  server_page_length: 10
+  order_desc: false
+  table_timestamp_format: smart_date
+  show_cell_bars: true
+  color_pn: true
+  extra_form_data: {}
+  dashboards:
+  - 9
+query_context: '{"datasource":{"id":22,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"having":"","where":""},"applied_time_extras":{},"columns":["Rule"],"metrics":[{"aggregate":"COUNT","column":{"advanced_data_type":null,"certification_details":null,"certified_by":null,"column_name":"ESLint
+  Message","description":null,"expression":null,"filterable":true,"groupby":true,"id":745,"is_certified":false,"is_dttm":false,"python_date_format":null,"type":"STRING","type_generic":1,"verbose_name":null,"warning_markdown":null},"datasourceWarning":false,"expressionType":"SIMPLE","hasCustomLabel":false,"label":"COUNT(ESLint
+  Message)","optionName":"metric_n27rlniqi4h_23ktjxr2plb","sqlExpression":null}],"orderby":[["count",true]],"annotation_layers":[],"row_limit":50,"series_limit":0,"series_limit_metric":"count","order_desc":false,"url_params":{},"custom_params":{},"custom_form_data":{},"post_processing":[]}],"form_data":{"datasource":"22__table","viz_type":"table","slice_id":79,"query_mode":"aggregate","groupby":["Rule"],"temporal_columns_lookup":{"Timestamp":true},"metrics":[{"aggregate":"COUNT","column" [...]
+  Message","description":null,"expression":null,"filterable":true,"groupby":true,"id":745,"is_certified":false,"is_dttm":false,"python_date_format":null,"type":"STRING","type_generic":1,"verbose_name":null,"warning_markdown":null},"datasourceWarning":false,"expressionType":"SIMPLE","hasCustomLabel":false,"label":"COUNT(ESLint
+  Message)","optionName":"metric_n27rlniqi4h_23ktjxr2plb","sqlExpression":null}],"all_columns":[],"percent_metrics":[],"adhoc_filters":[{"clause":"WHERE","comparator":"No
+  filter","expressionType":"SIMPLE","operator":"TEMPORAL_RANGE","subject":"Timestamp"}],"timeseries_limit_metric":"count","order_by_cols":[],"row_limit":50,"server_page_length":10,"order_desc":false,"table_timestamp_format":"smart_date","show_cell_bars":true,"color_pn":true,"extra_form_data":{},"dashboards":[9],"force":false,"result_format":"json","result_type":"full"},"result_format":"json","result_type":"full"}'
+cache_timeout: null
+uuid: 477b5aa7-6d40-4e52-908e-e899c45935af
+version: 1.0.0
+dataset_uuid: 12fa12ec-9d44-4eb8-8222-9f495849ad82
diff --git a/superset/examples/configs/charts/Ten_Worst_Violations_ESLint_77.yaml b/superset/examples/configs/charts/Ten_Worst_Violations_ESLint_77.yaml
new file mode 100644
index 0000000000..a9e7e27461
--- /dev/null
+++ b/superset/examples/configs/charts/Ten_Worst_Violations_ESLint_77.yaml
@@ -0,0 +1,43 @@
+slice_name: Ten Worst Violations (ESLint)
+description: null
+certified_by: null
+certification_details: null
+viz_type: pie
+params:
+  datasource: 22__table
+  viz_type: pie
+  slice_id: 77
+  groupby:
+  - Rule
+  metric: count
+  adhoc_filters:
+  - clause: WHERE
+    comparator: No filter
+    expressionType: SIMPLE
+    operator: TEMPORAL_RANGE
+    subject: Timestamp
+  row_limit: 10
+  sort_by_metric: true
+  color_scheme: supersetColors
+  show_labels_threshold: 5
+  show_legend: true
+  legendType: scroll
+  legendOrientation: top
+  label_type: key
+  number_format: SMART_NUMBER
+  date_format: smart_date
+  show_labels: true
+  labels_outside: true
+  outerRadius: 70
+  donut: true
+  innerRadius: 30
+  extra_form_data: {}
+  dashboards:
+  - 9
+query_context: '{"datasource":{"id":22,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"having":"","where":""},"applied_time_extras":{},"columns":["Rule"],"metrics":["count"],"orderby":[["count",false]],"annotation_layers":[],"row_limit":10,"series_limit":0,"order_desc":true,"url_params":{},"custom_params":{},"custom_form_data":{}}],"form_data":{"datasource":"22__table","viz_type":"pie","slice_id":77,"groupby":["Rule"],"metric":"count","adhoc_filters":[{"clause":"WHERE","comparator":"No
+  filter","expressionType":"SIMPLE","operator":"TEMPORAL_RANGE","subject":"Timestamp"}],"row_limit":10,"sort_by_metric":true,"color_scheme":"supersetColors","show_labels_threshold":5,"show_legend":true,"legendType":"scroll","legendOrientation":"top","label_type":"key","number_format":"SMART_NUMBER","date_format":"smart_date","show_labels":true,"labels_outside":true,"outerRadius":70,"donut":true,"innerRadius":30,"extra_form_data":{},"dashboards":[9],"force":false,"result_format":"json","r [...]
+cache_timeout: null
+uuid: 785c3bc9-fc76-446f-b725-2905071c5601
+version: 1.0.0
+dataset_uuid: 12fa12ec-9d44-4eb8-8222-9f495849ad82
diff --git a/superset/examples/configs/charts/Total_Rule_Violations_78.yaml b/superset/examples/configs/charts/Total_Rule_Violations_78.yaml
new file mode 100644
index 0000000000..1f567c7fef
--- /dev/null
+++ b/superset/examples/configs/charts/Total_Rule_Violations_78.yaml
@@ -0,0 +1,62 @@
+slice_name: Total Rule Violations
+description: null
+certified_by: null
+certification_details: null
+viz_type: big_number
+params:
+  datasource: 21__table
+  viz_type: big_number
+  x_axis: Timestamp
+  metric:
+    expressionType: SIMPLE
+    column:
+      advanced_data_type: null
+      certification_details: null
+      certified_by: null
+      column_name: Count
+      description: null
+      expression: null
+      filterable: true
+      groupby: true
+      id: 736
+      is_certified: false
+      is_dttm: false
+      python_date_format: null
+      type: INT
+      type_generic: 0
+      verbose_name: null
+      warning_markdown: null
+    aggregate: SUM
+    sqlExpression: null
+    datasourceWarning: false
+    hasCustomLabel: false
+    label: SUM(Count)
+    optionName: metric_5o21t35wtbi_brhh0i312c
+  adhoc_filters:
+  - clause: WHERE
+    subject: Timestamp
+    operator: TEMPORAL_RANGE
+    comparator: No filter
+    expressionType: SIMPLE
+  show_trend_line: true
+  start_y_axis_at_zero: true
+  color_picker:
+    r: 0
+    g: 122
+    b: 135
+    a: 1
+  header_font_size: 0.4
+  subheader_font_size: 0.15
+  y_axis_format: SMART_NUMBER
+  time_format: smart_date
+  rolling_type: None
+  extra_form_data: {}
+  dashboards:
+  - 8
+query_context: '{"datasource":{"id":21,"type":"table"},"force":false,"queries":[{"filters":[{"col":"Timestamp","op":"TEMPORAL_RANGE","val":"No
+  filter"}],"extras":{"having":"","where":""},"applied_time_extras":{},"columns":[{"columnType":"BASE_AXIS","sqlExpression":"Timestamp","label":"Timestamp","expressionType":"SQL"}],"metrics":[{"expressionType":"SIMPLE","column":{"advanced_data_type":null,"certification_details":null,"certified_by":null,"column_name":"Count","description":null,"expression":null,"filterable":true,"groupby":true,"id":736,"is_certified":false,"is_dttm":false,"python_date_format":null,"type":"INT","type_gener [...]
+  filter","expressionType":"SIMPLE"}],"show_trend_line":true,"start_y_axis_at_zero":true,"color_picker":{"r":0,"g":122,"b":135,"a":1},"header_font_size":0.4,"subheader_font_size":0.15,"y_axis_format":"SMART_NUMBER","time_format":"smart_date","rolling_type":"None","extra_form_data":{},"dashboards":[8],"force":false,"result_format":"json","result_type":"full"},"result_format":"json","result_type":"full"}'
+cache_timeout: null
+uuid: 2a260abd-8ada-49f1-af51-e9b956f1826c
+version: 1.0.0
+dataset_uuid: a3b0a980-a1b4-4463-89fd-91e6d3347313
diff --git a/superset/examples/configs/dashboards/Superset_Technical_Debt_9.yaml b/superset/examples/configs/dashboards/Superset_Technical_Debt_9.yaml
new file mode 100644
index 0000000000..ef2d809b0e
--- /dev/null
+++ b/superset/examples/configs/dashboards/Superset_Technical_Debt_9.yaml
@@ -0,0 +1,448 @@
+dashboard_title: Superset Technical Debt
+description: null
+css: ''
+slug: null
+certified_by: ''
+certification_details: ''
+published: false
+uuid: 84cfc008-c88b-4982-8731-90b4aad2824b
+position:
+  CHART-2hoATK8Zsx:
+    children: []
+    id: CHART-2hoATK8Zsx
+    meta:
+      chartId: 77
+      height: 50
+      sliceName: Ten Worst Violations (ESLint)
+      uuid: 785c3bc9-fc76-446f-b725-2905071c5601
+      width: 3
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - TABS-5EgQDONu1A
+    - TAB-6MZrK7E3jw
+    - ROW-ceGPqkcuF0
+    type: CHART
+  CHART-8DBtgQCnUB:
+    children: []
+    id: CHART-8DBtgQCnUB
+    meta:
+      chartId: 74
+      height: 50
+      sliceName: Debt Timeline (by Rule)
+      uuid: 93f3714b-8401-415e-9d4c-2c8806dfc02f
+      width: 8
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - ROW-9MsZ7cYIcO
+    type: CHART
+  CHART-WlJ6qakWX-:
+    children: []
+    id: CHART-WlJ6qakWX-
+    meta:
+      chartId: 78
+      height: 50
+      sliceName: Total Rule Violations
+      uuid: 2a260abd-8ada-49f1-af51-e9b956f1826c
+      width: 4
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - ROW-9MsZ7cYIcO
+    type: CHART
+  CHART-explore-79-1:
+    children: []
+    id: CHART-explore-79-1
+    meta:
+      chartId: 79
+      height: 50
+      sliceName: Low Hanging Fruit by Rule
+      uuid: 477b5aa7-6d40-4e52-908e-e899c45935af
+      width: 3
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - ROW-zjzjUMtIHv
+    type: CHART
+  CHART-explore-80-1:
+    children: []
+    id: CHART-explore-80-1
+    meta:
+      chartId: 80
+      height: 50
+      sliceName: Low Hanging Fruit by File
+      uuid: 63a1ac01-9daf-4064-a455-ef9f5b64933f
+      width: 3
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - ROW-zjzjUMtIHv
+    type: CHART
+  CHART-hVo1r3LAvM:
+    children: []
+    id: CHART-hVo1r3LAvM
+    meta:
+      chartId: 75
+      height: 50
+      sliceName: Backlog - ESLint
+      uuid: 68cf3d84-afe6-496e-8960-401fe27d0c58
+      width: 12
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - TABS-5EgQDONu1A
+    - TAB-6MZrK7E3jw
+    - ROW-ceGPqkcuF0
+    type: CHART
+  CHART-ne2sYhM_IB:
+    children: []
+    id: CHART-ne2sYhM_IB
+    meta:
+      chartId: 76
+      height: 50
+      sliceName: 10 Worst Files
+      uuid: e34a4358-0681-43b1-839e-82f1399b97ce
+      width: 3
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - TABS-5EgQDONu1A
+    - TAB-6MZrK7E3jw
+    - ROW-ceGPqkcuF0
+    type: CHART
+  DASHBOARD_VERSION_KEY: v2
+  GRID_ID:
+    children:
+    - ROW-9MsZ7cYIcO
+    - TABS-5EgQDONu1A
+    id: GRID_ID
+    parents:
+    - ROOT_ID
+    type: GRID
+  HEADER_ID:
+    id: HEADER_ID
+    meta:
+      text: Superset Technical Debt
+    type: HEADER
+  ROOT_ID:
+    children:
+    - GRID_ID
+    id: ROOT_ID
+    type: ROOT
+  ROW-9MsZ7cYIcO:
+    children:
+    - CHART-WlJ6qakWX-
+    - CHART-8DBtgQCnUB
+    id: ROW-9MsZ7cYIcO
+    meta:
+      background: BACKGROUND_TRANSPARENT
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    type: ROW
+  ROW-9m7gUYjSq:
+    children:
+    - CHART-2hoATK8Zsx
+    - CHART-explore-79-1
+    - CHART-ne2sYhM_IB
+    - CHART-explore-80-1
+    id: ROW-9m7gUYjSq
+    meta:
+      background: BACKGROUND_TRANSPARENT
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - TABS-5EgQDONu1A
+    - TAB-6MZrK7E3jw
+    type: ROW
+  ROW-ceGPqkcuF0:
+    children:
+    - CHART-hVo1r3LAvM
+    id: ROW-ceGPqkcuF0
+    meta:
+      background: BACKGROUND_TRANSPARENT
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - TABS-5EgQDONu1A
+    - TAB-6MZrK7E3jw
+    type: ROW
+  TAB-6MZrK7E3jw:
+    children:
+    - ROW-9m7gUYjSq
+    - ROW-ceGPqkcuF0
+    id: TAB-6MZrK7E3jw
+    meta:
+      defaultText: Tab title
+      placeholder: Tab title
+      text: ESLint
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    - TABS-5EgQDONu1A
+    type: TAB
+  TABS-5EgQDONu1A:
+    children:
+    - TAB-6MZrK7E3jw
+    id: TABS-5EgQDONu1A
+    meta: {}
+    parents:
+    - ROOT_ID
+    - GRID_ID
+    type: TABS
+metadata:
+  chart_configuration:
+    '74':
+      id: 74
+      crossFilters:
+        scope: global
+        chartsInScope:
+        - 75
+        - 76
+        - 77
+        - 78
+        - 79
+        - 80
+    '75':
+      id: 75
+      crossFilters:
+        scope: global
+        chartsInScope:
+        - 74
+        - 76
+        - 77
+        - 78
+        - 79
+        - 80
+    '76':
+      id: 76
+      crossFilters:
+        scope: global
+        chartsInScope:
+        - 74
+        - 75
+        - 77
+        - 78
+        - 79
+        - 80
+    '77':
+      id: 77
+      crossFilters:
+        scope: global
+        chartsInScope:
+        - 74
+        - 75
+        - 76
+        - 78
+        - 79
+        - 80
+    '79':
+      id: 79
+      crossFilters:
+        scope: global
+        chartsInScope:
+        - 74
+        - 75
+        - 76
+        - 77
+        - 78
+        - 80
+    '80':
+      id: 80
+      crossFilters:
+        scope: global
+        chartsInScope:
+        - 74
+        - 75
+        - 76
+        - 77
+        - 78
+        - 79
+  global_chart_configuration:
+    scope:
+      rootPath:
+      - ROOT_ID
+      excluded: []
+    chartsInScope:
+    - 74
+    - 75
+    - 76
+    - 77
+    - 78
+    - 79
+    - 80
+  color_scheme: ''
+  refresh_frequency: 0
+  shared_label_colors:
+    react/forbid-component-props: '#FF7F44'
+    react/jsx-filename-extension: '#FCC700'
+    react-prefer-function-component/react-prefer-function-component: '#3CCCCB'
+    no-restricted-imports: '#8FD3E4'
+    import/prefer-default-export: '#ACE1C4'
+    '@typescript-eslint/no-unused-vars': '#B2B2B2'
+    '@typescript-eslint/no-explicit-any': '#FDE380'
+    react-hooks/exhaustive-deps: '#9EE5E5'
+    jsx-a11y/no-static-element-interactions: '#E04355'
+    import/extensions: '#A1A6BD'
+    ESLint, react/forbid-component-props: '#A868B7'
+    ESLint, react/jsx-filename-extension: '#FEC0A1'
+    ESLint, react-prefer-function-component/react-prefer-function-component: '#D3B3DA'
+    ESLint, no-restricted-imports: '#A38F79'
+    ESLint, import/prefer-default-export: '#EFA1AA'
+    ESLint, @typescript-eslint/no-unused-vars: '#D1C6BC'
+    ESLint, @typescript-eslint/no-explicit-any: '#FCC700'
+    ESLint, react-hooks/exhaustive-deps: '#A868B7'
+    ESLint, import/extensions: '#3CCCCB'
+    ESLint, jsx-a11y/no-static-element-interactions: '#A38F79'
+    ESLint, jest/no-disabled-tests: '#8FD3E4'
+    ESLint, @typescript-eslint/no-unsafe-return: '#A1A6BD'
+    ESLint, import/no-extraneous-dependencies: '#ACE1C4'
+    ESLint, no-undef: '#FEC0A1'
+    ESLint, @typescript-eslint/consistent-type-assertions: '#B2B2B2'
+    ESLint, jest-dom/prefer-to-have-attribute: '#EFA1AA'
+    ESLint, jest-dom/prefer-to-have-style: '#FDE380'
+    ESLint, jest-dom/prefer-to-have-text-content: '#D3B3DA'
+    ESLint, jsx-a11y/anchor-is-valid: '#9EE5E5'
+    ESLint, jsx-a11y/label-has-associated-control: '#D1C6BC'
+    ESLint, react-hooks/rules-of-hooks: '#1FA8C9'
+    ESLint, theme-colors/no-literal-colors: '#454E7C'
+    ESLint, @typescript-eslint/no-empty-interface: '#5AC189'
+    ESLint, @typescript-eslint/no-use-before-define: '#FF7F44'
+    ESLint, @typescript-eslint/no-var-requires: '#666666'
+    ESLint, import/no-mutable-exports: '#E04355'
+    ESLint, import/no-unresolved: '#FCC700'
+    ESLint, jest/no-standalone-expect: '#A868B7'
+    ESLint, jsx-a11y/click-events-have-key-events: '#3CCCCB'
+    ESLint, jsx-a11y/interactive-supports-focus: '#A38F79'
+    /Users/evan/GitHub/superset/superset-frontend/src/SqlLab/components/SqlEditor/index.jsx: '#1FA8C9'
+    ? /Users/evan/GitHub/superset/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx
+    : '#454E7C'
+    /Users/evan/GitHub/superset/superset-frontend/src/SqlLab/components/TableElement/index.tsx: '#5AC189'
+    /Users/evan/GitHub/superset/superset-frontend/src/explore/components/PropertiesModal/index.tsx: '#FF7F44'
+    /Users/evan/GitHub/superset/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/TTestTable.jsx: '#666666'
+    /Users/evan/GitHub/superset/superset-frontend/src/explore/components/controls/DatasourceControl/index.jsx: '#E04355'
+    /Users/evan/GitHub/superset/superset-frontend/packages/superset-ui-core/test/dimension/svg/updateTextNode.test.ts: '#FCC700'
+    ? /Users/evan/GitHub/superset/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx
+    : '#A868B7'
+    /Users/evan/GitHub/superset/superset-frontend/src/SqlLab/components/SaveDatasetModal/index.tsx: '#3CCCCB'
+    /Users/evan/GitHub/superset/superset-frontend/src/explore/components/ExploreViewContainer/index.jsx: '#A38F79'
+  color_scheme_domain: []
+  expanded_slices: {}
+  label_colors: {}
+  timed_refresh_immune_slices: []
+  cross_filters_enabled: true
+  default_filters: '{}'
+  native_filter_configuration:
+  - id: NATIVE_FILTER-jT104f_o8
+    controlValues:
+      enableEmptyFilter: false
+      defaultToFirstItem: false
+      multiSelect: true
+      searchAllOptions: false
+      inverseSelection: false
+    name: Process (Collection)
+    filterType: filter_select
+    targets:
+    - column:
+        name: Process
+      datasetUuid: a3b0a980-a1b4-4463-89fd-91e6d3347313
+    defaultDataMask:
+      extraFormData: {}
+      filterState: {}
+      ownState: {}
+    cascadeParentIds: []
+    scope:
+      rootPath:
+      - ROOT_ID
+      excluded: []
+    type: NATIVE_FILTER
+    description: ''
+    chartsInScope:
+    - 74
+    - 75
+    - 76
+    - 77
+    - 78
+    tabsInScope:
+    - TAB-6MZrK7E3jw
+  - id: NATIVE_FILTER-N062W3pFM
+    controlValues:
+      enableEmptyFilter: false
+      defaultToFirstItem: false
+      multiSelect: true
+      searchAllOptions: false
+      inverseSelection: false
+    name: Rule
+    filterType: filter_select
+    targets:
+    - column:
+        name: Rule
+      datasetUuid: a3b0a980-a1b4-4463-89fd-91e6d3347313
+    defaultDataMask:
+      extraFormData: {}
+      filterState: {}
+      ownState: {}
+    cascadeParentIds: []
+    scope:
+      rootPath:
+      - ROOT_ID
+      excluded: []
+    type: NATIVE_FILTER
+    description: ''
+    chartsInScope:
+    - 74
+    - 78
+    tabsInScope: []
+  - id: NATIVE_FILTER-UFZRu-GyK
+    controlValues:
+      enableEmptyFilter: false
+    name: Time Range
+    filterType: filter_time
+    targets:
+    - {}
+    defaultDataMask:
+      extraFormData: {}
+      filterState: {}
+      ownState: {}
+    cascadeParentIds: []
+    scope:
+      rootPath:
+      - ROOT_ID
+      excluded: []
+    type: NATIVE_FILTER
+    description: ''
+    chartsInScope:
+    - 74
+    - 78
+    tabsInScope: []
+  - id: NATIVE_FILTER-O1kzYk_ca
+    controlValues:
+      enableEmptyFilter: false
+    name: Violation Count
+    filterType: filter_range
+    targets:
+    - column:
+        name: Count
+      datasetUuid: a3b0a980-a1b4-4463-89fd-91e6d3347313
+    defaultDataMask:
+      extraFormData: {}
+      filterState: {}
+      ownState: {}
+    cascadeParentIds: []
+    scope:
+      rootPath:
+      - ROOT_ID
+      excluded:
+      - 75
+      - 76
+      - 77
+    type: NATIVE_FILTER
+    description: ''
+    chartsInScope:
+    - 74
+    - 78
+    - 79
+    - 80
+    tabsInScope: []
+version: 1.0.0
diff --git a/superset/examples/configs/datasets/examples/Superset_Tech_Debt_-_Aggregated.yaml b/superset/examples/configs/datasets/examples/Superset_Tech_Debt_-_Aggregated.yaml
new file mode 100644
index 0000000000..e516ccb0ef
--- /dev/null
+++ b/superset/examples/configs/datasets/examples/Superset_Tech_Debt_-_Aggregated.yaml
@@ -0,0 +1,90 @@
+table_name: Superset Tech Debt - Aggregated
+main_dttm_col: Timestamp
+description: null
+default_endpoint: null
+offset: 0
+cache_timeout: null
+schema: main
+sql: SELECT * FROM "https://docs.google.com/spreadsheets/d/1oABNnzxJYzwUrHjr_c9wfYEq9dFL1ScVof9LlaAdxvo/"
+params: null
+template_params: null
+filter_select_enabled: true
+fetch_values_predicate: null
+extra: null
+normalize_columns: false
+always_filter_main_dttm: false
+uuid: a3b0a980-a1b4-4463-89fd-91e6d3347313
+metrics:
+- metric_name: count
+  verbose_name: COUNT(*)
+  metric_type: count
+  expression: COUNT(*)
+  description: null
+  d3format: null
+  currency: null
+  extra:
+    warning_markdown: ''
+  warning_text: null
+columns:
+- column_name: Timestamp
+  verbose_name: null
+  is_dttm: true
+  is_active: true
+  type: DATETIME
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Count
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: INT
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Description
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Process
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Rule
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+version: 1.0.0
+database_uuid: c46a7af6-bbb1-485b-9c01-9e833d60ce12
diff --git a/superset/examples/configs/datasets/examples/Superset_Tech_Debt_-_ESLint.yaml b/superset/examples/configs/datasets/examples/Superset_Tech_Debt_-_ESLint.yaml
new file mode 100644
index 0000000000..9e0641ecb3
--- /dev/null
+++ b/superset/examples/configs/datasets/examples/Superset_Tech_Debt_-_ESLint.yaml
@@ -0,0 +1,114 @@
+table_name: Superset Tech Debt - ESLint
+main_dttm_col: Timestamp
+description: null
+default_endpoint: null
+offset: 0
+cache_timeout: null
+schema: main
+sql: SELECT * FROM "https://docs.google.com/spreadsheets/d/1oABNnzxJYzwUrHjr_c9wfYEq9dFL1ScVof9LlaAdxvo/edit#gid=1042232483"
+params: null
+template_params: null
+filter_select_enabled: true
+fetch_values_predicate: null
+extra: null
+normalize_columns: false
+always_filter_main_dttm: false
+uuid: 12fa12ec-9d44-4eb8-8222-9f495849ad82
+metrics:
+- metric_name: count
+  verbose_name: COUNT(*)
+  metric_type: count
+  expression: COUNT(*)
+  description: null
+  d3format: null
+  currency: null
+  extra:
+    warning_markdown: ''
+  warning_text: null
+columns:
+- column_name: Rule Description
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: ESLint Message
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Timestamp
+  verbose_name: null
+  is_dttm: true
+  is_active: true
+  type: DATETIME
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Column
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: INT
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: File
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Rule
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: STRING
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+- column_name: Line
+  verbose_name: null
+  is_dttm: false
+  is_active: true
+  type: INT
+  advanced_data_type: null
+  groupby: true
+  filterable: true
+  expression: null
+  description: null
+  python_date_format: null
+  extra: {}
+version: 1.0.0
+database_uuid: c46a7af6-bbb1-485b-9c01-9e833d60ce12