From 5599ec3702318792106c0a1807d34099649714cf Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" <70410625+michael-s-molina@users.noreply.github.com> Date: Mon, 4 Dec 2023 16:05:08 -0300 Subject: [PATCH] chore: Clean up the examples dashboards (#26158) --- .../e2e/dashboard/nativeFilters.test.ts | 6 +- .../cypress/e2e/dashboard/tabs.test.ts | 3 - .../cypress/e2e/dashboard/utils.ts | 1 - .../cypress-base/cypress/support/e2e.ts | 2 +- .../configs/charts/Filter_Segments.yaml | 68 -- .../configs/charts/Filtering_Vaccines.yaml | 53 -- .../configs/charts/Vehicle_Sales_Filter.yaml | 47 -- .../charts/Video_Game_Sales_Filter.yaml | 55 -- .../dashboards/COVID_Vaccine_Dashboard.yaml | 128 ++-- .../dashboards/FCC_New_Coder_Survey_2018.yaml | 608 ++++++++---------- .../configs/dashboards/Sales_Dashboard.yaml | 300 ++++----- .../configs/dashboards/Video_Game_Sales.yaml | 389 +++++------ superset/examples/misc_dashboard.py | 148 ++--- superset/examples/world_bank.py | 39 +- tests/integration_tests/charts/api_tests.py | 6 +- .../dashboards/commands_tests.py | 20 +- .../integration_tests/dashboards/dao_tests.py | 54 -- .../integration_tests/databases/api_tests.py | 2 +- tests/integration_tests/utils_tests.py | 44 -- 19 files changed, 659 insertions(+), 1314 deletions(-) delete mode 100644 superset/examples/configs/charts/Filter_Segments.yaml delete mode 100644 superset/examples/configs/charts/Filtering_Vaccines.yaml delete mode 100644 superset/examples/configs/charts/Vehicle_Sales_Filter.yaml delete mode 100644 superset/examples/configs/charts/Video_Game_Sales_Filter.yaml diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/nativeFilters.test.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/nativeFilters.test.ts index e8457ba94b61a..7683d7f87838d 100644 --- a/superset-frontend/cypress-base/cypress/e2e/dashboard/nativeFilters.test.ts +++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/nativeFilters.test.ts @@ -113,7 +113,7 @@ function prepareDashboardFilters( }, type: 'NATIVE_FILTER', description: '', - chartsInScope: [6], + chartsInScope: [5], tabsInScope: [], }); }); @@ -150,7 +150,7 @@ function prepareDashboardFilters( meta: { width: 4, height: 50, - chartId: 6, + chartId: 5, sliceName: 'Most Populated Countries', }, }, @@ -414,7 +414,7 @@ describe('Native filters', () => { cy.createSampleDashboards([0]); }); - it('Verify that default value is respected after revisit', () => { + it.only('Verify that default value is respected after revisit', () => { prepareDashboardFilters([ { name: 'country_name', column: 'country_name', datasetId: 2 }, ]); diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts index 6fc89c1446fb8..ba442e600ae60 100644 --- a/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts +++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/tabs.test.ts @@ -25,7 +25,6 @@ import { TABBED_DASHBOARD } from 'cypress/utils/urls'; import { expandFilterOnLeftPanel } from './utils'; const TREEMAP = { name: 'Treemap', viz: 'treemap_v2' }; -const FILTER_BOX = { name: 'Region Filter', viz: 'filter_box' }; const LINE_CHART = { name: 'Growth Rate', viz: 'line' }; const BOX_PLOT = { name: 'Box plot', viz: 'box_plot' }; const BIG_NUMBER = { name: 'Number of Girls', viz: 'big_number_total' }; @@ -41,7 +40,6 @@ function topLevelTabs() { function resetTabs() { topLevelTabs(); cy.get('@top-level-tabs').first().click(); - waitForChartLoad(FILTER_BOX); waitForChartLoad(TREEMAP); waitForChartLoad(BIG_NUMBER); waitForChartLoad(TABLE); @@ -96,7 +94,6 @@ describe('Dashboard tabs', () => { it.skip('should send new queries when tab becomes visible', () => { // landing in first tab - waitForChartLoad(FILTER_BOX); waitForChartLoad(TREEMAP); getChartAliasBySpec(TREEMAP).then(treemapAlias => { diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts index ca539039cf6e6..c63df51d10a6d 100644 --- a/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts +++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts @@ -23,7 +23,6 @@ import { ChartSpec, waitForChartLoad } from 'cypress/utils'; export const WORLD_HEALTH_CHARTS = [ { name: '% Rural', viz: 'world_map' }, { name: 'Most Populated Countries', viz: 'table' }, - { name: 'Region Filter', viz: 'filter_box' }, { name: "World's Population", viz: 'big_number' }, { name: 'Growth Rate', viz: 'line' }, { name: 'Rural Breakdown', viz: 'sunburst' }, diff --git a/superset-frontend/cypress-base/cypress/support/e2e.ts b/superset-frontend/cypress-base/cypress/support/e2e.ts index 6642e0120cca4..cccc7b2005737 100644 --- a/superset-frontend/cypress-base/cypress/support/e2e.ts +++ b/superset-frontend/cypress-base/cypress/support/e2e.ts @@ -18,7 +18,7 @@ */ import '@cypress/code-coverage/support'; import '@applitools/eyes-cypress/commands'; -import failOnConsoleError, { Config } from 'cypress-fail-on-console-error'; +import failOnConsoleError from 'cypress-fail-on-console-error'; require('cy-verify-downloads').addCustomCommand(); diff --git a/superset/examples/configs/charts/Filter_Segments.yaml b/superset/examples/configs/charts/Filter_Segments.yaml deleted file mode 100644 index 605e33ca7ee25..0000000000000 --- a/superset/examples/configs/charts/Filter_Segments.yaml +++ /dev/null @@ -1,68 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -slice_name: Filter Segments -viz_type: filter_box -params: - adhoc_filters: [] - datasource: 42__table - date_filter: false - filter_configs: - - asc: true - clearable: true - column: ethnic_minority - key: -xNBqpfQo - label: Ethnic Minority - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: gender - key: 19VeBGTKf - label: Gender - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: developer_type - key: OWTb4s69T - label: Developer Type - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: lang_at_home - key: Fn-YClyhb - label: Language at Home - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: country_live - key: 2fNskRCLJ - label: Country live - multiple: true - searchAllOptions: false - granularity_sqla: time_start - queryFields: {} - slice_id: 1387 - time_range: No filter - url_params: {} - viz_type: filter_box -cache_timeout: null -uuid: 6420629a-ce74-2c6b-ef7d-b2e78baa3cfe -version: 1.0.0 -dataset_uuid: d95a2865-53ce-1f82-a53d-8e3c89331469 diff --git a/superset/examples/configs/charts/Filtering_Vaccines.yaml b/superset/examples/configs/charts/Filtering_Vaccines.yaml deleted file mode 100644 index e458c5a009343..0000000000000 --- a/superset/examples/configs/charts/Filtering_Vaccines.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -slice_name: Filtering Vaccines -viz_type: filter_box -params: - adhoc_filters: [] - datasource: 69__table - date_filter: false - filter_configs: - - asc: true - clearable: true - column: country_name - key: D00hRxPLE - label: Country - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: product_category - key: jJ7x2cuIc - label: Vaccine Approach - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: clinical_stage - key: EgGwwAUU6 - label: Clinical Stage - multiple: true - searchAllOptions: false - queryFields: {} - slice_id: 3965 - time_range: No filter - url_params: {} - viz_type: filter_box -cache_timeout: null -uuid: c29381ce-0e99-4cf3-bf0f-5f55d6b94176 -version: 1.0.0 -dataset_uuid: 974b7a1c-22ea-49cb-9214-97b7dbd511e0 diff --git a/superset/examples/configs/charts/Vehicle_Sales_Filter.yaml b/superset/examples/configs/charts/Vehicle_Sales_Filter.yaml deleted file mode 100644 index 91c8f76bb8d8f..0000000000000 --- a/superset/examples/configs/charts/Vehicle_Sales_Filter.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -slice_name: Vehicle Sales Filter -viz_type: filter_box -params: - adhoc_filters: [] - datasource: 23__table - date_filter: true - filter_configs: - - asc: true - clearable: true - column: product_line - key: 7oUjq15eQ - label: Product Line - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: deal_size - key: c3hO6Eub8 - label: Deal Size - multiple: true - searchAllOptions: false - granularity_sqla: order_date - queryFields: {} - slice_id: 671 - time_range: '2003-01-01T00:00:00 : 2005-06-01T00:00:00' - url_params: {} - viz_type: filter_box -cache_timeout: null -uuid: a5689df7-98fc-7c51-602c-ebd92dc3ec70 -version: 1.0.0 -dataset_uuid: e8623bb9-5e00-f531-506a-19607f5f8005 diff --git a/superset/examples/configs/charts/Video_Game_Sales_Filter.yaml b/superset/examples/configs/charts/Video_Game_Sales_Filter.yaml deleted file mode 100644 index 6c76d53e8eabb..0000000000000 --- a/superset/examples/configs/charts/Video_Game_Sales_Filter.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -slice_name: Video Game Sales filter -viz_type: filter_box -params: - adhoc_filters: [] - datasource: 21__table - date_filter: true - filter_configs: - - asc: true - clearable: true - column: platform - key: s3ItH9vhG - label: Platform - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: genre - key: 202hDeMsG - label: Genre - multiple: true - searchAllOptions: false - - asc: true - clearable: true - column: publisher - key: 5Os6jsJFK - label: Publisher - multiple: true - searchAllOptions: false - granularity_sqla: year - queryFields: {} - time_range: No filter - url_params: - preselect_filters: '{"1389": {"platform": ["PS", "PS2", "PS3", "PS4"], "genre": - null, "__time_range": "No filter"}}' - viz_type: filter_box -cache_timeout: null -uuid: fd9ce7ec-ae08-4f71-93e0-7c26b132b2e6 -version: 1.0.0 -dataset_uuid: 53d47c0c-c03d-47f0-b9ac-81225f808283 diff --git a/superset/examples/configs/dashboards/COVID_Vaccine_Dashboard.yaml b/superset/examples/configs/dashboards/COVID_Vaccine_Dashboard.yaml index 363077aebe43c..1d870880b913b 100644 --- a/superset/examples/configs/dashboards/COVID_Vaccine_Dashboard.yaml +++ b/superset/examples/configs/dashboards/COVID_Vaccine_Dashboard.yaml @@ -18,6 +18,9 @@ dashboard_title: COVID Vaccine Dashboard description: null css: "" slug: null +certified_by: "" +certification_details: "" +published: true uuid: f4065089-110a-41fa-8dd7-9ce98a65e250 position: CHART-63bEuxjDMJ: @@ -25,32 +28,32 @@ position: id: CHART-63bEuxjDMJ meta: chartId: 3961 - height: 72 + height: 60 sliceName: Vaccine Candidates per Country sliceNameOverride: Map of Vaccine Candidates uuid: ddc91df6-fb40-4826-bdca-16b85af1c024 - width: 12 + width: 8 parents: - ROOT_ID - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ - - ROW-zvw7luvEL + - ROW-xSeNAspgw type: CHART CHART-F-fkth0Dnv: children: [] id: CHART-F-fkth0Dnv meta: chartId: 3960 - height: 60 + height: 82 sliceName: Vaccine Candidates per Country sliceNameOverride: Treemap of Vaccine Candidates per Country uuid: e2f5a8a7-feb0-4f79-bc6b-01fe55b98b3c - width: 8 + width: 4 parents: - ROOT_ID - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ - - ROW-xSeNAspgw + - ROW-dieUdkeUw type: CHART CHART-RjD_ygqtwH: children: [] @@ -66,7 +69,7 @@ position: - ROOT_ID - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ - - ROW-zvw7luvEL + - ROW-zhOlQLQnB type: CHART CHART-aGfmWtliqA: children: [] @@ -81,17 +84,17 @@ position: - ROOT_ID - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ - - ROW-zvw7luvEL + - ROW-zhOlQLQnB type: CHART - CHART-j4hUvP5dDD: + CHART-dCUpAcPsji: children: [] - id: CHART-j4hUvP5dDD + id: CHART-dCUpAcPsji meta: - chartId: 3962 + chartId: 3963 height: 82 - sliceName: Vaccine Candidates per Approach & Stage - sliceNameOverride: Heatmap of Approaches & Clinical Stages - uuid: 0c953c84-0c9a-418d-be9f-2894d2a2cee0 + sliceName: Vaccine Candidates per Country & Stage + sliceNameOverride: Heatmap of Countries & Clinical Stages + uuid: cd111331-d286-4258-9020-c7949a109ed2 width: 4 parents: - ROOT_ID @@ -99,37 +102,37 @@ position: - TAB-BCIJF4NvgQ - ROW-dieUdkeUw type: CHART - CHART-dCUpAcPsji: + CHART-fYo7IyvKZQ: children: [] - id: CHART-dCUpAcPsji + id: CHART-fYo7IyvKZQ meta: - chartId: 3963 - height: 72 + chartId: 3964 + height: 60 sliceName: Vaccine Candidates per Country & Stage - sliceNameOverride: Heatmap of Countries & Clinical Stages - uuid: cd111331-d286-4258-9020-c7949a109ed2 + sliceNameOverride: Sunburst of Country & Clinical Stages + uuid: f69c556f-15fe-4a82-a8bb-69d5b6954123 width: 4 parents: - ROOT_ID - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ - - ROW-dieUdkeUw + - ROW-xSeNAspgw type: CHART - CHART-eirDduqb1A: + CHART-j4hUvP5dDD: children: [] - id: CHART-eirDduqb1A + id: CHART-j4hUvP5dDD meta: - chartId: 3965 - height: 60 - sliceName: Filtering Vaccines - sliceNameOverride: Filter Box of Vaccines - uuid: c29381ce-0e99-4cf3-bf0f-5f55d6b94176 + chartId: 3962 + height: 82 + sliceName: Vaccine Candidates per Approach & Stage + sliceNameOverride: Heatmap of Approaches & Clinical Stages + uuid: 0c953c84-0c9a-418d-be9f-2894d2a2cee0 width: 4 parents: - ROOT_ID - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ - - ROW-xSeNAspgw + - ROW-dieUdkeUw type: CHART DASHBOARD_VERSION_KEY: v2 GRID_ID: @@ -189,46 +192,17 @@ position: - TAB-BCIJF4NvgQ - ROW-zhOlQLQnB type: MARKDOWN - CHART-fYo7IyvKZQ: - children: [] - id: CHART-fYo7IyvKZQ - meta: - chartId: 3964 - height: 72 - sliceName: Vaccine Candidates per Country & Stage - sliceNameOverride: Sunburst of Country & Clinical Stages - uuid: f69c556f-15fe-4a82-a8bb-69d5b6954123 - width: 4 - parents: - - ROOT_ID - - TABS-wUKya7eQ0Z - - TAB-BCIJF4NvgQ - - ROW-dieUdkeUw - type: CHART ROOT_ID: children: - TABS-wUKya7eQ0Z id: ROOT_ID type: ROOT - ROW-zhOlQLQnB: - children: - - MARKDOWN-VjQQ5SFj5v - - CHART-RjD_ygqtwH - - CHART-aGfmWtliqA - id: ROW-zhOlQLQnB - meta: - "0": ROOT_ID - background: BACKGROUND_TRANSPARENT - parents: - - ROOT_ID - - TABS-wUKya7eQ0Z - - TAB-BCIJF4NvgQ - type: ROW - ROW-xSeNAspgw: + ROW-dieUdkeUw: children: - - CHART-eirDduqb1A - CHART-F-fkth0Dnv - id: ROW-xSeNAspgw + - CHART-dCUpAcPsji + - CHART-j4hUvP5dDD + id: ROW-dieUdkeUw meta: "0": ROOT_ID background: BACKGROUND_TRANSPARENT @@ -237,12 +211,11 @@ position: - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ type: ROW - ROW-dieUdkeUw: + ROW-xSeNAspgw: children: - - CHART-dCUpAcPsji + - CHART-63bEuxjDMJ - CHART-fYo7IyvKZQ - - CHART-j4hUvP5dDD - id: ROW-dieUdkeUw + id: ROW-xSeNAspgw meta: "0": ROOT_ID background: BACKGROUND_TRANSPARENT @@ -251,10 +224,12 @@ position: - TABS-wUKya7eQ0Z - TAB-BCIJF4NvgQ type: ROW - ROW-zvw7luvEL: + ROW-zhOlQLQnB: children: - - CHART-63bEuxjDMJ - id: ROW-zvw7luvEL + - MARKDOWN-VjQQ5SFj5v + - CHART-RjD_ygqtwH + - CHART-aGfmWtliqA + id: ROW-zhOlQLQnB meta: "0": ROOT_ID background: BACKGROUND_TRANSPARENT @@ -267,7 +242,6 @@ position: children: - ROW-zhOlQLQnB - ROW-xSeNAspgw - - ROW-zvw7luvEL - ROW-dieUdkeUw id: TAB-BCIJF4NvgQ meta: @@ -316,18 +290,4 @@ metadata: Unknown: "#EFA1AA" Live attenuated virus: "#FDE380" COUNT(*): "#D1C6BC" - filter_scopes: - "3965": - country_name: - scope: - - ROOT_ID - immune: [] - product_category: - scope: - - ROOT_ID - immune: [] - clinical_stage: - scope: - - ROOT_ID - immune: [] version: 1.0.0 diff --git a/superset/examples/configs/dashboards/FCC_New_Coder_Survey_2018.yaml b/superset/examples/configs/dashboards/FCC_New_Coder_Survey_2018.yaml index 2e97e6b576a39..b1508daff0b01 100644 --- a/superset/examples/configs/dashboards/FCC_New_Coder_Survey_2018.yaml +++ b/superset/examples/configs/dashboards/FCC_New_Coder_Survey_2018.yaml @@ -16,8 +16,11 @@ # under the License. dashboard_title: FCC New Coder Survey 2018 description: null -css: '' +css: "" slug: null +certified_by: "" +certification_details: "" +published: true uuid: 5b12b583-8204-08e9-392c-422209c29787 position: CHART--0GPGmD-pO: @@ -25,17 +28,17 @@ position: id: CHART--0GPGmD-pO meta: chartId: 1361 - height: 48 - sliceName: 'Current Developers: Is this your first development job?' + height: 56 + sliceName: "Current Developers: Is this your first development job?" sliceNameOverride: Is this your first development job? uuid: bfe5a8e6-146f-ef59-5e6c-13d519b236a8 width: 2 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-b7USYEngT + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-b7USYEngT type: CHART CHART--w_Br1tPP3: children: [] @@ -47,27 +50,27 @@ position: uuid: a6dd2d5a-2cdc-c8ec-f30c-85920f4f8a65 width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW-DR80aHJA2c + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW-DR80aHJA2c type: CHART CHART-0-zzTwBINh: children: [] id: CHART-0-zzTwBINh meta: chartId: 3631 - height: 49 + height: 55 sliceName: Last Year Income Distribution uuid: a2ec5256-94b4-43c4-b8c7-b83f70c5d4df width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-b7USYEngT + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-b7USYEngT type: CHART CHART-37fu7fO6Z0: children: [] @@ -79,11 +82,11 @@ position: uuid: 02f546ae-1bf4-bd26-8bc2-14b9279c8a62 width: 7 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-kNjtGVFpp + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-kNjtGVFpp type: CHART CHART-5QwNlSbXYU: children: [] @@ -95,11 +98,11 @@ position: uuid: 097c05c9-2dd2-481d-813d-d6c0c12b4a3d width: 5 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-kNjtGVFpp + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-kNjtGVFpp type: CHART CHART-FKuVqq4kaA: children: [] @@ -112,11 +115,11 @@ position: uuid: e6b09c28-98cf-785f-4caf-320fd4fca802 width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW-DR80aHJA2c + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW-DR80aHJA2c type: CHART CHART-JnpdZOhVer: children: [] @@ -124,16 +127,16 @@ position: meta: chartId: 1369 height: 50 - sliceName: "\U0001F393 Highest degree held" + sliceName: Highest degree held uuid: 9f7d2b9c-6b3a-69f9-f03e-d3a141514639 width: 2 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW--BIzjz9F0 - - COLUMN-IEKAo_QJlz + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW--BIzjz9F0 + - COLUMN-IEKAo_QJlz type: CHART CHART-LjfhrUkEef: children: [] @@ -145,11 +148,11 @@ position: uuid: 067c4a1e-ae03-4c0c-8e2a-d2c0f4bf43c3 width: 5 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-s3l4os7YY + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-s3l4os7YY type: CHART CHART-Q3pbwsH3id: children: [] @@ -162,27 +165,27 @@ position: uuid: def07750-b5c0-0b69-6228-cb2330916166 width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-mOvr_xWm1 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-mOvr_xWm1 type: CHART CHART-QVql08s5Bv: children: [] id: CHART-QVql08s5Bv meta: chartId: 3632 - height: 50 + height: 56 sliceName: First Time Developer? uuid: edc75073-8f33-4123-a28d-cd6dfb33cade width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-b7USYEngT + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-b7USYEngT type: CHART CHART-UtSaz4pfV6: children: [] @@ -194,12 +197,12 @@ position: uuid: 5f1ea868-604e-f69d-a241-5daa83ff33be width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-UsW-_RPAb - - COLUMN-OJ5spdMmNh + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-UsW-_RPAb + - COLUMN-OJ5spdMmNh type: CHART CHART-VvFbGxi3X_: children: [] @@ -211,12 +214,12 @@ position: uuid: 03a74c97-52fc-cf87-233c-d4275f8c550c width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-UsW-_RPAb - - COLUMN-OJ5spdMmNh + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-UsW-_RPAb + - COLUMN-OJ5spdMmNh type: CHART CHART-XHncHuS5pZ: children: [] @@ -229,11 +232,11 @@ position: uuid: a0e5329f-224e-6fc8-efd2-d37d0f546ee8 width: 2 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW-DR80aHJA2c + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW-DR80aHJA2c type: CHART CHART-YSzS5GOOLf: children: [] @@ -245,11 +248,11 @@ position: uuid: 4880e4f4-b701-4be0-86f3-e7e89432e83b width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-mOvr_xWm1 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-mOvr_xWm1 type: CHART CHART-ZECnzPz8Bi: children: [] @@ -261,44 +264,27 @@ position: uuid: 5596e0f6-78a9-465d-8325-7139c794a06a width: 7 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-s3l4os7YY + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-s3l4os7YY type: CHART CHART-aytwlT4GAq: children: [] id: CHART-aytwlT4GAq meta: chartId: 1384 - height: 50 + height: 30 sliceName: Breakdown of Developer Type uuid: b8386be8-f44e-6535-378c-2aa2ba461286 - width: 4 - parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-y-GwJPgxLr - type: CHART - CHART-d6vjW6rC6V: - children: [] - id: CHART-d6vjW6rC6V - meta: - chartId: 1387 - height: 54 - sliceName: Filter Segments - sliceNameOverride: Filter By - uuid: 6420629a-ce74-2c6b-ef7d-b2e78baa3cfe - width: 5 + width: 6 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-y-GwJPgxLr + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-y-GwJPgxLr type: CHART CHART-fLpTSAHpAO: children: [] @@ -310,11 +296,11 @@ position: uuid: 2ba66056-a756-d6a3-aaec-0c243fb7062e width: 9 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-UsW-_RPAb + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-UsW-_RPAb type: CHART CHART-lQVSAw0Or3: children: [] @@ -327,11 +313,11 @@ position: uuid: cb8998ab-9f93-4f0f-4e4b-3bfe4b0dea9d width: 4 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW--BIzjz9F0 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW--BIzjz9F0 type: CHART CHART-o-JPAWMZK-: children: [] @@ -343,11 +329,11 @@ position: uuid: 0f6b447c-828c-e71c-87ac-211bc412b214 width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-mOvr_xWm1 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-mOvr_xWm1 type: CHART CHART-v22McUFMtx: children: [] @@ -360,12 +346,12 @@ position: uuid: 6d0ceb30-2008-d19c-d285-cf77dc764433 width: 4 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW--BIzjz9F0 - - COLUMN-IEKAo_QJlz + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW--BIzjz9F0 + - COLUMN-IEKAo_QJlz type: CHART CHART-wxWVtlajRF: children: [] @@ -377,49 +363,49 @@ position: uuid: bff88053-ccc4-92f2-d6f5-de83e950e8cd width: 4 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW--BIzjz9F0 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW--BIzjz9F0 type: CHART COLUMN-IEKAo_QJlz: children: - - CHART-JnpdZOhVer - - CHART-v22McUFMtx + - CHART-JnpdZOhVer + - CHART-v22McUFMtx id: COLUMN-IEKAo_QJlz meta: background: BACKGROUND_TRANSPARENT width: 4 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW--BIzjz9F0 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW--BIzjz9F0 type: COLUMN COLUMN-OJ5spdMmNh: children: - - CHART-VvFbGxi3X_ - - CHART-UtSaz4pfV6 + - CHART-VvFbGxi3X_ + - CHART-UtSaz4pfV6 id: COLUMN-OJ5spdMmNh meta: background: BACKGROUND_TRANSPARENT width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-UsW-_RPAb + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-UsW-_RPAb type: COLUMN DASHBOARD_VERSION_KEY: v2 GRID_ID: children: - - TABS-L-d9eyOE-b + - TABS-L-d9eyOE-b id: GRID_ID parents: - - ROOT_ID + - ROOT_ID type: GRID HEADER_ID: id: HEADER_ID @@ -453,21 +439,21 @@ position: height: 50 width: 4 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- - - ROW-DR80aHJA2c + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- + - ROW-DR80aHJA2c type: MARKDOWN MARKDOWN-NQmSPDOtpl: children: [] id: MARKDOWN-NQmSPDOtpl meta: - code: '# Current Developers + code: "# Current Developers - While majority of the students on FCC are Aspiring developers, there''s a - nontrivial minority that''s there to continue leveling up their skills (17% + While majority of the students on FCC are Aspiring developers, there's a + nontrivial minority that's there to continue leveling up their skills (17% of the survey respondents). @@ -480,28 +466,28 @@ position: - The proportion of developers whose current job is their first developer job - - Distribution of last year''s income + - Distribution of last year's income - The geographic distribution of these developers - The overlap between commute time and if their current job is their first developer job - - Potential link between highest degree earned and last year''s income' - height: 50 + - Potential link between highest degree earned and last year's income" + height: 56 width: 4 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ - - ROW-b7USYEngT + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ + - ROW-b7USYEngT type: MARKDOWN MARKDOWN-__u6CsUyfh: children: [] id: MARKDOWN-__u6CsUyfh meta: - code: '## FreeCodeCamp New Coder Survey 2018 + code: "## FreeCodeCamp New Coder Survey 2018 Every year, FCC surveys its user base (mostly budding software developers) @@ -513,21 +499,22 @@ position: - [Dataset](https://github.com/freeCodeCamp/2018-new-coder-survey) - - [FCC Blog Post](https://www.freecodecamp.org/news/we-asked-20-000-people-who-they-are-and-how-theyre-learning-to-code-fff5d668969/)' - height: 45 - width: 3 - parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-y-GwJPgxLr + - [FCC Blog Post](https://www.freecodecamp.org/news/we-asked-20-000-people-who-they-are-and-how-theyre-learning-to-code-fff5d668969/)" + height: 30 + width: 6 + parents: + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-y-GwJPgxLr type: MARKDOWN MARKDOWN-zc2mWxZeox: children: [] id: MARKDOWN-zc2mWxZeox meta: - code: "# Demographics\n\nFreeCodeCamp is a completely-online community of people\ + code: + "# Demographics\n\nFreeCodeCamp is a completely-online community of people\ \ learning to code and consists of aspiring & current developers from all\ \ over the world. That doesn't necessarily mean that access to these types\ \ of opportunities are evenly distributed. \n\nThe following charts can begin\ @@ -537,243 +524,220 @@ position: height: 52 width: 3 parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t - - ROW-mOvr_xWm1 + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t + - ROW-mOvr_xWm1 type: MARKDOWN ROOT_ID: children: - - GRID_ID + - GRID_ID id: ROOT_ID type: ROOT ROW--BIzjz9F0: children: - - COLUMN-IEKAo_QJlz - - CHART-lQVSAw0Or3 - - CHART-wxWVtlajRF + - COLUMN-IEKAo_QJlz + - CHART-lQVSAw0Or3 + - CHART-wxWVtlajRF id: ROW--BIzjz9F0 meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- type: ROW ROW-DR80aHJA2c: children: - - MARKDOWN-BUmyHM2s0x - - CHART-XHncHuS5pZ - - CHART--w_Br1tPP3 - - CHART-FKuVqq4kaA + - MARKDOWN-BUmyHM2s0x + - CHART-XHncHuS5pZ + - CHART--w_Br1tPP3 + - CHART-FKuVqq4kaA id: ROW-DR80aHJA2c meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-YT6eNksV- + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-YT6eNksV- type: ROW ROW-UsW-_RPAb: children: - - COLUMN-OJ5spdMmNh - - CHART-fLpTSAHpAO + - COLUMN-OJ5spdMmNh + - CHART-fLpTSAHpAO id: ROW-UsW-_RPAb meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t type: ROW ROW-b7USYEngT: children: - - MARKDOWN-NQmSPDOtpl - - CHART--0GPGmD-pO - - CHART-QVql08s5Bv - - CHART-0-zzTwBINh + - MARKDOWN-NQmSPDOtpl + - CHART--0GPGmD-pO + - CHART-QVql08s5Bv + - CHART-0-zzTwBINh id: ROW-b7USYEngT meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ type: ROW ROW-kNjtGVFpp: children: - - CHART-5QwNlSbXYU - - CHART-37fu7fO6Z0 + - CHART-5QwNlSbXYU + - CHART-37fu7fO6Z0 id: ROW-kNjtGVFpp meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ type: ROW ROW-mOvr_xWm1: children: - - MARKDOWN-zc2mWxZeox - - CHART-Q3pbwsH3id - - CHART-o-JPAWMZK- - - CHART-YSzS5GOOLf + - MARKDOWN-zc2mWxZeox + - CHART-Q3pbwsH3id + - CHART-o-JPAWMZK- + - CHART-YSzS5GOOLf id: ROW-mOvr_xWm1 meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t type: ROW ROW-s3l4os7YY: children: - - CHART-LjfhrUkEef - - CHART-ZECnzPz8Bi + - CHART-LjfhrUkEef + - CHART-ZECnzPz8Bi id: ROW-s3l4os7YY meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-l_9I0aNYZ + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-l_9I0aNYZ type: ROW ROW-y-GwJPgxLr: children: - - MARKDOWN-__u6CsUyfh - - CHART-aytwlT4GAq - - CHART-d6vjW6rC6V + - MARKDOWN-__u6CsUyfh + - CHART-aytwlT4GAq id: ROW-y-GwJPgxLr meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b - - TAB-AsMaxdYL_t + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b + - TAB-AsMaxdYL_t type: ROW TAB-AsMaxdYL_t: children: - - ROW-y-GwJPgxLr - - ROW-mOvr_xWm1 - - ROW-UsW-_RPAb + - ROW-y-GwJPgxLr + - ROW-mOvr_xWm1 + - ROW-UsW-_RPAb id: TAB-AsMaxdYL_t meta: text: Overview parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b type: TAB TAB-YT6eNksV-: children: - - ROW-DR80aHJA2c - - ROW--BIzjz9F0 + - ROW-DR80aHJA2c + - ROW--BIzjz9F0 id: TAB-YT6eNksV- meta: text: "\U0001F680 Aspiring Developers" parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b type: TAB TAB-l_9I0aNYZ: children: - - ROW-b7USYEngT - - ROW-kNjtGVFpp - - ROW-s3l4os7YY + - ROW-b7USYEngT + - ROW-kNjtGVFpp + - ROW-s3l4os7YY id: TAB-l_9I0aNYZ meta: text: "\U0001F4BB Current Developers" parents: - - ROOT_ID - - GRID_ID - - TABS-L-d9eyOE-b + - ROOT_ID + - GRID_ID + - TABS-L-d9eyOE-b type: TAB TABS-L-d9eyOE-b: children: - - TAB-AsMaxdYL_t - - TAB-YT6eNksV- - - TAB-l_9I0aNYZ + - TAB-AsMaxdYL_t + - TAB-YT6eNksV- + - TAB-l_9I0aNYZ id: TABS-L-d9eyOE-b meta: {} parents: - - ROOT_ID - - GRID_ID + - ROOT_ID + - GRID_ID type: TABS metadata: timed_refresh_immune_slices: [] expanded_slices: {} refresh_frequency: 0 - default_filters: '{}' + default_filters: "{}" color_scheme: supersetColors - filter_scopes: - '1387': - ethnic_minority: - scope: - - TAB-AsMaxdYL_t - immune: [] - gender: - scope: - - ROOT_ID - immune: [] - developer_type: - scope: - - ROOT_ID - immune: [] - lang_at_home: - scope: - - ROOT_ID - immune: [] - country_live: - scope: - - ROOT_ID - immune: [] label_colors: - '0': '#FCC700' - '1': '#A868B7' - '15': '#3CCCCB' - '30': '#A38F79' - '45': '#8FD3E4' - age: '#1FA8C9' - Yes,: '#1FA8C9' - Female: '#454E7C' - Prefer: '#5AC189' - No,: '#FF7F44' - Male: '#666666' - Prefer not to say: '#E04355' - Ph.D.: '#FCC700' - associate's degree: '#A868B7' - bachelor's degree: '#3CCCCB' - high school diploma or equivalent (GED): '#A38F79' - master's degree (non-professional): '#8FD3E4' - no high school (secondary school): '#A1A6BD' - professional degree (MBA, MD, JD, etc.): '#ACE1C4' - some college credit, no degree: '#FEC0A1' - some high school: '#B2B2B2' - trade, technical, or vocational training: '#EFA1AA' - No, not an ethnic minority: '#1FA8C9' - Yes, an ethnic minority: '#454E7C' - : '#5AC189' - 'Yes': '#FF7F44' - 'No': '#666666' - last_yr_income: '#E04355' - More: '#A1A6BD' - Less: '#ACE1C4' - I: '#FEC0A1' - expected_earn: '#B2B2B2' - 'Yes: Willing To': '#EFA1AA' - 'No: Not Willing to': '#FDE380' - No Answer: '#D3B3DA' - In an Office (with Other Developers): '#9EE5E5' - No Preference: '#D1C6BC' - From Home: '#1FA8C9' + "0": "#FCC700" + "1": "#A868B7" + "15": "#3CCCCB" + "30": "#A38F79" + "45": "#8FD3E4" + age: "#1FA8C9" + Yes,: "#1FA8C9" + Female: "#454E7C" + Prefer: "#5AC189" + No,: "#FF7F44" + Male: "#666666" + Prefer not to say: "#E04355" + Ph.D.: "#FCC700" + associate's degree: "#A868B7" + bachelor's degree: "#3CCCCB" + high school diploma or equivalent (GED): "#A38F79" + master's degree (non-professional): "#8FD3E4" + no high school (secondary school): "#A1A6BD" + professional degree (MBA, MD, JD, etc.): "#ACE1C4" + some college credit, no degree: "#FEC0A1" + some high school: "#B2B2B2" + trade, technical, or vocational training: "#EFA1AA" + No, not an ethnic minority: "#1FA8C9" + Yes, an ethnic minority: "#454E7C" + : "#5AC189" + "Yes": "#FF7F44" + "No": "#666666" + last_yr_income: "#E04355" + More: "#A1A6BD" + Less: "#ACE1C4" + I: "#FEC0A1" + expected_earn: "#B2B2B2" + "Yes: Willing To": "#EFA1AA" + "No: Not Willing to": "#FDE380" + No Answer: "#D3B3DA" + In an Office (with Other Developers): "#9EE5E5" + No Preference: "#D1C6BC" + From Home: "#1FA8C9" version: 1.0.0 diff --git a/superset/examples/configs/dashboards/Sales_Dashboard.yaml b/superset/examples/configs/dashboards/Sales_Dashboard.yaml index 3efea3af2599b..439b763d0cfca 100644 --- a/superset/examples/configs/dashboards/Sales_Dashboard.yaml +++ b/superset/examples/configs/dashboards/Sales_Dashboard.yaml @@ -16,8 +16,11 @@ # under the License. dashboard_title: Sales Dashboard description: null -css: '' +css: "" slug: null +certified_by: "" +certification_details: "" +published: true uuid: 04f79081-fb49-7bac-7f14-cc76cd2ad93b position: CHART-1NOOLm5YPs: @@ -31,26 +34,26 @@ position: uuid: c3d643cd-fd6f-4659-a5b7-59402487a8d0 width: 2 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-Tyv02UA_6W - - COLUMN-8Rp54B6ikC + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-Tyv02UA_6W + - COLUMN-8Rp54B6ikC type: CHART CHART-AYpv8gFi_q: children: [] id: CHART-AYpv8gFi_q meta: chartId: 2810 - height: 91 + height: 70 sliceName: Number of Deals (for each Combination) uuid: bd20fc69-dd51-46c1-99b5-09e37a434bf1 - width: 3 + width: 6 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-0l1WcDzW3 + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-4fthLQmdX + - ROW-0l1WcDzW3 type: CHART CHART-KKT9BsnUst: children: [] @@ -63,90 +66,74 @@ position: uuid: db9609e4-9b78-4a32-87a7-4d9e19d51cd8 width: 7 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-oAtmu5grZ + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-oAtmu5grZ type: CHART CHART-OJ9aWDmn1q: children: [] id: CHART-OJ9aWDmn1q meta: chartId: 2808 - height: 91 + height: 70 sliceName: Proportion of Revenue by Product Line sliceNameOverride: Proportion of Monthly Revenue by Product Line uuid: 08aff161-f60c-4cb3-a225-dc9b1140d2e3 width: 6 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-0l1WcDzW3 + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-4fthLQmdX + - ROW-0l1WcDzW3 type: CHART CHART-YFg-9wHE7s: children: [] id: CHART-YFg-9wHE7s meta: chartId: 2811 - height: 63 + height: 49 sliceName: Seasonality of Revenue (per Product Line) uuid: cf0da099-b3ab-4d94-ab62-cf353ac3c611 width: 6 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-E7MDSGfnm + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-4fthLQmdX + - ROW-E7MDSGfnm type: CHART CHART-_LMKI0D3tj: children: [] id: CHART-_LMKI0D3tj meta: chartId: 2809 - height: 62 - sliceName: Revenue by Deal SIze + height: 49 + sliceName: Revenue by Deal Size sliceNameOverride: Monthly Revenue by Deal SIze uuid: f065a533-2e13-42b9-bd19-801a21700dff width: 6 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-E7MDSGfnm + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-4fthLQmdX + - ROW-E7MDSGfnm type: CHART CHART-id4RGv80N-: children: [] id: CHART-id4RGv80N- meta: chartId: 2807 - height: 40 + height: 59 sliceName: Total Items Sold (By Product Line) sliceNameOverride: Total Products Sold (By Product Line) uuid: b8b7ca30-6291-44b0-bc64-ba42e2892b86 width: 2 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-oAtmu5grZ - - COLUMN-G6_2DvG8aK - type: CHART - CHART-iyvXMcqHt9: - children: [] - id: CHART-iyvXMcqHt9 - meta: - chartId: 671 - height: 39 - sliceName: Filter - uuid: a5689df7-98fc-7c51-602c-ebd92dc3ec70 - width: 2 - parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-0l1WcDzW3 - - COLUMN-jlNWyWCfTC + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-oAtmu5grZ + - COLUMN-G6_2DvG8aK type: CHART CHART-j24u8ve41b: children: [] @@ -159,10 +146,10 @@ position: uuid: 09c497e0-f442-1121-c9e7-671e37750424 width: 3 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-oAtmu5grZ + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-oAtmu5grZ type: CHART CHART-lFanAaYKBK: children: [] @@ -174,11 +161,11 @@ position: uuid: 7b12a243-88e0-4dc5-ac33-9a840bb0ac5a width: 3 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-Tyv02UA_6W - - COLUMN-8Rp54B6ikC + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-Tyv02UA_6W + - COLUMN-8Rp54B6ikC type: CHART CHART-vomBOiI7U9: children: [] @@ -191,58 +178,44 @@ position: uuid: 692aca26-a526-85db-c94c-411c91cc1077 width: 7 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-Tyv02UA_6W + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-Tyv02UA_6W type: CHART COLUMN-8Rp54B6ikC: children: - - CHART-lFanAaYKBK - - CHART-1NOOLm5YPs + - CHART-lFanAaYKBK + - CHART-1NOOLm5YPs id: COLUMN-8Rp54B6ikC meta: background: BACKGROUND_TRANSPARENT width: 2 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-Tyv02UA_6W + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-Tyv02UA_6W type: COLUMN COLUMN-G6_2DvG8aK: children: - - CHART-id4RGv80N- + - CHART-id4RGv80N- id: COLUMN-G6_2DvG8aK meta: background: BACKGROUND_TRANSPARENT width: 2 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-oAtmu5grZ - type: COLUMN - COLUMN-jlNWyWCfTC: - children: - - MARKDOWN-HrzsMmvGQo - - CHART-iyvXMcqHt9 - id: COLUMN-jlNWyWCfTC - meta: - background: BACKGROUND_TRANSPARENT - width: 3 - parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-0l1WcDzW3 + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-oAtmu5grZ type: COLUMN DASHBOARD_VERSION_KEY: v2 GRID_ID: children: [] id: GRID_ID parents: - - ROOT_ID + - ROOT_ID type: GRID HEADER_ID: id: HEADER_ID @@ -253,7 +226,8 @@ position: children: [] id: MARKDOWN--AtDSWnapE meta: - code: "# \U0001F697 Vehicle Sales Dashboard \U0001F3CD\n\nThis example dashboard\ + code: + "# \U0001F697 Vehicle Sales Dashboard \U0001F3CD\n\nThis example dashboard\ \ provides insight into the business operations of vehicle seller. The dataset\ \ powering this dashboard can be found [here on Kaggle](https://www.kaggle.com/kyanyoga/sample-sales-data).\n\ \n### Timeline\n\nThe dataset contains data on all orders from the 2003 and\ @@ -265,151 +239,113 @@ position: height: 53 width: 3 parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH - - ROW-Tyv02UA_6W - type: MARKDOWN - MARKDOWN-HrzsMmvGQo: - children: [] - id: MARKDOWN-HrzsMmvGQo - meta: - code: "# \U0001F50D Filter Box\n\nDashboard filters are a powerful way to enable\ - \ teams to dive deeper into their business operations data. This filter box\ - \ helps focus the charts along the following variables:\n\n- Time Range: Focus\ - \ in on a specific time period (e.g. a holiday or quarter)\n- Product Line:\ - \ Choose 1 or more product lines to see relevant sales data\n- Deal Size:\ - \ Zoom in on small, medium, and / or large sales deals\n\nThe filter box below\ - \ \U0001F447 is configured to only apply to the charts in this tab (**Exploratory**).\ - \ You can customize the charts that this filter box applies to by:\n\n- entering\ - \ Edit mode in this dashboard\n- selecting the `...` in the top right corner\n\ - - selecting the **Set filter mapping** button" - height: 50 - width: 3 - parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX - - ROW-0l1WcDzW3 - - COLUMN-jlNWyWCfTC + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH + - ROW-Tyv02UA_6W type: MARKDOWN ROOT_ID: children: - - TABS-e5Ruro0cjP + - TABS-e5Ruro0cjP id: ROOT_ID type: ROOT ROW-0l1WcDzW3: children: - - COLUMN-jlNWyWCfTC - - CHART-OJ9aWDmn1q - - CHART-AYpv8gFi_q + - CHART-OJ9aWDmn1q + - CHART-AYpv8gFi_q id: ROW-0l1WcDzW3 meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-4fthLQmdX type: ROW ROW-E7MDSGfnm: children: - - CHART-YFg-9wHE7s - - CHART-_LMKI0D3tj + - CHART-YFg-9wHE7s + - CHART-_LMKI0D3tj id: ROW-E7MDSGfnm meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-4fthLQmdX + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-4fthLQmdX type: ROW ROW-Tyv02UA_6W: children: - - COLUMN-8Rp54B6ikC - - CHART-vomBOiI7U9 - - MARKDOWN--AtDSWnapE + - COLUMN-8Rp54B6ikC + - CHART-vomBOiI7U9 + - MARKDOWN--AtDSWnapE id: ROW-Tyv02UA_6W meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH type: ROW ROW-oAtmu5grZ: children: - - COLUMN-G6_2DvG8aK - - CHART-KKT9BsnUst - - CHART-j24u8ve41b + - COLUMN-G6_2DvG8aK + - CHART-KKT9BsnUst + - CHART-j24u8ve41b id: ROW-oAtmu5grZ meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-e5Ruro0cjP - - TAB-d-E0Zc1cTH + - ROOT_ID + - TABS-e5Ruro0cjP + - TAB-d-E0Zc1cTH type: ROW TAB-4fthLQmdX: children: - - ROW-0l1WcDzW3 - - ROW-E7MDSGfnm + - ROW-0l1WcDzW3 + - ROW-E7MDSGfnm id: TAB-4fthLQmdX meta: text: "\U0001F9ED Exploratory" parents: - - ROOT_ID - - TABS-e5Ruro0cjP + - ROOT_ID + - TABS-e5Ruro0cjP type: TAB TAB-d-E0Zc1cTH: children: - - ROW-Tyv02UA_6W - - ROW-oAtmu5grZ + - ROW-Tyv02UA_6W + - ROW-oAtmu5grZ id: TAB-d-E0Zc1cTH meta: text: "\U0001F3AF Sales Overview" parents: - - ROOT_ID - - TABS-e5Ruro0cjP + - ROOT_ID + - TABS-e5Ruro0cjP type: TAB TABS-e5Ruro0cjP: children: - - TAB-d-E0Zc1cTH - - TAB-4fthLQmdX + - TAB-d-E0Zc1cTH + - TAB-4fthLQmdX id: TABS-e5Ruro0cjP meta: {} parents: - - ROOT_ID + - ROOT_ID type: TABS metadata: timed_refresh_immune_slices: [] expanded_slices: {} refresh_frequency: 0 - default_filters: '{"671": {"__time_range": "No filter"}}' - filter_scopes: - "671": - product_line: - scope: - - TAB-4fthLQmdX - immune: [] - deal_size: - scope: - - ROOT_ID - immune: [] - __time_range: - scope: - - ROOT_ID - immune: [] + default_filters: "{}" color_scheme: supersetColors label_colors: - Medium: '#1FA8C9' - Small: '#454E7C' - Large: '#5AC189' - SUM(SALES): '#1FA8C9' - Classic Cars: '#454E7C' - Vintage Cars: '#5AC189' - Motorcycles: '#FF7F44' - Trucks and Buses: '#666666' - Planes: '#E04355' - Ships: '#FCC700' - Trains: '#A868B7' + Medium: "#1FA8C9" + Small: "#454E7C" + Large: "#5AC189" + SUM(SALES): "#1FA8C9" + Classic Cars: "#454E7C" + Vintage Cars: "#5AC189" + Motorcycles: "#FF7F44" + Trucks and Buses: "#666666" + Planes: "#E04355" + Ships: "#FCC700" + Trains: "#A868B7" version: 1.0.0 diff --git a/superset/examples/configs/dashboards/Video_Game_Sales.yaml b/superset/examples/configs/dashboards/Video_Game_Sales.yaml index 958d32b0696b7..2edaad2d1a8bc 100644 --- a/superset/examples/configs/dashboards/Video_Game_Sales.yaml +++ b/superset/examples/configs/dashboards/Video_Game_Sales.yaml @@ -16,39 +16,27 @@ # under the License. dashboard_title: Video Game Sales description: null -css: '' +css: "" slug: null +certified_by: "" +certification_details: "" +published: true uuid: c7bc10f4-6a2d-7569-caae-bbc91864ee11 position: - CHART-1L7NIcXvVN: - children: [] - id: CHART-1L7NIcXvVN - meta: - chartId: 3544 - height: 79 - sliceName: Games per Genre over time - uuid: 0f8976aa-7bb4-40c7-860b-64445a51aaaf - width: 6 - parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-fjg6YQBkH - type: CHART CHART-7mKdnU7OUJ: children: [] id: CHART-7mKdnU7OUJ meta: chartId: 3545 - height: 80 + height: 55 sliceName: Games per Genre uuid: 0499bdec-0837-44f3-ae8a-8c670de81afd - width: 3 + width: 8 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-yP9SB89PZ + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq + - ROW-yP9SB89PZ type: CHART CHART-8OG3UJX-Tn: children: [] @@ -56,15 +44,15 @@ position: meta: chartId: 661 height: 54 - sliceName: '# of Games That Hit 100k in Sales By Release Year' - sliceNameOverride: 'Top 10 Consoles, by # of Hit Games' + sliceName: "# of Games That Hit 100k in Sales By Release Year" + sliceNameOverride: "Top 10 Consoles, by # of Hit Games" uuid: 2b69887b-23e3-b46d-d38c-8ea11856c555 width: 6 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-7kAf1blYU + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm + - ROW-7kAf1blYU type: CHART CHART-W02beJK7ms: children: [] @@ -77,10 +65,10 @@ position: uuid: d20b7324-3b80-24d4-37e2-3bd583b66713 width: 3 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-7kAf1blYU + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm + - ROW-7kAf1blYU type: CHART CHART-XFag0yZdLk: children: [] @@ -93,10 +81,10 @@ position: uuid: 1810975a-f6d4-07c3-495c-c3b535d01f21 width: 3 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-7kAf1blYU + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm + - ROW-7kAf1blYU type: CHART CHART-XRvRfsMsaQ: children: [] @@ -104,14 +92,14 @@ position: meta: chartId: 3546 height: 62 - sliceName: 'Top 10 Games: Proportion of Sales in Markets' + sliceName: "Top 10 Games: Proportion of Sales in Markets" uuid: a40879d5-653a-42fe-9314-bbe88ad26e92 width: 6 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-NuR8GFQTO + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm + - ROW-NuR8GFQTO type: CHART CHART-XVIYTeubZh: children: [] @@ -121,12 +109,12 @@ position: height: 80 sliceName: Games uuid: 2a5e562b-ab37-1b9b-1de3-1be4335c8e83 - width: 5 + width: 6 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-yP9SB89PZ + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq + - ROW-yP9SB89PZ type: CHART CHART-_sx22yawJO: children: [] @@ -138,78 +126,45 @@ position: uuid: 326fc7e5-b7f1-448e-8a6f-80d0e7ce0b64 width: 6 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-NuR8GFQTO + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm + - ROW-NuR8GFQTO type: CHART CHART-nYns6xr4Ft: children: [] id: CHART-nYns6xr4Ft meta: chartId: 3548 - height: 79 + height: 80 sliceName: Total Sales per Market (Grouped by Genre) uuid: d8bf948e-46fd-4380-9f9c-a950c34bcc92 width: 6 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-fjg6YQBkH - type: CHART - CHART-uP9GF0z0rT: - children: [] - id: CHART-uP9GF0z0rT - meta: - chartId: 3547 - height: 45 - sliceName: Filter - uuid: fd9ce7ec-ae08-4f71-93e0-7c26b132b2e6 - width: 4 - parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-yP9SB89PZ - - COLUMN-F53B1OSMcz - type: CHART - CHART-wt6ZO8jRXZ: - children: [] - id: CHART-wt6ZO8jRXZ - meta: - chartId: 659 - height: 72 - sliceName: Rise & Fall of Video Game Consoles - sliceNameOverride: Global Sales per Console - uuid: 83b0e2d0-d38b-d980-ed8e-e1c9846361b6 - width: 12 - parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-XT1DsNA_V + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq + - ROW-fjg6YQBkH type: CHART COLUMN-F53B1OSMcz: children: - - MARKDOWN-7K5cBNy7qu - - CHART-uP9GF0z0rT + - MARKDOWN-7K5cBNy7qu id: COLUMN-F53B1OSMcz meta: background: BACKGROUND_TRANSPARENT width: 4 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-yP9SB89PZ + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq + - ROW-yP9SB89PZ type: COLUMN DASHBOARD_VERSION_KEY: v2 GRID_ID: children: [] id: GRID_ID parents: - - ROOT_ID + - ROOT_ID type: GRID HEADER_ID: id: HEADER_ID @@ -220,224 +175,194 @@ position: children: [] id: MARKDOWN-7K5cBNy7qu meta: - code: "# \U0001F93F Explore Trends\n\nDive into data on popular video games\ + code: + "# \U0001F93F Explore Trends\n\nDive into data on popular video games\ \ using the following dimensions:\n\n- Year\n- Platform\n- Publisher\n- Genre\n\ \nTo use the **Filter Games** box below, select values for each dimension\ \ you want to zoom in on and then click **Apply**. \n\nThe filter criteria\ \ you set in this Filter-box will apply to *all* charts in this tab." - height: 33 + height: 55 width: 4 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq - - ROW-yP9SB89PZ - - COLUMN-F53B1OSMcz + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq + - ROW-yP9SB89PZ + - COLUMN-F53B1OSMcz type: MARKDOWN MARKDOWN-JOZKOjVc3a: children: [] id: MARKDOWN-JOZKOjVc3a meta: - code: "## \U0001F3AEVideo Game Sales\n\nThis dashboard visualizes sales & platform\ + code: + "## \U0001F3AEVideo Game Sales\n\nThis dashboard visualizes sales & platform\ \ data on video games that sold more than 100k copies. The data was last updated\ \ in early 2017.\n\n[Original dataset](https://www.kaggle.com/gregorut/videogamesales)" height: 18 width: 12 parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - - ROW-0F99WDC-sz + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm + - ROW-0F99WDC-sz type: MARKDOWN ROOT_ID: children: - - TABS-97PVJa11D_ + - TABS-97PVJa11D_ id: ROOT_ID type: ROOT ROW-0F99WDC-sz: children: - - MARKDOWN-JOZKOjVc3a + - MARKDOWN-JOZKOjVc3a id: ROW-0F99WDC-sz meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm type: ROW ROW-7kAf1blYU: children: - - CHART-W02beJK7ms - - CHART-XFag0yZdLk - - CHART-8OG3UJX-Tn + - CHART-W02beJK7ms + - CHART-XFag0yZdLk + - CHART-8OG3UJX-Tn id: ROW-7kAf1blYU meta: - '0': ROOT_ID + "0": ROOT_ID background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm type: ROW ROW-NuR8GFQTO: children: - - CHART-_sx22yawJO - - CHART-XRvRfsMsaQ + - CHART-_sx22yawJO + - CHART-XRvRfsMsaQ id: ROW-NuR8GFQTO meta: - '0': ROOT_ID - '1': TABS-97PVJa11D_ - background: BACKGROUND_TRANSPARENT - parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm - type: ROW - ROW-XT1DsNA_V: - children: - - CHART-wt6ZO8jRXZ - id: ROW-XT1DsNA_V - meta: + "0": ROOT_ID + "1": TABS-97PVJa11D_ background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-lg-5ymUDgm + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-lg-5ymUDgm type: ROW ROW-fjg6YQBkH: children: - - CHART-1L7NIcXvVN - - CHART-nYns6xr4Ft + - CHART-nYns6xr4Ft + - CHART-XVIYTeubZh id: ROW-fjg6YQBkH meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq type: ROW ROW-yP9SB89PZ: children: - - COLUMN-F53B1OSMcz - - CHART-XVIYTeubZh - - CHART-7mKdnU7OUJ + - COLUMN-F53B1OSMcz + - CHART-7mKdnU7OUJ id: ROW-yP9SB89PZ meta: background: BACKGROUND_TRANSPARENT parents: - - ROOT_ID - - TABS-97PVJa11D_ - - TAB-2_QXp8aNq + - ROOT_ID + - TABS-97PVJa11D_ + - TAB-2_QXp8aNq type: ROW TAB-2_QXp8aNq: children: - - ROW-yP9SB89PZ - - ROW-fjg6YQBkH + - ROW-yP9SB89PZ + - ROW-fjg6YQBkH id: TAB-2_QXp8aNq meta: text: "\U0001F93F Explore Trends" parents: - - ROOT_ID - - TABS-97PVJa11D_ + - ROOT_ID + - TABS-97PVJa11D_ type: TAB TAB-lg-5ymUDgm: children: - - ROW-0F99WDC-sz - - ROW-XT1DsNA_V - - ROW-7kAf1blYU - - ROW-NuR8GFQTO + - ROW-0F99WDC-sz + - ROW-7kAf1blYU + - ROW-NuR8GFQTO id: TAB-lg-5ymUDgm meta: text: Overview parents: - - ROOT_ID - - TABS-97PVJa11D_ + - ROOT_ID + - TABS-97PVJa11D_ type: TAB TABS-97PVJa11D_: children: - - TAB-lg-5ymUDgm - - TAB-2_QXp8aNq + - TAB-lg-5ymUDgm + - TAB-2_QXp8aNq id: TABS-97PVJa11D_ meta: {} parents: - - ROOT_ID + - ROOT_ID type: TABS metadata: timed_refresh_immune_slices: [] expanded_slices: {} refresh_frequency: 0 - default_filters: '{"3547": {"platform": ["PS", "PS2", "PS3", "XB", "X360"], "__time_range": - "No filter"}}' + default_filters: "{}" color_scheme: supersetColors - filter_scopes: - "3547": - platform: - scope: - - TAB-2_QXp8aNq - immune: [] - genre: - scope: - - ROOT_ID - immune: [] - publisher: - scope: - - ROOT_ID - immune: [] - __time_range: - scope: - - ROOT_ID - immune: [] label_colors: - '0': '#1FA8C9' - '1': '#454E7C' - '2600': '#666666' - Europe: '#5AC189' - Japan: '#FF7F44' - North America: '#666666' - Other: '#E04355' - PS2: '#FCC700' - X360: '#A868B7' - PS3: '#3CCCCB' - Wii: '#A38F79' - DS: '#8FD3E4' - PS: '#A1A6BD' - GBA: '#ACE1C4' - PSP: '#FEC0A1' - PS4: '#B2B2B2' - PC: '#EFA1AA' - GB: '#FDE380' - XB: '#D3B3DA' - NES: '#9EE5E5' - 3DS: '#D1C6BC' - N64: '#1FA8C9' - SNES: '#454E7C' - GC: '#5AC189' - XOne: '#FF7F44' - WiiU: '#E04355' - PSV: '#FCC700' - SAT: '#A868B7' - GEN: '#3CCCCB' - DC: '#A38F79' - SCD: '#8FD3E4' - NG: '#A1A6BD' - WS: '#ACE1C4' - TG16: '#FEC0A1' - 3DO: '#B2B2B2' - GG: '#EFA1AA' - PCFX: '#FDE380' - Nintendo: '#D3B3DA' - Take-Two Interactive: '#9EE5E5' - Microsoft Game Studios: '#D1C6BC' - Action: '#1FA8C9' - Adventure: '#454E7C' - Fighting: '#5AC189' - Misc: '#FF7F44' - Platform: '#666666' - Puzzle: '#E04355' - Racing: '#FCC700' - Role-Playing: '#A868B7' - Shooter: '#3CCCCB' - Simulation: '#A38F79' - Sports: '#8FD3E4' - Strategy: '#A1A6BD' + "0": "#1FA8C9" + "1": "#454E7C" + "2600": "#666666" + Europe: "#5AC189" + Japan: "#FF7F44" + North America: "#666666" + Other: "#E04355" + PS2: "#FCC700" + X360: "#A868B7" + PS3: "#3CCCCB" + Wii: "#A38F79" + DS: "#8FD3E4" + PS: "#A1A6BD" + GBA: "#ACE1C4" + PSP: "#FEC0A1" + PS4: "#B2B2B2" + PC: "#EFA1AA" + GB: "#FDE380" + XB: "#D3B3DA" + NES: "#9EE5E5" + 3DS: "#D1C6BC" + N64: "#1FA8C9" + SNES: "#454E7C" + GC: "#5AC189" + XOne: "#FF7F44" + WiiU: "#E04355" + PSV: "#FCC700" + SAT: "#A868B7" + GEN: "#3CCCCB" + DC: "#A38F79" + SCD: "#8FD3E4" + NG: "#A1A6BD" + WS: "#ACE1C4" + TG16: "#FEC0A1" + 3DO: "#B2B2B2" + GG: "#EFA1AA" + PCFX: "#FDE380" + Nintendo: "#D3B3DA" + Take-Two Interactive: "#9EE5E5" + Microsoft Game Studios: "#D1C6BC" + Action: "#1FA8C9" + Adventure: "#454E7C" + Fighting: "#5AC189" + Misc: "#FF7F44" + Platform: "#666666" + Puzzle: "#E04355" + Racing: "#FCC700" + Role-Playing: "#A868B7" + Shooter: "#3CCCCB" + Simulation: "#A38F79" + Sports: "#8FD3E4" + Strategy: "#A1A6BD" version: 1.0.0 diff --git a/superset/examples/misc_dashboard.py b/superset/examples/misc_dashboard.py index 6336a78820e2b..aa8d03749550a 100644 --- a/superset/examples/misc_dashboard.py +++ b/superset/examples/misc_dashboard.py @@ -38,37 +38,22 @@ def load_misc_dashboard() -> None: js = textwrap.dedent( """\ { - "CHART-BkeVbh8ANQ": { - "children": [], - "id": "CHART-BkeVbh8ANQ", - "meta": { - "chartId": 4004, - "height": 34, - "sliceName": "Multi Line", - "width": 8 - }, - "type": "CHART" - }, - "CHART-H1HYNzEANX": { - "children": [], - "id": "CHART-H1HYNzEANX", - "meta": { - "chartId": 3940, - "height": 50, - "sliceName": "Energy Sankey", - "width": 6 - }, - "type": "CHART" - }, "CHART-HJOYVMV0E7": { "children": [], "id": "CHART-HJOYVMV0E7", "meta": { "chartId": 3969, - "height": 63, + "height": 69, "sliceName": "Mapbox Long/Lat", - "width": 6 + "uuid": "164efe31-295b-4408-aaa6-2f4bfb58a212", + "width": 4 }, + "parents": [ + "ROOT_ID", + "GRID_ID", + "ROW-S1MK4M4A4X", + "COLUMN-ByUFVf40EQ" + ], "type": "CHART" }, "CHART-S1WYNz4AVX": { @@ -76,32 +61,16 @@ def load_misc_dashboard() -> None: "id": "CHART-S1WYNz4AVX", "meta": { "chartId": 3989, - "height": 25, + "height": 69, "sliceName": "Parallel Coordinates", + "uuid": "e84f7e74-031a-47bb-9f80-ae0694dcca48", "width": 4 }, - "type": "CHART" - }, - "CHART-r19KVMNCE7": { - "children": [], - "id": "CHART-r19KVMNCE7", - "meta": { - "chartId": 3971, - "height": 34, - "sliceName": "Calendar Heatmap multiformat 0", - "width": 4 - }, - "type": "CHART" - }, - "CHART-rJ4K4GV04Q": { - "children": [], - "id": "CHART-rJ4K4GV04Q", - "meta": { - "chartId": 3941, - "height": 63, - "sliceName": "Energy Force Layout", - "width": 6 - }, + "parents": [ + "ROOT_ID", + "GRID_ID", + "ROW-SytNzNA4X" + ], "type": "CHART" }, "CHART-rkgF4G4A4X": { @@ -109,54 +78,27 @@ def load_misc_dashboard() -> None: "id": "CHART-rkgF4G4A4X", "meta": { "chartId": 3970, - "height": 25, + "height": 69, "sliceName": "Birth in France by department in 2016", - "width": 8 - }, - "type": "CHART" - }, - "CHART-rywK4GVR4X": { - "children": [], - "id": "CHART-rywK4GVR4X", - "meta": { - "chartId": 3942, - "height": 50, - "sliceName": "Heatmap", - "width": 6 - }, - "type": "CHART" - }, - "COLUMN-ByUFVf40EQ": { - "children": [ - "CHART-rywK4GVR4X", - "CHART-HJOYVMV0E7" - ], - "id": "COLUMN-ByUFVf40EQ", - "meta": { - "background": "BACKGROUND_TRANSPARENT", - "width": 6 + "uuid": "54583ae9-c99a-42b5-a906-7ee2adfe1fb1", + "width": 4 }, - "type": "COLUMN" - }, - "COLUMN-rkmYVGN04Q": { - "children": [ - "CHART-rJ4K4GV04Q", - "CHART-H1HYNzEANX" + "parents": [ + "ROOT_ID", + "GRID_ID", + "ROW-SytNzNA4X" ], - "id": "COLUMN-rkmYVGN04Q", - "meta": { - "background": "BACKGROUND_TRANSPARENT", - "width": 6 - }, - "type": "COLUMN" + "type": "CHART" }, + "DASHBOARD_VERSION_KEY": "v2", "GRID_ID": { "children": [ - "ROW-SytNzNA4X", - "ROW-S1MK4M4A4X", - "ROW-HkFFEzVRVm" + "ROW-SytNzNA4X" ], "id": "GRID_ID", + "parents": [ + "ROOT_ID" + ], "type": "GRID" }, "HEADER_ID": { @@ -173,40 +115,22 @@ def load_misc_dashboard() -> None: "id": "ROOT_ID", "type": "ROOT" }, - "ROW-HkFFEzVRVm": { - "children": [ - "CHART-r19KVMNCE7", - "CHART-BkeVbh8ANQ" - ], - "id": "ROW-HkFFEzVRVm", - "meta": { - "background": "BACKGROUND_TRANSPARENT" - }, - "type": "ROW" - }, - "ROW-S1MK4M4A4X": { - "children": [ - "COLUMN-rkmYVGN04Q", - "COLUMN-ByUFVf40EQ" - ], - "id": "ROW-S1MK4M4A4X", - "meta": { - "background": "BACKGROUND_TRANSPARENT" - }, - "type": "ROW" - }, "ROW-SytNzNA4X": { "children": [ "CHART-rkgF4G4A4X", - "CHART-S1WYNz4AVX" + "CHART-S1WYNz4AVX", + "CHART-HJOYVMV0E7" ], "id": "ROW-SytNzNA4X", "meta": { "background": "BACKGROUND_TRANSPARENT" }, + "parents": [ + "ROOT_ID", + "GRID_ID" + ], "type": "ROW" - }, - "DASHBOARD_VERSION_KEY": "v2" + } } """ ) diff --git a/superset/examples/world_bank.py b/superset/examples/world_bank.py index 5513a52d64ba0..1541e3e4724a1 100644 --- a/superset/examples/world_bank.py +++ b/superset/examples/world_bank.py @@ -167,35 +167,6 @@ def create_slices(tbl: BaseDatasource) -> list[Slice]: } return [ - Slice( - slice_name="Region Filter", - viz_type="filter_box", - datasource_type=DatasourceType.TABLE, - datasource_id=tbl.id, - params=get_slice_json( - defaults, - viz_type="filter_box", - date_filter=False, - filter_configs=[ - { - "asc": False, - "clearable": True, - "column": "region", - "key": "2s98dfu", - "metric": "sum__SP_POP_TOTL", - "multiple": False, - }, - { - "asc": False, - "clearable": True, - "key": "li3j2lk", - "column": "country_name", - "metric": "sum__SP_POP_TOTL", - "multiple": True, - }, - ], - ), - ), Slice( slice_name="World's Population", viz_type="big_number", @@ -372,18 +343,12 @@ def create_slices(tbl: BaseDatasource) -> list[Slice]: dashboard_positions = { - "CHART-36bfc934": { - "children": [], - "id": "CHART-36bfc934", - "meta": {"chartId": 40, "height": 25, "sliceName": "Region Filter", "width": 2}, - "type": "CHART", - }, "CHART-37982887": { "children": [], "id": "CHART-37982887", "meta": { "chartId": 41, - "height": 25, + "height": 52, "sliceName": "World's Population", "width": 2, }, @@ -464,7 +429,7 @@ def create_slices(tbl: BaseDatasource) -> list[Slice]: "type": "COLUMN", }, "COLUMN-fe3914b8": { - "children": ["CHART-36bfc934", "CHART-37982887"], + "children": ["CHART-37982887"], "id": "COLUMN-fe3914b8", "meta": {"background": "BACKGROUND_TRANSPARENT", "width": 2}, "type": "COLUMN", diff --git a/tests/integration_tests/charts/api_tests.py b/tests/integration_tests/charts/api_tests.py index fe489a0f362c8..69888104fa4ef 100644 --- a/tests/integration_tests/charts/api_tests.py +++ b/tests/integration_tests/charts/api_tests.py @@ -981,7 +981,7 @@ def test_get_charts(self): rv = self.get_assert_metric(uri, "get_list") self.assertEqual(rv.status_code, 200) data = json.loads(rv.data.decode("utf-8")) - self.assertEqual(data["count"], 34) + self.assertEqual(data["count"], 33) @pytest.mark.usefixtures("load_energy_table_with_slice", "add_dashboard_to_chart") def test_get_charts_dashboards(self): @@ -1447,7 +1447,7 @@ def test_get_charts_page(self): """ Chart API: Test get charts filter """ - # Assuming we have 34 sample charts + # Assuming we have 33 sample charts self.login(username="admin") arguments = {"page_size": 10, "page": 0} uri = f"api/v1/chart/?q={prison.dumps(arguments)}" @@ -1461,7 +1461,7 @@ def test_get_charts_page(self): rv = self.get_assert_metric(uri, "get_list") self.assertEqual(rv.status_code, 200) data = json.loads(rv.data.decode("utf-8")) - self.assertEqual(len(data["result"]), 4) + self.assertEqual(len(data["result"]), 3) def test_get_charts_no_data_access(self): """ diff --git a/tests/integration_tests/dashboards/commands_tests.py b/tests/integration_tests/dashboards/commands_tests.py index cfc992b95fd47..175a8a3198da6 100644 --- a/tests/integration_tests/dashboards/commands_tests.py +++ b/tests/integration_tests/dashboards/commands_tests.py @@ -97,17 +97,11 @@ def test_export_dashboard_command(self, mock_g1, mock_g2): "published": False, "uuid": str(example_dashboard.uuid), "position": { - "CHART-36bfc934": { - "children": [], - "id": "CHART-36bfc934", - "meta": {"height": 25, "sliceName": "Region Filter", "width": 2}, - "type": "CHART", - }, "CHART-37982887": { "children": [], "id": "CHART-37982887", "meta": { - "height": 25, + "height": 52, "sliceName": "World's Population", "width": 2, }, @@ -180,7 +174,7 @@ def test_export_dashboard_command(self, mock_g1, mock_g2): "type": "COLUMN", }, "COLUMN-fe3914b8": { - "children": ["CHART-36bfc934", "CHART-37982887"], + "children": ["CHART-37982887"], "id": "COLUMN-fe3914b8", "meta": {"background": "BACKGROUND_TRANSPARENT", "width": 2}, "type": "COLUMN", @@ -299,7 +293,9 @@ def test_append_charts(self, mock_suffix): mock_suffix.side_effect = (str(i) for i in itertools.count(1)) position = get_default_position("example") - chart_1 = db.session.query(Slice).filter_by(slice_name="Region Filter").one() + chart_1 = ( + db.session.query(Slice).filter_by(slice_name="World's Population").one() + ) new_position = append_charts(position, {chart_1}) assert new_position == { "DASHBOARD_VERSION_KEY": "v2", @@ -328,7 +324,7 @@ def test_append_charts(self, mock_suffix): "meta": { "chartId": chart_1.id, "height": 50, - "sliceName": "Region Filter", + "sliceName": "World's Population", "uuid": str(chart_1.uuid), "width": 4, }, @@ -375,7 +371,7 @@ def test_append_charts(self, mock_suffix): "meta": { "chartId": chart_1.id, "height": 50, - "sliceName": "Region Filter", + "sliceName": "World's Population", "uuid": str(chart_1.uuid), "width": 4, }, @@ -406,7 +402,7 @@ def test_append_charts(self, mock_suffix): "meta": { "chartId": chart_1.id, "height": 50, - "sliceName": "Region Filter", + "sliceName": "World's Population", "uuid": str(chart_1.uuid), "width": 4, }, diff --git a/tests/integration_tests/dashboards/dao_tests.py b/tests/integration_tests/dashboards/dao_tests.py index 8f73e5c2f8e9a..65fc9e32dd534 100644 --- a/tests/integration_tests/dashboards/dao_tests.py +++ b/tests/integration_tests/dashboards/dao_tests.py @@ -33,60 +33,6 @@ class TestDashboardDAO(SupersetTestCase): - @pytest.mark.usefixtures("load_world_bank_dashboard_with_slices") - def test_set_dash_metadata(self): - dash: Dashboard = ( - db.session.query(Dashboard).filter_by(slug="world_health").first() - ) - data = dash.data - positions = data["position_json"] - data.update({"positions": positions}) - original_data = copy.deepcopy(data) - - # add filter scopes - filter_slice = next(slc for slc in dash.slices if slc.viz_type == "filter_box") - immune_slices = [slc for slc in dash.slices if slc != filter_slice] - filter_scopes = { - str(filter_slice.id): { - "region": { - "scope": ["ROOT_ID"], - "immune": [slc.id for slc in immune_slices], - } - } - } - data.update({"filter_scopes": json.dumps(filter_scopes)}) - DashboardDAO.set_dash_metadata(dash, data) - updated_metadata = json.loads(dash.json_metadata) - self.assertEqual(updated_metadata["filter_scopes"], filter_scopes) - - # remove a slice and change slice ids (as copy slices) - removed_slice = immune_slices.pop() - removed_components = [ - key - for (key, value) in positions.items() - if isinstance(value, dict) - and value.get("type") == "CHART" - and value["meta"]["chartId"] == removed_slice.id - ] - for component_id in removed_components: - del positions[component_id] - - data.update({"positions": positions}) - DashboardDAO.set_dash_metadata(dash, data) - updated_metadata = json.loads(dash.json_metadata) - expected_filter_scopes = { - str(filter_slice.id): { - "region": { - "scope": ["ROOT_ID"], - "immune": [slc.id for slc in immune_slices], - } - } - } - self.assertEqual(updated_metadata["filter_scopes"], expected_filter_scopes) - - # reset dash to original data - DashboardDAO.set_dash_metadata(dash, original_data) - @pytest.mark.usefixtures("load_world_bank_dashboard_with_slices") @patch("superset.utils.core.g") @patch("superset.security.manager.g") diff --git a/tests/integration_tests/databases/api_tests.py b/tests/integration_tests/databases/api_tests.py index 6e6f6e15b8112..496012390eb92 100644 --- a/tests/integration_tests/databases/api_tests.py +++ b/tests/integration_tests/databases/api_tests.py @@ -2074,7 +2074,7 @@ def test_get_database_related_objects(self): rv = self.get_assert_metric(uri, "related_objects") self.assertEqual(rv.status_code, 200) response = json.loads(rv.data.decode("utf-8")) - self.assertEqual(response["charts"]["count"], 34) + self.assertEqual(response["charts"]["count"], 33) self.assertEqual(response["dashboards"]["count"], 3) def test_get_database_related_objects_not_found(self): diff --git a/tests/integration_tests/utils_tests.py b/tests/integration_tests/utils_tests.py index 405040e3d0838..ddd0b0caf43ef 100644 --- a/tests/integration_tests/utils_tests.py +++ b/tests/integration_tests/utils_tests.py @@ -744,50 +744,6 @@ def test_as_list(self): self.assertListEqual(as_list([123]), [123]) self.assertListEqual(as_list("foo"), ["foo"]) - @pytest.mark.usefixtures("load_world_bank_dashboard_with_slices") - def test_build_extra_filters(self): - world_health = db.session.query(Dashboard).filter_by(slug="world_health").one() - layout = json.loads(world_health.position_json) - filter_ = db.session.query(Slice).filter_by(slice_name="Region Filter").one() - world = db.session.query(Slice).filter_by(slice_name="World's Population").one() - box_plot = db.session.query(Slice).filter_by(slice_name="Box plot").one() - treemap = db.session.query(Slice).filter_by(slice_name="Treemap").one() - - filter_scopes = { - str(filter_.id): { - "region": {"scope": ["ROOT_ID"], "immune": [treemap.id]}, - "country_name": { - "scope": ["ROOT_ID"], - "immune": [treemap.id, box_plot.id], - }, - } - } - - default_filters = { - str(filter_.id): { - "region": ["North America"], - "country_name": ["United States"], - } - } - - # immune to all filters - assert ( - build_extra_filters(layout, filter_scopes, default_filters, treemap.id) - == [] - ) - - # in scope - assert build_extra_filters( - layout, filter_scopes, default_filters, world.id - ) == [ - {"col": "region", "op": "==", "val": "North America"}, - {"col": "country_name", "op": "in", "val": ["United States"]}, - ] - - assert build_extra_filters( - layout, filter_scopes, default_filters, box_plot.id - ) == [{"col": "region", "op": "==", "val": "North America"}] - def test_merge_extra_filters_with_no_extras(self): form_data = { "time_range": "Last 10 days",