From 8112fc88e0afbc0651d595bfb5982004ab75b1aa Mon Sep 17 00:00:00 2001 From: Tai Nguyen Date: Thu, 7 Aug 2025 05:34:34 +0000 Subject: [PATCH 001/168] Modify: team-folders/tai/dashboards/tai_test_new_block.page.aml --- .../dashboards/tai_test_new_block.page.aml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/team-folders/tai/dashboards/tai_test_new_block.page.aml b/team-folders/tai/dashboards/tai_test_new_block.page.aml index 3d45194..ca15845 100644 --- a/team-folders/tai/dashboards/tai_test_new_block.page.aml +++ b/team-folders/tai/dashboards/tai_test_new_block.page.aml @@ -57,6 +57,36 @@ Dashboard tai_test_new_block { } } } + block v_ydnh: VizBlock { + label: 'Order Id and User Id' + viz: DataTable { + dataset: demo_ecommerce + fields: [ + VizFieldFull { + ref: r(order_master.order_id) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_number: true + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } view: CanvasLayout { label: 'View 1' @@ -74,6 +104,10 @@ Dashboard tai_test_new_block { position: pos(440, 100, 400, 300) layer: 2 } + block v_ydnh { + position: pos(20, 420, 400, 300) + layer: 3 + } mobile { mode: 'auto' } From 5e65372d571945b4b18847f9eadce242211612a3 Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Mon, 22 Dec 2025 03:30:37 +0000 Subject: [PATCH 002/168] Update spacing comment in 'demo_ecommerce' dataset definition file --- demo ecommerce/datasets/demo_ecommerce.dataset.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo ecommerce/datasets/demo_ecommerce.dataset.aml b/demo ecommerce/datasets/demo_ecommerce.dataset.aml index 3baebe0..80de595 100644 --- a/demo ecommerce/datasets/demo_ecommerce.dataset.aml +++ b/demo ecommerce/datasets/demo_ecommerce.dataset.aml @@ -16,7 +16,7 @@ PreAggregate agg_daily { } Dataset demo_ecommerce { - __engine__: 'aql' //turn this Dataset to using AQL Engine + __engine__: 'aql' //turn this Dataset to using AQL Engine label: '[Demo] Ecommerce (Official)' description: "Official dataset for demoing E-commerce use cases test" owner: 'ha.pham+demo4@holistics.io' From 690ec53ec4a3b1743241c5a996aaf58f2b2ae3cb Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Mon, 22 Dec 2025 03:31:00 +0000 Subject: [PATCH 003/168] Update 'Ecommerce Dashboard - Pro' layout and refine 'demo_ecommerce' dataset engine setting --- demo ecommerce/dashboards/Ecommerce Dashboard - Pro.page.aml | 2 +- demo ecommerce/datasets/demo_ecommerce.dataset.aml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo ecommerce/dashboards/Ecommerce Dashboard - Pro.page.aml b/demo ecommerce/dashboards/Ecommerce Dashboard - Pro.page.aml index 5621ce1..bd87e89 100644 --- a/demo ecommerce/dashboards/Ecommerce Dashboard - Pro.page.aml +++ b/demo ecommerce/dashboards/Ecommerce Dashboard - Pro.page.aml @@ -1627,7 +1627,7 @@ abc;; position: pos(1320, 20, 180, 50) } block hd2 { - position: pos(40, 20, 640, 60) + position: pos(40, 20, 780, 60) } block hd3 { position: pos(0, 0, 1540, 200) diff --git a/demo ecommerce/datasets/demo_ecommerce.dataset.aml b/demo ecommerce/datasets/demo_ecommerce.dataset.aml index 80de595..a575bb4 100644 --- a/demo ecommerce/datasets/demo_ecommerce.dataset.aml +++ b/demo ecommerce/datasets/demo_ecommerce.dataset.aml @@ -16,7 +16,7 @@ PreAggregate agg_daily { } Dataset demo_ecommerce { - __engine__: 'aql' //turn this Dataset to using AQL Engine + __engine__: 'aql' //turn this Dataset to using AQL Engine new label: '[Demo] Ecommerce (Official)' description: "Official dataset for demoing E-commerce use cases test" owner: 'ha.pham+demo4@holistics.io' From 60ca972baf2c3fdcbf6d41abb19565d3e6bec51c Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 27 Feb 2026 11:14:12 +0000 Subject: [PATCH 004/168] Add 'public_issues_1', 'public_projects_1', 'public_users_1', 'public_issue_stage_durations_1', 'public_issue_status_transitions_1' models and 'sales_rep_uc_3_outlier_csv' model, update 'Vy's Ecommerce Dataset' dataset with new CSV source --- .../Vy's Ecommerce Dataset.dataset.aml | 2 + .../public_issue_stage_durations_1.model.aml | 46 ++++++ ...ublic_issue_status_transitions_1.model.aml | 46 ++++++ .../Vy's Model/public_issues_1.model.aml | 136 ++++++++++++++++++ .../Vy's Model/public_projects_1.model.aml | 34 +++++ .../Vy's Model/public_users_1.model.aml | 34 +++++ .../sales_rep_uc_3_outlier_csv.model.aml | 57 ++++++++ 7 files changed, 355 insertions(+) create mode 100644 team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/public_users_1.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/sales_rep_uc_3_outlier_csv.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Vy's Ecommerce Dataset.dataset.aml b/team-folders/VyHuynh/Vy's Model/Vy's Ecommerce Dataset.dataset.aml index b953188..cd006dd 100644 --- a/team-folders/VyHuynh/Vy's Model/Vy's Ecommerce Dataset.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Vy's Ecommerce Dataset.dataset.aml @@ -11,6 +11,8 @@ Dataset vyhuynh_ecommerce_dataset { vy_sales_revenue_demo_csv , revenue_by_country_csv + , + sales_rep_uc_3_outlier_csv ] relationships: [ relationship(vyht_ecommerce_orders_1.user_id > vyht_ecommerce_users_1.id, true), diff --git a/team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml new file mode 100644 index 0000000..81e52b2 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml @@ -0,0 +1,46 @@ +Model public_issue_stage_durations_1 { + type: 'table' + label: 'Issue Stage Durations' + description: '' + data_source_name: 'project_management' + dimension id { + label: 'Id' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.id }};; + primary_key: true + } + dimension issue_id { + label: 'Issue Id' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.issue_id }};; + } + dimension stage { + label: 'Stage' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.stage }};; + } + dimension entered_at { + label: 'Entered At' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.entered_at }};; + } + dimension exited_at { + label: 'Exited At' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.exited_at }};; + } + dimension duration_hours { + label: 'Duration Hours' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.duration_hours }};; + } + + owner: 'vy.ht@holistics.io' + table_name: '"public"."issue_stage_durations"' +} diff --git a/team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml new file mode 100644 index 0000000..7c49991 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml @@ -0,0 +1,46 @@ +Model public_issue_status_transitions_1 { + type: 'table' + label: 'Issue Status Transitions' + description: '' + data_source_name: 'project_management' + dimension id { + label: 'Id' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.id }};; + primary_key: true + } + dimension issue_id { + label: 'Issue Id' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.issue_id }};; + } + dimension from_status { + label: 'From Status' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.from_status }};; + } + dimension to_status { + label: 'To Status' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.to_status }};; + } + dimension transitioned_at { + label: 'Transitioned At' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.transitioned_at }};; + } + dimension transitioned_by { + label: 'Transitioned By' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.transitioned_by }};; + } + + owner: 'vy.ht@holistics.io' + table_name: '"public"."issue_status_transitions"' +} diff --git a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml new file mode 100644 index 0000000..dc24128 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml @@ -0,0 +1,136 @@ +Model public_issues_1 { + type: 'table' + label: 'Issues' + description: '' + data_source_name: 'project_management' + + dimension id { + label: 'Id' + type: 'text' + description: "The **Id** field contains the unique identifier assigned to each issue in the system. \nExamples include `1`, `10`, `100`, `23`, and `89`." + hidden: false + definition: @sql {{ #SOURCE.id }};; + primary_key: true + } + dimension title { + label: 'Title' + type: 'text' + description: "The **title** field contains the descriptive name of an issue. \nIt represents the main summary or headline used to identify and reference the issue in the project management context. " + hidden: false + definition: @sql {{ #SOURCE.title }};; + primary_key: false + } + dimension identifier { + label: 'Identifier' + type: 'text' + description: "The **identifier** field contains a unique textual label assigned to each issue for identification purposes within the system. \n\nExamples include `abeo ultio tergo`, `adfero`, and `adimpleo alius campana`." + hidden: false + definition: @sql {{ #SOURCE.identifier }};; + primary_key: false + } + dimension project_id { + label: 'Project Id' + type: 'text' + description: "**Project Id** contains the unique identifier for the project associated with each issue. \n\nThis field links the issue to a specific project within the system. \n" + hidden: false + definition: @sql {{ #SOURCE.project_id }};; + primary_key: false + } + dimension assignee_id { + label: 'Assignee Id' + type: 'text' + description: "The **assignee_id** field contains the unique identifier of the user assigned to an issue. \nIt represents the person responsible for addressing or resolving the issue within the project. \n" + hidden: false + definition: @sql {{ #SOURCE.assignee_id }};; + primary_key: false + } + dimension creator_id { + label: 'Creator Id' + type: 'text' + description: "**Creator Id** contains the unique identifier of the user who created the issue. \nThis field links each issue to its originator for tracking and accountability. " + hidden: false + definition: @sql {{ #SOURCE.creator_id }};; + primary_key: false + } + dimension status { + label: 'Status' + type: 'text' + description: "The **status** field indicates the current phase or condition of an issue within the project workflow. It reflects the progress stage of the issue from creation to completion.\n\nExample value:\n- `in_progress`\n- `pr_review`\n- `merged`\n- `deployed_to_staging`\n- `tested_on_staging`\n- `deployed`" + hidden: false + definition: @sql {{ #SOURCE.status }};; + primary_key: false + } + dimension priority { + label: 'Priority' + type: 'text' + description: "**Priority** indicates the level of urgency or importance assigned to an issue within the project management process. \nValue: `low`, `medium`, `high`, `urgent`, and `none`." + hidden: false + definition: @sql {{ #SOURCE.priority }};; + primary_key: false + } + dimension label { + label: 'Label' + type: 'text' + description: "The **label** field categorizes the issue by its type or nature within the project management context. \n\nIt identifies the classification such as `chore`, `bug`, `improvement`, `tech_debt`, or `feature`. " + hidden: false + definition: @sql {{ #SOURCE.label }};; + primary_key: false + } + dimension estimate { + label: 'Estimate' + type: 'number' + description: "The **estimate** field contains the projected effort or time required to complete an issue. It represents a numerical value used for planning and resource allocation in project management. " + hidden: false + definition: @sql {{ #SOURCE.estimate }};; + primary_key: false + } + dimension created_at { + label: 'Created At' + type: 'datetime' + description: "The **created_at** field records the date and time when an issue was initially created in the system. " + hidden: false + definition: @sql {{ #SOURCE.created_at }};; + primary_key: false + } + dimension started_at { + label: 'Started At' + type: 'datetime' + description: "The **started_at** field records the date and time when work on an issue began. \nIt indicates the moment the issue transitioned from a pending state to active progress. " + hidden: false + definition: @sql {{ #SOURCE.started_at }};; + primary_key: false + } + dimension completed_at { + label: 'Completed At' + type: 'datetime' + description: "The **completed_at** field records the date and time when an issue was finished. \nIt indicates the exact moment the issue\'s work was completed in the project workflow. " + hidden: false + definition: @sql {{ #SOURCE.completed_at }};; + primary_key: false + } + + owner: 'vy.ht@holistics.io' + table_name: '"public"."issues"' + measure cycle_time { + label: "Cycle Time" + type: "number" + description: "**Cycle Time** represents the duration between when an issue was started and when it was completed. \nIt measures the time taken to complete the issue from the start date to the completion date. \nThis metric helps evaluate the efficiency of issue resolution within a project. " + hidden: false + definition: @sql {{ completed_at }} - {{ started_at }};; + aggregation_type: "count" + } + + measure time_to_complete { + label: 'Time To Complete (Days)' + type: 'number' + description: "The number of days between when work started and when it was completed." + definition: @aql date_diff('day', {{ completed_at }}, {{ started_at }} ) ;; + } + measure time { + label: "Time" + type: "text" + description: "" + definition: @sql {{ completed_at }} - {{ started_at }} ;; + aggregation_type: "sum" + } +} \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml new file mode 100644 index 0000000..9900fc4 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml @@ -0,0 +1,34 @@ +Model public_projects_1 { + type: 'table' + label: 'Projects' + description: '' + data_source_name: 'project_management' + dimension id { + label: 'Id' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.id }};; + primary_key: true + } + dimension name { + label: 'Name' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.name }};; + } + dimension slug { + label: 'Slug' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.slug }};; + } + dimension created_at { + label: 'Created At' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.created_at }};; + } + + owner: 'vy.ht@holistics.io' + table_name: '"public"."projects"' +} diff --git a/team-folders/VyHuynh/Vy's Model/public_users_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_users_1.model.aml new file mode 100644 index 0000000..6cab194 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/public_users_1.model.aml @@ -0,0 +1,34 @@ +Model public_users_1 { + type: 'table' + label: 'Users' + description: '' + data_source_name: 'project_management' + dimension id { + label: 'Id' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.id }};; + primary_key: true + } + dimension name { + label: 'Name' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.name }};; + } + dimension email { + label: 'Email' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.email }};; + } + dimension role { + label: 'Role' + type: 'unknown' + hidden: false + definition: @sql {{ #SOURCE.role }};; + } + + owner: 'vy.ht@holistics.io' + table_name: '"public"."users"' +} diff --git a/team-folders/VyHuynh/Vy's Model/sales_rep_uc_3_outlier_csv.model.aml b/team-folders/VyHuynh/Vy's Model/sales_rep_uc_3_outlier_csv.model.aml new file mode 100644 index 0000000..cb759bd --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/sales_rep_uc_3_outlier_csv.model.aml @@ -0,0 +1,57 @@ +Model sales_rep_uc_3_outlier_csv { + type: 'table' + label: 'Sales rep uc 3 outlier csv' + description: '' + data_source_name: 'demodb' + dimension sales_rep { + label: 'Sales rep' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.sales_rep }};; + } + dimension region { + label: 'Region' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.region }};; + } + dimension product_category { + label: 'Product category' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.product_category }};; + } + dimension revenue { + label: 'Revenue' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.revenue }};; + } + dimension order_count { + label: 'Order count' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.order_count }};; + } + + import_source: ImportSource { + type: 'csv' + original_file_name: 'sales_rep_uc3_outlier.csv' + uploaded_at: '2026-02-17 10:42:05' + hash: 'f2fc8b91af7dc27517db797b49254582a48e71ab19104737f2a2fa350f6ec7e8' + column_configs: [ + H.imports.column_config("sales_rep", "sales_rep", "text"), + H.imports.column_config("region", "region", "text"), + H.imports.column_config("product_category", "product_category", "text"), + H.imports.column_config("revenue", "revenue", "number"), + H.imports.column_config("order_count", "order_count", "number") + ] + } + owner: 'vy.ht@holistics.io' + table_name: '"dbt_khai"."holistics_sales_rep_uc__fbb5c_202602171042"' +} From 692e24588e0be490b93c358fdf61a66ffd8d954b Mon Sep 17 00:00:00 2001 From: Vu Date: Fri, 27 Feb 2026 11:32:01 +0000 Subject: [PATCH 005/168] Add dimension 'Days between Created At and Started At' and remove 'Time To Complete (Days)' measure in 'public_issues_1' model --- .../VyHuynh/Vy's Model/public_issues_1.model.aml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml index dc24128..9422213 100644 --- a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml +++ b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml @@ -108,6 +108,13 @@ Model public_issues_1 { definition: @sql {{ #SOURCE.completed_at }};; primary_key: false } + dimension dimension_58d0fd5 { + label: "Days between Created At and Started At" + type: "number" + description: "" + hidden: false + definition: @aql date_diff('day', public_issues_1.created_at, public_issues_1.started_at);; + } owner: 'vy.ht@holistics.io' table_name: '"public"."issues"' @@ -119,13 +126,6 @@ Model public_issues_1 { definition: @sql {{ completed_at }} - {{ started_at }};; aggregation_type: "count" } - - measure time_to_complete { - label: 'Time To Complete (Days)' - type: 'number' - description: "The number of days between when work started and when it was completed." - definition: @aql date_diff('day', {{ completed_at }}, {{ started_at }} ) ;; - } measure time { label: "Time" type: "text" From a870e7432bb8d3a2775b7d0f52ea84287e9f2885 Mon Sep 17 00:00:00 2001 From: Vu Date: Fri, 27 Feb 2026 14:07:00 +0000 Subject: [PATCH 006/168] Rename dimension to 'cycle_time' and remove redundant 'cycle_time' and 'time' measures in 'public_issues_1' model --- .../Vy's Model/public_issues_1.model.aml | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml index 9422213..85cefca 100644 --- a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml +++ b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml @@ -108,8 +108,8 @@ Model public_issues_1 { definition: @sql {{ #SOURCE.completed_at }};; primary_key: false } - dimension dimension_58d0fd5 { - label: "Days between Created At and Started At" + dimension cycle_time { + label: "Cycle Time" type: "number" description: "" hidden: false @@ -118,19 +118,4 @@ Model public_issues_1 { owner: 'vy.ht@holistics.io' table_name: '"public"."issues"' - measure cycle_time { - label: "Cycle Time" - type: "number" - description: "**Cycle Time** represents the duration between when an issue was started and when it was completed. \nIt measures the time taken to complete the issue from the start date to the completion date. \nThis metric helps evaluate the efficiency of issue resolution within a project. " - hidden: false - definition: @sql {{ completed_at }} - {{ started_at }};; - aggregation_type: "count" - } - measure time { - label: "Time" - type: "text" - description: "" - definition: @sql {{ completed_at }} - {{ started_at }} ;; - aggregation_type: "sum" - } } \ No newline at end of file From ce07d62d9c93039d8dddae269ddfed452a2a687c Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 02:45:32 +0000 Subject: [PATCH 007/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 151 +++++++++++++++--- 1 file changed, 125 insertions(+), 26 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 34ee4f4..6015878 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -141,7 +141,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } tab tab3: CanvasLayout { label: 'Regional Analysis' - height: 5820 + height: 5740 grid_size: 20 block v5 { position: pos(580, 80, 600, 500) @@ -156,27 +156,27 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 2040, 1160, 580) + position: pos(20, 1960, 1160, 580) layer: 1 } block v_9rhg { - position: pos(20, 2640, 1160, 580) + position: pos(20, 2560, 1160, 580) layer: 1 } block v_dbuh { - position: pos(20, 3240, 1160, 500) + position: pos(20, 3160, 1160, 500) layer: 1 } block v_tusm { - position: pos(20, 3760, 1160, 500) + position: pos(20, 3680, 1160, 500) layer: 1 } block v_j83d { - position: pos(20, 4280, 1160, 480) + position: pos(20, 4200, 1160, 480) layer: 1 } block v_nyr1 { - position: pos(20, 4780, 1160, 500) + position: pos(20, 4700, 1160, 500) layer: 1 } block t_4ttu { @@ -196,7 +196,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 4 } block v_5dpt { - position: pos(20, 5300, 1160, 500) + position: pos(20, 5220, 1160, 500) layer: 1 } block v_bxa7 { @@ -204,13 +204,17 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 1 } block v_vzap { - position: pos(20, 600, 1160, 400) + position: pos(20, 1020, 1160, 400) layer: 4 } block v_8fpj { - position: pos(20, 1020, 1160, 500) + position: pos(20, 1440, 1160, 500) layer: 4 } + block v_350o { + position: pos(20, 600, 540, 400) + layer: 1 + } mobile { mode: 'auto' } @@ -401,9 +405,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } block v5: VizBlock { - label: 'GMV - Gross Merchandise Value by Continent Name' + label: 'GMV by Continent (2024)' description: 'This is description of the block' - viz: BarChart { + viz: ColumnChart { dataset: demo_ecommerce calculation adhoc_dim { label: 'My adhoc dim' @@ -417,7 +421,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a operator: 'matches' value: '2024' } - legend: VizFieldFull { + theme { + + } + x_axis: VizFieldFull { ref: r(ecommerce_countries.continent_name) format { type: 'text' @@ -1799,6 +1806,64 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + block v_350o: VizBlock { + label: 'GMV by Continent (2024) - Show trend over time' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [ FilterInteraction { from: 'v2' @@ -1879,6 +1944,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_lpgt', 'v_5zcz', 'v_bxa7', + 'v_350o', 'f2' ] disabled: true @@ -1907,6 +1973,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_5zcz', 'v_5dpt', 'v_bxa7', + 'v_350o', 'f1', 'f_zwa4' ] @@ -1927,7 +1994,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_lpgt', 'v_5zcz', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -1946,7 +2014,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_lpgt', 'v_5zcz', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -1976,7 +2045,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_j83d', 'v_5zcz', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -1994,7 +2064,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_hk4u', 'v_j83d', 'v_5zcz', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2039,7 +2110,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2057,7 +2129,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2082,7 +2155,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_lpgt', 'v_5zcz', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true }, @@ -2113,7 +2187,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2131,7 +2206,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2156,7 +2232,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5zcz', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2174,7 +2251,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_5dpt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2206,7 +2284,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_j83d', 'v_lpgt', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2224,7 +2303,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_bxa7' + 'v_bxa7', + 'v_350o' ] disabled: true } @@ -2277,6 +2357,25 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } ] }, + FilterInteraction { + from: 'v_350o' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_dbuh', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt' + ] + disabled: true + } + ] + }, FilterInteraction { from: 'f_countries_continent_name' to: [ From cf4aed1d8a44c30c6dd9dfd971a9a828561ebe6b Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 02:57:21 +0000 Subject: [PATCH 008/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 380 ++++++++++++------ 1 file changed, 265 insertions(+), 115 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 6015878..9aaf69c 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -141,7 +141,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } tab tab3: CanvasLayout { label: 'Regional Analysis' - height: 5740 + height: 6160 grid_size: 20 block v5 { position: pos(580, 80, 600, 500) @@ -156,27 +156,27 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 1960, 1160, 580) + position: pos(20, 2380, 1160, 580) layer: 1 } block v_9rhg { - position: pos(20, 2560, 1160, 580) + position: pos(20, 2980, 1160, 580) layer: 1 } block v_dbuh { - position: pos(20, 3160, 1160, 500) + position: pos(20, 3580, 1160, 500) layer: 1 } block v_tusm { - position: pos(20, 3680, 1160, 500) + position: pos(20, 4100, 1160, 500) layer: 1 } block v_j83d { - position: pos(20, 4200, 1160, 480) + position: pos(20, 4620, 1160, 480) layer: 1 } block v_nyr1 { - position: pos(20, 4700, 1160, 500) + position: pos(20, 5120, 1160, 500) layer: 1 } block t_4ttu { @@ -196,25 +196,29 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 4 } block v_5dpt { - position: pos(20, 5220, 1160, 500) - layer: 1 - } - block v_bxa7 { - position: pos(20, 260, 540, 320) + position: pos(20, 5640, 1160, 500) layer: 1 } block v_vzap { - position: pos(20, 1020, 1160, 400) + position: pos(20, 1440, 1160, 400) layer: 4 } block v_8fpj { - position: pos(20, 1440, 1160, 500) + position: pos(20, 1860, 1160, 500) layer: 4 } block v_350o { position: pos(20, 600, 540, 400) layer: 1 } + block v_qnug { + position: pos(20, 1020, 1160, 400) + layer: 1 + } + block v_tq6d { + position: pos(580, 600, 600, 400) + layer: 1 + } mobile { mode: 'auto' } @@ -422,7 +426,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(ecommerce_countries.continent_name) @@ -1632,61 +1635,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: [] } } - block v_bxa7: VizBlock { - label: 'GMV - Gross Merchandise Value by Continent Name copy' - description: 'This is description of the block' - viz: BarChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: ref('order_master', 'adhoc_dim') - format { - type: 'text' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } block v_vzap: VizBlock { label: 'Sum of Revenue by Country' viz: ColumnChart { @@ -1807,6 +1755,109 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } block v_350o: VizBlock { + label: 'GMV by Continent (2024) - Compare vs LY' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f0aed54 { + label: '% Delta LY - GMV ' + formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_a9389ef { + label: ' LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_57371a1 { + label: 'Delta LY - GMV' + formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: 'metric_a9389ef' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#7C9EE5' + } + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#255DD4' + } + } + } + tooltips: [ + VizTooltip { + field: VizFieldFull { + ref: 'metric_f0aed54' + format { + type: 'number' + pattern: '#,###%' + } + } + }, + VizTooltip { + field: VizFieldFull { + ref: 'metric_57371a1' + format { + type: 'number' + pattern: '#,###' + } + } + } + ] + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qnug: VizBlock { label: 'GMV by Continent (2024) - Show trend over time' description: 'This is description of the block' viz: ColumnChart { @@ -1864,6 +1915,71 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + block v_tq6d: VizBlock { + label: 'GMV by Continent (2024) - Show % change copy' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f0aed54 { + label: '% Delta LY - GMV ' + formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_a9389ef { + label: ' LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: 'metric_f0aed54' + format { + type: 'number' + pattern: '#,###%' + } + } + settings { + color: '#18A59E' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [ FilterInteraction { from: 'v2' @@ -1943,8 +2059,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_lpgt', 'v_5zcz', - 'v_bxa7', 'v_350o', + 'v_qnug', + 'v_tq6d', 'f2' ] disabled: true @@ -1972,8 +2089,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_lpgt', 'v_5zcz', 'v_5dpt', - 'v_bxa7', 'v_350o', + 'v_qnug', + 'v_tq6d', 'f1', 'f_zwa4' ] @@ -1994,8 +2112,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_lpgt', 'v_5zcz', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2014,8 +2133,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_lpgt', 'v_5zcz', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2045,8 +2165,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_j83d', 'v_5zcz', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2064,8 +2185,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_hk4u', 'v_j83d', 'v_5zcz', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2110,8 +2232,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2129,8 +2252,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2155,8 +2279,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_lpgt', 'v_5zcz', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true }, @@ -2187,8 +2312,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2206,8 +2332,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_j83d', 'v_nyr1', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2232,8 +2359,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5zcz', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2251,8 +2379,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_5dpt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2284,8 +2413,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_j83d', 'v_lpgt', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } @@ -2303,34 +2433,30 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_bxa7', - 'v_350o' + 'v_350o', + 'v_qnug', + 'v_tq6d' ] disabled: true } ] }, FilterInteraction { - from: 'v_bxa7' + from: 'v_vzap' to: [ CustomMapping { block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_dbuh', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt' + 'v2', + 'v3', + 'v4', + 'v_nehb' ] disabled: true } ] }, FilterInteraction { - from: 'v_vzap' + from: 'v_8fpj' to: [ CustomMapping { block: [ @@ -2344,21 +2470,45 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a ] }, FilterInteraction { - from: 'v_8fpj' + from: 'v_350o' to: [ CustomMapping { block: [ - 'v2', - 'v3', - 'v4', - 'v_nehb' + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_dbuh', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt' ] disabled: true } ] }, FilterInteraction { - from: 'v_350o' + from: 'v_qnug' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_dbuh', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_tq6d' to: [ CustomMapping { block: [ From 255df96ed2b6b143f13a615a52de7e357222dffc Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 03:14:28 +0000 Subject: [PATCH 009/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 424 +++++++++++------- 1 file changed, 250 insertions(+), 174 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 9aaf69c..eac9995 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -141,10 +141,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } tab tab3: CanvasLayout { label: 'Regional Analysis' - height: 6160 + height: 7160 grid_size: 20 block v5 { - position: pos(580, 80, 600, 500) + position: pos(20, 160, 540, 420) layer: 1 } block t1 { @@ -156,55 +156,31 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 2380, 1160, 580) + position: pos(20, 3380, 1160, 580) layer: 1 } block v_9rhg { - position: pos(20, 2980, 1160, 580) - layer: 1 - } - block v_dbuh { - position: pos(20, 3580, 1160, 500) + position: pos(20, 3980, 1160, 580) layer: 1 } block v_tusm { - position: pos(20, 4100, 1160, 500) + position: pos(20, 5100, 1160, 500) layer: 1 } block v_j83d { - position: pos(20, 4620, 1160, 480) + position: pos(20, 5620, 1160, 480) layer: 1 } block v_nyr1 { - position: pos(20, 5120, 1160, 500) - layer: 1 - } - block t_4ttu { - position: pos(20, 100, 380, 160) + position: pos(20, 6120, 1160, 500) layer: 1 } - block t_5y3l { - position: pos(40, 120, 60, 40) - layer: 2 - } - block t_vb6z { - position: pos(80, 120, 300, 60) - layer: 3 - } - block f_zwa4 { - position: pos(80, 160, 280, 60) - layer: 4 - } block v_5dpt { - position: pos(20, 5640, 1160, 500) + position: pos(20, 6640, 1160, 500) layer: 1 } - block v_vzap { - position: pos(20, 1440, 1160, 400) - layer: 4 - } block v_8fpj { - position: pos(20, 1860, 1160, 500) + position: pos(20, 2860, 1160, 500) layer: 4 } block v_350o { @@ -219,6 +195,22 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a position: pos(580, 600, 600, 400) layer: 1 } + block t_hcv3 { + position: pos(20, 1460, 320, 60) + layer: 1 + } + block t_ww35 { + position: pos(20, 100, 320, 60) + layer: 1 + } + block v_6o9d { + position: pos(20, 1980, 1160, 440) + layer: 1 + } + block v_wwiv { + position: pos(20, 1520, 1160, 440) + layer: 1 + } mobile { mode: 'auto' } @@ -1215,53 +1207,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } - block v_dbuh: VizBlock { - label: 'GMV - Gross Merchandise Value by Month Order Created At and Continent Name' - viz: ColumnChart { - dataset: demo_ecommerce - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } block v_tusm: VizBlock { label: 'GMV - Gross Merchandise Value by Country Name' viz: BarChart { @@ -1635,40 +1580,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: [] } } - block v_vzap: VizBlock { - label: 'Sum of Revenue by Country' - viz: ColumnChart { - dataset: vyhuynh_ecommerce_dataset - theme { - } - x_axis: VizFieldFull { - ref: r(revenue_by_country_csv.country) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(revenue_by_country_csv.revenue) - aggregation: 'sum' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } block v_8fpj: VizBlock { label: 'Revenue by Sale reps' viz: BarChart { @@ -1790,7 +1701,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(ecommerce_countries.continent_name) @@ -1875,7 +1785,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(order_master.order_created_at) @@ -1945,7 +1854,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(ecommerce_countries.continent_name) @@ -1980,6 +1888,160 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + block v_wwiv: VizBlock { + label: 'GMV by Continent over time - With Trendline' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Gmv' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + point { + value: 'Asia' + line_style: 'dashed' + } + point { + value: 'Europe' + line_style: 'dashed' + } + point { + value: 'Oceania' + line_style: 'dashed' + } + point { + value: 'North America' + line_style: 'dashed' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_6o9d: VizBlock { + label: 'GMV by Continent over time - Line chart' + description: 'This is description of the block' + viz: LineChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t_hcv3: TextBlock { + content: @md ## Time series analysis;; + } + block t_ww35: TextBlock { + content: @md ## Categorical analysis;; + } interactions: [ FilterInteraction { from: 'v2' @@ -1989,7 +2051,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v3', 'v4', 'v_nehb', - 'v_vzap', 'v_8fpj' ] disabled: true @@ -2004,7 +2065,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v2', 'v4', 'v_nehb', - 'v_vzap', 'v_8fpj' ] disabled: true @@ -2019,7 +2079,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v2', 'v3', 'v_nehb', - 'v_vzap', 'v_8fpj' ] disabled: true @@ -2035,7 +2094,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', @@ -2062,6 +2120,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_350o', 'v_qnug', 'v_tq6d', + 'v_wwiv', + 'v_6o9d', 'f2' ] disabled: true @@ -2082,7 +2142,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_856v', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', @@ -2092,6 +2151,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_350o', 'v_qnug', 'v_tq6d', + 'v_wwiv', + 'v_6o9d', 'f1', 'f_zwa4' ] @@ -2114,7 +2175,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_5zcz', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2135,7 +2198,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_5zcz', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2167,7 +2232,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_5zcz', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2187,7 +2254,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_5zcz', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2201,7 +2270,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v2', 'v3', 'v4', - 'v_vzap', 'v_8fpj' ] disabled: true @@ -2227,14 +2295,15 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a block: [ 'v5', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', 'v_5dpt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2247,14 +2316,15 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a block: [ 'v5', 'v_qctn', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', 'v_5dpt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2272,7 +2342,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_856v', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', @@ -2281,7 +2350,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_5dpt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true }, @@ -2300,26 +2371,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } ] }, - FilterInteraction { - from: 'v_dbuh' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d' - ] - disabled: true - } - ] - }, FilterInteraction { from: 'v_tusm' to: [ @@ -2328,13 +2379,14 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v5', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_j83d', 'v_nyr1', 'v_5dpt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2354,14 +2406,15 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_856v', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_nyr1', 'v_5zcz', 'v_5dpt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2375,13 +2428,14 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v5', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_5dpt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2415,7 +2469,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_lpgt', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } @@ -2429,20 +2485,21 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v5', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', 'v_350o', 'v_qnug', - 'v_tq6d' + 'v_tq6d', + 'v_wwiv', + 'v_6o9d' ] disabled: true } ] }, FilterInteraction { - from: 'v_vzap' + from: 'v_8fpj' to: [ CustomMapping { block: [ @@ -2456,21 +2513,25 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a ] }, FilterInteraction { - from: 'v_8fpj' + from: 'v_350o' to: [ CustomMapping { block: [ - 'v2', - 'v3', - 'v4', - 'v_nehb' + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt' ] disabled: true } ] }, FilterInteraction { - from: 'v_350o' + from: 'v_qnug' to: [ CustomMapping { block: [ @@ -2478,7 +2539,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', @@ -2489,7 +2549,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a ] }, FilterInteraction { - from: 'v_qnug' + from: 'v_tq6d' to: [ CustomMapping { block: [ @@ -2497,7 +2557,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', @@ -2508,7 +2567,25 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a ] }, FilterInteraction { - from: 'v_tq6d' + from: 'v_wwiv' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6o9d' to: [ CustomMapping { block: [ @@ -2516,7 +2593,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_wsww', 'v_qctn', 'v_9rhg', - 'v_dbuh', 'v_tusm', 'v_j83d', 'v_nyr1', From 641d39d0c64782617191c2518ef772fd3fe81782 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 08:11:55 +0000 Subject: [PATCH 010/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 332 ++++++++++++++++-- 1 file changed, 295 insertions(+), 37 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index eac9995..87913be 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -141,10 +141,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } tab tab3: CanvasLayout { label: 'Regional Analysis' - height: 7160 + height: 8000 grid_size: 20 block v5 { - position: pos(20, 160, 540, 420) + position: pos(20, 320, 540, 420) layer: 1 } block t1 { @@ -156,59 +156,75 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 3380, 1160, 580) + position: pos(20, 4220, 1160, 580) layer: 1 } block v_9rhg { - position: pos(20, 3980, 1160, 580) + position: pos(20, 4820, 1160, 580) layer: 1 } block v_tusm { - position: pos(20, 5100, 1160, 500) + position: pos(20, 5940, 1160, 500) layer: 1 } block v_j83d { - position: pos(20, 5620, 1160, 480) + position: pos(20, 6460, 1160, 480) layer: 1 } block v_nyr1 { - position: pos(20, 6120, 1160, 500) + position: pos(20, 6960, 1160, 500) layer: 1 } block v_5dpt { - position: pos(20, 6640, 1160, 500) + position: pos(20, 7480, 1160, 500) layer: 1 } block v_8fpj { - position: pos(20, 2860, 1160, 500) + position: pos(20, 3700, 1160, 500) layer: 4 } block v_350o { - position: pos(20, 600, 540, 400) + position: pos(20, 760, 540, 400) layer: 1 } block v_qnug { - position: pos(20, 1020, 1160, 400) + position: pos(20, 1180, 1160, 400) layer: 1 } block v_tq6d { - position: pos(580, 600, 600, 400) + position: pos(580, 760, 600, 400) layer: 1 } block t_hcv3 { - position: pos(20, 1460, 320, 60) + position: pos(20, 1620, 320, 60) layer: 1 } block t_ww35 { - position: pos(20, 100, 320, 60) + position: pos(20, 260, 320, 60) layer: 1 } block v_6o9d { - position: pos(20, 1980, 1160, 440) + position: pos(20, 2140, 1160, 440) layer: 1 } block v_wwiv { - position: pos(20, 1520, 1160, 440) + position: pos(20, 1680, 1160, 440) + layer: 1 + } + block t_vh1h { + position: pos(20, 2640, 320, 60) + layer: 1 + } + block v_7vcf { + position: pos(20, 100, 380, 140) + layer: 1 + } + block v_ji80 { + position: pos(20, 2700, 1160, 480) + layer: 1 + } + block v_n0qr { + position: pos(20, 3200, 1160, 480) layer: 1 } mobile { @@ -1906,7 +1922,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(order_master.order_created_at) @@ -1996,7 +2011,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(order_master.order_created_at) @@ -2042,6 +2056,118 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a block t_ww35: TextBlock { content: @md ## Categorical analysis;; } + block t_vh1h: TextBlock { + content: @md ## Distribution analysis;; + } + block v_ji80: VizBlock { + label: 'Total order distributed by Price' + viz: ScatterChart { + dataset: demo_ecommerce + theme { + + } + x_col: VizFieldFull { + ref: r(order_master.price) + format { + type: 'number' + pattern: 'inherited' + } + } + y_col: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + block v_7vcf: VizBlock { + label: 'Total GMV (2024)' + description: 'This is description of the block' + viz: MetricKpi { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + value: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + } + block v_n0qr: VizBlock { + label: 'Total order distributed by Price- With trend line' + viz: LineChart { + dataset: demo_ecommerce + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.price) + format { + type: 'number' + pattern: 'inherited' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Total Orders' + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [ FilterInteraction { from: 'v2' @@ -2097,7 +2223,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_5dpt' + 'v_5dpt', + 'v_ji80', + 'v_n0qr' ] disabled: true } @@ -2122,6 +2250,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tq6d', 'v_wwiv', 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', 'f2' ] disabled: true @@ -2153,6 +2284,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tq6d', 'v_wwiv', 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', 'f1', 'f_zwa4' ] @@ -2177,7 +2311,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2200,7 +2337,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2234,7 +2374,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2256,7 +2399,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2282,7 +2428,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a CustomMapping { block: [ 'v_ztqi', - 'v_j83d' + 'v_j83d', + 'v_ji80', + 'v_n0qr' ] disabled: true } @@ -2303,7 +2451,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2324,7 +2475,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2352,7 +2506,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true }, @@ -2386,7 +2543,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2414,7 +2574,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_7vcf' ] disabled: true } @@ -2435,7 +2596,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2471,7 +2635,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2492,7 +2659,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_qnug', 'v_tq6d', 'v_wwiv', - 'v_6o9d' + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr' ] disabled: true } @@ -2524,7 +2694,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_5dpt' + 'v_5dpt', + 'v_ji80', + 'v_n0qr' ] disabled: true } @@ -2542,7 +2714,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_5dpt' + 'v_5dpt', + 'v_ji80', + 'v_n0qr' ] disabled: true } @@ -2560,7 +2734,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_5dpt' + 'v_5dpt', + 'v_ji80', + 'v_n0qr' ] disabled: true } @@ -2578,7 +2754,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_5dpt' + 'v_5dpt', + 'v_ji80', + 'v_n0qr' ] disabled: true } @@ -2596,7 +2774,87 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tusm', 'v_j83d', 'v_nyr1', - 'v_5dpt' + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ji80' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7vcf' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_n0qr' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf' ] disabled: true } From c39f8655af57d4038e4eb8c9d595ec18f3c0342b Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 08:38:28 +0000 Subject: [PATCH 011/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 364 ++++++++++++++++-- 1 file changed, 334 insertions(+), 30 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 87913be..f9f8f43 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -141,7 +141,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } tab tab3: CanvasLayout { label: 'Regional Analysis' - height: 8000 + height: 9400 grid_size: 20 block v5 { position: pos(20, 320, 540, 420) @@ -156,31 +156,31 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 4220, 1160, 580) + position: pos(20, 5620, 1160, 580) layer: 1 } block v_9rhg { - position: pos(20, 4820, 1160, 580) + position: pos(20, 6220, 1160, 580) layer: 1 } block v_tusm { - position: pos(20, 5940, 1160, 500) + position: pos(20, 7340, 1160, 500) layer: 1 } block v_j83d { - position: pos(20, 6460, 1160, 480) + position: pos(20, 7860, 1160, 480) layer: 1 } block v_nyr1 { - position: pos(20, 6960, 1160, 500) + position: pos(20, 8360, 1160, 500) layer: 1 } block v_5dpt { - position: pos(20, 7480, 1160, 500) + position: pos(20, 8880, 1160, 500) layer: 1 } block v_8fpj { - position: pos(20, 3700, 1160, 500) + position: pos(20, 5100, 1160, 500) layer: 4 } block v_350o { @@ -204,15 +204,15 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 1 } block v_6o9d { - position: pos(20, 2140, 1160, 440) + position: pos(20, 3540, 1160, 440) layer: 1 } block v_wwiv { - position: pos(20, 1680, 1160, 440) + position: pos(20, 3080, 1160, 440) layer: 1 } block t_vh1h { - position: pos(20, 2640, 320, 60) + position: pos(20, 4040, 320, 60) layer: 1 } block v_7vcf { @@ -220,11 +220,23 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 1 } block v_ji80 { - position: pos(20, 2700, 1160, 480) + position: pos(20, 4100, 1160, 480) layer: 1 } block v_n0qr { - position: pos(20, 3200, 1160, 480) + position: pos(20, 4600, 1160, 480) + layer: 1 + } + block v_0sbb { + position: pos(20, 2620, 1160, 440) + layer: 1 + } + block v_58pi { + position: pos(20, 2160, 1160, 440) + layer: 1 + } + block v_jpzg { + position: pos(20, 1700, 1160, 440) layer: 1 } mobile { @@ -2064,7 +2076,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a viz: ScatterChart { dataset: demo_ecommerce theme { - } x_col: VizFieldFull { ref: r(order_master.price) @@ -2100,7 +2111,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } value: VizFieldFull { ref: r(order_master.gmv) @@ -2123,7 +2133,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a viz: LineChart { dataset: demo_ecommerce theme { - } x_axis: VizFieldFull { ref: r(order_master.price) @@ -2168,6 +2177,193 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + block v_jpzg: VizBlock { + label: 'GMV over time' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_0sbb: VizBlock { + label: 'GMV over time - with trendline' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Gmv' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_58pi: VizBlock { + label: 'GMV over time - with trendline copy' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_14d21cf { + label: 'LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2025' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + ref: 'metric_14d21cf' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [ FilterInteraction { from: 'v2' @@ -2253,6 +2449,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_ji80', 'v_7vcf', 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', 'f2' ] disabled: true @@ -2287,6 +2486,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_ji80', 'v_7vcf', 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', 'f1', 'f_zwa4' ] @@ -2314,7 +2516,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2340,7 +2545,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2377,7 +2585,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2402,7 +2613,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2454,7 +2668,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2478,7 +2695,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2509,7 +2729,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true }, @@ -2546,7 +2769,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2575,7 +2801,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tq6d', 'v_wwiv', 'v_6o9d', - 'v_7vcf' + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2599,7 +2828,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2638,7 +2870,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2662,7 +2897,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_6o9d', 'v_ji80', 'v_7vcf', - 'v_n0qr' + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2805,7 +3043,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tq6d', 'v_wwiv', 'v_6o9d', - 'v_7vcf' + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' ] disabled: true } @@ -2854,7 +3095,70 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_tq6d', 'v_wwiv', 'v_6o9d', - 'v_7vcf' + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jpzg' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_0sbb' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_58pi' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' ] disabled: true } From 74f70d81d7b07536be821d555ba708812c36dea8 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 10:34:28 +0000 Subject: [PATCH 012/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index f9f8f43..b46d251 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -2195,7 +2195,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(order_master.order_created_at) @@ -2247,7 +2246,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2024' } theme { - } x_axis: VizFieldFull { ref: r(order_master.order_created_at) @@ -2298,7 +2296,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } block v_58pi: VizBlock { - label: 'GMV over time - with trendline copy' + label: 'GMV over time - vs LY' description: 'This is description of the block' viz: ColumnChart { dataset: demo_ecommerce @@ -2315,11 +2313,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a calc_type: 'measure' data_type: 'number' } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2025' - } theme { } From 75742c57489d0daa8d7e97291e08782a6dc29bea Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 2 Mar 2026 10:52:07 +0000 Subject: [PATCH 013/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index b46d251..a53b150 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -141,10 +141,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } tab tab3: CanvasLayout { label: 'Regional Analysis' - height: 9400 + height: 9440 grid_size: 20 block v5 { - position: pos(20, 320, 540, 420) + position: pos(20, 360, 540, 420) layer: 1 } block t1 { @@ -156,63 +156,63 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 5620, 1160, 580) + position: pos(20, 5660, 1160, 580) layer: 1 } block v_9rhg { - position: pos(20, 6220, 1160, 580) + position: pos(20, 6260, 1160, 580) layer: 1 } block v_tusm { - position: pos(20, 7340, 1160, 500) + position: pos(20, 7380, 1160, 500) layer: 1 } block v_j83d { - position: pos(20, 7860, 1160, 480) + position: pos(20, 7900, 1160, 480) layer: 1 } block v_nyr1 { - position: pos(20, 8360, 1160, 500) + position: pos(20, 8400, 1160, 500) layer: 1 } block v_5dpt { - position: pos(20, 8880, 1160, 500) + position: pos(20, 8920, 1160, 500) layer: 1 } block v_8fpj { - position: pos(20, 5100, 1160, 500) + position: pos(20, 5140, 1160, 500) layer: 4 } block v_350o { - position: pos(20, 760, 540, 400) + position: pos(20, 800, 540, 400) layer: 1 } block v_qnug { - position: pos(20, 1180, 1160, 400) + position: pos(20, 1220, 1160, 400) layer: 1 } block v_tq6d { - position: pos(580, 760, 600, 400) + position: pos(580, 800, 600, 400) layer: 1 } block t_hcv3 { - position: pos(20, 1620, 320, 60) + position: pos(20, 1660, 320, 60) layer: 1 } block t_ww35 { - position: pos(20, 260, 320, 60) + position: pos(20, 300, 320, 60) layer: 1 } block v_6o9d { - position: pos(20, 3540, 1160, 440) + position: pos(20, 3580, 1160, 440) layer: 1 } block v_wwiv { - position: pos(20, 3080, 1160, 440) + position: pos(20, 3120, 1160, 440) layer: 1 } block t_vh1h { - position: pos(20, 4040, 320, 60) + position: pos(20, 4080, 320, 60) layer: 1 } block v_7vcf { @@ -220,23 +220,23 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 1 } block v_ji80 { - position: pos(20, 4100, 1160, 480) + position: pos(20, 4140, 1160, 480) layer: 1 } block v_n0qr { - position: pos(20, 4600, 1160, 480) + position: pos(20, 4640, 1160, 480) layer: 1 } block v_0sbb { - position: pos(20, 2620, 1160, 440) + position: pos(20, 2660, 1160, 440) layer: 1 } block v_58pi { - position: pos(20, 2160, 1160, 440) + position: pos(20, 2200, 1160, 440) layer: 1 } block v_jpzg { - position: pos(20, 1700, 1160, 440) + position: pos(20, 1740, 1160, 440) layer: 1 } mobile { @@ -2314,7 +2314,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a data_type: 'number' } theme { - } x_axis: VizFieldFull { ref: r(order_master.order_created_at) From 3bc2c5dc249e1a4c96abb129064a90d1b6462b66 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Tue, 3 Mar 2026 04:05:09 +0000 Subject: [PATCH 014/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 227 ++++++++++++++++-- 1 file changed, 211 insertions(+), 16 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index a53b150..cd3a687 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -216,7 +216,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 1 } block v_7vcf { - position: pos(20, 100, 380, 140) + position: pos(20, 100, 380, 180) layer: 1 } block v_ji80 { @@ -239,6 +239,14 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a position: pos(20, 1740, 1160, 440) layer: 1 } + block v_kfa9 { + position: pos(460, 100, 380, 180) + layer: 1 + } + block v_vk4x { + position: pos(580, 360, 540, 420) + layer: 1 + } mobile { mode: 'auto' } @@ -2105,12 +2113,19 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a data_type: 'text' model: order_master } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(order_master.order_created_at) operator: 'matches' - value: '2024' + value: '2025' } theme { + } value: VizFieldFull { ref: r(order_master.gmv) @@ -2119,7 +2134,15 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a pattern: '#,###' } } + compare_value: VizFieldFull { + ref: 'metric_f688c32' + format { + type: 'number' + pattern: '#,###' + } + } settings { + display_mode: 'compare_by_number' aggregate_awareness { enabled: true debug_comments: true @@ -2356,6 +2379,106 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + block v_kfa9: VizBlock { + label: 'Total GMV (2024) copy' + description: 'This is description of the block' + viz: MetricKpi { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2025' + } + theme { + + } + value: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + compare_value: VizFieldFull { + ref: 'metric_f688c32' + format { + type: 'number' + pattern: '#,###' + } + } + settings { + display_mode: 'compare_by_number' + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + } + block v_vk4x: VizBlock { + label: 'GMV by Country (2024)' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [ FilterInteraction { from: 'v2' @@ -2444,6 +2567,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', + 'v_kfa9', + 'v_vk4x', 'f2' ] disabled: true @@ -2481,6 +2606,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', + 'v_kfa9', + 'v_vk4x', 'f1', 'f_zwa4' ] @@ -2511,7 +2638,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2540,7 +2669,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2580,7 +2711,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2608,7 +2741,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2663,7 +2798,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2690,7 +2827,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2724,7 +2863,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true }, @@ -2764,7 +2905,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2796,7 +2939,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_7vcf', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2823,7 +2968,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2865,7 +3012,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -2892,7 +3041,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_n0qr', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -3038,7 +3189,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_7vcf', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -3090,7 +3243,9 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_7vcf', 'v_jpzg', 'v_0sbb', - 'v_58pi' + 'v_58pi', + 'v_kfa9', + 'v_vk4x' ] disabled: true } @@ -3156,6 +3311,46 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } ] }, + FilterInteraction { + from: 'v_kfa9' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_vk4x' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, FilterInteraction { from: 'f_countries_continent_name' to: [ From 44288b35160a1a21bbe370d006728d114144a59c Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Tue, 3 Mar 2026 04:13:40 +0000 Subject: [PATCH 015/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 159 +++++++++--------- 1 file changed, 79 insertions(+), 80 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index cd3a687..4a898fa 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -239,14 +239,14 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a position: pos(20, 1740, 1160, 440) layer: 1 } - block v_kfa9 { - position: pos(460, 100, 380, 180) - layer: 1 - } block v_vk4x { position: pos(580, 360, 540, 420) layer: 1 } + block v_ufmq { + position: pos(420, 100, 380, 180) + layer: 1 + } mobile { mode: 'auto' } @@ -2125,7 +2125,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2025' } theme { - } value: VizFieldFull { ref: r(order_master.gmv) @@ -2379,10 +2378,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } - block v_kfa9: VizBlock { - label: 'Total GMV (2024) copy' + block v_vk4x: VizBlock { + label: 'GMV by Country (2024)' description: 'This is description of the block' - viz: MetricKpi { + viz: ColumnChart { dataset: demo_ecommerce calculation adhoc_dim { label: 'My adhoc dim' @@ -2391,48 +2390,47 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a data_type: 'text' model: order_master } - calculation metric_f688c32 { - label: '% Change - LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } filter { field: r(order_master.order_created_at) operator: 'matches' - value: '2025' + value: '2024' } theme { - } - value: VizFieldFull { - ref: r(order_master.gmv) + x_axis: VizFieldFull { + ref: r(ecommerce_countries.name) format { - type: 'number' - pattern: '#,###' + type: 'text' } } - compare_value: VizFieldFull { - ref: 'metric_f688c32' - format { - type: 'number' - pattern: '#,###' + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } } } settings { - display_mode: 'compare_by_number' + row_limit: 5000 + x_axis_show_null_datetime: false aggregate_awareness { enabled: true debug_comments: true } - alignment: 'left' } } } - block v_vk4x: VizBlock { - label: 'GMV by Country (2024)' + block v_ufmq: VizBlock { + label: 'Total GMV (2024) copy' description: 'This is description of the block' - viz: ColumnChart { + viz: MetricKpi { dataset: demo_ecommerce calculation adhoc_dim { label: 'My adhoc dim' @@ -2441,41 +2439,42 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a data_type: 'text' model: order_master } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(order_master.order_created_at) operator: 'matches' - value: '2024' + value: '2025' } theme { } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.name) + value: VizFieldFull { + ref: r(order_master.gmv) format { - type: 'text' + type: 'number' + pattern: '#,###' } } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } + compare_value: VizFieldFull { + label: 'KPI Goal' + ref: r(order_master.revenue) + format { + type: 'number' + pattern: 'inherited' } } settings { - row_limit: 5000 - x_axis_show_null_datetime: false + display_mode: 'progress' aggregate_awareness { enabled: true debug_comments: true } + alignment: 'left' } } } @@ -2567,8 +2566,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', 'v_vk4x', + 'v_ufmq', 'f2' ] disabled: true @@ -2606,8 +2605,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', 'v_vk4x', + 'v_ufmq', 'f1', 'f_zwa4' ] @@ -2639,8 +2638,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2670,8 +2669,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2712,8 +2711,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2742,8 +2741,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2799,8 +2798,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2828,8 +2827,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2864,8 +2863,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true }, @@ -2906,8 +2905,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2940,8 +2939,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -2969,8 +2968,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -3013,8 +3012,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -3042,8 +3041,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -3190,8 +3189,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -3244,8 +3243,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_jpzg', 'v_0sbb', 'v_58pi', - 'v_kfa9', - 'v_vk4x' + 'v_vk4x', + 'v_ufmq' ] disabled: true } @@ -3312,7 +3311,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a ] }, FilterInteraction { - from: 'v_kfa9' + from: 'v_vk4x' to: [ CustomMapping { block: [ @@ -3332,7 +3331,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a ] }, FilterInteraction { - from: 'v_vk4x' + from: 'v_ufmq' to: [ CustomMapping { block: [ From 158a006f67e8ae543e0eb1a1ff30065992261ed2 Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Tue, 3 Mar 2026 05:18:10 +0000 Subject: [PATCH 016/168] - Refactor 'khai_ecommerce' dataset by adding 'time_compare' function and applying it to time compare metrics --- .../khai/datasets/khai_ecommerce.dataset.aml | 153 ++++-------------- 1 file changed, 28 insertions(+), 125 deletions(-) diff --git a/team-folders/khai/datasets/khai_ecommerce.dataset.aml b/team-folders/khai/datasets/khai_ecommerce.dataset.aml index 8b280e4..4a8670d 100644 --- a/team-folders/khai/datasets/khai_ecommerce.dataset.aml +++ b/team-folders/khai/datasets/khai_ecommerce.dataset.aml @@ -1,3 +1,23 @@ +Func time_compare(metric_name: String, metric_label: String, format: String) { + Metric { + label: '${metric_label} (time compare)' + type: 'number' + definition: @aql case( + when: time_type.time_type == "1. Week" + , then: ${metric_name} | where(khai_date_d.date_key match @(this week)) + , when: time_type.time_type == "2. MTD" + , then: ${metric_name} | where(khai_date_d.date_key match @(this month to today)) + , when: time_type.time_type == "3. MTD LY" + , then: ${metric_name} | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this month to today)) + , when: time_type.time_type == "4. YTD" + , then: ${metric_name} | where(khai_date_d.date_key match @(this year to today)) + , when: time_type.time_type == "5. YTD LY" + , then: ${metric_name} | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this year to today)) + ) ;; + format: format + } +} + Dataset khai_ecommerce { __engine__: 'aql' label: 'Ecommerce (from Khai)' @@ -182,136 +202,19 @@ Dataset khai_ecommerce { } // time comparison metrics - metric gmv_time_compare { - label: 'GMV (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: gmv | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: gmv | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: gmv | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "4. YTD" - , then: gmv | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: gmv | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this year to today)) - ) ;; - format: "[\$\$]#,###0" - } - metric nmv_time_compare { - label: 'NMV (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: nmv | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: nmv | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: nmv | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "4. YTD" - , then: nmv | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: nmv | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this year to today)) - ) - ;; - format: "[\$\$]#,###0" - } + metric gmv_time_compare: time_compare('gmv', 'GMV', '[\$\$]#,###0') - metric aov_time_compare { - label: 'AOV (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: aov | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: aov | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: aov | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "4. YTD" - , then: aov | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: aov | relative_period(khai_date_d.date_key, interval(-1 year)) | where(khai_date_d.date_key match @(this year to today)) - ) - ;; - format: "[\$\$]#,###0" - } + metric nmv_time_compare: time_compare('nmv', 'NMV', '[\$\$]#,###0') - metric total_orders_compare { - label: 'Total Orders (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: total_orders | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: total_orders | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: total_orders | where(khai_date_d.date_key match @(2025-01-10)) - , when: time_type.time_type == "4. YTD" - , then: total_orders | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: total_orders | where(khai_date_d.date_key match @(this year to today)) | relative_period(khai_date_d.date_key, interval(-1 year)) - ) - ;; - format: "#,###" - } + metric aov_time_compare: time_compare('aov', 'AOV', '[\$\$]#,###0') - metric total_delivered_orders_time_compare { - label: 'Total Delivered Orders (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: total_delivered_orders | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: total_delivered_orders | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: total_delivered_orders | where(khai_date_d.date_key match @(2025-01-10)) - , when: time_type.time_type == "4. YTD" - , then: total_delivered_orders | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: total_delivered_orders | where(khai_date_d.date_key match @(this year to today)) | relative_period(khai_date_d.date_key, interval(-1 year)) - ) - ;; - format: "#,###" - } + metric total_orders_compare: time_compare('total_orders', 'Total Orders', '#,###') - metric total_cancelled_orders_time_compare { - label: 'Total Cancelled Orders (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: total_cancelled_orders | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: total_cancelled_orders | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: total_cancelled_orders | where(khai_date_d.date_key match @(2025-01-10)) - , when: time_type.time_type == "4. YTD" - , then: total_cancelled_orders | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: total_cancelled_orders | where(khai_date_d.date_key match @(this year to today)) | relative_period(khai_date_d.date_key, interval(-1 year)) - ) - ;; - format: "#,###" - } + metric total_delivered_orders_time_compare: time_compare('total_delivered_orders', 'Total Delivered Orders', '#,###') - metric cancelled_order_ratio_time_compare { - label: 'Cancelled order ratio (time compare)' - type: 'number' - definition: @aql case( - when: time_type.time_type == "1. Week" - , then: cancelled_order_ratio | where(khai_date_d.date_key match @(this week)) - , when: time_type.time_type == "2. MTD" - , then: cancelled_order_ratio | where(khai_date_d.date_key match @(this month to today)) - , when: time_type.time_type == "3. MTD LY" - , then: cancelled_order_ratio | where(khai_date_d.date_key match @(2025-01-10)) - , when: time_type.time_type == "4. YTD" - , then: cancelled_order_ratio | where(khai_date_d.date_key match @(this year to today)) - , when: time_type.time_type == "5. YTD LY" - , then: cancelled_order_ratio | where(khai_date_d.date_key match @(this year to today)) | relative_period(khai_date_d.date_key, interval(-1 year)) - ) - ;; - format: "#,###0.00%" - } + metric total_cancelled_orders_time_compare: time_compare('total_cancelled_orders', 'Total Cancelled Orders', '#,###') + + metric cancelled_order_ratio_time_compare: time_compare('cancelled_order_ratio', 'Cancelled Orders Ratio', '#,###0.00%') } \ No newline at end of file From 557997a18e55598e7451047e22baf27d5aa51412 Mon Sep 17 00:00:00 2001 From: Thang Date: Wed, 4 Mar 2026 07:59:02 +0000 Subject: [PATCH 017/168] Update dashboard 'tai_ecom' with diff --- .../tai/test_extend/tai_ecom.page.aml | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/team-folders/tai/test_extend/tai_ecom.page.aml b/team-folders/tai/test_extend/tai_ecom.page.aml index 84fc7e5..0cb0f1b 100644 --- a/team-folders/tai/test_extend/tai_ecom.page.aml +++ b/team-folders/tai/test_extend/tai_ecom.page.aml @@ -1,9 +1,5 @@ -// use lib -// use demo - Dashboard tai_ecom { title: 'Ecommerce Dashboard - Pro' - block hd1: TextBlock { content: @md demo;; @@ -124,12 +120,6 @@ This dashboard tracks the KPIs of all managers for their respective teams. This label: 'GMV' viz: MetricKpi { dataset: demo_ecommerce - // calculation f_2fb1cc3 { - // label: 'GMT last year' - // formula: @aml order_master.gmv * 0.87;; - // calc_type: 'measure' - // data_type: 'number' - // } filter { field: ref('order_master', 'order_created_at') operator: 'matches' @@ -859,7 +849,6 @@ abc;; ;; } - // block t46: background_gray() block t47: TextBlock { content: @md
@@ -1099,7 +1088,6 @@ abc;; viz: ColumnChart { dataset: demo_ecommerce theme { - } x_axis: VizFieldFull { ref: ref('ecommerce_users', 'age_group') @@ -1618,10 +1606,35 @@ abc;; hide_label: true } } + block v_xd99: VizBlock { + label: 'Untitled Report' + viz: DataTable { + dataset: buyers_sellers_transactions + theme { + + } + fields: [ + VizFieldFull { + ref: r(sellers.sign_up_date) + format { + type: 'date' + } + } + ] + settings { + show_row_number: true + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } view: CanvasLayout { label: 'View 1' width: 1540 - height: 4460 + height: 4930 grid_size: 20 block hd1 { position: pos(1320, 20, 180, 50) @@ -1774,6 +1787,10 @@ abc;; position: pos(280, 700, 860, 260) layer: -1 } + block v_xd99 { + position: pos(440, 4490, 620, 420) + layer: 4 + } mobile { mode: 'auto' } From 51f8a757968e820c7261df37cc851437185f49f3 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 03:08:45 +0000 Subject: [PATCH 018/168] Add 'Untitled Dimension' and 'Count Users' calculations to 'raw users' DataTable and refine 'Time To Release' dimension in 'public_issues_1' model --- Hieu/untitled_10.page.aml | 27 +++++++++++++++++- .../Vy's Model/public_issues_1.model.aml | 28 ++++--------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/Hieu/untitled_10.page.aml b/Hieu/untitled_10.page.aml index a04b3e4..e3c953a 100644 --- a/Hieu/untitled_10.page.aml +++ b/Hieu/untitled_10.page.aml @@ -50,7 +50,18 @@ Dashboard untitled_10_2 { label: 'raw users' viz: DataTable { dataset: hieu_haha_meme - theme { + calculation dimension_23f49c7 { + label: 'Untitled Dimension' + formula: @aql users_kk.id + users_kk.tenant_id;; + calc_type: 'dimension' + data_type: 'number' + model: users_kk + } + calculation metric_0ad16b9 { + label: 'Count Users' + formula: @aql users_kk | count(1);; + calc_type: 'measure' + data_type: 'number' } fields: [ VizFieldFull { @@ -73,6 +84,20 @@ Dashboard untitled_10_2 { type: 'number' pattern: 'inherited' } + }, + VizFieldFull { + ref: 'metric_0ad16b9' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: ref('users_kk', 'dimension_23f49c7') + format { + type: 'number' + pattern: 'inherited' + } } ] settings { diff --git a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml index dc24128..5bdd36d 100644 --- a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml +++ b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml @@ -108,29 +108,13 @@ Model public_issues_1 { definition: @sql {{ #SOURCE.completed_at }};; primary_key: false } - - owner: 'vy.ht@holistics.io' - table_name: '"public"."issues"' - measure cycle_time { - label: "Cycle Time" + dimension time_to_release { + label: "Time To Release" type: "number" - description: "**Cycle Time** represents the duration between when an issue was started and when it was completed. \nIt measures the time taken to complete the issue from the start date to the completion date. \nThis metric helps evaluate the efficiency of issue resolution within a project. " - hidden: false - definition: @sql {{ completed_at }} - {{ started_at }};; - aggregation_type: "count" - } - - measure time_to_complete { - label: 'Time To Complete (Days)' - type: 'number' - description: "The number of days between when work started and when it was completed." - definition: @aql date_diff('day', {{ completed_at }}, {{ started_at }} ) ;; - } - measure time { - label: "Time" - type: "text" description: "" - definition: @sql {{ completed_at }} - {{ started_at }} ;; - aggregation_type: "sum" + definition: @aql date_diff('day', public_issues_1.started_at, public_issues_1.completed_at) ;; } + + owner: 'vy.ht@holistics.io' + table_name: '"public"."issues"' } \ No newline at end of file From ff0b0c1bd202c227bcfa2ed3dff8416f02da0f7e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 04:23:22 +0000 Subject: [PATCH 019/168] Remove obsolete models for 'Sales rep uc 3 outlier csv', 'Test data axis scale csv', 'Test data null dim value csv', 'Revenue by country csv', 'Sales & revenue demo', and deprecated public project management datasets and models; replace with updated 'reporting_project_management' dataset and dashboard including related models and relationships. --- .../sales_rep_uc_3_outlier_csv.model.aml | 0 .../vy_axis_scale_test.model.aml | 0 .../vy_null_dim_value.model.aml | 0 .../vy_revenue_by_country_csv.model.aml | 0 .../vy_sales_revenue_demo_csv.model.aml | 0 .../reporting_issue_duration.model.aml | 65 +++++++++ .../reporting_issues.model.aml | 129 ++++++++++++++++++ .../reporting_issues_log.model.aml | 65 +++++++++ .../reporting_project.model.aml | 49 +++++++ .../reporting_project_management.dataset.aml | 19 +++ .../reporting_project_management.page.aml | 87 ++++++++++++ .../reporting_team.model.aml | 49 +++++++ .../public_issue_stage_durations_1.model.aml | 46 ------- ...ublic_issue_status_transitions_1.model.aml | 46 ------- .../Vy's Model/public_issues_1.model.aml | 120 ---------------- .../Vy's Model/public_projects_1.model.aml | 34 ----- .../Vy's Model/public_users_1.model.aml | 34 ----- 17 files changed, 463 insertions(+), 280 deletions(-) rename team-folders/VyHuynh/Vy's Model/{ => Miscellaneous}/sales_rep_uc_3_outlier_csv.model.aml (100%) rename team-folders/VyHuynh/Vy's Model/{ => Miscellaneous}/vy_axis_scale_test.model.aml (100%) rename team-folders/VyHuynh/Vy's Model/{ => Miscellaneous}/vy_null_dim_value.model.aml (100%) rename team-folders/VyHuynh/Vy's Model/{ => Miscellaneous}/vy_revenue_by_country_csv.model.aml (100%) rename team-folders/VyHuynh/Vy's Model/{ => Miscellaneous}/vy_sales_revenue_demo_csv.model.aml (100%) create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project.model.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_team.model.aml delete mode 100644 team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml delete mode 100644 team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml delete mode 100644 team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml delete mode 100644 team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml delete mode 100644 team-folders/VyHuynh/Vy's Model/public_users_1.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/sales_rep_uc_3_outlier_csv.model.aml b/team-folders/VyHuynh/Vy's Model/Miscellaneous/sales_rep_uc_3_outlier_csv.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/sales_rep_uc_3_outlier_csv.model.aml rename to team-folders/VyHuynh/Vy's Model/Miscellaneous/sales_rep_uc_3_outlier_csv.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/vy_axis_scale_test.model.aml b/team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_axis_scale_test.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/vy_axis_scale_test.model.aml rename to team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_axis_scale_test.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/vy_null_dim_value.model.aml b/team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_null_dim_value.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/vy_null_dim_value.model.aml rename to team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_null_dim_value.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/vy_revenue_by_country_csv.model.aml b/team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_revenue_by_country_csv.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/vy_revenue_by_country_csv.model.aml rename to team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_revenue_by_country_csv.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/vy_sales_revenue_demo_csv.model.aml b/team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_sales_revenue_demo_csv.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/vy_sales_revenue_demo_csv.model.aml rename to team-folders/VyHuynh/Vy's Model/Miscellaneous/vy_sales_revenue_demo_csv.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml new file mode 100644 index 0000000..4001b78 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml @@ -0,0 +1,65 @@ +Model reporting_issue_duration { + type: 'table' + label: 'Reporting issue duration' + description: '' + data_source_name: 'demodb' + dimension id { + label: 'Id' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.id }};; + } + dimension issue_id { + label: 'Issue' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.issue_id }};; + } + dimension stage { + label: 'Stage' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.stage }};; + } + dimension entered_at { + label: 'Entered at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.entered_at }};; + } + dimension exited_at { + label: 'Exited at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.exited_at }};; + } + dimension duration_hours { + label: 'Duration hours' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.duration_hours }};; + } + + import_source: ImportSource { + type: 'csv' + original_file_name: 'issue_stage_durations_1.csv' + uploaded_at: '2026-03-05 03:51:32' + hash: 'cc01a9f4fefbe2f179acb05efcc37a928eaf751d66ab0d09153efab78334e717' + column_configs: [ + H.imports.column_config("id", "id", "number"), + H.imports.column_config("issue_id", "issue_id", "number"), + H.imports.column_config("stage", "stage", "text"), + H.imports.column_config("entered_at", "entered_at", "datetime"), + H.imports.column_config("exited_at", "exited_at", "datetime"), + H.imports.column_config("duration_hours", "duration_hours", "number") + ] + } + owner: 'vy.ht@holistics.io' + table_name: '"dbt_khai"."holistics_reporting_iss_99799_202603050351"' +} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml new file mode 100644 index 0000000..045d049 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml @@ -0,0 +1,129 @@ +Model reporting_issues { + type: 'table' + label: 'Reporting issues' + description: '' + data_source_name: 'demodb' + dimension id { + label: 'Id' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.id }};; + } + dimension title { + label: 'Title' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.title }};; + } + dimension identifier { + label: 'Identifier' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.identifier }};; + } + dimension project_id { + label: 'Project' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.project_id }};; + } + dimension assignee_id { + label: 'Assignee' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.assignee_id }};; + } + dimension creator_id { + label: 'Creator' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.creator_id }};; + } + dimension status { + label: 'Status' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.status }};; + } + dimension priority { + label: 'Priority' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.priority }};; + } + dimension label { + label: 'Label' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.label }};; + } + dimension estimate { + label: 'Estimate' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.estimate }};; + } + dimension created_at { + label: 'Created at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.created_at }};; + } + dimension started_at { + label: 'Started at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.started_at }};; + } + dimension completed_at { + label: 'Completed at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.completed_at }};; + } + dimension cycle_time_hours { + label: 'Cycle time hours' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.cycle_time_hours }};; + } + + import_source: ImportSource { + type: 'csv' + original_file_name: 'issues_1.csv' + uploaded_at: '2026-03-05 03:50:41' + hash: '8449dd003576c6a22aae979e690889d1938a7179160ae9fd0afb1345c8585244' + column_configs: [ + H.imports.column_config("id", "id", "number"), + H.imports.column_config("title", "title", "text"), + H.imports.column_config("identifier", "identifier", "text"), + H.imports.column_config("project_id", "project_id", "number"), + H.imports.column_config("assignee_id", "assignee_id", "number"), + H.imports.column_config("creator_id", "creator_id", "number"), + H.imports.column_config("status", "status", "text"), + H.imports.column_config("priority", "priority", "text"), + H.imports.column_config("label", "label", "text"), + H.imports.column_config("estimate", "estimate", "number"), + H.imports.column_config("created_at", "created_at", "datetime"), + H.imports.column_config("started_at", "started_at", "datetime"), + H.imports.column_config("completed_at", "completed_at", "datetime"), + H.imports.column_config("cycle_time_hours", "cycle_time_hours", "datetime") + ] + } + owner: 'vy.ht@holistics.io' + table_name: '"dbt_khai"."holistics_reporting_iss_614ea_202603050350"' +} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml new file mode 100644 index 0000000..b8e52ac --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml @@ -0,0 +1,65 @@ +Model reporting_issues_log { + type: 'table' + label: 'Reporting issues log' + description: '' + data_source_name: 'demodb' + dimension id { + label: 'Id' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.id }};; + } + dimension issue_id { + label: 'Issue' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.issue_id }};; + } + dimension from_status { + label: 'From status' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.from_status }};; + } + dimension to_status { + label: 'To status' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.to_status }};; + } + dimension transitioned_at { + label: 'Transitioned at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.transitioned_at }};; + } + dimension transitioned_by { + label: 'Transitioned by' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.transitioned_by }};; + } + + import_source: ImportSource { + type: 'csv' + original_file_name: 'issue_status_transitions_1.csv' + uploaded_at: '2026-03-05 03:51:10' + hash: '8b8f1c8e8b7ffd0084850cb45db8372527efe8d9e83431e4cf5779a99272992b' + column_configs: [ + H.imports.column_config("id", "id", "number"), + H.imports.column_config("issue_id", "issue_id", "number"), + H.imports.column_config("from_status", "from_status", "text"), + H.imports.column_config("to_status", "to_status", "text"), + H.imports.column_config("transitioned_at", "transitioned_at", "datetime"), + H.imports.column_config("transitioned_by", "transitioned_by", "number") + ] + } + owner: 'vy.ht@holistics.io' + table_name: '"dbt_khai"."holistics_reporting_iss_21547_202603050351"' +} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project.model.aml new file mode 100644 index 0000000..02dce84 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project.model.aml @@ -0,0 +1,49 @@ +Model reporting_project { + type: 'table' + label: 'Reporting project' + description: '' + data_source_name: 'demodb' + dimension id { + label: 'Id' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.id }};; + } + dimension name { + label: 'Name' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.name }};; + } + dimension slug { + label: 'Slug' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.slug }};; + } + dimension created_at { + label: 'Created at' + description: '' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.created_at }};; + } + + import_source: ImportSource { + type: 'csv' + original_file_name: 'projects_1.csv' + uploaded_at: '2026-03-05 03:50:25' + hash: 'dfb6548ff54e9d721a98bc61df6168ec383fff9023172325ee0baedb46abb3d8' + column_configs: [ + H.imports.column_config("id", "id", "number"), + H.imports.column_config("name", "name", "text"), + H.imports.column_config("slug", "slug", "text"), + H.imports.column_config("created_at", "created_at", "datetime") + ] + } + owner: 'vy.ht@holistics.io' + table_name: '"dbt_khai"."holistics_reporting_pro_a2a1c_202603050350"' +} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml new file mode 100644 index 0000000..ec85239 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -0,0 +1,19 @@ +Dataset reporting_project_management { + label: 'reporting_project_management' + description: '' + data_source_name: 'demodb' + models: [ + reporting_team, + reporting_project, + reporting_issues, + reporting_issues_log, + reporting_issue_duration + ] + relationships: [ + relationship(reporting_issues_log.id > reporting_issues.id, true), + relationship(reporting_issue_duration.id > reporting_issues.id, true), + relationship(reporting_issues.project_id > reporting_project.id, true), + relationship(reporting_issues.assignee_id > reporting_team.id, true), + relationship(reporting_issues.creator_id > reporting_team.id, true) + ] +} \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml new file mode 100644 index 0000000..c3e12aa --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -0,0 +1,87 @@ +Dashboard reporting_project_management_2 { + title: 'reporting_project_management' + description: '' + owner: 'vy.ht@holistics.io' + block title: TextBlock { + content: @md

Squad Reporting

;; + } + block v_10wq: VizBlock { + label: 'Shipped (Last 30D)' + viz: MetricKpi { + dataset: reporting_project_management + calculation metric_a38460b { + label: 'PoP Comparison of Reporting issues Id' + formula: @aql count(reporting_issues, reporting_issues.id) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.status) + operator: 'is' + value: 'deployed' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: 'last 30 days' + } + value: VizFieldFull { + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + compare_value: VizPopSettings { + field: r(reporting_issues.completed_at) + value: RelativePopValue { + duration: 1 + granularity: 'month' + } + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + settings { + hide_label: true + } + } + + view: TabLayout { + label: 'View 1' + tab view_1: CanvasLayout { + label: 'Overview' + width: 1300 + height: 800 + grid_size: 20 + auto_expand_vertically: true + block title { + position: pos(20, 20, 1260, 60) + } + block v_10wq { + position: pos(20, 80, 260, 180) + } + mobile { + mode: 'auto' + } + } + tab tab_y21m: CanvasLayout { + label: 'Tab 2' + width: 1300 + height: 800 + grid_size: 20 + auto_expand_vertically: true + mobile { + mode: 'auto' + } + } + } + + theme: H.themes.vanilla +} \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_team.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_team.model.aml new file mode 100644 index 0000000..86168f2 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_team.model.aml @@ -0,0 +1,49 @@ +Model reporting_team { + type: 'table' + label: 'Reporting team' + description: '' + data_source_name: 'demodb' + dimension id { + label: 'Id' + description: '' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.id }};; + } + dimension name { + label: 'Name' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.name }};; + } + dimension email { + label: 'Email' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.email }};; + } + dimension role { + label: 'Role' + description: '' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.role }};; + } + + import_source: ImportSource { + type: 'csv' + original_file_name: 'users_1.csv' + uploaded_at: '2026-03-05 03:49:56' + hash: 'ae0f79138cfbf4a6178f8310e20c25f51f5bdc0293531ee3e8b6a18cbfe0d310' + column_configs: [ + H.imports.column_config("id", "id", "number"), + H.imports.column_config("name", "name", "text"), + H.imports.column_config("email", "email", "text"), + H.imports.column_config("role", "role", "text") + ] + } + owner: 'vy.ht@holistics.io' + table_name: '"dbt_khai"."holistics_reporting_tea_d6f20_202603050349"' +} diff --git a/team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml deleted file mode 100644 index 81e52b2..0000000 --- a/team-folders/VyHuynh/Vy's Model/public_issue_stage_durations_1.model.aml +++ /dev/null @@ -1,46 +0,0 @@ -Model public_issue_stage_durations_1 { - type: 'table' - label: 'Issue Stage Durations' - description: '' - data_source_name: 'project_management' - dimension id { - label: 'Id' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.id }};; - primary_key: true - } - dimension issue_id { - label: 'Issue Id' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.issue_id }};; - } - dimension stage { - label: 'Stage' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.stage }};; - } - dimension entered_at { - label: 'Entered At' - type: 'datetime' - hidden: false - definition: @sql {{ #SOURCE.entered_at }};; - } - dimension exited_at { - label: 'Exited At' - type: 'datetime' - hidden: false - definition: @sql {{ #SOURCE.exited_at }};; - } - dimension duration_hours { - label: 'Duration Hours' - type: 'number' - hidden: false - definition: @sql {{ #SOURCE.duration_hours }};; - } - - owner: 'vy.ht@holistics.io' - table_name: '"public"."issue_stage_durations"' -} diff --git a/team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml deleted file mode 100644 index 7c49991..0000000 --- a/team-folders/VyHuynh/Vy's Model/public_issue_status_transitions_1.model.aml +++ /dev/null @@ -1,46 +0,0 @@ -Model public_issue_status_transitions_1 { - type: 'table' - label: 'Issue Status Transitions' - description: '' - data_source_name: 'project_management' - dimension id { - label: 'Id' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.id }};; - primary_key: true - } - dimension issue_id { - label: 'Issue Id' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.issue_id }};; - } - dimension from_status { - label: 'From Status' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.from_status }};; - } - dimension to_status { - label: 'To Status' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.to_status }};; - } - dimension transitioned_at { - label: 'Transitioned At' - type: 'datetime' - hidden: false - definition: @sql {{ #SOURCE.transitioned_at }};; - } - dimension transitioned_by { - label: 'Transitioned By' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.transitioned_by }};; - } - - owner: 'vy.ht@holistics.io' - table_name: '"public"."issue_status_transitions"' -} diff --git a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml deleted file mode 100644 index 5bdd36d..0000000 --- a/team-folders/VyHuynh/Vy's Model/public_issues_1.model.aml +++ /dev/null @@ -1,120 +0,0 @@ -Model public_issues_1 { - type: 'table' - label: 'Issues' - description: '' - data_source_name: 'project_management' - - dimension id { - label: 'Id' - type: 'text' - description: "The **Id** field contains the unique identifier assigned to each issue in the system. \nExamples include `1`, `10`, `100`, `23`, and `89`." - hidden: false - definition: @sql {{ #SOURCE.id }};; - primary_key: true - } - dimension title { - label: 'Title' - type: 'text' - description: "The **title** field contains the descriptive name of an issue. \nIt represents the main summary or headline used to identify and reference the issue in the project management context. " - hidden: false - definition: @sql {{ #SOURCE.title }};; - primary_key: false - } - dimension identifier { - label: 'Identifier' - type: 'text' - description: "The **identifier** field contains a unique textual label assigned to each issue for identification purposes within the system. \n\nExamples include `abeo ultio tergo`, `adfero`, and `adimpleo alius campana`." - hidden: false - definition: @sql {{ #SOURCE.identifier }};; - primary_key: false - } - dimension project_id { - label: 'Project Id' - type: 'text' - description: "**Project Id** contains the unique identifier for the project associated with each issue. \n\nThis field links the issue to a specific project within the system. \n" - hidden: false - definition: @sql {{ #SOURCE.project_id }};; - primary_key: false - } - dimension assignee_id { - label: 'Assignee Id' - type: 'text' - description: "The **assignee_id** field contains the unique identifier of the user assigned to an issue. \nIt represents the person responsible for addressing or resolving the issue within the project. \n" - hidden: false - definition: @sql {{ #SOURCE.assignee_id }};; - primary_key: false - } - dimension creator_id { - label: 'Creator Id' - type: 'text' - description: "**Creator Id** contains the unique identifier of the user who created the issue. \nThis field links each issue to its originator for tracking and accountability. " - hidden: false - definition: @sql {{ #SOURCE.creator_id }};; - primary_key: false - } - dimension status { - label: 'Status' - type: 'text' - description: "The **status** field indicates the current phase or condition of an issue within the project workflow. It reflects the progress stage of the issue from creation to completion.\n\nExample value:\n- `in_progress`\n- `pr_review`\n- `merged`\n- `deployed_to_staging`\n- `tested_on_staging`\n- `deployed`" - hidden: false - definition: @sql {{ #SOURCE.status }};; - primary_key: false - } - dimension priority { - label: 'Priority' - type: 'text' - description: "**Priority** indicates the level of urgency or importance assigned to an issue within the project management process. \nValue: `low`, `medium`, `high`, `urgent`, and `none`." - hidden: false - definition: @sql {{ #SOURCE.priority }};; - primary_key: false - } - dimension label { - label: 'Label' - type: 'text' - description: "The **label** field categorizes the issue by its type or nature within the project management context. \n\nIt identifies the classification such as `chore`, `bug`, `improvement`, `tech_debt`, or `feature`. " - hidden: false - definition: @sql {{ #SOURCE.label }};; - primary_key: false - } - dimension estimate { - label: 'Estimate' - type: 'number' - description: "The **estimate** field contains the projected effort or time required to complete an issue. It represents a numerical value used for planning and resource allocation in project management. " - hidden: false - definition: @sql {{ #SOURCE.estimate }};; - primary_key: false - } - dimension created_at { - label: 'Created At' - type: 'datetime' - description: "The **created_at** field records the date and time when an issue was initially created in the system. " - hidden: false - definition: @sql {{ #SOURCE.created_at }};; - primary_key: false - } - dimension started_at { - label: 'Started At' - type: 'datetime' - description: "The **started_at** field records the date and time when work on an issue began. \nIt indicates the moment the issue transitioned from a pending state to active progress. " - hidden: false - definition: @sql {{ #SOURCE.started_at }};; - primary_key: false - } - dimension completed_at { - label: 'Completed At' - type: 'datetime' - description: "The **completed_at** field records the date and time when an issue was finished. \nIt indicates the exact moment the issue\'s work was completed in the project workflow. " - hidden: false - definition: @sql {{ #SOURCE.completed_at }};; - primary_key: false - } - dimension time_to_release { - label: "Time To Release" - type: "number" - description: "" - definition: @aql date_diff('day', public_issues_1.started_at, public_issues_1.completed_at) ;; - } - - owner: 'vy.ht@holistics.io' - table_name: '"public"."issues"' -} \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml deleted file mode 100644 index 9900fc4..0000000 --- a/team-folders/VyHuynh/Vy's Model/public_projects_1.model.aml +++ /dev/null @@ -1,34 +0,0 @@ -Model public_projects_1 { - type: 'table' - label: 'Projects' - description: '' - data_source_name: 'project_management' - dimension id { - label: 'Id' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.id }};; - primary_key: true - } - dimension name { - label: 'Name' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.name }};; - } - dimension slug { - label: 'Slug' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.slug }};; - } - dimension created_at { - label: 'Created At' - type: 'datetime' - hidden: false - definition: @sql {{ #SOURCE.created_at }};; - } - - owner: 'vy.ht@holistics.io' - table_name: '"public"."projects"' -} diff --git a/team-folders/VyHuynh/Vy's Model/public_users_1.model.aml b/team-folders/VyHuynh/Vy's Model/public_users_1.model.aml deleted file mode 100644 index 6cab194..0000000 --- a/team-folders/VyHuynh/Vy's Model/public_users_1.model.aml +++ /dev/null @@ -1,34 +0,0 @@ -Model public_users_1 { - type: 'table' - label: 'Users' - description: '' - data_source_name: 'project_management' - dimension id { - label: 'Id' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.id }};; - primary_key: true - } - dimension name { - label: 'Name' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.name }};; - } - dimension email { - label: 'Email' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.email }};; - } - dimension role { - label: 'Role' - type: 'unknown' - hidden: false - definition: @sql {{ #SOURCE.role }};; - } - - owner: 'vy.ht@holistics.io' - table_name: '"public"."users"' -} From 2a47059b17e118fcd736550b2dce6ccc13d28a6e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 05:05:16 +0000 Subject: [PATCH 020/168] Update dashboard 'reporting_project_management_2' with diff --- .../reporting_project_management.page.aml | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index c3e12aa..870eaf4 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -52,7 +52,61 @@ Dashboard reporting_project_management_2 { hide_label: true } } + block v_xxxu: VizBlock { + label: 'Shipped (30D)' + viz: MetricKpi { + dataset: reporting_project_management + calculation completed_issues_this_month { + label: 'Completed Issues This Month' + formula: @aql reporting_issues | count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issues_last_month { + label: 'Completed Issues Last Month' + formula: @aql reporting_issues | count(reporting_issues.id) | relative_period(reporting_issues.completed_at, interval(-1 month));; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: 'last 30 days' + } + filter { + field: r(reporting_issues.status) + operator: 'is' + value: 'deployed' + } + theme { + } + value: VizFieldFull { + ref: 'completed_issues_this_month' + format { + type: 'number' + pattern: 'inherited' + } + } + compare_value: VizFieldFull { + ref: 'completed_issues_last_month' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + settings { + hide_label: true + } + } view: TabLayout { label: 'View 1' tab view_1: CanvasLayout { @@ -67,6 +121,10 @@ Dashboard reporting_project_management_2 { block v_10wq { position: pos(20, 80, 260, 180) } + block v_xxxu { + position: pos(300, 100, 260, 180) + layer: 1 + } mobile { mode: 'auto' } @@ -82,6 +140,6 @@ Dashboard reporting_project_management_2 { } } } - theme: H.themes.vanilla + interactions: [] } \ No newline at end of file From c6e90e4b0d7ad8ed6a243f1865745a374576c573 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 05:05:55 +0000 Subject: [PATCH 021/168] Update dashboard 'reporting_project_management_2' with diff --- .../reporting_project_management.page.aml | 53 +------------------ 1 file changed, 1 insertion(+), 52 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 870eaf4..fd466cd 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,53 +5,6 @@ Dashboard reporting_project_management_2 { block title: TextBlock { content: @md

Squad Reporting

;; } - block v_10wq: VizBlock { - label: 'Shipped (Last 30D)' - viz: MetricKpi { - dataset: reporting_project_management - calculation metric_a38460b { - label: 'PoP Comparison of Reporting issues Id' - formula: @aql count(reporting_issues, reporting_issues.id) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.status) - operator: 'is' - value: 'deployed' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: 'last 30 days' - } - value: VizFieldFull { - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - compare_value: VizPopSettings { - field: r(reporting_issues.completed_at) - value: RelativePopValue { - duration: 1 - granularity: 'month' - } - } - settings { - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - settings { - hide_label: true - } - } block v_xxxu: VizBlock { label: 'Shipped (30D)' viz: MetricKpi { @@ -79,7 +32,6 @@ Dashboard reporting_project_management_2 { value: 'deployed' } theme { - } value: VizFieldFull { ref: 'completed_issues_this_month' @@ -118,11 +70,8 @@ Dashboard reporting_project_management_2 { block title { position: pos(20, 20, 1260, 60) } - block v_10wq { - position: pos(20, 80, 260, 180) - } block v_xxxu { - position: pos(300, 100, 260, 180) + position: pos(20, 80, 260, 180) layer: 1 } mobile { From 7aa61fb36edb19d4a665458ac025abebed5b65fc Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 05:33:31 +0000 Subject: [PATCH 022/168] Adjust position of block 'v_10wq' in 'reporting_project_management.page.aml' for layout refinement --- .../reporting_project_management.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index c3e12aa..5fe0e47 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -65,7 +65,7 @@ Dashboard reporting_project_management_2 { position: pos(20, 20, 1260, 60) } block v_10wq { - position: pos(20, 80, 260, 180) + position: pos(20, 80, 260, 160) } mobile { mode: 'auto' From b2b49453424409fdd8417e0a43da9e5e30711a1e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 06:00:26 +0000 Subject: [PATCH 023/168] Update 'reporting_issues' status description, add 'Completed issue' metric and update 'reporting_project_management' page layout --- .../reporting_issues.model.aml | 5 +-- .../reporting_project_management.dataset.aml | 8 +++++ .../reporting_project_management.page.aml | 36 ++++++++----------- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml index 045d049..dd69b2d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml @@ -47,10 +47,11 @@ Model reporting_issues { } dimension status { label: 'Status' - description: '' type: 'text' + description: '**Status** indicates the current stage of a task or issue within the project workflow. \nIt includes `pr_review`, `deployed_to_staging`, `deployed`, `tested_on_staging`, `merged`, and `in_progress`.' hidden: false definition: @sql {{ #SOURCE.status }};; + primary_key: false } dimension priority { label: 'Priority' @@ -126,4 +127,4 @@ Model reporting_issues { } owner: 'vy.ht@holistics.io' table_name: '"dbt_khai"."holistics_reporting_iss_614ea_202603050350"' -} +} \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index ec85239..fb819ff 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -16,4 +16,12 @@ Dataset reporting_project_management { relationship(reporting_issues.assignee_id > reporting_team.id, true), relationship(reporting_issues.creator_id > reporting_team.id, true) ] + metric metric_63f4786 { + label: "Completed issue" + type: "number" + hidden: false + description: "" + definition: @aql count(reporting_issues.id) +| where(reporting_issues.status == "deployed");; + } } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index fd466cd..1acaf01 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,19 +5,20 @@ Dashboard reporting_project_management_2 { block title: TextBlock { content: @md

Squad Reporting

;; } - block v_xxxu: VizBlock { - label: 'Shipped (30D)' + block v_0a3z: VizBlock { + label: 'Completed issue compared with LM - Completed Issue' viz: MetricKpi { dataset: reporting_project_management - calculation completed_issues_this_month { - label: 'Completed Issues This Month' - formula: @aql reporting_issues | count(reporting_issues.id);; + calculation metric_63f4786 { + label: 'Completed issue' + formula: @aql count(reporting_issues.id) +| where(reporting_issues.status == "deployed");; calc_type: 'measure' data_type: 'number' } - calculation completed_issues_last_month { - label: 'Completed Issues Last Month' - formula: @aql reporting_issues | count(reporting_issues.id) | relative_period(reporting_issues.completed_at, interval(-1 month));; + calculation metric_6a7e2b6 { + label: 'LM - Completed Issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; calc_type: 'measure' data_type: 'number' } @@ -26,22 +27,15 @@ Dashboard reporting_project_management_2 { operator: 'matches' value: 'last 30 days' } - filter { - field: r(reporting_issues.status) - operator: 'is' - value: 'deployed' - } - theme { - } value: VizFieldFull { - ref: 'completed_issues_this_month' + ref: 'metric_63f4786' format { type: 'number' pattern: 'inherited' } } compare_value: VizFieldFull { - ref: 'completed_issues_last_month' + ref: 'metric_6a7e2b6' format { type: 'number' pattern: 'inherited' @@ -63,16 +57,15 @@ Dashboard reporting_project_management_2 { label: 'View 1' tab view_1: CanvasLayout { label: 'Overview' - width: 1300 - height: 800 + width: 1320 + height: 820 grid_size: 20 auto_expand_vertically: true block title { position: pos(20, 20, 1260, 60) } - block v_xxxu { + block v_0a3z { position: pos(20, 80, 260, 180) - layer: 1 } mobile { mode: 'auto' @@ -90,5 +83,4 @@ Dashboard reporting_project_management_2 { } } theme: H.themes.vanilla - interactions: [] } \ No newline at end of file From 1f3debe895f303b428f394e9294f00c9bdced415 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 5 Mar 2026 06:05:59 +0000 Subject: [PATCH 024/168] Update 'Status' description and fix label, references in 'Completed issue' viz block on Squad Reporting page --- .../reporting_issues.model.aml | 2 +- .../reporting_project_management.page.aml | 22 ++++++------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml index dd69b2d..ac3e593 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml @@ -48,7 +48,7 @@ Model reporting_issues { dimension status { label: 'Status' type: 'text' - description: '**Status** indicates the current stage of a task or issue within the project workflow. \nIt includes `pr_review`, `deployed_to_staging`, `deployed`, `tested_on_staging`, `merged`, and `in_progress`.' + description: '**Status** indicates the current stage of a task or issue within the project workflow. \n\nIt reflects progress milestones such as `pr_review`, `deployed_to_staging`, `deployed`, `tested_on_staging`, `merged`, and `in_progress`. \n\nFor example, a task with status `in_progress` is actively being worked on, while `deployed` means it has been released.' hidden: false definition: @sql {{ #SOURCE.status }};; primary_key: false diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 1acaf01..5fed3e7 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,19 +5,12 @@ Dashboard reporting_project_management_2 { block title: TextBlock { content: @md

Squad Reporting

;; } - block v_0a3z: VizBlock { - label: 'Completed issue compared with LM - Completed Issue' + block v_wioy: VizBlock { + label: 'Completed issue compared with LM - Completed issue' viz: MetricKpi { dataset: reporting_project_management - calculation metric_63f4786 { - label: 'Completed issue' - formula: @aql count(reporting_issues.id) -| where(reporting_issues.status == "deployed");; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_6a7e2b6 { - label: 'LM - Completed Issue' + calculation metric_3b5d3d8 { + label: 'LM - Completed issue' formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; calc_type: 'measure' data_type: 'number' @@ -28,17 +21,16 @@ Dashboard reporting_project_management_2 { value: 'last 30 days' } value: VizFieldFull { - ref: 'metric_63f4786' + ref: r(reporting_project_management.metric_63f4786) format { type: 'number' pattern: 'inherited' } } compare_value: VizFieldFull { - ref: 'metric_6a7e2b6' + ref: 'metric_3b5d3d8' format { type: 'number' - pattern: 'inherited' } } settings { @@ -64,7 +56,7 @@ Dashboard reporting_project_management_2 { block title { position: pos(20, 20, 1260, 60) } - block v_0a3z { + block v_wioy { position: pos(20, 80, 260, 180) } mobile { From ec03b02002a79c0bd4c7ae7da595557aedf8c34c Mon Sep 17 00:00:00 2001 From: Vu Date: Thu, 5 Mar 2026 10:13:41 +0000 Subject: [PATCH 025/168] Add new dashboard 'vux-dashboard-test' with title block and canvas layout view --- vux-dashboard-test.page.aml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 vux-dashboard-test.page.aml diff --git a/vux-dashboard-test.page.aml b/vux-dashboard-test.page.aml new file mode 100644 index 0000000..168bf10 --- /dev/null +++ b/vux-dashboard-test.page.aml @@ -0,0 +1,25 @@ +Dashboard vux_dashboard_test { + title: 'vux-dashboard-test' + description: '' + owner: 'vu.dq@holistics.io' + block title: TextBlock { + content: @md # Your title goes here ;; + } + + view: CanvasLayout { + label: 'View 1' + width: 1300 + height: 800 + grid_size: 20 + auto_expand_vertically: true + block title { + position: pos(20, 20, 1260, 60) + } + mobile { + mode: 'auto' + } + } + + theme: H.themes.vanilla + +} \ No newline at end of file From 82db84333df5fa0e721c8fb11aaa38488841cbd6 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 04:19:51 +0000 Subject: [PATCH 026/168] Add 'Cycle time hour - num' dimension and redesign 'Squad Reporting - Project Management' dashboard with KPI cards and squad_dark theme --- .../reporting_project_management.dataset.aml | 8 + .../reporting_project_management.page.aml | 671 ++++++++++++++++-- 2 files changed, 631 insertions(+), 48 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index fb819ff..de87bbc 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -24,4 +24,12 @@ Dataset reporting_project_management { definition: @aql count(reporting_issues.id) | where(reporting_issues.status == "deployed");; } + dimension dimension_ffede77 { + label: "Cycle time hour - num" + type: "number" + hidden: false + description: "" + definition: @aql hour_num(reporting_issues.cycle_time_hours);; + model: reporting_issues + } } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 5fed3e7..74861cd 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1,78 +1,653 @@ -Dashboard reporting_project_management_2 { - title: 'reporting_project_management' - description: '' - owner: 'vy.ht@holistics.io' - block title: TextBlock { - content: @md

Squad Reporting

;; - } - block v_wioy: VizBlock { - label: 'Completed issue compared with LM - Completed issue' - viz: MetricKpi { +// ============================================================ +// FILE: themes/squad_dark.aml +// Reusable dark theme for the squad dashboard +// ============================================================ + +const squad_bg = '#0c0e14' +const squad_surface = '#141720' +const squad_border = '#1e2235' +const squad_text = '#e8eaf0' +const squad_muted = '#6b7194' +const squad_accent = '#4f8cff' +const squad_green = '#34d399' +const squad_red = '#f87171' +const squad_amber = '#fbbf24' +const squad_font = 'Inter' +const squad_mono = 'JetBrains Mono' + +PageTheme squad_dark { + background { + bg_color: squad_bg + } + + canvas { + background { + bg_color: squad_bg + } + border { + border_width: 0 + border_radius: 0 + border_color: squad_border + border_style: 'none' + } + shadow: 'none' + opacity: 1 + } + + block { + label { + font_family: squad_font + font_size: 14 + font_color: squad_text + font_weight: 'semibold' + font_style: 'normal' + } + text { + font_family: squad_font + font_size: 12 + font_color: squad_muted + font_weight: 'normal' + font_style: 'normal' + } + border { + border_width: 1 + border_radius: 12 + border_color: squad_border + border_style: 'solid' + } + background { + bg_color: squad_surface + } + padding: 16 + shadow: 'none' + opacity: 1 + } + + viz { + table { + general { + bg_color: squad_surface + hover_color: '#1a1d2a' + banding_color: '#161922' + font_size: 12 + font_color: squad_muted + font_family: squad_font + border_color: squad_border + border_width: 1 + grid_color: squad_border + } + header { + bg_color: '#1a1d2a' + font_size: 12 + font_color: squad_text + font_weight: 'semibold' + } + sub_header { + bg_color: '#1a1d2a' + font_size: 11 + font_color: squad_muted + font_weight: 'medium' + } + sub_title { + font_size: 11 + font_color: squad_muted + font_weight: 'medium' + } + } + } + + custom_css: @css + /* ---- Squad Command Center ---- */ + + /* Tab bar styling */ + .tab-bar { background: #0c0e14 !important; border-bottom: 1px solid #1e2235 !important; } + .tab-bar .tab-item { color: #6b7194 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } + .tab-bar .tab-item.active { color: #4f8cff !important; border-bottom: 2px solid #4f8cff !important; } + + /* Metric sheet overrides */ + .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #e8eaf0 !important; } + .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #6b7194 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } + + /* Chart axis and legend */ + .recharts-cartesian-axis-tick-value { fill: #6b7194 !important; font-size: 10px !important; } + .recharts-legend-item-text { color: #6b7194 !important; font-size: 11px !important; } + .recharts-cartesian-grid line { stroke: #1e2235 !important; } + + /* Tooltip */ + .recharts-tooltip-wrapper .recharts-default-tooltip { background: #1a1d2a !important; border: 1px solid #262a3e !important; border-radius: 8px !important; } + + /* Scrollbar */ + ::-webkit-scrollbar { width: 5px; height: 5px; } + ::-webkit-scrollbar-track { background: #0c0e14; } + ::-webkit-scrollbar-thumb { background: #262a3e; border-radius: 3px; } + ;; +} + + +// ============================================================ +// FILE: dashboards/squad_command_center.page.aml +// ============================================================ + +Dashboard squad_command_center { + title: 'Squad Reporting - Project Management' + description: 'Engineering delivery metrics · Bottleneck analysis · Team health' + theme: squad_dark + + // ======================================== + // TAB LAYOUT + // ======================================== + + view: TabLayout { + label: 'Squad Command Center' + + // ──────────────────────────────────── + // TAB 1: OVERVIEW + // ──────────────────────────────────── + tab overview_tab: CanvasLayout { + label: '◎ Overview' + height: 1400 + grid_size: 20 + + // Row 1: KPIs (4 across) + block kpi_shipped { + position: pos(0, 0, 300, 120) + } + block kpi_cycle { + position: pos(300, 0, 300, 120) + } + block kpi_wip { + position: pos(600, 0, 300, 120) + } + block kpi_completion { + position: pos(900, 0, 300, 120) + } + + // Row 2: Burnup + Pipeline + block burnup_chart { + position: pos(0, 140, 600, 340) + } + block pipeline_bar { + position: pos(600, 140, 600, 340) + } + + // Row 3: Throughput + Heatmap + block throughput_bar { + position: pos(0, 500, 600, 340) + } + block transition_heatmap { + position: pos(600, 500, 600, 340) + } + + // Row 4: Cycle time trend + block cycle_trend { + position: pos(0, 860, 1200, 340) + } + block v_x8r0 { + position: pos(20, 20, 240, 200) + } + block v_997c { + position: pos(300, 20, 240, 200) + } + } + + // ──────────────────────────────────── + // TAB 2: TIME-TO-MARKET + // ──────────────────────────────────── + tab ttm_tab: CanvasLayout { + label: '⏱ Time-to-Market' + height: 1500 + grid_size: 20 + + // Section header + block ttm_header { + position: pos(0, 0, 1200, 60) + } + + // Full-width stacked bar + block ttm_stacked { + position: pos(0, 70, 1200, 560) + } + + // Waterfall + Donut + block ttm_waterfall { + position: pos(0, 650, 600, 360) + } + block ttm_donut { + position: pos(600, 650, 600, 360) + } + + // Segment P50/P75/P90 + block ttm_percentiles { + position: pos(0, 1030, 1200, 360) + } + } + + // ──────────────────────────────────── + // TAB 3: BOTTLENECKS + // ──────────────────────────────────── + tab bottleneck_tab: CanvasLayout { + label: '⚡ Bottlenecks' + height: 1500 + grid_size: 20 + + // Bottleneck trend + Stage distribution + block bottleneck_trend { + position: pos(0, 0, 600, 360) + } + block stage_dist { + position: pos(600, 0, 600, 360) + } + + // Stale issues table + block stale_header { + position: pos(0, 380, 1200, 50) + } + block stale_table { + position: pos(0, 440, 1200, 400) + } + } + + // ──────────────────────────────────── + // TAB 4: WORKLOAD + // ──────────────────────────────────── + tab workload_tab: CanvasLayout { + label: '👥 Workload' + height: 1200 + grid_size: 20 + + // WIP per engineer + Completed per engineer + block wip_engineer { + position: pos(0, 0, 600, 360) + } + block done_engineer { + position: pos(600, 0, 600, 360) + } + + // Priority workload + Estimate accuracy + block priority_workload { + position: pos(0, 380, 600, 360) + } + block estimate_scatter { + position: pos(600, 380, 600, 360) + } + + // Cycle by label + block cycle_label { + position: pos(0, 760, 1200, 340) + } + } + + // ──────────────────────────────────── + // TAB 5: QUALITY + // ──────────────────────────────────── + tab quality_tab: CanvasLayout { + label: '🎯 Quality' + height: 1300 + grid_size: 20 + + // KPIs + block kpi_bug_ratio { + position: pos(0, 0, 300, 120) + } + block kpi_bugs_created { + position: pos(300, 0, 300, 120) + } + block kpi_tech_debt { + position: pos(600, 0, 300, 120) + } + block kpi_bug_cycle { + position: pos(900, 0, 300, 120) + } + + // Bug ratio trend + Work type distribution + block bug_trend { + position: pos(0, 140, 600, 360) + } + block label_dist { + position: pos(600, 140, 600, 360) + } + + // Priority scatter + Cycle by label + block priority_scatter { + position: pos(0, 520, 600, 360) + } + block quality_cycle_label { + position: pos(600, 520, 600, 360) + } + } + + // ──────────────────────────────────── + // TAB 6: PROJECTS + // ──────────────────────────────────── + tab projects_tab: CanvasLayout { + label: '📊 Projects' + height: 1000 + grid_size: 20 + + // Project completion + block project_completion { + position: pos(0, 0, 1200, 360) + } + + // Stage by project + Velocity + block project_stages { + position: pos(0, 380, 600, 380) + } + block project_velocity { + position: pos(600, 380, 600, 380) + } + } + } + block v_x8r0: VizBlock { + label: 'Shipped (30D)' + viz: MarkdownViz { dataset: reporting_project_management - calculation metric_3b5d3d8 { + calculation metric_e98dbc4 { label: 'LM - Completed issue' formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; calc_type: 'measure' data_type: 'number' } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' value: 'last 30 days' } - value: VizFieldFull { - ref: r(reporting_project_management.metric_63f4786) - format { - type: 'number' - pattern: 'inherited' - } - } - compare_value: VizFieldFull { - ref: 'metric_3b5d3d8' - format { - type: 'number' + values: [ + VizFieldFull { + label: 'Completed issue (Last 30D)' + ref: r(reporting_project_management.metric_63f4786) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'metric_abbd5a2' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'color_condition' + format { + type: 'text' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'icon_condition' + format { + type: 'text' + } } - } + ] + content: @md + +
+

Shipped (30D)

+ + {{ rows[0].values.`Completed issue (Last 30D)` }} + + +
+ {{ rows[0].values.`Icon Condition` }} + {{ rows[0].values.`%LM - Completed issue` }} + + vs last month +
+ +
;; settings { + show_row_total: true + show_column_total: true aggregate_awareness { enabled: true debug_comments: true } - alignment: 'left' } } settings { hide_label: true } } - view: TabLayout { - label: 'View 1' - tab view_1: CanvasLayout { - label: 'Overview' - width: 1320 - height: 820 - grid_size: 20 - auto_expand_vertically: true - block title { - position: pos(20, 20, 1260, 60) + block v_997c: VizBlock { + label: 'Avg Cycle Time (7D)' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' } - block v_wioy { - position: pos(20, 80, 260, 180) + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' } - mobile { - mode: 'auto' + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' } - } - tab tab_y21m: CanvasLayout { - label: 'Tab 2' - width: 1300 - height: 800 - grid_size: 20 - auto_expand_vertically: true - mobile { - mode: 'auto' + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_bcc0c1b { + label: '%LW - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: 'last 7 days' + } + values: [ + VizFieldFull { + label: 'Avg Cycle Time' + ref: ref('reporting_issues', 'dimension_ffede77') + aggregation: 'avg' + format { + type: 'number' + pattern: '#,###0.00' + } + }, + VizFieldFull { + ref: 'metric_bcc0c1b' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'metric_02fef53' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'metric_8cf2423' + format { + type: 'text' + } + } + ] + content: @md + +
+

Avg Cycle Time (7D)

+ + {{ rows[0].values.`Avg Cycle Time` }}h + + +
+ {{ rows[0].values.`Cycle Time - Icon Condition` }} + {{ rows[0].values.`%LW - Avg Cycle Time` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } } } + settings { + hide_label: true + } } - theme: H.themes.vanilla } \ No newline at end of file From 1fea351839f3ea2e795008c8aabfba35ed20cad1 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 05:06:26 +0000 Subject: [PATCH 027/168] Update 'reporting_issue_duration' label and import; add WIP and Avg PR Review blocks to 'reporting_project_management.page' --- .../reporting_issue_duration.model.aml | 10 +- .../reporting_project_management.dataset.aml | 3 +- .../reporting_project_management.page.aml | 351 +++++++++++++++++- 3 files changed, 349 insertions(+), 15 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml index 4001b78..448467c 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml @@ -1,6 +1,6 @@ Model reporting_issue_duration { type: 'table' - label: 'Reporting issue duration' + label: 'Issue stage durations' description: '' data_source_name: 'demodb' dimension id { @@ -48,9 +48,9 @@ Model reporting_issue_duration { import_source: ImportSource { type: 'csv' - original_file_name: 'issue_stage_durations_1.csv' - uploaded_at: '2026-03-05 03:51:32' - hash: 'cc01a9f4fefbe2f179acb05efcc37a928eaf751d66ab0d09153efab78334e717' + original_file_name: 'issue_stage_durations.csv' + uploaded_at: '2026-03-06 05:02:09' + hash: 'a59e0932924ad6d67c5afa764889272c199bd9f59d757eebd1febf5dadcd1075' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), @@ -61,5 +61,5 @@ Model reporting_issue_duration { ] } owner: 'vy.ht@holistics.io' - table_name: '"dbt_khai"."holistics_reporting_iss_99799_202603050351"' + table_name: '"dbt_khai"."holistics_issue_stage_d_c7469_202603060502"' } diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index de87bbc..5cd9391 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -11,10 +11,11 @@ Dataset reporting_project_management { ] relationships: [ relationship(reporting_issues_log.id > reporting_issues.id, true), - relationship(reporting_issue_duration.id > reporting_issues.id, true), relationship(reporting_issues.project_id > reporting_project.id, true), relationship(reporting_issues.assignee_id > reporting_team.id, true), relationship(reporting_issues.creator_id > reporting_team.id, true) + , + relationship(reporting_issue_duration.id > reporting_issues.id, true) ] metric metric_63f4786 { label: "Completed issue" diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 74861cd..db4bb64 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -188,6 +188,12 @@ Dashboard squad_command_center { block v_997c { position: pos(300, 20, 240, 200) } + block v_gt75 { + position: pos(580, 20, 240, 200) + } + block v_uhk0 { + position: pos(860, 20, 240, 200) + } } // ──────────────────────────────────── @@ -433,7 +439,7 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-value { + .kpi-shipped-value { font-size: 56px; font-weight: 800; color: #4ade80; @@ -456,7 +462,7 @@ Dashboard squad_command_center {

Shipped (30D)

- + {{ rows[0].values.`Completed issue (Last 30D)` }} @@ -482,7 +488,7 @@ Dashboard squad_command_center { } } block v_997c: VizBlock { - label: 'Avg Cycle Time (7D)' + label: 'Avg Cycle Time (30D)' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -518,8 +524,8 @@ Dashboard squad_command_center { data_type: 'text' } calculation metric_bcc0c1b { - label: '%LW - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' data_type: 'number' } @@ -546,7 +552,7 @@ Dashboard squad_command_center { filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 7 days' + value: 'last 30 days' } values: [ VizFieldFull { @@ -617,8 +623,8 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-compare { - color: {{ rows[0].values.`Color Condition` }}; + .kpi-cycle-time-compare { + color: {{ rows[0].values.`Cycle Time - Color Condition` }}; } @@ -629,6 +635,333 @@ Dashboard squad_command_center { {{ rows[0].values.`Avg Cycle Time` }}h +
+ {{ rows[0].values.`Cycle Time - Icon Condition` }} + {{ rows[0].values.`%LM - Avg Cycle Time` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_gt75: VizBlock { + label: 'WIP issues (Last 14D)' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_bcc0c1b { + label: '%LW - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: 'last 14 days' + } + filter { + field: r(reporting_issues.status) + operator: 'is_not' + value: 'deployed' + } + filter { + field: r(reporting_issues.started_at) + operator: 'not_null' + value: [] + } + filter { + field: r(reporting_issues.status) + operator: 'not_null' + value: [] + } + values: [ + VizFieldFull { + label: 'WIP' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.status) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+

WIP (Last 14D)

+ + {{ rows[0].values.`WIP` }} + + +
+ issues across + {{ rows[0].values.`CountD of Status` }} + status +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_uhk0: VizBlock { + label: 'Avg Cycle Time (7D) copy' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_bcc0c1b { + label: '%LW - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: 'last 30 days' + } + filter { + field: r(reporting_issue_duration.stage) + operator: 'is' + value: 'pr_review' + } + values: [ + VizFieldFull { + label: 'Avg PR Review' + ref: r(reporting_issue_duration.duration_hours) + aggregation: 'avg' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+

Avg PR Review (7D)

+ + {{ rows[0].values.`Avg PR Review` }}h + +
{{ rows[0].values.`Cycle Time - Icon Condition` }} {{ rows[0].values.`%LW - Avg Cycle Time` }} @@ -636,7 +969,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true From c446760a1f54c8b4373007e087d49c5730e59dd0 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 08:49:55 +0000 Subject: [PATCH 028/168] Update 'reporting_issues' types and import; rename and refine metrics and visuals in 'reporting_project_management' dataset and dashboard --- .../reporting_issues.model.aml | 27 +- .../reporting_project_management.dataset.aml | 10 +- .../reporting_project_management.page.aml | 375 ++++++++++++++++-- 3 files changed, 349 insertions(+), 63 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml index ac3e593..2eaafd6 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml @@ -47,11 +47,10 @@ Model reporting_issues { } dimension status { label: 'Status' + description: '' type: 'text' - description: '**Status** indicates the current stage of a task or issue within the project workflow. \n\nIt reflects progress milestones such as `pr_review`, `deployed_to_staging`, `deployed`, `tested_on_staging`, `merged`, and `in_progress`. \n\nFor example, a task with status `in_progress` is actively being worked on, while `deployed` means it has been released.' hidden: false definition: @sql {{ #SOURCE.status }};; - primary_key: false } dimension priority { label: 'Priority' @@ -77,37 +76,37 @@ Model reporting_issues { dimension created_at { label: 'Created at' description: '' - type: 'datetime' + type: 'date' hidden: false definition: @sql {{ #SOURCE.created_at }};; } dimension started_at { label: 'Started at' description: '' - type: 'datetime' + type: 'date' hidden: false definition: @sql {{ #SOURCE.started_at }};; } dimension completed_at { label: 'Completed at' description: '' - type: 'datetime' + type: 'date' hidden: false definition: @sql {{ #SOURCE.completed_at }};; } dimension cycle_time_hours { label: 'Cycle time hours' description: '' - type: 'datetime' + type: 'number' hidden: false definition: @sql {{ #SOURCE.cycle_time_hours }};; } import_source: ImportSource { type: 'csv' - original_file_name: 'issues_1.csv' - uploaded_at: '2026-03-05 03:50:41' - hash: '8449dd003576c6a22aae979e690889d1938a7179160ae9fd0afb1345c8585244' + original_file_name: 'issues.csv' + uploaded_at: '2026-03-06 05:15:40' + hash: '51c656b0c185757586e81a133e3f8ad26d5e70726e21d8f21646104978d4b64e' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("title", "title", "text"), @@ -119,12 +118,12 @@ Model reporting_issues { H.imports.column_config("priority", "priority", "text"), H.imports.column_config("label", "label", "text"), H.imports.column_config("estimate", "estimate", "number"), - H.imports.column_config("created_at", "created_at", "datetime"), - H.imports.column_config("started_at", "started_at", "datetime"), - H.imports.column_config("completed_at", "completed_at", "datetime"), - H.imports.column_config("cycle_time_hours", "cycle_time_hours", "datetime") + H.imports.column_config("created_at", "created_at", "date"), + H.imports.column_config("started_at", "started_at", "date"), + H.imports.column_config("completed_at", "completed_at", "date"), + H.imports.column_config("cycle_time_hours", "cycle_time_hours", "number") ] } owner: 'vy.ht@holistics.io' table_name: '"dbt_khai"."holistics_reporting_iss_614ea_202603050350"' -} \ No newline at end of file +} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 5cd9391..d9991fc 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -17,7 +17,7 @@ Dataset reporting_project_management { , relationship(reporting_issue_duration.id > reporting_issues.id, true) ] - metric metric_63f4786 { + metric completed_issue { label: "Completed issue" type: "number" hidden: false @@ -25,12 +25,4 @@ Dataset reporting_project_management { definition: @aql count(reporting_issues.id) | where(reporting_issues.status == "deployed");; } - dimension dimension_ffede77 { - label: "Cycle time hour - num" - type: "number" - hidden: false - description: "" - definition: @aql hour_num(reporting_issues.cycle_time_hours);; - model: reporting_issues - } } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index db4bb64..b38d7db 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -192,8 +192,12 @@ Dashboard squad_command_center { position: pos(580, 20, 240, 200) } block v_uhk0 { - position: pos(860, 20, 240, 200) + position: pos(860, 20, 280, 200) } + block v_msvd { + position: pos(1160, 20, 280, 200) + } + width: 1460 } // ──────────────────────────────────── @@ -346,6 +350,7 @@ Dashboard squad_command_center { } block v_x8r0: VizBlock { label: 'Shipped (30D)' + description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -356,7 +361,7 @@ Dashboard squad_command_center { } calculation metric_abbd5a2 { label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' data_type: 'number' } @@ -365,7 +370,7 @@ Dashboard squad_command_center { formula: @aql case( when: metric_abbd5a2 < 0, then: "red", - else: "green" + else: "#4ade80" );; calc_type: 'measure' data_type: 'text' @@ -373,9 +378,10 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Icon Condition' formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" + when: + metric_abbd5a2 < 0, + then: "▼", + else: "▲" );; calc_type: 'measure' data_type: 'text' @@ -388,7 +394,7 @@ Dashboard squad_command_center { values: [ VizFieldFull { label: 'Completed issue (Last 30D)' - ref: r(reporting_project_management.metric_63f4786) + ref: r(reporting_project_management.completed_issue) format { type: 'number' pattern: 'inherited' @@ -454,8 +460,9 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-compare { + .kpi-shipped-compare { color: {{ rows[0].values.`Color Condition` }}; + font-weight: 500 } @@ -466,14 +473,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Completed issue (Last 30D)` }} -
+
{{ rows[0].values.`Icon Condition` }} {{ rows[0].values.`%LM - Completed issue` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -523,16 +530,10 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation metric_bcc0c1b { - label: '%LM - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } calculation metric_02fef53 { label: 'Cycle Time - Color Condition' formula: @aql case( - when: metric_bcc0c1b < 0, + when: avg_cycle_time < 0, then: "green", else: "red" );; @@ -542,13 +543,19 @@ Dashboard squad_command_center { calculation metric_8cf2423 { label: 'Cycle Time - Icon Condition' formula: @aql case( - when: metric_bcc0c1b < 0, + when: avg_cycle_time < 0, then: "▾", else: "▴" );; calc_type: 'measure' data_type: 'text' } + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -557,7 +564,7 @@ Dashboard squad_command_center { values: [ VizFieldFull { label: 'Avg Cycle Time' - ref: ref('reporting_issues', 'dimension_ffede77') + ref: r(reporting_issues.cycle_time_hours) aggregation: 'avg' format { type: 'number' @@ -565,7 +572,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'metric_bcc0c1b' + ref: 'avg_cycle_time' format { type: 'number' pattern: '#,###%' @@ -591,7 +598,7 @@ Dashboard squad_command_center { border-radius: 16px; color: #ffffff; font-family: sans-serif; - width: 210px; + width: 200px; border: 1px solid #1f222c; } .kpi-title { @@ -608,7 +615,7 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-value { + .kpi-cycle-value { font-size: 56px; font-weight: 800; color: #4f8cff; @@ -623,19 +630,20 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-cycle-time-compare { + .kpi-cycle-compare { color: {{ rows[0].values.`Cycle Time - Color Condition` }}; + font-weight: 500; }
-

Avg Cycle Time (7D)

- - {{ rows[0].values.`Avg Cycle Time` }}h +

Avg Cycle Time (30D)

+ + {{ rows[0].values.`Avg Cycle Time` }} -
+
{{ rows[0].values.`Cycle Time - Icon Condition` }} {{ rows[0].values.`%LM - Avg Cycle Time` }} @@ -829,7 +837,7 @@ Dashboard squad_command_center { } } block v_uhk0: VizBlock { - label: 'Avg Cycle Time (7D) copy' + label: 'Avg PR Review (14D)' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -886,6 +894,32 @@ Dashboard squad_command_center { when: metric_bcc0c1b < 0, then: "▾", else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_avg_pr_review { + label: '%LM - Avg PR Review' + formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_7eece09 { + label: 'Avg PR Review - Color Condition' + formula: @aql case( + when: lm_avg_pr_review < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_0e96b56 { + label: 'Avg PR Review - Icon Condition' + formula: @aql case( + when: lm_avg_pr_review < 0, + then: "▾", + else: "▴" );; calc_type: 'measure' data_type: 'text' @@ -907,7 +941,26 @@ Dashboard squad_command_center { aggregation: 'avg' format { type: 'number' - pattern: 'inherited' + pattern: '#,###' + } + }, + VizFieldFull { + ref: 'lm_avg_pr_review' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'metric_7eece09' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'metric_0e96b56' + format { + type: 'text' } } ] @@ -918,7 +971,7 @@ Dashboard squad_command_center { border-radius: 16px; color: #ffffff; font-family: sans-serif; - width: 210px; + width: 220px; border: 1px solid #1f222c; } .kpi-title { @@ -935,10 +988,10 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-value { + .kpi-pr-review-value { font-size: 56px; font-weight: 800; - color: #4f8cff; + color: #fbbf24; line-height: 1; } .kpi-percent { @@ -950,26 +1003,268 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-compare { - color: {{ rows[0].values.`Color Condition` }}; + .kpi-pr-review-compare { + color: {{ rows[0].values.`Avg PR Review - Color Condition` }}; + font-weight: 500 }
-

Avg PR Review (7D)

- +

Avg PR Review (14D)

+ {{ rows[0].values.`Avg PR Review` }}h -
- {{ rows[0].values.`Cycle Time - Icon Condition` }} - {{ rows[0].values.`%LW - Avg Cycle Time` }} +
+ {{ rows[0].values.`Avg PR Review - Icon Condition` }} + {{ rows[0].values.`%LM - Avg PR Review`}} vs last month
-
;; +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_msvd: VizBlock { + label: 'Completion' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_bcc0c1b { + label: '%LW - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: metric_bcc0c1b < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_avg_pr_review { + label: '%LM - Avg PR Review' + formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_7eece09 { + label: 'Avg PR Review - Color Condition' + formula: @aql case( + when: lm_avg_pr_review < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_0e96b56 { + label: 'Avg PR Review - Icon Condition' + formula: @aql case( + when: lm_avg_pr_review < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation percent_completion { + label: '% Issue Completed' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation delta__issue_completed { + label: 'Delta - % Issue Completed' + formula: @aql percent_completion - l2w___issue_completed;; + calc_type: 'measure' + data_type: 'number' + } + calculation l2w___issue_completed { + label: 'L2W - % Issue Completed' + formula: @aql percent_completion | relative_period(reporting_issues.completed_at, interval(-2 week), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation issue_completed__color_condition { + label: 'Issue Completed - Color Condition' + formula: @aql case( + when: delta__issue_completed < 0, + then: "red", + else: "#34d399" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation issue_completed__icon_condition { + label: 'Issue Completed - Icon Condition' + formula: @aql case( + when: delta__issue_completed < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: 'last 14 days' + } + values: [ + VizFieldFull { + ref: 'percent_completion' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'l2w___issue_completed' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'delta__issue_completed' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'issue_completed__color_condition' + format { + type: 'text' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'issue_completed__icon_condition' + format { + type: 'text' + pattern: '#,###%' + } + } + ] + content: @md + +
+

Completion (14D)

+ + {{ rows[0].values.`% Issue Completed` }} + + +
+ {{ rows[0].values.`Issue Completed - Icon Condition` }} + {{ rows[0].values.`Delta - % Issue Completed`}} + + vs last 14 days +
+ +
;; settings { show_row_total: true show_column_total: true From 1d319af77ee8f98ccc4dd729adb0399fd51910f3 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 09:11:00 +0000 Subject: [PATCH 029/168] Save uncommitted changes before restoring to commit c44676 --- .../reporting_project_management.page.aml | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index b38d7db..092f600 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -359,7 +359,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation metric_abbd5a2 { + calculation percent_completed_issue { label: '%LM - Completed issue' formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -368,7 +368,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Color Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "red", else: "#4ade80" );; @@ -379,7 +379,7 @@ Dashboard squad_command_center { label: 'Icon Condition' formula: @aql case( when: - metric_abbd5a2 < 0, + or(percent_completed_issue < 0, percent_avg_cycle_time < 0, percent_lm_avg_pr_review < 0 then: "▼", else: "▲" );; @@ -401,7 +401,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'metric_abbd5a2' + ref: 'percent_completed_issue' format { type: 'number' pattern: '#,###%' @@ -504,7 +504,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation metric_abbd5a2 { + calculation percent_completed_issue { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -513,7 +513,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "red", else: "green" );; @@ -523,7 +523,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "▾", else: "▴" );; @@ -533,7 +533,7 @@ Dashboard squad_command_center { calculation metric_02fef53 { label: 'Cycle Time - Color Condition' formula: @aql case( - when: avg_cycle_time < 0, + when: percent_avg_cycle_time < 0, then: "green", else: "red" );; @@ -543,14 +543,14 @@ Dashboard squad_command_center { calculation metric_8cf2423 { label: 'Cycle Time - Icon Condition' formula: @aql case( - when: avg_cycle_time < 0, + when: percent_avg_cycle_time < 0, then: "▾", else: "▴" );; calc_type: 'measure' data_type: 'text' } - calculation avg_cycle_time { + calculation percent_avg_cycle_time { label: '%LM - Avg Cycle Time' formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -572,7 +572,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'avg_cycle_time' + ref: 'percent_avg_cycle_time' format { type: 'number' pattern: '#,###%' @@ -674,7 +674,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation metric_abbd5a2 { + calculation percent_completed_issue { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -683,7 +683,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "red", else: "green" );; @@ -693,7 +693,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "▾", else: "▴" );; @@ -846,7 +846,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation metric_abbd5a2 { + calculation percent_completed_issue { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -855,7 +855,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "red", else: "green" );; @@ -865,7 +865,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "▾", else: "▴" );; @@ -898,7 +898,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation lm_avg_pr_review { + calculation percent_lm_avg_pr_review { label: '%LM - Avg PR Review' formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -907,7 +907,7 @@ Dashboard squad_command_center { calculation metric_7eece09 { label: 'Avg PR Review - Color Condition' formula: @aql case( - when: lm_avg_pr_review < 0, + when: percent_lm_avg_pr_review < 0, then: "green", else: "red" );; @@ -917,7 +917,7 @@ Dashboard squad_command_center { calculation metric_0e96b56 { label: 'Avg PR Review - Icon Condition' formula: @aql case( - when: lm_avg_pr_review < 0, + when: percent_lm_avg_pr_review < 0, then: "▾", else: "▴" );; @@ -945,7 +945,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'lm_avg_pr_review' + ref: 'percent_lm_avg_pr_review' format { type: 'number' pattern: '#,###%' @@ -1047,7 +1047,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation metric_abbd5a2 { + calculation percent_completed_issue { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -1056,7 +1056,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "red", else: "green" );; @@ -1066,7 +1066,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: metric_abbd5a2 < 0, + when: percent_completed_issue < 0, then: "▾", else: "▴" );; @@ -1099,7 +1099,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation lm_avg_pr_review { + calculation percent_lm_avg_pr_review { label: '%LM - Avg PR Review' formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -1108,7 +1108,7 @@ Dashboard squad_command_center { calculation metric_7eece09 { label: 'Avg PR Review - Color Condition' formula: @aql case( - when: lm_avg_pr_review < 0, + when: percent_lm_avg_pr_review < 0, then: "green", else: "red" );; @@ -1118,7 +1118,7 @@ Dashboard squad_command_center { calculation metric_0e96b56 { label: 'Avg PR Review - Icon Condition' formula: @aql case( - when: lm_avg_pr_review < 0, + when: percent_lm_avg_pr_review < 0, then: "▾", else: "▴" );; From d319db943c5dd4e085b9f9a68edd100012926f05 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 09:11:06 +0000 Subject: [PATCH 030/168] Restore to version "Update 'reporting_issues' types and import; rename and refine metrics and visuals in 'reporting_project_management' dataset and dashboard" (#c44676) --- .../reporting_project_management.page.aml | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 092f600..b38d7db 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -359,7 +359,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation percent_completed_issue { + calculation metric_abbd5a2 { label: '%LM - Completed issue' formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -368,7 +368,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Color Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "red", else: "#4ade80" );; @@ -379,7 +379,7 @@ Dashboard squad_command_center { label: 'Icon Condition' formula: @aql case( when: - or(percent_completed_issue < 0, percent_avg_cycle_time < 0, percent_lm_avg_pr_review < 0 + metric_abbd5a2 < 0, then: "▼", else: "▲" );; @@ -401,7 +401,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'percent_completed_issue' + ref: 'metric_abbd5a2' format { type: 'number' pattern: '#,###%' @@ -504,7 +504,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation percent_completed_issue { + calculation metric_abbd5a2 { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -513,7 +513,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "red", else: "green" );; @@ -523,7 +523,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "▾", else: "▴" );; @@ -533,7 +533,7 @@ Dashboard squad_command_center { calculation metric_02fef53 { label: 'Cycle Time - Color Condition' formula: @aql case( - when: percent_avg_cycle_time < 0, + when: avg_cycle_time < 0, then: "green", else: "red" );; @@ -543,14 +543,14 @@ Dashboard squad_command_center { calculation metric_8cf2423 { label: 'Cycle Time - Icon Condition' formula: @aql case( - when: percent_avg_cycle_time < 0, + when: avg_cycle_time < 0, then: "▾", else: "▴" );; calc_type: 'measure' data_type: 'text' } - calculation percent_avg_cycle_time { + calculation avg_cycle_time { label: '%LM - Avg Cycle Time' formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -572,7 +572,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'percent_avg_cycle_time' + ref: 'avg_cycle_time' format { type: 'number' pattern: '#,###%' @@ -674,7 +674,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation percent_completed_issue { + calculation metric_abbd5a2 { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -683,7 +683,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "red", else: "green" );; @@ -693,7 +693,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "▾", else: "▴" );; @@ -846,7 +846,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation percent_completed_issue { + calculation metric_abbd5a2 { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -855,7 +855,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "red", else: "green" );; @@ -865,7 +865,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "▾", else: "▴" );; @@ -898,7 +898,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation percent_lm_avg_pr_review { + calculation lm_avg_pr_review { label: '%LM - Avg PR Review' formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -907,7 +907,7 @@ Dashboard squad_command_center { calculation metric_7eece09 { label: 'Avg PR Review - Color Condition' formula: @aql case( - when: percent_lm_avg_pr_review < 0, + when: lm_avg_pr_review < 0, then: "green", else: "red" );; @@ -917,7 +917,7 @@ Dashboard squad_command_center { calculation metric_0e96b56 { label: 'Avg PR Review - Icon Condition' formula: @aql case( - when: percent_lm_avg_pr_review < 0, + when: lm_avg_pr_review < 0, then: "▾", else: "▴" );; @@ -945,7 +945,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'percent_lm_avg_pr_review' + ref: 'lm_avg_pr_review' format { type: 'number' pattern: '#,###%' @@ -1047,7 +1047,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation percent_completed_issue { + calculation metric_abbd5a2 { label: '%LM - Completed issue' formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -1056,7 +1056,7 @@ Dashboard squad_command_center { calculation color_condition { label: 'Completed issue - Color Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "red", else: "green" );; @@ -1066,7 +1066,7 @@ Dashboard squad_command_center { calculation icon_condition { label: 'Completed issue - Icon Condition' formula: @aql case( - when: percent_completed_issue < 0, + when: metric_abbd5a2 < 0, then: "▾", else: "▴" );; @@ -1099,7 +1099,7 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation percent_lm_avg_pr_review { + calculation lm_avg_pr_review { label: '%LM - Avg PR Review' formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' @@ -1108,7 +1108,7 @@ Dashboard squad_command_center { calculation metric_7eece09 { label: 'Avg PR Review - Color Condition' formula: @aql case( - when: percent_lm_avg_pr_review < 0, + when: lm_avg_pr_review < 0, then: "green", else: "red" );; @@ -1118,7 +1118,7 @@ Dashboard squad_command_center { calculation metric_0e96b56 { label: 'Avg PR Review - Icon Condition' formula: @aql case( - when: percent_lm_avg_pr_review < 0, + when: lm_avg_pr_review < 0, then: "▾", else: "▴" );; From 170924dc023c6c50f490e0b57b5163e4167a44aa Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 09:29:16 +0000 Subject: [PATCH 031/168] Update 'reporting_project_management' dataset with new metrics and revise dashboard references accordingly --- .../reporting_project_management.dataset.aml | 51 +++++++++++++++++-- .../reporting_project_management.page.aml | 35 ++----------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index d9991fc..6227499 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -13,16 +13,57 @@ Dataset reporting_project_management { relationship(reporting_issues_log.id > reporting_issues.id, true), relationship(reporting_issues.project_id > reporting_project.id, true), relationship(reporting_issues.assignee_id > reporting_team.id, true), - relationship(reporting_issues.creator_id > reporting_team.id, true) - , + relationship(reporting_issues.creator_id > reporting_team.id, true), relationship(reporting_issue_duration.id > reporting_issues.id, true) ] + metric completed_issue { label: "Completed issue" type: "number" hidden: false - description: "" - definition: @aql count(reporting_issues.id) -| where(reporting_issues.status == "deployed");; + definition: @aql count(reporting_issues.id) | where(reporting_issues.status == "deployed");; + } + + metric metric_abbd5a2 { + label: "%LM - Completed issue" + type: "number" + hidden: false + definition: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + } + + metric main_color_condition { + label: "Main Color Condition" + type: "text" + hidden: true + definition: @aql case( + when: percent_lm_completed_issue < 0 or percent_delta_completion < 0, + then: "red", + else: "#4ade80" + );; + } + + metric reverse_color_condition { + label: "Reverse Color Condition" + type: "text" + hidden: true + definition: @aql case( + when: percent_lm_avg_cycle_time > 0 or percent_lm_avg_pr_review > 0, + then: "red", + else: "#4ade80" + );; + } + + metric main_icon_condition { + label: "Main Icon Condition" + type: "text" + hidden: true + definition: @aql case( + when: percent_lm_completed_issue < 0 + or percent_delta_completion < 0 + or percent_lm_avg_cycle_time < 0 + or percent_lm_avg_pr_review < 0, + then: "▼", + else: "▲" + );; } } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index b38d7db..94e9905 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -359,33 +359,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation color_condition { - label: 'Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "#4ade80" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation icon_condition { - label: 'Icon Condition' - formula: @aql case( - when: - metric_abbd5a2 < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -401,21 +374,21 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'metric_abbd5a2' + ref: r(reporting_project_management.metric_abbd5a2) format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'color_condition' + ref: r(reporting_project_management.main_color_condition) format { type: 'text' pattern: '#,###%' } }, VizFieldFull { - ref: 'icon_condition' + ref: r(reporting_project_management.main_icon_condition) format { type: 'text' } @@ -480,7 +453,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true From 90b7c257886a7377c253322e109391cb30dede2d Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 15:06:41 +0000 Subject: [PATCH 032/168] Update 'reporting_project_management' dataset and dashboard to add percent change metrics and improve KPI visuals and conditions --- .../reporting_project_management.dataset.aml | 55 +++++++-- .../reporting_project_management.page.aml | 116 ++++++------------ 2 files changed, 83 insertions(+), 88 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 6227499..530594d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -24,19 +24,54 @@ Dataset reporting_project_management { definition: @aql count(reporting_issues.id) | where(reporting_issues.status == "deployed");; } - metric metric_abbd5a2 { + metric percent_lm_completed_issue { label: "%LM - Completed issue" type: "number" hidden: false definition: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; } + metric percent_lm_avg_cycle_time { + label: "%LM - Avg Cycle Time" + type: "number" + hidden: false + definition: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + } + + metric percent_lm_avg_pr_review { + label: "%LM - Avg PR Review" + type: "number" + hidden: false + definition: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + } + + metric percent_completion { + label: "Percent Issue Completed" + type: "number" + hidden: false + definition: @aql completed_issue / count(reporting_issues.id);; + } + + metric l2w_issue_completed { + label: "L2W - % Issue Completed" + type: "number" + hidden: false + definition: @aql percent_completion | relative_period(reporting_issues.completed_at, interval(-2 week), strict: true);; + } + + metric percent_delta_completion { + label: "Delta - % Issue Completed" + type: "number" + hidden: false + definition: @aql percent_completion - l2w_issue_completed;; + } + metric main_color_condition { label: "Main Color Condition" type: "text" - hidden: true + hidden: false definition: @aql case( - when: percent_lm_completed_issue < 0 or percent_delta_completion < 0, + when: percent_lm_completed_issue + percent_delta_completion < 0, then: "red", else: "#4ade80" );; @@ -45,9 +80,9 @@ Dataset reporting_project_management { metric reverse_color_condition { label: "Reverse Color Condition" type: "text" - hidden: true + hidden: false definition: @aql case( - when: percent_lm_avg_cycle_time > 0 or percent_lm_avg_pr_review > 0, + when: percent_lm_avg_cycle_time + percent_lm_avg_pr_review > 0, then: "red", else: "#4ade80" );; @@ -56,12 +91,12 @@ Dataset reporting_project_management { metric main_icon_condition { label: "Main Icon Condition" type: "text" - hidden: true + hidden: false definition: @aql case( - when: percent_lm_completed_issue < 0 - or percent_delta_completion < 0 - or percent_lm_avg_cycle_time < 0 - or percent_lm_avg_pr_review < 0, + when: percent_lm_completed_issue + + percent_delta_completion + + percent_lm_avg_cycle_time + + percent_lm_avg_pr_review < 0, then: "▼", else: "▲" );; diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 94e9905..d606c44 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -194,8 +194,8 @@ Dashboard squad_command_center { block v_uhk0 { position: pos(860, 20, 280, 200) } - block v_msvd { - position: pos(1160, 20, 280, 200) + block v_fef1 { + position: pos(1180, 20, 280, 200) } width: 1460 } @@ -374,7 +374,7 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: r(reporting_project_management.metric_abbd5a2) + ref: r(reporting_project_management.percent_lm_completed_issue) format { type: 'number' pattern: '#,###%' @@ -434,7 +434,7 @@ Dashboard squad_command_center { color: #525866; } .kpi-shipped-compare { - color: {{ rows[0].values.`Color Condition` }}; + color: {{ rows[0].values.`Main Color Condition` }}; font-weight: 500 } @@ -447,13 +447,13 @@ Dashboard squad_command_center {
- {{ rows[0].values.`Icon Condition` }} + {{ rows[0].values.`Main Icon Condition` }} {{ rows[0].values.`%LM - Completed issue` }} vs last month
- ;; + ;; settings { show_row_total: true show_column_total: true @@ -545,20 +545,20 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'avg_cycle_time' + ref: r(reporting_project_management.percent_lm_avg_cycle_time) format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'metric_02fef53' + ref: r(reporting_project_management.reverse_color_condition) format { type: 'text' } }, VizFieldFull { - ref: 'metric_8cf2423' + ref: r(reporting_project_management.main_icon_condition) format { type: 'text' } @@ -604,7 +604,7 @@ Dashboard squad_command_center { color: #525866; } .kpi-cycle-compare { - color: {{ rows[0].values.`Cycle Time - Color Condition` }}; + color: {{ rows[0].values.`Reverse Color Condition` }}; font-weight: 500; } @@ -617,13 +617,13 @@ Dashboard squad_command_center {
- {{ rows[0].values.`Cycle Time - Icon Condition` }} + {{ rows[0].values.`Main Icon Condition` }} {{ rows[0].values.`%LM - Avg Cycle Time` }} vs last month
- ;; + ;; settings { show_row_total: true show_column_total: true @@ -918,20 +918,20 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'lm_avg_pr_review' + ref: r(reporting_project_management.percent_lm_avg_pr_review) format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'metric_7eece09' + ref: r(reporting_project_management.main_icon_condition) format { type: 'text' } }, VizFieldFull { - ref: 'metric_0e96b56' + ref: r(reporting_project_management.reverse_color_condition) format { type: 'text' } @@ -976,8 +976,8 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-pr-review-compare { - color: {{ rows[0].values.`Avg PR Review - Color Condition` }}; + .kpi-reverse-compare { + color: {{ rows[0].values.`Reverse Color Condition` }}; font-weight: 500 } @@ -989,14 +989,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Avg PR Review` }}h -
- {{ rows[0].values.`Avg PR Review - Icon Condition` }} +
+ {{ rows[0].values.`Main Icon Condition` }} {{ rows[0].values.`%LM - Avg PR Review`}} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -1010,8 +1010,8 @@ Dashboard squad_command_center { hide_label: true } } - block v_msvd: VizBlock { - label: 'Completion' + block v_fef1: VizBlock { + label: 'Avg PR Review (14D) copy' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -1094,44 +1094,6 @@ Dashboard squad_command_center { when: lm_avg_pr_review < 0, then: "▾", else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation percent_completion { - label: '% Issue Completed' - formula: @aql completed_issue / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation delta__issue_completed { - label: 'Delta - % Issue Completed' - formula: @aql percent_completion - l2w___issue_completed;; - calc_type: 'measure' - data_type: 'number' - } - calculation l2w___issue_completed { - label: 'L2W - % Issue Completed' - formula: @aql percent_completion | relative_period(reporting_issues.completed_at, interval(-2 week), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation issue_completed__color_condition { - label: 'Issue Completed - Color Condition' - formula: @aql case( - when: delta__issue_completed < 0, - then: "red", - else: "#34d399" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation issue_completed__icon_condition { - label: 'Issue Completed - Icon Condition' - formula: @aql case( - when: delta__issue_completed < 0, - then: "▼", - else: "▲" );; calc_type: 'measure' data_type: 'text' @@ -1139,42 +1101,40 @@ Dashboard squad_command_center { filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 14 days' + value: 'last 30 days' } values: [ VizFieldFull { - ref: 'percent_completion' + ref: r(reporting_project_management.percent_completion) format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'l2w___issue_completed' + ref: r(reporting_project_management.l2w_issue_completed) format { type: 'number' - pattern: '#,###%' + pattern: 'inherited' } }, VizFieldFull { - ref: 'delta__issue_completed' + ref: r(reporting_project_management.percent_delta_completion) format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'issue_completed__color_condition' + ref: r(reporting_project_management.main_icon_condition) format { type: 'text' - pattern: '#,###%' } }, VizFieldFull { - ref: 'issue_completed__icon_condition' + ref: r(reporting_project_management.main_color_condition) format { type: 'text' - pattern: '#,###%' } } ] @@ -1202,10 +1162,10 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-completion-value { + .kpi-pr-review-value { font-size: 56px; font-weight: 800; - color: #34d399; + color: #fbbf24; line-height: 1; } .kpi-percent { @@ -1217,8 +1177,8 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-pr-review-compare { - color: {{ rows[0].values.`Avg PR Review - Color Condition` }}; + .kpi-reverse-compare { + color: {{ rows[0].values.`Main Color Condition` }}; font-weight: 500 } @@ -1226,15 +1186,15 @@ Dashboard squad_command_center {

Completion (14D)

- - {{ rows[0].values.`% Issue Completed` }} + + {{ rows[0].values.`Percent Issue Completed` }} -
- {{ rows[0].values.`Issue Completed - Icon Condition` }} +
+ {{ rows[0].values.`Main Icon Condition` }} {{ rows[0].values.`Delta - % Issue Completed`}} - vs last 14 days + vs last month
;; From c681045b5188141445124007af4fa575e5b5e491 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 16:02:56 +0000 Subject: [PATCH 033/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 330 +++++++++--------- 1 file changed, 167 insertions(+), 163 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index d606c44..5d703af 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1,8 +1,3 @@ -// ============================================================ -// FILE: themes/squad_dark.aml -// Reusable dark theme for the squad dashboard -// ============================================================ - const squad_bg = '#0c0e14' const squad_surface = '#141720' const squad_border = '#1e2235' @@ -14,12 +9,10 @@ const squad_red = '#f87171' const squad_amber = '#fbbf24' const squad_font = 'Inter' const squad_mono = 'JetBrains Mono' - PageTheme squad_dark { background { bg_color: squad_bg } - canvas { background { bg_color: squad_bg @@ -33,7 +26,6 @@ PageTheme squad_dark { shadow: 'none' opacity: 1 } - block { label { font_family: squad_font @@ -62,7 +54,6 @@ PageTheme squad_dark { shadow: 'none' opacity: 1 } - viz { table { general { @@ -95,7 +86,6 @@ PageTheme squad_dark { } } } - custom_css: @css /* ---- Squad Command Center ---- */ @@ -122,33 +112,16 @@ PageTheme squad_dark { ::-webkit-scrollbar-thumb { background: #262a3e; border-radius: 3px; } ;; } - - -// ============================================================ -// FILE: dashboards/squad_command_center.page.aml -// ============================================================ - Dashboard squad_command_center { title: 'Squad Reporting - Project Management' description: 'Engineering delivery metrics · Bottleneck analysis · Team health' theme: squad_dark - - // ======================================== - // TAB LAYOUT - // ======================================== - view: TabLayout { label: 'Squad Command Center' - - // ──────────────────────────────────── - // TAB 1: OVERVIEW - // ──────────────────────────────────── tab overview_tab: CanvasLayout { label: '◎ Overview' height: 1400 grid_size: 20 - - // Row 1: KPIs (4 across) block kpi_shipped { position: pos(0, 0, 300, 120) } @@ -161,24 +134,18 @@ Dashboard squad_command_center { block kpi_completion { position: pos(900, 0, 300, 120) } - - // Row 2: Burnup + Pipeline block burnup_chart { position: pos(0, 140, 600, 340) } block pipeline_bar { position: pos(600, 140, 600, 340) } - - // Row 3: Throughput + Heatmap block throughput_bar { position: pos(0, 500, 600, 340) } block transition_heatmap { position: pos(600, 500, 600, 340) } - - // Row 4: Cycle time trend block cycle_trend { position: pos(0, 860, 1200, 340) } @@ -186,69 +153,49 @@ Dashboard squad_command_center { position: pos(20, 20, 240, 200) } block v_997c { - position: pos(300, 20, 240, 200) + position: pos(280, 20, 260, 200) } block v_gt75 { - position: pos(580, 20, 240, 200) + position: pos(560, 20, 240, 200) } block v_uhk0 { - position: pos(860, 20, 280, 200) + position: pos(820, 20, 260, 200) } - block v_fef1 { - position: pos(1180, 20, 280, 200) + block v_sffe { + position: pos(1100, 20, 240, 200) } - width: 1460 + width: 1380 } - - // ──────────────────────────────────── - // TAB 2: TIME-TO-MARKET - // ──────────────────────────────────── tab ttm_tab: CanvasLayout { label: '⏱ Time-to-Market' height: 1500 grid_size: 20 - - // Section header block ttm_header { position: pos(0, 0, 1200, 60) } - - // Full-width stacked bar block ttm_stacked { position: pos(0, 70, 1200, 560) } - - // Waterfall + Donut block ttm_waterfall { position: pos(0, 650, 600, 360) } block ttm_donut { position: pos(600, 650, 600, 360) } - - // Segment P50/P75/P90 block ttm_percentiles { position: pos(0, 1030, 1200, 360) } } - - // ──────────────────────────────────── - // TAB 3: BOTTLENECKS - // ──────────────────────────────────── tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' height: 1500 grid_size: 20 - - // Bottleneck trend + Stage distribution block bottleneck_trend { position: pos(0, 0, 600, 360) } block stage_dist { position: pos(600, 0, 600, 360) } - - // Stale issues table block stale_header { position: pos(0, 380, 1200, 50) } @@ -256,46 +203,30 @@ Dashboard squad_command_center { position: pos(0, 440, 1200, 400) } } - - // ──────────────────────────────────── - // TAB 4: WORKLOAD - // ──────────────────────────────────── tab workload_tab: CanvasLayout { label: '👥 Workload' height: 1200 grid_size: 20 - - // WIP per engineer + Completed per engineer block wip_engineer { position: pos(0, 0, 600, 360) } block done_engineer { position: pos(600, 0, 600, 360) } - - // Priority workload + Estimate accuracy block priority_workload { position: pos(0, 380, 600, 360) } block estimate_scatter { position: pos(600, 380, 600, 360) } - - // Cycle by label block cycle_label { position: pos(0, 760, 1200, 340) } } - - // ──────────────────────────────────── - // TAB 5: QUALITY - // ──────────────────────────────────── tab quality_tab: CanvasLayout { label: '🎯 Quality' height: 1300 grid_size: 20 - - // KPIs block kpi_bug_ratio { position: pos(0, 0, 300, 120) } @@ -308,16 +239,12 @@ Dashboard squad_command_center { block kpi_bug_cycle { position: pos(900, 0, 300, 120) } - - // Bug ratio trend + Work type distribution block bug_trend { position: pos(0, 140, 600, 360) } block label_dist { position: pos(600, 140, 600, 360) } - - // Priority scatter + Cycle by label block priority_scatter { position: pos(0, 520, 600, 360) } @@ -325,21 +252,13 @@ Dashboard squad_command_center { position: pos(600, 520, 600, 360) } } - - // ──────────────────────────────────── - // TAB 6: PROJECTS - // ──────────────────────────────────── tab projects_tab: CanvasLayout { label: '📊 Projects' height: 1000 grid_size: 20 - - // Project completion block project_completion { position: pos(0, 0, 1200, 360) } - - // Stage by project + Velocity block project_stages { position: pos(0, 380, 600, 380) } @@ -359,10 +278,39 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "red", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' value: 'last 30 days' + } + theme { + } values: [ VizFieldFull { @@ -374,21 +322,20 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: r(reporting_project_management.percent_lm_completed_issue) + ref: 'lm__completed_issue' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.main_color_condition) + ref: 'completed_issue_color' format { type: 'text' - pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.main_icon_condition) + ref: 'completed_issue_icon' format { type: 'text' } @@ -434,7 +381,7 @@ Dashboard squad_command_center { color: #525866; } .kpi-shipped-compare { - color: {{ rows[0].values.`Main Color Condition` }}; + color: {{ rows[0].values.`Completed Issue Color` }}; font-weight: 500 } @@ -447,13 +394,13 @@ Dashboard squad_command_center {
- {{ rows[0].values.`Main Icon Condition` }} - {{ rows[0].values.`%LM - Completed issue` }} + {{ rows[0].values.`Completed Issue Icon` }} + {{ rows[0].values.`%LM - Completed Issue` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -529,10 +476,33 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } + calculation avg_cycle_time_color { + label: 'Avg Cycle Time Color' + formula: @aql case( + when: percent_lm_avg_cycle_time > 0, + then: "red", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation avg_cycle_time_icon { + label: 'Avg Cycle Time Icon' + formula: @aql case( + when: percent_lm_avg_cycle_time < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' value: 'last 30 days' + } + theme { + } values: [ VizFieldFull { @@ -545,33 +515,33 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: r(reporting_project_management.percent_lm_avg_cycle_time) + ref: 'avg_cycle_time' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.reverse_color_condition) + ref: 'avg_cycle_time_icon' format { type: 'text' } }, VizFieldFull { - ref: r(reporting_project_management.main_icon_condition) + ref: 'avg_cycle_time_color' format { type: 'text' } } ] content: @md -
+

Avg Cycle Time (30D)

{{ rows[0].values.`Avg Cycle Time` }}
- {{ rows[0].values.`Main Icon Condition` }} + {{ rows[0].values.`Avg Cycle Time Icon` }} {{ rows[0].values.`%LM - Avg Cycle Time` }} vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -845,12 +815,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation metric_bcc0c1b { - label: '%LW - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } calculation metric_02fef53 { label: 'Cycle Time - Color Condition' formula: @aql case( @@ -897,6 +861,27 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } + calculation avg_pr_review_icon { + label: 'Avg PR Review Icon' + formula: @aql case( + when: + percent_lm_avg_pr_review < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation avg_pr_review_color { + label: 'Avg PR Review Color' + formula: @aql case( + when: percent_lm_avg_pr_review > 0, + then: "red", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -906,6 +891,9 @@ Dashboard squad_command_center { field: r(reporting_issue_duration.stage) operator: 'is' value: 'pr_review' + } + theme { + } values: [ VizFieldFull { @@ -918,27 +906,27 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: r(reporting_project_management.percent_lm_avg_pr_review) + ref: 'lm_avg_pr_review' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.main_icon_condition) + ref: 'avg_pr_review_icon' format { type: 'text' } }, VizFieldFull { - ref: r(reporting_project_management.reverse_color_condition) + ref: 'avg_pr_review_color' format { type: 'text' } } ] content: @md -
+

Avg PR Review (14D)

{{ rows[0].values.`Avg PR Review` }}h -
- {{ rows[0].values.`Main Icon Condition` }} +
+ {{ rows[0].values.`Avg PR Review Icon` }} {{ rows[0].values.`%LM - Avg PR Review`}} vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -1010,8 +998,8 @@ Dashboard squad_command_center { hide_label: true } } - block v_fef1: VizBlock { - label: 'Avg PR Review (14D) copy' + block v_sffe: VizBlock { + label: 'Avg Cycle Time (30D) copy' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -1046,16 +1034,10 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation metric_bcc0c1b { - label: '%LW - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.dimension_ffede77), avg(reporting_issues, reporting_issues.dimension_ffede77) | relative_period(reporting_issues.completed_at, interval(-1 week), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } calculation metric_02fef53 { label: 'Cycle Time - Color Condition' formula: @aql case( - when: metric_bcc0c1b < 0, + when: avg_cycle_time < 0, then: "green", else: "red" );; @@ -1065,74 +1047,95 @@ Dashboard squad_command_center { calculation metric_8cf2423 { label: 'Cycle Time - Icon Condition' formula: @aql case( - when: metric_bcc0c1b < 0, + when: avg_cycle_time < 0, then: "▾", else: "▴" );; calc_type: 'measure' data_type: 'text' } - calculation lm_avg_pr_review { - label: '%LM - Avg PR Review' - formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' data_type: 'number' } - calculation metric_7eece09 { - label: 'Avg PR Review - Color Condition' + calculation percent_issue_completion { + label: '% Issue Completion' + formula: @aql completed_issue / count_distinct(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation delta_percent_issue_completion { + label: 'Delta - % Issue Completion' + formula: @aql percent_issue_completion - lm_percent_issue_completion;; + calc_type: 'measure' + data_type: 'number' + } + calculation delta_percent_issue_completion_color { + label: 'Delta - % Issue Completion Color' formula: @aql case( - when: lm_avg_pr_review < 0, - then: "green", - else: "red" -);; + when: delta_percent_issue_completion < 0, + then: "red", + else: "#4ade80" + );; calc_type: 'measure' data_type: 'text' } - calculation metric_0e96b56 { - label: 'Avg PR Review - Icon Condition' + calculation delta_percent_issue_completion_icon { + label: 'Delta- % Issue Completion Icon' formula: @aql case( - when: lm_avg_pr_review < 0, - then: "▾", - else: "▴" -);; + when: delta_percent_issue_completion < 0, + then: "▼", + else: "▲" + );; calc_type: 'measure' data_type: 'text' } + calculation lm_percent_issue_completion { + label: 'LM - % Issue Completion' + formula: @aql percent_issue_completion | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 30 days' + value: 'last 14 days' + } + theme { + } values: [ VizFieldFull { - ref: r(reporting_project_management.percent_completion) + ref: 'percent_issue_completion' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.l2w_issue_completed) + ref: 'lm_percent_issue_completion' format { type: 'number' - pattern: 'inherited' + pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.percent_delta_completion) + ref: 'delta_percent_issue_completion' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_project_management.main_icon_condition) + ref: 'delta_percent_issue_completion_color' format { type: 'text' } }, VizFieldFull { - ref: r(reporting_project_management.main_color_condition) + ref: 'delta_percent_issue_completion_icon' format { type: 'text' } @@ -1145,7 +1148,7 @@ Dashboard squad_command_center { border-radius: 16px; color: #ffffff; font-family: sans-serif; - width: 220px; + width: 200px; border: 1px solid #1f222c; } .kpi-title { @@ -1162,10 +1165,10 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-pr-review-value { + .kpi-completion-value { font-size: 56px; font-weight: 800; - color: #fbbf24; + color: #34d399; line-height: 1; } .kpi-percent { @@ -1177,22 +1180,22 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-reverse-compare { - color: {{ rows[0].values.`Main Color Condition` }}; - font-weight: 500 + .kpi-completion-compare { + color: {{ rows[0].values.`Delta - % Issue Completion Color` }}; + font-weight: 500; }

Completion (14D)

- - {{ rows[0].values.`Percent Issue Completed` }} + + {{ rows[0].values.`% Issue Completion` }} -
- {{ rows[0].values.`Main Icon Condition` }} - {{ rows[0].values.`Delta - % Issue Completed`}} +
+ {{ rows[0].values.`Delta- % Issue Completion Icon` }} + {{ rows[0].values.`Delta - % Issue Completion` }} vs last month
@@ -1211,4 +1214,5 @@ Dashboard squad_command_center { hide_label: true } } + interactions: [] } \ No newline at end of file From 947f212f14b231a9ffe2d6002bb143aaab8e089d Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 16:11:33 +0000 Subject: [PATCH 034/168] Remove border and background styles and resize 'v_x8r0' block in 'reporting_project_management' page --- .../reporting_project_management.page.aml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 5d703af..1b719cf 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -41,18 +41,6 @@ PageTheme squad_dark { font_weight: 'normal' font_style: 'normal' } - border { - border_width: 1 - border_radius: 12 - border_color: squad_border - border_style: 'solid' - } - background { - bg_color: squad_surface - } - padding: 16 - shadow: 'none' - opacity: 1 } viz { table { @@ -150,7 +138,7 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 20, 240, 200) + position: pos(20, 20, 220, 160) } block v_997c { position: pos(280, 20, 260, 200) From 850d949872d647452fa99da2d69738896a53bec3 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 16:16:27 +0000 Subject: [PATCH 035/168] Remove deprecated metrics from 'reporting_project_management.dataset.aml' in Squad Reporting model --- .../reporting_project_management.dataset.aml | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 530594d..a148070 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -65,40 +65,4 @@ Dataset reporting_project_management { hidden: false definition: @aql percent_completion - l2w_issue_completed;; } - - metric main_color_condition { - label: "Main Color Condition" - type: "text" - hidden: false - definition: @aql case( - when: percent_lm_completed_issue + percent_delta_completion < 0, - then: "red", - else: "#4ade80" - );; - } - - metric reverse_color_condition { - label: "Reverse Color Condition" - type: "text" - hidden: false - definition: @aql case( - when: percent_lm_avg_cycle_time + percent_lm_avg_pr_review > 0, - then: "red", - else: "#4ade80" - );; - } - - metric main_icon_condition { - label: "Main Icon Condition" - type: "text" - hidden: false - definition: @aql case( - when: percent_lm_completed_issue - + percent_delta_completion - + percent_lm_avg_cycle_time - + percent_lm_avg_pr_review < 0, - then: "▼", - else: "▲" - );; - } } \ No newline at end of file From 931828e1fe4edfe1de1596b8edac06acac665802 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 16:32:22 +0000 Subject: [PATCH 036/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 68 +++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 1b719cf..1002937 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -152,6 +152,9 @@ Dashboard squad_command_center { block v_sffe { position: pos(1100, 20, 240, 200) } + block v_jdaq { + position: pos(20, 220, 520, 380) + } width: 1380 } tab ttm_tab: CanvasLayout { @@ -298,7 +301,6 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { - } values: [ VizFieldFull { @@ -490,7 +492,6 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { - } values: [ VizFieldFull { @@ -881,7 +882,6 @@ Dashboard squad_command_center { value: 'pr_review' } theme { - } values: [ VizFieldFull { @@ -1092,7 +1092,6 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { - } values: [ VizFieldFull { @@ -1202,5 +1201,66 @@ Dashboard squad_command_center { hide_label: true } } + block v_jdaq: VizBlock { + label: 'Count of Id by Status' + viz: BarChart { + dataset: reporting_project_management + theme { + + } + legend: VizFieldFull { + ref: r(reporting_issues.status) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + point { + value: 'merged' + color: '#22D3EEFF' + } + point { + value: 'deployed' + color: '#4F8CFFFF' + } + point { + value: 'pr_review' + color: '#34D399' + } + point { + value: 'in_progress' + color: '#A78BFAFF' + } + point { + value: 'tested_on_staging' + color: '#F472B6' + } + point { + value: 'deployed_to_staging' + color: '#FBBF24FF' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [] } \ No newline at end of file From 53116703d102dcc614356f628d5c26076e550f5d Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:06:26 +0000 Subject: [PATCH 037/168] Extract theme definitions to separate files and apply 'squad_dark' theme to 'Squad Reporting - Project Management' dashboard, adjust layout sizing and remove redundant styles in 'reporting_project_management.page.aml' --- .../reporting_project_management.page.aml | 179 ++---------------- .../them-squad-dark.aml | 120 ++++++++++++ .../theme-squad-light.aml | 124 ++++++++++++ 3 files changed, 259 insertions(+), 164 deletions(-) create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-squad-light.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 1002937..1932ceb 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1,109 +1,6 @@ -const squad_bg = '#0c0e14' -const squad_surface = '#141720' -const squad_border = '#1e2235' -const squad_text = '#e8eaf0' -const squad_muted = '#6b7194' -const squad_accent = '#4f8cff' -const squad_green = '#34d399' -const squad_red = '#f87171' -const squad_amber = '#fbbf24' -const squad_font = 'Inter' -const squad_mono = 'JetBrains Mono' -PageTheme squad_dark { - background { - bg_color: squad_bg - } - canvas { - background { - bg_color: squad_bg - } - border { - border_width: 0 - border_radius: 0 - border_color: squad_border - border_style: 'none' - } - shadow: 'none' - opacity: 1 - } - block { - label { - font_family: squad_font - font_size: 14 - font_color: squad_text - font_weight: 'semibold' - font_style: 'normal' - } - text { - font_family: squad_font - font_size: 12 - font_color: squad_muted - font_weight: 'normal' - font_style: 'normal' - } - } - viz { - table { - general { - bg_color: squad_surface - hover_color: '#1a1d2a' - banding_color: '#161922' - font_size: 12 - font_color: squad_muted - font_family: squad_font - border_color: squad_border - border_width: 1 - grid_color: squad_border - } - header { - bg_color: '#1a1d2a' - font_size: 12 - font_color: squad_text - font_weight: 'semibold' - } - sub_header { - bg_color: '#1a1d2a' - font_size: 11 - font_color: squad_muted - font_weight: 'medium' - } - sub_title { - font_size: 11 - font_color: squad_muted - font_weight: 'medium' - } - } - } - custom_css: @css - /* ---- Squad Command Center ---- */ - - /* Tab bar styling */ - .tab-bar { background: #0c0e14 !important; border-bottom: 1px solid #1e2235 !important; } - .tab-bar .tab-item { color: #6b7194 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } - .tab-bar .tab-item.active { color: #4f8cff !important; border-bottom: 2px solid #4f8cff !important; } - - /* Metric sheet overrides */ - .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #e8eaf0 !important; } - .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #6b7194 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } - - /* Chart axis and legend */ - .recharts-cartesian-axis-tick-value { fill: #6b7194 !important; font-size: 10px !important; } - .recharts-legend-item-text { color: #6b7194 !important; font-size: 11px !important; } - .recharts-cartesian-grid line { stroke: #1e2235 !important; } - - /* Tooltip */ - .recharts-tooltip-wrapper .recharts-default-tooltip { background: #1a1d2a !important; border: 1px solid #262a3e !important; border-radius: 8px !important; } - - /* Scrollbar */ - ::-webkit-scrollbar { width: 5px; height: 5px; } - ::-webkit-scrollbar-track { background: #0c0e14; } - ::-webkit-scrollbar-thumb { background: #262a3e; border-radius: 3px; } - ;; -} Dashboard squad_command_center { title: 'Squad Reporting - Project Management' description: 'Engineering delivery metrics · Bottleneck analysis · Team health' - theme: squad_dark view: TabLayout { label: 'Squad Command Center' tab overview_tab: CanvasLayout { @@ -138,24 +35,24 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 20, 220, 160) + position: pos(20, 20, 200, 160) } block v_997c { - position: pos(280, 20, 260, 200) + position: pos(240, 20, 200, 160) } block v_gt75 { - position: pos(560, 20, 240, 200) + position: pos(460, 20, 200, 160) } block v_uhk0 { - position: pos(820, 20, 260, 200) + position: pos(680, 20, 200, 160) } block v_sffe { - position: pos(1100, 20, 240, 200) + position: pos(900, 20, 180, 160) } block v_jdaq { - position: pos(20, 220, 520, 380) + position: pos(20, 200, 520, 380) } - width: 1380 + width: 1100 } tab ttm_tab: CanvasLayout { label: '⏱ Time-to-Market' @@ -300,8 +197,6 @@ Dashboard squad_command_center { operator: 'matches' value: 'last 30 days' } - theme { - } values: [ VizFieldFull { label: 'Completed issue (Last 30D)' @@ -332,15 +227,7 @@ Dashboard squad_command_center { } ] content: @md -
+

Shipped (30D)

{{ rows[0].values.`Completed issue (Last 30D)` }} @@ -390,7 +277,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -524,15 +411,6 @@ Dashboard squad_command_center { } ] content: @md -
+

Avg Cycle Time (30D)

{{ rows[0].values.`Avg Cycle Time` }} @@ -698,15 +576,6 @@ Dashboard squad_command_center { } ] content: @md -
+

WIP (Last 14D)

{{ rows[0].values.`WIP` }} @@ -914,15 +783,6 @@ Dashboard squad_command_center { } ] content: @md -
+

Avg PR Review (14D)

{{ rows[0].values.`Avg PR Review` }}h @@ -1129,15 +989,6 @@ Dashboard squad_command_center { } ] content: @md -
+

Completion (14D)

{{ rows[0].values.`% Issue Completion` }} @@ -1262,5 +1113,5 @@ Dashboard squad_command_center { } } } - interactions: [] + theme: squad_dark } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml new file mode 100644 index 0000000..f7841f7 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml @@ -0,0 +1,120 @@ +// ============================================================ +// FILE: themes/squad_dark.aml +// Reusable dark theme for the squad dashboard +// ============================================================ + +const dark_squad_bg = '#0c0e14' +const dark_squad_surface = '#141720' +const dark_squad_border = '#1e2235' +const dark_squad_text = '#e8eaf0' +const dark_squad_muted = '#6b7194' +const dark_squad_accent = '#4f8cff' +const dark_squad_green = '#34d399' +const dark_squad_red = '#f87171' +const dark_squad_amber = '#fbbf24' +const dark_squad_font = 'Inter' +const dark_squad_mono = 'JetBrains Mono' + +PageTheme squad_dark { + background { + bg_color: dark_squad_bg + } + + canvas { + background { + bg_color: dark_squad_bg + } + border { + border_width: 0 + border_radius: 0 + border_color: dark_squad_border + border_style: 'none' + } + shadow: 'none' + opacity: 1 + } + + block { + label { + font_family: dark_squad_font + font_size: 14 + font_color: dark_squad_text + font_weight: 'semibold' + font_style: 'normal' + } + text { + font_family: dark_squad_font + font_size: 12 + font_color: dark_squad_muted + font_weight: 'normal' + font_style: 'normal' + } + border { + border_width: 1 + border_radius: 12 + border_color: dark_squad_border + border_style: 'solid' + } + background { + bg_color: dark_squad_surface + } + padding: 16 + shadow: 'none' + opacity: 1 + } + + viz { + table { + general { + bg_color: dark_squad_surface + hover_color: '#1a1d2a' + banding_color: '#161922' + font_size: 12 + font_color: dark_squad_muted + font_family: dark_squad_font + border_color: dark_squad_border + border_width: 1 + grid_color: dark_squad_border + } + header { + bg_color: '#1a1d2a' + font_size: 12 + font_color: dark_squad_text + font_weight: 'semibold' + } + sub_header { + bg_color: '#1a1d2a' + font_size: 11 + font_color: dark_squad_muted + font_weight: 'medium' + } + sub_title { + font_size: 11 + font_color: dark_squad_muted + font_weight: 'medium' + } + } + } + + custom_css: @css + /* ---- Squad Command Center (Dark) ---- */ + + /* Tab bar styling */ + .tab-bar { background: #0c0e14 !important; border-bottom: 1px solid #1e2235 !important; } + .tab-bar .tab-item { color: #6b7194 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } + .tab-bar .tab-item.active { color: #4f8cff !important; border-bottom: 2px solid #4f8cff !important; } + + /* Metric sheet overrides */ + .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #e8eaf0 !important; } + .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #6b7194 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } + + /* Chart axis and legend */ + .recharts-cartesian-axis-tick-value { fill: #6b7194 !important; font-size: 10px !important; } + .recharts-legend-item-text { color: #6b7194 !important; font-size: 11px !important; } + .recharts-cartesian-grid line { stroke: #1e2235 !important; } + + /* Tooltip */ + .recharts-tooltip-wrapper .recharts-default-tooltip { background: #1a1d2a !important; border: 1px solid #262a3e !important; border-radius: 8px !important; } + + ;; +} \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-squad-light.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-squad-light.aml new file mode 100644 index 0000000..0621d58 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-squad-light.aml @@ -0,0 +1,124 @@ +// ============================================================ +// FILE: themes/squad_light.aml +// Clean, professional light theme for the squad dashboard +// ============================================================ + +const squad_bg = '#f7f8fa' +const squad_surface = '#ffffff' +const squad_border = '#e2e5ec' +const squad_text = '#1a1f36' +const squad_muted = '#6b7280' +const squad_accent = '#3b6de0' +const squad_green = '#059669' +const squad_red = '#dc2626' +const squad_amber = '#d97706' +const squad_font = 'Inter' +const squad_mono = 'JetBrains Mono' + +PageTheme squad_light { + background { + bg_color: squad_bg + } + + canvas { + background { + bg_color: squad_bg + } + border { + border_width: 0 + border_radius: 0 + border_color: squad_border + border_style: 'none' + } + shadow: 'none' + opacity: 1 + } + + block { + label { + font_family: squad_font + font_size: 14 + font_color: squad_text + font_weight: 'semibold' + font_style: 'normal' + } + text { + font_family: squad_font + font_size: 12 + font_color: squad_muted + font_weight: 'normal' + font_style: 'normal' + } + border { + border_width: 1 + border_radius: 12 + border_color: squad_border + border_style: 'solid' + } + background { + bg_color: squad_surface + } + padding: 16 + shadow: 'sm' + opacity: 1 + } + + viz { + table { + general { + bg_color: squad_surface + hover_color: '#f0f4ff' + banding_color: '#f9fafb' + font_size: 12 + font_color: '#374151' + font_family: squad_font + border_color: squad_border + border_width: 1 + grid_color: '#e5e7eb' + } + header { + bg_color: '#f3f4f6' + font_size: 12 + font_color: squad_text + font_weight: 'semibold' + } + sub_header { + bg_color: '#f9fafb' + font_size: 11 + font_color: squad_muted + font_weight: 'medium' + } + sub_title { + font_size: 11 + font_color: squad_muted + font_weight: 'medium' + } + } + } + + custom_css: @css + /* ---- Squad Command Center (Light) ---- */ + + /* Tab bar styling */ + .tab-bar { background: #ffffff !important; border-bottom: 1px solid #e2e5ec !important; } + .tab-bar .tab-item { color: #6b7280 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } + .tab-bar .tab-item.active { color: #3b6de0 !important; border-bottom: 2px solid #3b6de0 !important; } + + /* Metric sheet overrides */ + .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #1a1f36 !important; } + .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #6b7280 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } + + /* Chart axis and legend */ + .recharts-cartesian-axis-tick-value { fill: #6b7280 !important; font-size: 10px !important; } + .recharts-legend-item-text { color: #6b7280 !important; font-size: 11px !important; } + .recharts-cartesian-grid line { stroke: #e5e7eb !important; } + + /* Tooltip */ + .recharts-tooltip-wrapper .recharts-default-tooltip { background: #ffffff !important; border: 1px solid #e2e5ec !important; border-radius: 8px !important; box-shadow: 0 4px 12px rgba(0,0,0,0.08) !important; } + + /* Scrollbar */ + ::-webkit-scrollbar { width: 5px; height: 5px; } + ::-webkit-scrollbar-track { background: #f7f8fa; } + ::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; } + ;; +} \ No newline at end of file From 2b6c997b408bdc4fcc316a643ae93bd3a17f214a Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:09:35 +0000 Subject: [PATCH 038/168] Swap background and surface colors in 'them-squad-dark' for correct dark theme display --- .../Squad Reporting - Project Management/them-squad-dark.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml index f7841f7..f6905c5 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml @@ -3,8 +3,8 @@ // Reusable dark theme for the squad dashboard // ============================================================ -const dark_squad_bg = '#0c0e14' -const dark_squad_surface = '#141720' +const dark_squad_bg = '#141720' +const dark_squad_surface = '#0c0e14' const dark_squad_border = '#1e2235' const dark_squad_text = '#e8eaf0' const dark_squad_muted = '#6b7194' From 867a539d8641d617c0625b89d4247b4b99875a69 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:22:58 +0000 Subject: [PATCH 039/168] Update background color in 'squad_dark' PageTheme to hex '#1C2641' in them-squad-dark.aml --- .../Squad Reporting - Project Management/them-squad-dark.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml index f6905c5..7bc9e18 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml @@ -17,7 +17,7 @@ const dark_squad_mono = 'JetBrains Mono' PageTheme squad_dark { background { - bg_color: dark_squad_bg + bg_color: '#1C2641' } canvas { From 0426e12bf0a3234d5c12df0c5aad8cafe4f2a4a1 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:38:25 +0000 Subject: [PATCH 040/168] Add 'obsidian_navy' theme, update 'squad_dark' colors, and apply new theme to 'reporting_project_management' page --- .../reporting_project_management.page.aml | 7 +- .../them-squad-dark.aml | 3 +- .../theme-obsidian-navy.aml | 123 ++++++++++++++++++ 3 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-obsidian-navy.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 1932ceb..ab7bfb2 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1056,10 +1056,7 @@ Dashboard squad_command_center { label: 'Count of Id by Status' viz: BarChart { dataset: reporting_project_management - theme { - - } - legend: VizFieldFull { + x_axis: VizFieldFull { ref: r(reporting_issues.status) format { type: 'text' @@ -1113,5 +1110,5 @@ Dashboard squad_command_center { } } } - theme: squad_dark + theme: obsidian_navy } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml index 7bc9e18..837e35a 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml @@ -4,6 +4,7 @@ // ============================================================ const dark_squad_bg = '#141720' +const dark_squad_canvas = '#343F4B' const dark_squad_surface = '#0c0e14' const dark_squad_border = '#1e2235' const dark_squad_text = '#e8eaf0' @@ -17,7 +18,7 @@ const dark_squad_mono = 'JetBrains Mono' PageTheme squad_dark { background { - bg_color: '#1C2641' + bg_color: dark_squad_canvas } canvas { diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-obsidian-navy.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-obsidian-navy.aml new file mode 100644 index 0000000..90766f6 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-obsidian-navy.aml @@ -0,0 +1,123 @@ +// ============================================================ +// FILE: themes/obsidian_navy.aml +// Obsidian Navy — Linear-inspired, electric blue accent +// Block #060c16 → Canvas #0f1724 → Page #1a2332 +// ============================================================ + +const ob_page = '#1a2332' +const ob_canvas = '#0f1724' +const ob_surface = '#060c16' +const ob_border = '#1f2d42' +const ob_hover = '#0a1220' +const ob_banding = '#080e1a' +const ob_text = '#f0f2f5' +const ob_muted = '#7589a6' +const ob_dim = '#3e506a' +const ob_accent = '#3b82f6' +const ob_green = '#10b981' +const ob_red = '#ef4444' +const ob_amber = '#f59e0b' +const ob_font = 'Inter' + +PageTheme obsidian_navy { + background { + bg_color: ob_page + } + + canvas { + background { + bg_color: ob_canvas + } + border { + border_width: 0 + border_radius: 0 + border_color: ob_border + border_style: 'none' + } + shadow: 'none' + opacity: 1 + } + + block { + label { + font_family: ob_font + font_size: 14 + font_color: ob_text + font_weight: 'semibold' + font_style: 'normal' + } + text { + font_family: ob_font + font_size: 12 + font_color: ob_muted + font_weight: 'normal' + font_style: 'normal' + } + border { + border_width: 1 + border_radius: 12 + border_color: ob_border + border_style: 'solid' + } + background { + bg_color: ob_surface + } + padding: 16 + shadow: 'none' + opacity: 1 + } + + viz { + table { + general { + bg_color: ob_surface + hover_color: ob_hover + banding_color: ob_banding + font_size: 12 + font_color: ob_muted + font_family: ob_font + border_color: ob_border + border_width: 1 + grid_color: '#172030' + } + header { + bg_color: ob_hover + font_size: 12 + font_color: ob_text + font_weight: 'semibold' + } + sub_header { + bg_color: ob_hover + font_size: 11 + font_color: ob_muted + font_weight: 'medium' + } + sub_title { + font_size: 11 + font_color: ob_muted + font_weight: 'medium' + } + } + } + + custom_css: @css + /* ---- Obsidian Navy ---- */ + + .tab-bar { background: #0f1724 !important; border-bottom: 1px solid #1f2d42 !important; } + .tab-bar .tab-item { color: #7589a6 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } + .tab-bar .tab-item.active { color: #3b82f6 !important; border-bottom: 2px solid #3b82f6 !important; } + + .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #f0f2f5 !important; } + .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #7589a6 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } + + .recharts-cartesian-axis-tick-value { fill: #7589a6 !important; font-size: 10px !important; } + .recharts-legend-item-text { color: #7589a6 !important; font-size: 11px !important; } + .recharts-cartesian-grid line { stroke: #1f2d42 !important; } + + .recharts-tooltip-wrapper .recharts-default-tooltip { background: #060c16 !important; border: 1px solid #1f2d42 !important; border-radius: 8px !important; box-shadow: 0 8px 24px rgba(0,0,0,0.5) !important; } + + ::-webkit-scrollbar { width: 5px; height: 5px; } + ::-webkit-scrollbar-track { background: #0f1724; } + ::-webkit-scrollbar-thumb { background: #1f2d42; border-radius: 3px; } + ;; +} \ No newline at end of file From f8c34ba39469832ad72ef4aee9785f81b4c43db0 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:43:19 +0000 Subject: [PATCH 041/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index ab7bfb2..6d5c651 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1056,6 +1056,9 @@ Dashboard squad_command_center { label: 'Count of Id by Status' viz: BarChart { dataset: reporting_project_management + theme { + + } x_axis: VizFieldFull { ref: r(reporting_issues.status) format { @@ -1073,6 +1076,7 @@ Dashboard squad_command_center { } } settings { + color: '#8DA9C4FF' point { value: 'merged' color: '#22D3EEFF' From 833c320c95ce69b12bfbb40447b1e7fb5cfc69a6 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:44:22 +0000 Subject: [PATCH 042/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 6d5c651..8c79b59 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1053,11 +1053,10 @@ Dashboard squad_command_center { } } block v_jdaq: VizBlock { - label: 'Count of Id by Status' + label: 'Live Pipeline' viz: BarChart { dataset: reporting_project_management theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.status) From 25fc7f54cc4e5bf316e013cc08d950a68511827e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:47:41 +0000 Subject: [PATCH 043/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 8c79b59..2edeb76 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -38,21 +38,21 @@ Dashboard squad_command_center { position: pos(20, 20, 200, 160) } block v_997c { - position: pos(240, 20, 200, 160) + position: pos(240, 20, 220, 160) } block v_gt75 { - position: pos(460, 20, 200, 160) + position: pos(480, 20, 200, 160) } block v_uhk0 { - position: pos(680, 20, 200, 160) + position: pos(700, 20, 200, 160) } block v_sffe { - position: pos(900, 20, 180, 160) + position: pos(920, 20, 180, 160) } block v_jdaq { position: pos(20, 200, 520, 380) } - width: 1100 + width: 1120 } tab ttm_tab: CanvasLayout { label: '⏱ Time-to-Market' @@ -196,6 +196,9 @@ Dashboard squad_command_center { field: r(reporting_issues.completed_at) operator: 'matches' value: 'last 30 days' + } + theme { + } values: [ VizFieldFull { @@ -243,8 +246,8 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-shipped-value { - font-size: 56px; - font-weight: 800; + font-size: 52px; + font-weight: 500; color: #4ade80; line-height: 1; } @@ -277,7 +280,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -379,6 +382,7 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { + } values: [ VizFieldFull { @@ -426,8 +430,8 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-cycle-value { - font-size: 56px; - font-weight: 800; + font-size: 52px; + font-weight: 500; color: #4f8cff; line-height: 1; } @@ -450,7 +454,7 @@ Dashboard squad_command_center {

Avg Cycle Time (30D)

- {{ rows[0].values.`Avg Cycle Time` }} + {{ rows[0].values.`Avg Cycle Time` }}h
@@ -460,7 +464,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -555,6 +559,9 @@ Dashboard squad_command_center { field: r(reporting_issues.status) operator: 'not_null' value: [] + } + theme { + } values: [ VizFieldFull { @@ -591,8 +598,8 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-wip-value { - font-size: 56px; - font-weight: 800; + font-size: 52px; + font-weight: 500; color: #ffffff; line-height: 1; } @@ -623,7 +630,7 @@ Dashboard squad_command_center { status
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -751,6 +758,7 @@ Dashboard squad_command_center { value: 'pr_review' } theme { + } values: [ VizFieldFull { @@ -798,8 +806,8 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-pr-review-value { - font-size: 56px; - font-weight: 800; + font-size: 52px; + font-weight: 500; color: #fbbf24; line-height: 1; } @@ -832,7 +840,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -952,6 +960,7 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { + } values: [ VizFieldFull { @@ -1004,8 +1013,8 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-completion-value { - font-size: 56px; - font-weight: 800; + font-size: 52px; + font-weight: 500; color: #34d399; line-height: 1; } @@ -1038,7 +1047,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true From 041f33cb10915c1d441a5a821ac130b942372f82 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:53:09 +0000 Subject: [PATCH 044/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 2edeb76..0958b87 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 1400 + height: 1220 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -41,10 +41,10 @@ Dashboard squad_command_center { position: pos(240, 20, 220, 160) } block v_gt75 { - position: pos(480, 20, 200, 160) + position: pos(700, 20, 200, 160) } block v_uhk0 { - position: pos(700, 20, 200, 160) + position: pos(480, 20, 200, 160) } block v_sffe { position: pos(920, 20, 180, 160) @@ -198,7 +198,6 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { - } values: [ VizFieldFull { @@ -382,7 +381,6 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { - } values: [ VizFieldFull { @@ -561,7 +559,6 @@ Dashboard squad_command_center { value: [] } theme { - } values: [ VizFieldFull { @@ -758,7 +755,6 @@ Dashboard squad_command_center { value: 'pr_review' } theme { - } values: [ VizFieldFull { @@ -960,7 +956,6 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { - } values: [ VizFieldFull { From 413a5a1920ac40d96c2812a40aac9506efd2d139 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 17:59:32 +0000 Subject: [PATCH 045/168] Update 'Squad Reporting - Project Management' to use new 'squad_dark' theme with refined color palette and styles --- .../reporting_project_management.page.aml | 2 +- .../them-squad-dark.aml | 107 ++++++++++-------- 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index ab7bfb2..b65f6dd 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1110,5 +1110,5 @@ Dashboard squad_command_center { } } } - theme: obsidian_navy + theme: squad_dark } \ No newline at end of file diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml index 837e35a..90c7a11 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml @@ -1,34 +1,41 @@ // ============================================================ -// FILE: themes/squad_dark.aml -// Reusable dark theme for the squad dashboard +// FILE: themes/squad_command.aml +// Squad Command Center — matching the reference design +// Floating blocks on deep navy +// Page #0b0d13 → Canvas #0b0d13 → Block #151a26 // ============================================================ -const dark_squad_bg = '#141720' -const dark_squad_canvas = '#343F4B' -const dark_squad_surface = '#0c0e14' -const dark_squad_border = '#1e2235' -const dark_squad_text = '#e8eaf0' -const dark_squad_muted = '#6b7194' -const dark_squad_accent = '#4f8cff' -const dark_squad_green = '#34d399' -const dark_squad_red = '#f87171' -const dark_squad_amber = '#fbbf24' -const dark_squad_font = 'Inter' -const dark_squad_mono = 'JetBrains Mono' +const sc_page = '#182030' +const sc_canvas = '#0b0d13' +const sc_surface = '#151a26' +const sc_border = '#1e2535' +const sc_hover = '#1a2030' +const sc_banding = '#181d28' +const sc_text = '#e8ecf2' +const sc_muted = '#6b7590' +const sc_dim = '#3a4460' +const sc_accent = '#3b82f6' +const sc_green = '#34d399' +const sc_red = '#ef4444' +const sc_amber = '#fbbf24' +const sc_purple = '#a78bfa' +const sc_cyan = '#22d3ee' +const sc_pink = '#f472b6' +const sc_font = 'Inter' PageTheme squad_dark { background { - bg_color: dark_squad_canvas + bg_color: sc_page } canvas { background { - bg_color: dark_squad_bg + bg_color: sc_canvas } border { border_width: 0 border_radius: 0 - border_color: dark_squad_border + border_color: sc_border border_style: 'none' } shadow: 'none' @@ -37,27 +44,27 @@ PageTheme squad_dark { block { label { - font_family: dark_squad_font + font_family: sc_font font_size: 14 - font_color: dark_squad_text + font_color: sc_text font_weight: 'semibold' font_style: 'normal' } text { - font_family: dark_squad_font + font_family: sc_font font_size: 12 - font_color: dark_squad_muted + font_color: sc_muted font_weight: 'normal' font_style: 'normal' } border { border_width: 1 - border_radius: 12 - border_color: dark_squad_border + border_radius: 14 + border_color: sc_border border_style: 'solid' } background { - bg_color: dark_squad_surface + bg_color: sc_surface } padding: 16 shadow: 'none' @@ -67,55 +74,59 @@ PageTheme squad_dark { viz { table { general { - bg_color: dark_squad_surface - hover_color: '#1a1d2a' - banding_color: '#161922' + bg_color: sc_surface + hover_color: sc_hover + banding_color: sc_banding font_size: 12 - font_color: dark_squad_muted - font_family: dark_squad_font - border_color: dark_squad_border + font_color: sc_muted + font_family: sc_font + border_color: sc_border border_width: 1 - grid_color: dark_squad_border + grid_color: '#1a2030' } header { - bg_color: '#1a1d2a' + bg_color: sc_hover font_size: 12 - font_color: dark_squad_text + font_color: sc_text font_weight: 'semibold' } sub_header { - bg_color: '#1a1d2a' + bg_color: sc_hover font_size: 11 - font_color: dark_squad_muted + font_color: sc_muted font_weight: 'medium' } sub_title { font_size: 11 - font_color: dark_squad_muted + font_color: sc_muted font_weight: 'medium' } } } custom_css: @css - /* ---- Squad Command Center (Dark) ---- */ + /* ---- Squad Command Center ---- */ - /* Tab bar styling */ - .tab-bar { background: #0c0e14 !important; border-bottom: 1px solid #1e2235 !important; } - .tab-bar .tab-item { color: #6b7194 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } - .tab-bar .tab-item.active { color: #4f8cff !important; border-bottom: 2px solid #4f8cff !important; } + /* Tab bar */ + .tab-bar { background: #0b0d13 !important; border-bottom: 1px solid #1e2535 !important; } + .tab-bar .tab-item { color: #6b7590 !important; font-family: 'Inter', sans-serif !important; font-size: 13px !important; } + .tab-bar .tab-item.active { color: #3b82f6 !important; border-bottom: 2px solid #3b82f6 !important; } - /* Metric sheet overrides */ - .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #e8eaf0 !important; } - .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #6b7194 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } + /* Metric sheet — large monospace numbers */ + .metric-sheet .metric-value { font-family: 'JetBrains Mono', monospace !important; font-size: 28px !important; font-weight: 700 !important; color: #e8ecf2 !important; } + .metric-sheet .metric-label { font-family: 'Inter', sans-serif !important; font-size: 11px !important; color: #6b7590 !important; text-transform: uppercase !important; letter-spacing: 0.06em !important; } /* Chart axis and legend */ - .recharts-cartesian-axis-tick-value { fill: #6b7194 !important; font-size: 10px !important; } - .recharts-legend-item-text { color: #6b7194 !important; font-size: 11px !important; } - .recharts-cartesian-grid line { stroke: #1e2235 !important; } + .recharts-cartesian-axis-tick-value { fill: #6b7590 !important; font-size: 10px !important; font-family: 'Inter', sans-serif !important; } + .recharts-legend-item-text { color: #6b7590 !important; font-size: 11px !important; } + .recharts-cartesian-grid line { stroke: #1e2535 !important; } /* Tooltip */ - .recharts-tooltip-wrapper .recharts-default-tooltip { background: #1a1d2a !important; border: 1px solid #262a3e !important; border-radius: 8px !important; } + .recharts-tooltip-wrapper .recharts-default-tooltip { background: #151a26 !important; border: 1px solid #1e2535 !important; border-radius: 10px !important; box-shadow: 0 8px 24px rgba(0,0,0,0.5) !important; } + /* Scrollbar */ + ::-webkit-scrollbar { width: 5px; height: 5px; } + ::-webkit-scrollbar-track { background: #0b0d13; } + ::-webkit-scrollbar-thumb { background: #1e2535; border-radius: 3px; } ;; } \ No newline at end of file From fe724c4bff94936ae2b83a754a340c8c2ff38f51 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 18:08:54 +0000 Subject: [PATCH 046/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index b8669ac..35b1c14 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -35,19 +35,19 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 20, 200, 160) + position: pos(20, 20, 200, 140) } block v_997c { - position: pos(240, 20, 220, 160) + position: pos(240, 20, 220, 140) } block v_gt75 { - position: pos(700, 20, 200, 160) + position: pos(700, 20, 200, 140) } block v_uhk0 { - position: pos(480, 20, 200, 160) + position: pos(480, 20, 200, 140) } block v_sffe { - position: pos(920, 20, 180, 160) + position: pos(920, 20, 180, 140) } block v_jdaq { position: pos(20, 200, 520, 380) @@ -198,6 +198,7 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { + } values: [ VizFieldFull { @@ -245,7 +246,7 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-shipped-value { - font-size: 52px; + font-size: 40px; font-weight: 500; color: #4ade80; line-height: 1; @@ -272,14 +273,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Completed issue (Last 30D)` }} -
+
{{ rows[0].values.`Completed Issue Icon` }} {{ rows[0].values.`%LM - Completed Issue` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -381,6 +382,7 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { + } values: [ VizFieldFull { @@ -428,7 +430,7 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-cycle-value { - font-size: 52px; + font-size: 40px; font-weight: 500; color: #4f8cff; line-height: 1; @@ -455,14 +457,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Avg Cycle Time` }}h -
+
{{ rows[0].values.`Avg Cycle Time Icon` }} {{ rows[0].values.`%LM - Avg Cycle Time` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -559,6 +561,7 @@ Dashboard squad_command_center { value: [] } theme { + } values: [ VizFieldFull { @@ -595,7 +598,7 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-wip-value { - font-size: 52px; + font-size: 40px; font-weight: 500; color: #ffffff; line-height: 1; @@ -621,13 +624,13 @@ Dashboard squad_command_center { {{ rows[0].values.`WIP` }} -
+
issues across {{ rows[0].values.`CountD of Status` }} status
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -755,6 +758,7 @@ Dashboard squad_command_center { value: 'pr_review' } theme { + } values: [ VizFieldFull { @@ -802,7 +806,7 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-pr-review-value { - font-size: 52px; + font-size: 40px; font-weight: 500; color: #fbbf24; line-height: 1; @@ -829,14 +833,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Avg PR Review` }}h -
+
{{ rows[0].values.`Avg PR Review Icon` }} {{ rows[0].values.`%LM - Avg PR Review`}} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -956,6 +960,7 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { + } values: [ VizFieldFull { @@ -1008,7 +1013,7 @@ Dashboard squad_command_center { margin-top: 12px; } .kpi-completion-value { - font-size: 52px; + font-size: 40px; font-weight: 500; color: #34d399; line-height: 1; @@ -1035,14 +1040,14 @@ Dashboard squad_command_center { {{ rows[0].values.`% Issue Completion` }} -
+
{{ rows[0].values.`Delta- % Issue Completion Icon` }} {{ rows[0].values.`Delta - % Issue Completion` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -1061,6 +1066,7 @@ Dashboard squad_command_center { viz: BarChart { dataset: reporting_project_management theme { + } x_axis: VizFieldFull { ref: r(reporting_issues.status) @@ -1109,6 +1115,7 @@ Dashboard squad_command_center { } settings { row_limit: 5000 + legend_label: 'hidden' x_axis_show_null_datetime: false aggregate_awareness { enabled: true From 49dd6560a4d9c51179fe3bec93ef89beb65183d4 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 6 Mar 2026 18:44:17 +0000 Subject: [PATCH 047/168] Add 'Reporting Burnup' model and integrate it with 'reporting_project_management' dataset and dashboard --- .../reporting_burnup.model.aml | 63 ++++++++ .../reporting_project_management.dataset.aml | 6 +- .../reporting_project_management.page.aml | 136 ++++++++++++++++-- 3 files changed, 191 insertions(+), 14 deletions(-) create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_burnup.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_burnup.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_burnup.model.aml new file mode 100644 index 0000000..4cb1a3a --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_burnup.model.aml @@ -0,0 +1,63 @@ +Model reporting_burnup { + type: 'query' + label: 'Reporting Burnup' + description: '' + data_source_name: 'demodb' + dimension week { + label: 'Week' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.week }};; + } + dimension created { + label: 'Created' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.created }};; + } + dimension completed { + label: 'Completed' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.completed }};; + } + dimension cum_created { + label: 'Cum Created' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.cum_created }};; + } + dimension cum_completed { + label: 'Cum Completed' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.cum_completed }};; + } + + owner: 'vy.ht@holistics.io' + query: @sql + WITH created_weekly AS ( + SELECT DATE_TRUNC('week', created_at) AS week, COUNT(*) AS created + FROM {{ #reporting_issues }} GROUP BY 1 + ), + completed_weekly AS ( + SELECT DATE_TRUNC('week', completed_at) AS week, COUNT(*) AS completed + FROM {{ #reporting_issues }} WHERE completed_at IS NOT NULL GROUP BY 1 + ), + combined AS ( + SELECT + COALESCE(c.week, d.week) AS week, + COALESCE(c.created, 0) AS created, + COALESCE(d.completed, 0) AS completed + FROM created_weekly c + FULL OUTER JOIN completed_weekly d ON c.week = d.week + ) + SELECT + week, created, completed, + SUM(created) OVER (ORDER BY week) AS cum_created, + SUM(completed) OVER (ORDER BY week) AS cum_completed + FROM combined ORDER BY week;; + models: [ + reporting_issues + ] +} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index a148070..9183ead 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -8,6 +8,8 @@ Dataset reporting_project_management { reporting_issues, reporting_issues_log, reporting_issue_duration + , + reporting_burnup ] relationships: [ relationship(reporting_issues_log.id > reporting_issues.id, true), @@ -31,14 +33,14 @@ Dataset reporting_project_management { definition: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; } - metric percent_lm_avg_cycle_time { + metric percent_lm_avg_cycle_time { label: "%LM - Avg Cycle Time" type: "number" hidden: false definition: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; } - metric percent_lm_avg_pr_review { + metric percent_lm_avg_pr_review { label: "%LM - Avg PR Review" type: "number" hidden: false diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index b8669ac..2e64180 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -35,22 +35,31 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 20, 200, 160) + position: pos(20, 40, 200, 160) } block v_997c { - position: pos(240, 20, 220, 160) + position: pos(240, 40, 220, 160) } block v_gt75 { - position: pos(700, 20, 200, 160) + position: pos(700, 40, 200, 160) } block v_uhk0 { - position: pos(480, 20, 200, 160) + position: pos(480, 40, 200, 160) } block v_sffe { - position: pos(920, 20, 180, 160) + position: pos(920, 40, 180, 160) } block v_jdaq { - position: pos(20, 200, 520, 380) + position: pos(20, 220, 520, 360) + } + block v_zv1h { + position: pos(560, 200, 540, 380) + } + block v_3qu5 { + position: pos(560, 220, 540, 360) + } + block v_gq0k { + position: pos(20, 600, 1080, 360) } width: 1120 } @@ -380,8 +389,6 @@ Dashboard squad_command_center { operator: 'matches' value: 'last 30 days' } - theme { - } values: [ VizFieldFull { label: 'Avg Cycle Time' @@ -389,7 +396,7 @@ Dashboard squad_command_center { aggregation: 'avg' format { type: 'number' - pattern: '#,###0.00' + pattern: '#,###' } }, VizFieldFull { @@ -462,7 +469,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -1060,8 +1067,6 @@ Dashboard squad_command_center { label: 'Live Pipeline' viz: BarChart { dataset: reporting_project_management - theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.status) format { @@ -1109,6 +1114,7 @@ Dashboard squad_command_center { } settings { row_limit: 5000 + legend_label: 'hidden' x_axis_show_null_datetime: false aggregate_awareness { enabled: true @@ -1117,5 +1123,111 @@ Dashboard squad_command_center { } } } + block v_3qu5: VizBlock { + label: 'Burnup Created vs Completed' + viz: AreaChart { + dataset: reporting_project_management + calculation metric_93579d9 { + label: 'Running total of Count of Reporting Burnup Created' + formula: @aql count(reporting_burnup.created) | running_total();; + calc_type: 'measure' + data_type: 'number' + } + x_axis: VizFieldFull { + ref: r(reporting_burnup.week) + transformation: 'datetrunc week' + format { + type: 'date' + pattern: 'LLL dd, yyyy' + } + } + y_axis { + series { + field: VizFieldFull { + label: 'Created' + ref: r(reporting_burnup.created) + aggregation: 'running sum' + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Completed' + ref: r(reporting_burnup.completed) + aggregation: 'running sum' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + legend_label: 'hidden' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_gq0k: VizBlock { + label: 'Weekly Throughput' + description: 'Created vs completed per week' + viz: ColumnChart { + dataset: reporting_project_management + filter { + field: r(reporting_burnup.week) + operator: 'matches' + value: 'last 3 months' + } + x_axis: VizFieldFull { + ref: r(reporting_burnup.week) + transformation: 'datetrunc week' + format { + type: 'date' + pattern: 'LLL dd, yyyy' + } + } + y_axis { + series { + field: VizFieldFull { + label: 'Created' + ref: r(reporting_burnup.created) + aggregation: 'max' + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Completed' + ref: r(reporting_burnup.completed) + aggregation: 'max' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + theme: squad_dark } \ No newline at end of file From a9c6c413aa688ff2b507a7afca4f8ed7a6060f37 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 03:50:27 +0000 Subject: [PATCH 048/168] Update 'reporting_issues' model import_source with new CSV upload timestamp and hash --- .../reporting_issues.model.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml index 2eaafd6..c0e9af8 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml @@ -105,8 +105,8 @@ Model reporting_issues { import_source: ImportSource { type: 'csv' original_file_name: 'issues.csv' - uploaded_at: '2026-03-06 05:15:40' - hash: '51c656b0c185757586e81a133e3f8ad26d5e70726e21d8f21646104978d4b64e' + uploaded_at: '2026-03-07 03:49:36' + hash: 'a16492e35106d89f985607bc226c6cfbe5fa46666d20c188c47c89852a5e48ce' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("title", "title", "text"), From e8babf0620235c7e8df17d21b63eb576d86cb209 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 03:57:01 +0000 Subject: [PATCH 049/168] Update 'reporting_issue_duration' model label and import source metadata --- .../reporting_issue_duration.model.aml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml index 448467c..384af29 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml @@ -1,6 +1,6 @@ Model reporting_issue_duration { type: 'table' - label: 'Issue stage durations' + label: 'Reporting issue duration' description: '' data_source_name: 'demodb' dimension id { @@ -49,8 +49,8 @@ Model reporting_issue_duration { import_source: ImportSource { type: 'csv' original_file_name: 'issue_stage_durations.csv' - uploaded_at: '2026-03-06 05:02:09' - hash: 'a59e0932924ad6d67c5afa764889272c199bd9f59d757eebd1febf5dadcd1075' + uploaded_at: '2026-03-07 03:56:17' + hash: 'e9637d0d699cd324d86351e4c43cffb0a14574d6e3a1fb428f0c64d7bd95f348' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), From 6950d18b4d31b79c05755897070137bad30aa5f1 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 06:28:16 +0000 Subject: [PATCH 050/168] Update 'reporting_issue_duration' model with fixed CSV import source details --- .../reporting_issue_duration.model.aml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml index 384af29..80fd1e8 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml @@ -48,9 +48,9 @@ Model reporting_issue_duration { import_source: ImportSource { type: 'csv' - original_file_name: 'issue_stage_durations.csv' - uploaded_at: '2026-03-07 03:56:17' - hash: 'e9637d0d699cd324d86351e4c43cffb0a14574d6e3a1fb428f0c64d7bd95f348' + original_file_name: 'issue_stage_durations_fixed.csv' + uploaded_at: '2026-03-07 06:27:34' + hash: '1a3d0eb610d5aa4c7e5858339694bdfe998961c36f2d1dfe0c4995feef4e7451' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), From 49d7fbe8875edc256ad46436112434496431cdd4 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 08:47:04 +0000 Subject: [PATCH 051/168] Remove 'reporting_issue_duration' and 'reporting_issues_log' models, add 'reporting_stage_duration' model, and update dataset and dashboard references accordingly --- .../reporting_issue_duration.model.aml | 65 ---------- ...odel.aml => reporting_issue_log.model.aml} | 12 +- .../reporting_project_management.dataset.aml | 9 +- .../reporting_project_management.page.aml | 4 +- .../reporting_stage_duration.model.aml | 115 ++++++++++++++++++ 5 files changed, 127 insertions(+), 78 deletions(-) delete mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml rename team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/{reporting_issues_log.model.aml => reporting_issue_log.model.aml} (84%) create mode 100644 team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml deleted file mode 100644 index 80fd1e8..0000000 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_duration.model.aml +++ /dev/null @@ -1,65 +0,0 @@ -Model reporting_issue_duration { - type: 'table' - label: 'Reporting issue duration' - description: '' - data_source_name: 'demodb' - dimension id { - label: 'Id' - description: '' - type: 'number' - hidden: false - definition: @sql {{ #SOURCE.id }};; - } - dimension issue_id { - label: 'Issue' - description: '' - type: 'number' - hidden: false - definition: @sql {{ #SOURCE.issue_id }};; - } - dimension stage { - label: 'Stage' - description: '' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.stage }};; - } - dimension entered_at { - label: 'Entered at' - description: '' - type: 'datetime' - hidden: false - definition: @sql {{ #SOURCE.entered_at }};; - } - dimension exited_at { - label: 'Exited at' - description: '' - type: 'datetime' - hidden: false - definition: @sql {{ #SOURCE.exited_at }};; - } - dimension duration_hours { - label: 'Duration hours' - description: '' - type: 'number' - hidden: false - definition: @sql {{ #SOURCE.duration_hours }};; - } - - import_source: ImportSource { - type: 'csv' - original_file_name: 'issue_stage_durations_fixed.csv' - uploaded_at: '2026-03-07 06:27:34' - hash: '1a3d0eb610d5aa4c7e5858339694bdfe998961c36f2d1dfe0c4995feef4e7451' - column_configs: [ - H.imports.column_config("id", "id", "number"), - H.imports.column_config("issue_id", "issue_id", "number"), - H.imports.column_config("stage", "stage", "text"), - H.imports.column_config("entered_at", "entered_at", "datetime"), - H.imports.column_config("exited_at", "exited_at", "datetime"), - H.imports.column_config("duration_hours", "duration_hours", "number") - ] - } - owner: 'vy.ht@holistics.io' - table_name: '"dbt_khai"."holistics_issue_stage_d_c7469_202603060502"' -} diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml similarity index 84% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml rename to team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml index b8e52ac..1d9c998 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues_log.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml @@ -34,7 +34,7 @@ Model reporting_issues_log { dimension transitioned_at { label: 'Transitioned at' description: '' - type: 'datetime' + type: 'date' hidden: false definition: @sql {{ #SOURCE.transitioned_at }};; } @@ -48,18 +48,18 @@ Model reporting_issues_log { import_source: ImportSource { type: 'csv' - original_file_name: 'issue_status_transitions_1.csv' - uploaded_at: '2026-03-05 03:51:10' - hash: '8b8f1c8e8b7ffd0084850cb45db8372527efe8d9e83431e4cf5779a99272992b' + original_file_name: 'issue_status_transitions_complete_iso8601.csv' + uploaded_at: '2026-03-07 08:41:13' + hash: 'ab180aa44b52efaf2d925a7f4daf2bfdae2aab79b5f6ae7eb6b61a89d9aff495' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), H.imports.column_config("from_status", "from_status", "text"), H.imports.column_config("to_status", "to_status", "text"), - H.imports.column_config("transitioned_at", "transitioned_at", "datetime"), + H.imports.column_config("transitioned_at", "transitioned_at", "date"), H.imports.column_config("transitioned_by", "transitioned_by", "number") ] } owner: 'vy.ht@holistics.io' - table_name: '"dbt_khai"."holistics_reporting_iss_21547_202603050351"' + table_name: '"dbt_khai"."holistics_reporting_iss_1d114_202603070832"' } diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 9183ead..c293c6b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -7,16 +7,15 @@ Dataset reporting_project_management { reporting_project, reporting_issues, reporting_issues_log, - reporting_issue_duration - , - reporting_burnup + reporting_burnup, + reporting_stage_duration ] relationships: [ - relationship(reporting_issues_log.id > reporting_issues.id, true), relationship(reporting_issues.project_id > reporting_project.id, true), relationship(reporting_issues.assignee_id > reporting_team.id, true), relationship(reporting_issues.creator_id > reporting_team.id, true), - relationship(reporting_issue_duration.id > reporting_issues.id, true) + relationship(reporting_issues_log.issue_id > reporting_issues.id, true), + relationship(reporting_stage_duration.issue_id > reporting_issues.id, true), ] metric completed_issue { diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 2e64180..42890e2 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -757,7 +757,7 @@ Dashboard squad_command_center { value: 'last 30 days' } filter { - field: r(reporting_issue_duration.stage) + field: r(reporting_stage_duration.stage) operator: 'is' value: 'pr_review' } @@ -766,7 +766,7 @@ Dashboard squad_command_center { values: [ VizFieldFull { label: 'Avg PR Review' - ref: r(reporting_issue_duration.duration_hours) + ref: r(reporting_stage_duration.duration_hours) aggregation: 'avg' format { type: 'number' diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml new file mode 100644 index 0000000..f034bc3 --- /dev/null +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -0,0 +1,115 @@ +Model reporting_stage_duration { + type: 'query' + label: 'Reporting Stage Duration' + description: '' + data_source_name: 'demodb' + dimension id { + label: 'Id' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.id }};; + } + dimension issue_id { + label: 'Issue Id' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.issue_id }};; + } + dimension stage { + label: 'Stage' + type: 'text' + hidden: false + definition: @sql {{ #SOURCE.stage }};; + } + dimension entered_at { + label: 'Entered At' + type: 'date' + hidden: false + definition: @sql {{ #SOURCE.entered_at }};; + } + dimension exited_at { + label: 'Exited At' + type: 'datetime' + hidden: false + definition: @sql {{ #SOURCE.exited_at }};; + } + dimension duration_hours { + label: 'Duration Hours' + type: 'number' + hidden: false + definition: @sql {{ #SOURCE.duration_hours }};; + } + + owner: 'vy.ht@holistics.io' + query: @sql + WITH status_exits AS ( + -- Calculate when each status was entered and exited + SELECT + issue_id, + from_status AS stage, + transitioned_at AS exited_at, + LAG(transitioned_at) OVER ( + PARTITION BY issue_id + ORDER BY transitioned_at + ) AS entered_at + FROM {{ #reporting_issues_log }} + WHERE from_status IS NOT NULL + ), + + status_with_start_time AS ( + -- Use issue started_at as entered_at for first status + SELECT + se.issue_id, + se.stage, + COALESCE(se.entered_at, {{ #reporting_issues.started_at }}) AS entered_at, + se.exited_at + FROM status_exits se + LEFT JOIN {{ #reporting_issues }} ON se.issue_id = {{ #reporting_issues.id }} + WHERE se.entered_at IS NOT NULL OR {{ #reporting_issues.started_at }} IS NOT NULL + ), + + current_status AS ( + -- Add the current/final status for each issue + SELECT + t.issue_id, + t.to_status AS stage, + t.transitioned_at AS entered_at, + COALESCE({{ #reporting_issues.completed_at }}, CURRENT_TIMESTAMP) AS exited_at + FROM ( + SELECT + issue_id, + to_status, + transitioned_at, + ROW_NUMBER() OVER ( + PARTITION BY issue_id + ORDER BY transitioned_at DESC + ) AS rn + FROM {{ #reporting_issues_log }} + ) t + LEFT JOIN {{ #reporting_issues }} ON t.issue_id = {{ #reporting_issues.id }} + WHERE t.rn = 1 + ) + + -- Combine all stages and calculate duration + SELECT + ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, + issue_id, + stage, + entered_at, + exited_at, + ROUND( + CAST(EXTRACT(EPOCH FROM (exited_at - entered_at)) / 3600.0 AS NUMERIC), + 2 + ) AS duration_hours + FROM ( + SELECT * FROM status_with_start_time + UNION ALL + SELECT * FROM current_status + ) all_stages + WHERE entered_at < exited_at + ORDER BY issue_id, entered_at;; + models: [ + reporting_issues, + reporting_issues_log + ] +} From ab614b149668dd52eeb3ecde99bfaccf03024b38 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 09:00:04 +0000 Subject: [PATCH 052/168] Update 'reporting_issues' model to map status codes to readable labels in Status dimension --- .../reporting_issues.model.aml | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml index c0e9af8..5ec4b14 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml @@ -46,12 +46,20 @@ Model reporting_issues { definition: @sql {{ #SOURCE.creator_id }};; } dimension status { - label: 'Status' - description: '' - type: 'text' - hidden: false - definition: @sql {{ #SOURCE.status }};; - } + label: 'Status' + description: '' + type: 'text' + hidden: false + definition: @sql CASE + WHEN {{ #SOURCE.status }} = 'in_progress' THEN 'In Progress' + WHEN {{ #SOURCE.status }} = 'pr_review' THEN 'PR Review' + WHEN {{ #SOURCE.status }} = 'merged' THEN 'Merged' + WHEN {{ #SOURCE.status }} = 'deployed_to_staging' THEN 'Deployed to Staging' + WHEN {{ #SOURCE.status }} = 'tested_on_staging' THEN 'Tested on Staging' + WHEN {{ #SOURCE.status }} = 'deployed' THEN 'Deployed' + ELSE 'Other' + END;; +} dimension priority { label: 'Priority' description: '' @@ -126,4 +134,4 @@ Model reporting_issues { } owner: 'vy.ht@holistics.io' table_name: '"dbt_khai"."holistics_reporting_iss_614ea_202603050350"' -} +} \ No newline at end of file From 18b727f20e7a91dbc2c4043fd2d6f2b35cd61f5e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 09:02:49 +0000 Subject: [PATCH 053/168] Update 'reporting_stage_duration' model to map stage codes to readable labels --- .../reporting_stage_duration.model.aml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index f034bc3..f401dfb 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -19,7 +19,15 @@ Model reporting_stage_duration { label: 'Stage' type: 'text' hidden: false - definition: @sql {{ #SOURCE.stage }};; + definition: @sql CASE + WHEN {{ #SOURCE.stage }} = 'in_progress' THEN 'In Progress' + WHEN {{ #SOURCE.stage }} = 'pr_review' THEN 'PR Review' + WHEN {{ #SOURCE.stage }} = 'merged' THEN 'Merged' + WHEN {{ #SOURCE.stage }} = 'deployed_to_staging' THEN 'Deployed to Staging' + WHEN {{ #SOURCE.stage }} = 'tested_on_staging' THEN 'Tested on Staging' + WHEN {{ #SOURCE.stage }} = 'deployed' THEN 'Deployed' + ELSE 'Other' + END;; } dimension entered_at { label: 'Entered At' From 9b45e0323a2a255c7f4b13a44db529e0d39f49ae Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 11:07:58 +0000 Subject: [PATCH 054/168] Update 'reporting_stage_duration' model to refine stage mapping and duration calculation, update import metadata for 'reporting_issue_log' model --- .../reporting_issue_log.model.aml | 4 +- .../reporting_stage_duration.model.aml | 130 ++++++++---------- 2 files changed, 57 insertions(+), 77 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml index 1d9c998..cc55130 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml @@ -49,8 +49,8 @@ Model reporting_issues_log { import_source: ImportSource { type: 'csv' original_file_name: 'issue_status_transitions_complete_iso8601.csv' - uploaded_at: '2026-03-07 08:41:13' - hash: 'ab180aa44b52efaf2d925a7f4daf2bfdae2aab79b5f6ae7eb6b61a89d9aff495' + uploaded_at: '2026-03-07 11:06:48' + hash: 'a10637ca5f40ae6f0bafd7b622f8c011057bc98920eb970d8f0d9795b1f956ba' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index f401dfb..4a2e179 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -19,15 +19,7 @@ Model reporting_stage_duration { label: 'Stage' type: 'text' hidden: false - definition: @sql CASE - WHEN {{ #SOURCE.stage }} = 'in_progress' THEN 'In Progress' - WHEN {{ #SOURCE.stage }} = 'pr_review' THEN 'PR Review' - WHEN {{ #SOURCE.stage }} = 'merged' THEN 'Merged' - WHEN {{ #SOURCE.stage }} = 'deployed_to_staging' THEN 'Deployed to Staging' - WHEN {{ #SOURCE.stage }} = 'tested_on_staging' THEN 'Tested on Staging' - WHEN {{ #SOURCE.stage }} = 'deployed' THEN 'Deployed' - ELSE 'Other' - END;; + definition: @sql {{#SOURCE.stage}};; } dimension entered_at { label: 'Entered At' @@ -49,75 +41,63 @@ Model reporting_stage_duration { } owner: 'vy.ht@holistics.io' - query: @sql - WITH status_exits AS ( - -- Calculate when each status was entered and exited - SELECT - issue_id, - from_status AS stage, - transitioned_at AS exited_at, - LAG(transitioned_at) OVER ( - PARTITION BY issue_id - ORDER BY transitioned_at - ) AS entered_at - FROM {{ #reporting_issues_log }} - WHERE from_status IS NOT NULL - ), + query: @sql WITH status_transitions AS ( + -- Get all status transitions with their timestamps + SELECT + issue_id, + to_status, + transitioned_at, + LAG(transitioned_at) OVER ( + PARTITION BY issue_id + ORDER BY transitioned_at + ) AS previous_transitioned_at + FROM {{ #reporting_issues_log }} + WHERE to_status IS NOT NULL + ), - status_with_start_time AS ( - -- Use issue started_at as entered_at for first status - SELECT - se.issue_id, - se.stage, - COALESCE(se.entered_at, {{ #reporting_issues.started_at }}) AS entered_at, - se.exited_at - FROM status_exits se - LEFT JOIN {{ #reporting_issues }} ON se.issue_id = {{ #reporting_issues.id }} - WHERE se.entered_at IS NOT NULL OR {{ #reporting_issues.started_at }} IS NOT NULL - ), + stages_with_mapping AS ( + -- Map each transition to its corresponding stage name + SELECT + st.issue_id, + CASE + WHEN st.to_status = 'pr_review' THEN 'In Progress' + WHEN st.to_status = 'merged' THEN 'In PR Review' + WHEN st.to_status = 'deployed_to_staging' THEN 'Deploying to Staging' + WHEN st.to_status = 'tested_on_staging' THEN 'Testing on Staging' + WHEN st.to_status = 'deployed' THEN 'Waiting for Deployment' + END AS stage, + COALESCE(st.previous_transitioned_at, {{ #reporting_issues.started_at }}) AS entered_at, + st.transitioned_at AS exited_at + FROM status_transitions st + LEFT JOIN {{ #reporting_issues }} ON st.issue_id = {{ #reporting_issues.id }} + WHERE st.to_status IN ('pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging', 'deployed') + ) - current_status AS ( - -- Add the current/final status for each issue - SELECT - t.issue_id, - t.to_status AS stage, - t.transitioned_at AS entered_at, - COALESCE({{ #reporting_issues.completed_at }}, CURRENT_TIMESTAMP) AS exited_at - FROM ( - SELECT - issue_id, - to_status, - transitioned_at, - ROW_NUMBER() OVER ( - PARTITION BY issue_id - ORDER BY transitioned_at DESC - ) AS rn - FROM {{ #reporting_issues_log }} - ) t - LEFT JOIN {{ #reporting_issues }} ON t.issue_id = {{ #reporting_issues.id }} - WHERE t.rn = 1 - ) - - -- Combine all stages and calculate duration - SELECT - ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, - issue_id, - stage, - entered_at, - exited_at, - ROUND( - CAST(EXTRACT(EPOCH FROM (exited_at - entered_at)) / 3600.0 AS NUMERIC), - 2 - ) AS duration_hours - FROM ( - SELECT * FROM status_with_start_time - UNION ALL - SELECT * FROM current_status - ) all_stages - WHERE entered_at < exited_at - ORDER BY issue_id, entered_at;; + -- Calculate duration for each stage + SELECT + ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, + issue_id, + stage, + entered_at, + exited_at, + ROUND( + CAST((exited_at - entered_at) / 3600.0 AS NUMERIC), + 2 + ) AS duration_hours + FROM stages_with_mapping + WHERE entered_at < exited_at + AND stage IS NOT NULL + ORDER BY + issue_id, + CASE stage + WHEN 'In Progress' THEN 1 + WHEN 'In PR Review' THEN 2 + WHEN 'Deploying to Staging' THEN 3 + WHEN 'Testing on Staging' THEN 4 + WHEN 'Waiting for Deployment' THEN 5 + END;; models: [ reporting_issues, reporting_issues_log ] -} +} \ No newline at end of file From 7d3cda9b6f8d965a7d263a9bcc0aaf7bd4d2c18c Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:26:37 +0000 Subject: [PATCH 055/168] Update 'reporting_issue_log' import source filename and hash, refine 'reporting_stage_duration' stage mapping and duration calculation logic --- .../reporting_issue_log.model.aml | 6 +-- .../reporting_stage_duration.model.aml | 43 ++++++++++--------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml index cc55130..0f2d658 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml @@ -48,9 +48,9 @@ Model reporting_issues_log { import_source: ImportSource { type: 'csv' - original_file_name: 'issue_status_transitions_complete_iso8601.csv' - uploaded_at: '2026-03-07 11:06:48' - hash: 'a10637ca5f40ae6f0bafd7b622f8c011057bc98920eb970d8f0d9795b1f956ba' + original_file_name: 'issue_status_transitions_final.csv' + uploaded_at: '2026-03-07 15:25:51' + hash: 'ed1ddccfacdc6b8c6aa8e6f3a2304ed61efe9ce0ffdc497c2bbb1c1b4a318389' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 4a2e179..3fc7f95 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -34,10 +34,11 @@ Model reporting_stage_duration { definition: @sql {{ #SOURCE.exited_at }};; } dimension duration_hours { - label: 'Duration Hours' - type: 'number' + label: "Duration Hours" + type: "number" hidden: false definition: @sql {{ #SOURCE.duration_hours }};; + primary_key: false } owner: 'vy.ht@holistics.io' @@ -60,35 +61,36 @@ Model reporting_stage_duration { SELECT st.issue_id, CASE - WHEN st.to_status = 'pr_review' THEN 'In Progress' - WHEN st.to_status = 'merged' THEN 'In PR Review' - WHEN st.to_status = 'deployed_to_staging' THEN 'Deploying to Staging' - WHEN st.to_status = 'tested_on_staging' THEN 'Testing on Staging' - WHEN st.to_status = 'deployed' THEN 'Waiting for Deployment' + WHEN st.to_status = 'in_progress' THEN 'In Progress' + WHEN st.to_status = 'pr_review' THEN 'In PR Review' + WHEN st.to_status = 'merged' THEN 'Deploying to Staging' + WHEN st.to_status = 'deployed_to_staging' THEN 'Testing on Staging' + WHEN st.to_status = 'tested_on_staging' THEN 'Waiting for Deployment' END AS stage, - COALESCE(st.previous_transitioned_at, {{ #reporting_issues.started_at }}) AS entered_at, - st.transitioned_at AS exited_at + st.transitioned_at AS entered_at, + LEAD(st.transitioned_at) OVER ( + PARTITION BY st.issue_id + ORDER BY st.transitioned_at + ) AS exited_at FROM status_transitions st - LEFT JOIN {{ #reporting_issues }} ON st.issue_id = {{ #reporting_issues.id }} - WHERE st.to_status IN ('pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging', 'deployed') + WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging') ) - -- Calculate duration for each stage + -- Return stages with properly formatted timestamps and the duration in hours SELECT ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, issue_id, stage, - entered_at, - exited_at, - ROUND( - CAST((exited_at - entered_at) / 3600.0 AS NUMERIC), - 2 - ) AS duration_hours + entered_at::timestamp AS entered_at, + exited_at::timestamp AS exited_at, + -- Extract seconds (epoch), divide by 3600 to get hours + (EXTRACT(EPOCH FROM (exited_at::timestamp - entered_at::timestamp)) / 3600.0) AS duration_hours FROM stages_with_mapping - WHERE entered_at < exited_at + WHERE exited_at IS NOT NULL + AND entered_at < exited_at AND stage IS NOT NULL ORDER BY - issue_id, + issue_id, CASE stage WHEN 'In Progress' THEN 1 WHEN 'In PR Review' THEN 2 @@ -97,7 +99,6 @@ Model reporting_stage_duration { WHEN 'Waiting for Deployment' THEN 5 END;; models: [ - reporting_issues, reporting_issues_log ] } \ No newline at end of file From 3b2df428b4144cdf6ed90086440b2101e15b5f03 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:34:15 +0000 Subject: [PATCH 056/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 211 ++++++++++++++++-- 1 file changed, 197 insertions(+), 14 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 42890e2..caab1f9 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -67,20 +67,8 @@ Dashboard squad_command_center { label: '⏱ Time-to-Market' height: 1500 grid_size: 20 - block ttm_header { - position: pos(0, 0, 1200, 60) - } - block ttm_stacked { - position: pos(0, 70, 1200, 560) - } - block ttm_waterfall { - position: pos(0, 650, 600, 360) - } - block ttm_donut { - position: pos(600, 650, 600, 360) - } - block ttm_percentiles { - position: pos(0, 1030, 1200, 360) + block v_lvp5 { + position: pos(40, 140, 580, 400) } } tab bottleneck_tab: CanvasLayout { @@ -1228,6 +1216,201 @@ Dashboard squad_command_center { } } } + block v_lvp5: VizBlock { + label: 'Issue Time-to-Market Breakdown' + description: 'Stacked hours per stage - sorted by total TTM (top 30 issues)' + viz: BarChart { + dataset: reporting_project_management + calculation stage_priority { + label: 'Stage priority' + formula: @aql case( + when: reporting_stage_duration.stage == "In Progress", + then: "1", + when: reporting_stage_duration.stage == "In PR Review", + then: "2", + when: reporting_stage_duration.stage == "Deploying to Staging", + then: "3", + when: reporting_stage_duration.stage == "Testing on Staging", + then: "4", + else: "5" +);; + calc_type: 'dimension' + data_type: 'text' + model: reporting_stage_duration + } + filter { + field: r(reporting_issues.status) + operator: 'is' + value: 'Deployed' + } + theme { + } + x_axis: VizFieldFull { + ref: r(reporting_issues.identifier) + format { + type: 'text' + } + } + legend: VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + } + y_axis { + settings { + show_total_in_tooltip: true + stack_series_by: 'value' + } + series { + field: VizFieldFull { + label: 'Duration' + ref: r(reporting_stage_duration.duration_hours) + aggregation: 'sum' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + sort { + field_index: 0 + direction: 'asc' + type: 'xaxis' + } + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block f_project_name: FilterBlock { + label: 'Project Name' + type: 'field' + source: FieldFilterSource { + dataset: reporting_project_management + field: r(reporting_project.name) + } + default { + operator: 'is' + value: 'Explore 2' + } + } theme: squad_dark + interactions: [ + FilterInteraction { + from: 'v_x8r0' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_997c' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gt75' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_uhk0' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_sffe' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jdaq' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_3qu5' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gq0k' + to: [ + CustomMapping { + block: 'v_lvp5' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lvp5' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k' + ] + disabled: true + } + ] + } + ] } \ No newline at end of file From 894239bace3d1d0dafc769425c2963fc1be869b5 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:35:31 +0000 Subject: [PATCH 057/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index caab1f9..9394dd5 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -70,6 +70,9 @@ Dashboard squad_command_center { block v_lvp5 { position: pos(40, 140, 580, 400) } + block f_project_name_ynq6 { + position: pos(40, 40, 300, 80) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -1244,7 +1247,6 @@ Dashboard squad_command_center { value: 'Deployed' } theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) @@ -1302,6 +1304,18 @@ Dashboard squad_command_center { value: 'Explore 2' } } + block f_project_name_ynq6: FilterBlock { + label: 'Project Name' + type: 'field' + source: FieldFilterSource { + dataset: reporting_project_management + field: r(reporting_project.name) + } + default { + operator: 'is' + value: 'Explore 2' + } + } theme: squad_dark interactions: [ FilterInteraction { @@ -1406,7 +1420,27 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'f_project_name_ynq6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name_ynq6' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'f_project_name' ] disabled: true } From 57f8a3bf8b729179571ccaf0cb2a671615507264 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:38:55 +0000 Subject: [PATCH 058/168] Update 'reporting_stage_duration' model to include 'deployed' status and remove duration calculation --- .../reporting_stage_duration.model.aml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 3fc7f95..3859c79 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -73,24 +73,22 @@ Model reporting_stage_duration { ORDER BY st.transitioned_at ) AS exited_at FROM status_transitions st - WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging') + WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging', 'deployed') ) - -- Return stages with properly formatted timestamps and the duration in hours + -- Return stages with timestamps SELECT ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, issue_id, stage, entered_at::timestamp AS entered_at, - exited_at::timestamp AS exited_at, - -- Extract seconds (epoch), divide by 3600 to get hours - (EXTRACT(EPOCH FROM (exited_at::timestamp - entered_at::timestamp)) / 3600.0) AS duration_hours + exited_at::timestamp AS exited_at FROM stages_with_mapping WHERE exited_at IS NOT NULL AND entered_at < exited_at AND stage IS NOT NULL ORDER BY - issue_id, + issue_id, CASE stage WHEN 'In Progress' THEN 1 WHEN 'In PR Review' THEN 2 From cd848b41ba37512f4d848326d994e507dbfa7498 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:46:34 +0000 Subject: [PATCH 059/168] Update 'reporting_stage_duration' model to format timestamps and refine stage filtering logic --- .../reporting_stage_duration.model.aml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 3859c79..8007f5f 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -38,12 +38,10 @@ Model reporting_stage_duration { type: "number" hidden: false definition: @sql {{ #SOURCE.duration_hours }};; - primary_key: false } owner: 'vy.ht@holistics.io' query: @sql WITH status_transitions AS ( - -- Get all status transitions with their timestamps SELECT issue_id, to_status, @@ -57,7 +55,6 @@ Model reporting_stage_duration { ), stages_with_mapping AS ( - -- Map each transition to its corresponding stage name SELECT st.issue_id, CASE @@ -73,22 +70,23 @@ Model reporting_stage_duration { ORDER BY st.transitioned_at ) AS exited_at FROM status_transitions st - WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging', 'deployed') + WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging') ) - -- Return stages with timestamps SELECT ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, issue_id, stage, - entered_at::timestamp AS entered_at, - exited_at::timestamp AS exited_at + -- Force display format to include hours/mins/secs + TO_CHAR(entered_at::timestamp, 'YYYY-MM-DD HH24:MI:SS') AS entered_at, + TO_CHAR(exited_at::timestamp, 'YYYY-MM-DD HH24:MI:SS') AS exited_at, + (EXTRACT(EPOCH FROM (exited_at::timestamp - entered_at::timestamp)) / 3600.0) AS duration_hours FROM stages_with_mapping WHERE exited_at IS NOT NULL AND entered_at < exited_at AND stage IS NOT NULL ORDER BY - issue_id, + issue_id, CASE stage WHEN 'In Progress' THEN 1 WHEN 'In PR Review' THEN 2 From 5f784a6238cb419742ab8c01e20ac4d1b20bd8bd Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:51:18 +0000 Subject: [PATCH 060/168] Add hidden 'stage_priority' dimension to 'reporting_stage_duration' model for stage sorting --- .../reporting_stage_duration.model.aml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 8007f5f..574b4ba 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -39,6 +39,23 @@ Model reporting_stage_duration { hidden: false definition: @sql {{ #SOURCE.duration_hours }};; } + dimension stage_priority { + label: "Stage Priority" + type: "text" + description: "" + hidden: true + definition: @aql case( + when: reporting_stage_duration.stage == "In Progress", + then: "1", + when: reporting_stage_duration.stage == "In PR Review", + then: "2", + when: reporting_stage_duration.stage == "Deploying to Staging", + then: "3", + when: reporting_stage_duration.stage == "Testing on Staging", + then: "4", + else: "5" +);; + } owner: 'vy.ht@holistics.io' query: @sql WITH status_transitions AS ( From d1b9940d2a45c3cc2b483ac0ab88414fdd6efdb3 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 15:59:01 +0000 Subject: [PATCH 061/168] Unhide 'Stage Priority' in reporting_stage_duration and update its logic, remove redundant stage_priority calc in 'Squad Reporting - Project Management' page --- .../reporting_project_management.page.aml | 19 ------------------- .../reporting_stage_duration.model.aml | 6 ++++-- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 9394dd5..50c9b52 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1224,30 +1224,11 @@ Dashboard squad_command_center { description: 'Stacked hours per stage - sorted by total TTM (top 30 issues)' viz: BarChart { dataset: reporting_project_management - calculation stage_priority { - label: 'Stage priority' - formula: @aql case( - when: reporting_stage_duration.stage == "In Progress", - then: "1", - when: reporting_stage_duration.stage == "In PR Review", - then: "2", - when: reporting_stage_duration.stage == "Deploying to Staging", - then: "3", - when: reporting_stage_duration.stage == "Testing on Staging", - then: "4", - else: "5" -);; - calc_type: 'dimension' - data_type: 'text' - model: reporting_stage_duration - } filter { field: r(reporting_issues.status) operator: 'is' value: 'Deployed' } - theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) format { diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 574b4ba..7fd5174 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -43,7 +43,7 @@ Model reporting_stage_duration { label: "Stage Priority" type: "text" description: "" - hidden: true + hidden: false definition: @aql case( when: reporting_stage_duration.stage == "In Progress", then: "1", @@ -53,7 +53,9 @@ Model reporting_stage_duration { then: "3", when: reporting_stage_duration.stage == "Testing on Staging", then: "4", - else: "5" + when: reporting_stage_duration.stage == "Waiting for Deployment", + then: "5" + else: "6" );; } From da2efeb450239c57cdeb9eae694baab18a4886a8 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:01:28 +0000 Subject: [PATCH 062/168] Add 'deployed' status in 'reporting_stage_duration' model stage filtering criteria --- .../reporting_stage_duration.model.aml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 7fd5174..ce24391 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -89,14 +89,13 @@ Model reporting_stage_duration { ORDER BY st.transitioned_at ) AS exited_at FROM status_transitions st - WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging') + WHERE st.to_status IN ('in_progress', 'pr_review', 'merged', 'deployed_to_staging', 'tested_on_staging', 'deployed') ) SELECT ROW_NUMBER() OVER (ORDER BY issue_id, entered_at) AS id, issue_id, stage, - -- Force display format to include hours/mins/secs TO_CHAR(entered_at::timestamp, 'YYYY-MM-DD HH24:MI:SS') AS entered_at, TO_CHAR(exited_at::timestamp, 'YYYY-MM-DD HH24:MI:SS') AS exited_at, (EXTRACT(EPOCH FROM (exited_at::timestamp - entered_at::timestamp)) / 3600.0) AS duration_hours From a763bd95b568f70de0963cc23fe30604322b888b Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:04:49 +0000 Subject: [PATCH 063/168] Update 'reporting_stage_duration' model to fix syntax with trailing comma in case statement --- .../reporting_stage_duration.model.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index ce24391..949b13c 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -54,7 +54,7 @@ Model reporting_stage_duration { when: reporting_stage_duration.stage == "Testing on Staging", then: "4", when: reporting_stage_duration.stage == "Waiting for Deployment", - then: "5" + then: "5", else: "6" );; } From 0f37324f57a7beac7d4e465108d7a390adcd5301 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:08:30 +0000 Subject: [PATCH 064/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 50c9b52..81c39d5 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -68,7 +68,7 @@ Dashboard squad_command_center { height: 1500 grid_size: 20 block v_lvp5 { - position: pos(40, 140, 580, 400) + position: pos(40, 140, 1120, 400) } block f_project_name_ynq6 { position: pos(40, 40, 300, 80) @@ -1221,13 +1221,16 @@ Dashboard squad_command_center { } block v_lvp5: VizBlock { label: 'Issue Time-to-Market Breakdown' - description: 'Stacked hours per stage - sorted by total TTM (top 30 issues)' + description: 'Stacked hours per stage - sorted by total TTM' viz: BarChart { dataset: reporting_project_management filter { field: r(reporting_issues.status) operator: 'is' value: 'Deployed' + } + theme { + } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) @@ -1263,7 +1266,7 @@ Dashboard squad_command_center { sort { field_index: 0 direction: 'asc' - type: 'xaxis' + type: 'yaxis' } x_axis_show_null_datetime: false aggregate_awareness { From f4ba7636df71e5d5ace7293f405e546cd1fc8a9e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:14:16 +0000 Subject: [PATCH 065/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 102 ++++++++++++++++-- 1 file changed, 93 insertions(+), 9 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 81c39d5..b77c12d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -73,6 +73,9 @@ Dashboard squad_command_center { block f_project_name_ynq6 { position: pos(40, 40, 300, 80) } + block v_d3sa { + position: pos(40, 560, 580, 400) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -1230,7 +1233,6 @@ Dashboard squad_command_center { value: 'Deployed' } theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) @@ -1300,13 +1302,55 @@ Dashboard squad_command_center { value: 'Explore 2' } } + block v_d3sa: VizBlock { + label: 'Segment Contribution %' + description: 'Where does time-to-market actually go?' + viz: PieChart { + dataset: reporting_project_management + theme { + + } + legend: VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + } + series { + field: VizFieldFull { + label: 'Duration' + ref: r(reporting_stage_duration.duration_hours) + aggregation: 'sum' + format { + type: 'number' + pattern: '#,###' + } + } + } + settings { + display_as_donut: true + row_limit: 5000 + sort: 'desc' + legend_label: 'hidden' + show_percentage: true + data_label_position: 'outside' + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } theme: squad_dark interactions: [ FilterInteraction { from: 'v_x8r0' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1315,7 +1359,10 @@ Dashboard squad_command_center { from: 'v_997c' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1324,7 +1371,10 @@ Dashboard squad_command_center { from: 'v_gt75' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1333,7 +1383,10 @@ Dashboard squad_command_center { from: 'v_uhk0' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1342,7 +1395,10 @@ Dashboard squad_command_center { from: 'v_sffe' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1351,7 +1407,10 @@ Dashboard squad_command_center { from: 'v_jdaq' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1360,7 +1419,10 @@ Dashboard squad_command_center { from: 'v_3qu5' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1369,7 +1431,10 @@ Dashboard squad_command_center { from: 'v_gq0k' to: [ CustomMapping { - block: 'v_lvp5' + block: [ + 'v_lvp5', + 'v_d3sa' + ] disabled: true } ] @@ -1405,6 +1470,7 @@ Dashboard squad_command_center { 'v_jdaq', 'v_3qu5', 'v_gq0k', + 'v_d3sa', 'f_project_name_ynq6' ] disabled: true @@ -1429,6 +1495,24 @@ Dashboard squad_command_center { disabled: true } ] + }, + FilterInteraction { + from: 'v_d3sa' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k' + ] + disabled: true + } + ] } ] } \ No newline at end of file From 0ba6cde9067ee4645e79d01dec1d27e8cc3cfd2d Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:15:03 +0000 Subject: [PATCH 066/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index b77c12d..d090399 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -74,7 +74,7 @@ Dashboard squad_command_center { position: pos(40, 40, 300, 80) } block v_d3sa { - position: pos(40, 560, 580, 400) + position: pos(40, 560, 540, 400) } } tab bottleneck_tab: CanvasLayout { @@ -1308,7 +1308,6 @@ Dashboard squad_command_center { viz: PieChart { dataset: reporting_project_management theme { - } legend: VizFieldFull { ref: r(reporting_stage_duration.stage) From 74ab53ea523a8ea9e553dfe397ab9f33642a8249 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:15:27 +0000 Subject: [PATCH 067/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index d090399..9bc6fb5 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 1220 + height: 980 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) From 84d3fe8cd953fc42ec1afa0adf65ba78445ff73b Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:29:55 +0000 Subject: [PATCH 068/168] Update 'Squad Reporting - Project Management' to fix 'lm_avg_pr_review' calculation and related icon, color, and filters adjustments --- .../reporting_project_management.page.aml | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 50c9b52..6fed9f9 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -695,12 +695,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation lm_avg_pr_review { - label: '%LM - Avg PR Review' - formula: @aql safe_divide(avg(reporting_issue_duration, reporting_issue_duration.duration_hours), avg(reporting_issue_duration, reporting_issue_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } calculation metric_7eece09 { label: 'Avg PR Review - Color Condition' formula: @aql case( @@ -725,7 +719,7 @@ Dashboard squad_command_center { label: 'Avg PR Review Icon' formula: @aql case( when: - percent_lm_avg_pr_review < 0, + lm_avg_pr_review < 0, then: "▼", else: "▲" );; @@ -735,13 +729,19 @@ Dashboard squad_command_center { calculation avg_pr_review_color { label: 'Avg PR Review Color' formula: @aql case( - when: percent_lm_avg_pr_review > 0, + when: lm_avg_pr_review > 0, then: "red", else: "#4ade80" );; calc_type: 'measure' data_type: 'text' } + calculation lm_avg_pr_review { + label: '%LM - Avg PR Review' + formula: @aql safe_divide(avg(reporting_stage_duration, reporting_stage_duration.duration_hours), avg(reporting_stage_duration, reporting_stage_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -750,9 +750,7 @@ Dashboard squad_command_center { filter { field: r(reporting_stage_duration.stage) operator: 'is' - value: 'pr_review' - } - theme { + value: 'In PR Review' } values: [ VizFieldFull { @@ -765,16 +763,16 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'lm_avg_pr_review' + ref: 'avg_pr_review_icon' format { - type: 'number' - pattern: '#,###%' + type: 'text' } }, VizFieldFull { - ref: 'avg_pr_review_icon' + ref: 'lm_avg_pr_review' format { - type: 'text' + type: 'number' + pattern: '#,###%' } }, VizFieldFull { @@ -827,14 +825,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Avg PR Review` }}h -
+
{{ rows[0].values.`Avg PR Review Icon` }} {{ rows[0].values.`%LM - Avg PR Review`}} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true From 6f08f8c5ca0553442d3a1f238b05d2c28292e1a6 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:33:50 +0000 Subject: [PATCH 069/168] Fix 'Completed issue' metric status filter to use correct capitalization in 'reporting_project_management.dataset.aml' --- .../reporting_project_management.dataset.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index c293c6b..886e82b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -17,12 +17,12 @@ Dataset reporting_project_management { relationship(reporting_issues_log.issue_id > reporting_issues.id, true), relationship(reporting_stage_duration.issue_id > reporting_issues.id, true), ] - metric completed_issue { label: "Completed issue" type: "number" hidden: false - definition: @aql count(reporting_issues.id) | where(reporting_issues.status == "deployed");; + description: "" + definition: @aql count(reporting_issues.id) | where(reporting_issues.status == "Deployed");; } metric percent_lm_completed_issue { From d3ccb94b23edec7b54875c69d1b7019570816005 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:40:26 +0000 Subject: [PATCH 070/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 9eca8d6..88da9c0 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -201,6 +201,7 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { + } values: [ VizFieldFull { @@ -275,14 +276,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Completed issue (Last 30D)` }} -
+
{{ rows[0].values.`Completed Issue Icon` }} {{ rows[0].values.`%LM - Completed Issue` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -382,6 +383,9 @@ Dashboard squad_command_center { field: r(reporting_issues.completed_at) operator: 'matches' value: 'last 30 days' + } + theme { + } values: [ VizFieldFull { @@ -456,14 +460,14 @@ Dashboard squad_command_center { {{ rows[0].values.`Avg Cycle Time` }}h -
+
{{ rows[0].values.`Avg Cycle Time Icon` }} {{ rows[0].values.`%LM - Avg Cycle Time` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -560,6 +564,7 @@ Dashboard squad_command_center { value: [] } theme { + } values: [ VizFieldFull { @@ -622,13 +627,13 @@ Dashboard squad_command_center { {{ rows[0].values.`WIP` }} -
+
issues across {{ rows[0].values.`CountD of Status` }} status
-
;; + ;; settings { show_row_total: true show_column_total: true @@ -955,6 +960,7 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { + } values: [ VizFieldFull { @@ -1034,14 +1040,14 @@ Dashboard squad_command_center { {{ rows[0].values.`% Issue Completion` }} -
+
{{ rows[0].values.`Delta- % Issue Completion Icon` }} {{ rows[0].values.`Delta - % Issue Completion` }} vs last month
-
;; + ;; settings { show_row_total: true show_column_total: true From eda6200a838a8092e4c54ebc17ffd307ac09fa53 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:42:13 +0000 Subject: [PATCH 071/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 88da9c0..656fc1b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -179,7 +179,7 @@ Dashboard squad_command_center { label: 'Completed Issue Color' formula: @aql case( when: percent_lm_completed_issue < 0, - then: "red", + then: "rgb(248, 113, 113)", else: "#4ade80" );; calc_type: 'measure' @@ -283,7 +283,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -363,7 +363,7 @@ Dashboard squad_command_center { label: 'Avg Cycle Time Color' formula: @aql case( when: percent_lm_avg_cycle_time > 0, - then: "red", + then: "rgb(248, 113, 113)", else: "#4ade80" );; calc_type: 'measure' @@ -467,7 +467,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -564,7 +564,6 @@ Dashboard squad_command_center { value: [] } theme { - } values: [ VizFieldFull { @@ -738,7 +737,7 @@ Dashboard squad_command_center { label: 'Avg PR Review Color' formula: @aql case( when: lm_avg_pr_review > 0, - then: "red", + then: "rgb(248, 113, 113)", else: "#4ade80" );; calc_type: 'measure' @@ -759,6 +758,9 @@ Dashboard squad_command_center { field: r(reporting_stage_duration.stage) operator: 'is' value: 'In PR Review' + } + theme { + } values: [ VizFieldFull { @@ -840,7 +842,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -932,7 +934,7 @@ Dashboard squad_command_center { label: 'Delta - % Issue Completion Color' formula: @aql case( when: delta_percent_issue_completion < 0, - then: "red", + then: "rgb(248, 113, 113)", else: "#4ade80" );; calc_type: 'measure' @@ -1047,7 +1049,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true From 8d53ba7eb07e1b5b0648b39295d5d7660ece90e5 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:44:14 +0000 Subject: [PATCH 072/168] Update 'reporting_issue_log' import source timestamp and add 'duration_day' metric and dimension in 'reporting_project_management' dataset --- .../reporting_issue_log.model.aml | 4 ++-- .../reporting_project_management.dataset.aml | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml index 0f2d658..9947ec7 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml @@ -49,8 +49,8 @@ Model reporting_issues_log { import_source: ImportSource { type: 'csv' original_file_name: 'issue_status_transitions_final.csv' - uploaded_at: '2026-03-07 15:25:51' - hash: 'ed1ddccfacdc6b8c6aa8e6f3a2304ed61efe9ce0ffdc497c2bbb1c1b4a318389' + uploaded_at: '2026-03-07 16:44:03' + hash: 'd129f72a4df5876ac06498ff57293e4e2deb31a6d8c3e87a94d8a743d912230a' column_configs: [ H.imports.column_config("id", "id", "number"), H.imports.column_config("issue_id", "issue_id", "number"), diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 886e82b..8453ee0 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -66,4 +66,18 @@ Dataset reporting_project_management { hidden: false definition: @aql percent_completion - l2w_issue_completed;; } + metric duration_day { + label: "Duration Day" + type: "number" + hidden: false + description: "" + definition: @aql avg(reporting_stage_duration.duration_hours) / 24;; + } + dimension duration_day { + label: "Duration Day" + type: "number" + description: "" + definition: @aql reporting_stage_duration.duration_hours / 24;; + model: reporting_stage_duration + } } \ No newline at end of file From d19a75e4224ea151acdd232906543bd1c9008f8a Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 16:51:10 +0000 Subject: [PATCH 073/168] Update 'reporting_issues_log' model import_source with new file and timestamp details --- .../reporting_issue_log.model.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml index 9947ec7..43ea87c 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml @@ -48,8 +48,8 @@ Model reporting_issues_log { import_source: ImportSource { type: 'csv' - original_file_name: 'issue_status_transitions_final.csv' - uploaded_at: '2026-03-07 16:44:03' + original_file_name: 'issue_status_transitions_complete_iso8601.csv' + uploaded_at: '2026-03-07 16:47:53' hash: 'd129f72a4df5876ac06498ff57293e4e2deb31a6d8c3e87a94d8a743d912230a' column_configs: [ H.imports.column_config("id", "id", "number"), From 1a2a8f624324e2ccbda7da18828ffefa12742ada Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sat, 7 Mar 2026 17:00:18 +0000 Subject: [PATCH 074/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 656fc1b..3a6c386 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -201,7 +201,6 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { - } values: [ VizFieldFull { @@ -385,7 +384,6 @@ Dashboard squad_command_center { value: 'last 30 days' } theme { - } values: [ VizFieldFull { @@ -745,20 +743,20 @@ Dashboard squad_command_center { } calculation lm_avg_pr_review { label: '%LM - Avg PR Review' - formula: @aql safe_divide(avg(reporting_stage_duration, reporting_stage_duration.duration_hours), avg(reporting_stage_duration, reporting_stage_duration.duration_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + formula: @aql safe_divide(avg(reporting_stage_duration, reporting_stage_duration.duration_hours), avg(reporting_stage_duration, reporting_stage_duration.duration_hours) | relative_period(reporting_stage_duration.exited_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' data_type: 'number' } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: 'last 30 days' - } filter { field: r(reporting_stage_duration.stage) operator: 'is' value: 'In PR Review' } + filter { + field: r(reporting_stage_duration.exited_at) + operator: 'matches' + value: 'last 14 days' + } theme { } @@ -773,16 +771,16 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: 'avg_pr_review_icon' + ref: 'lm_avg_pr_review' format { - type: 'text' + type: 'number' + pattern: '#,###%' } }, VizFieldFull { - ref: 'lm_avg_pr_review' + ref: 'avg_pr_review_icon' format { - type: 'number' - pattern: '#,###%' + type: 'text' } }, VizFieldFull { @@ -842,7 +840,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -962,7 +960,6 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { - } values: [ VizFieldFull { From 949a0b65fdb74b74a226f51a36d9e24bb482ffda Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 14:09:38 +0000 Subject: [PATCH 075/168] Change 'stage_priority' in 'reporting_stage_duration' model from text to number type with numeric values --- .../reporting_stage_duration.model.aml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml index 949b13c..e1b4023 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml @@ -41,21 +41,21 @@ Model reporting_stage_duration { } dimension stage_priority { label: "Stage Priority" - type: "text" + type: "number" description: "" hidden: false definition: @aql case( when: reporting_stage_duration.stage == "In Progress", - then: "1", + then: 1, when: reporting_stage_duration.stage == "In PR Review", - then: "2", + then: 2, when: reporting_stage_duration.stage == "Deploying to Staging", - then: "3", + then: 3, when: reporting_stage_duration.stage == "Testing on Staging", - then: "4", + then: 4, when: reporting_stage_duration.stage == "Waiting for Deployment", - then: "5", - else: "6" + then: 5, + else: 6 );; } From 18314e1559d18ea250c399572b4dece21fb7c065 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 14:22:25 +0000 Subject: [PATCH 076/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 85 +++++++++++++++++-- 1 file changed, 76 insertions(+), 9 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 3a6c386..bb776df 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -76,6 +76,9 @@ Dashboard squad_command_center { block v_d3sa { position: pos(40, 560, 540, 400) } + block v_ut8c { + position: pos(600, 560, 560, 400) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -758,7 +761,6 @@ Dashboard squad_command_center { value: 'last 14 days' } theme { - } values: [ VizFieldFull { @@ -1343,6 +1345,44 @@ Dashboard squad_command_center { } } } + block v_ut8c: VizBlock { + label: 'Avg of Duration Hours, Stage, and Stage Priority' + viz: CustomChart { + dataset: reporting_project_management + theme { + + } + custom_chart_id: 33211 + field label: VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + } + field amount: VizFieldFull { + ref: r(reporting_stage_duration.duration_hours) + aggregation: 'avg' + format { + type: 'number' + pattern: 'inherited' + } + } + field label_sorter: VizFieldFull { + ref: r(reporting_stage_duration.stage_priority) + format { + type: 'number' + pattern: 'inherited' + } + } + setting bar_size: 40 + setting end_label: 'Total' + setting value_format: '' + setting total_bar_color: '#32343E' + settings { + row_limit: 5000 + } + } + } theme: squad_dark interactions: [ FilterInteraction { @@ -1351,7 +1391,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1363,7 +1404,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1375,7 +1417,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1387,7 +1430,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1399,7 +1443,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1411,7 +1456,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1423,7 +1469,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1435,7 +1482,8 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_lvp5', - 'v_d3sa' + 'v_d3sa', + 'v_ut8c' ] disabled: true } @@ -1473,6 +1521,7 @@ Dashboard squad_command_center { 'v_3qu5', 'v_gq0k', 'v_d3sa', + 'v_ut8c', 'f_project_name_ynq6' ] disabled: true @@ -1515,6 +1564,24 @@ Dashboard squad_command_center { disabled: true } ] + }, + FilterInteraction { + from: 'v_ut8c' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k' + ] + disabled: true + } + ] } ] } \ No newline at end of file From 3bde9ce4164e8b997b23e9f870fbcf37b1891dfc Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 14:30:25 +0000 Subject: [PATCH 077/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index bb776df..aa745f5 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1346,7 +1346,7 @@ Dashboard squad_command_center { } } block v_ut8c: VizBlock { - label: 'Avg of Duration Hours, Stage, and Stage Priority' + label: 'TTM Waterfall' viz: CustomChart { dataset: reporting_project_management theme { @@ -1364,7 +1364,7 @@ Dashboard squad_command_center { aggregation: 'avg' format { type: 'number' - pattern: 'inherited' + pattern: '#,###' } } field label_sorter: VizFieldFull { @@ -1377,9 +1377,13 @@ Dashboard squad_command_center { setting bar_size: 40 setting end_label: 'Total' setting value_format: '' - setting total_bar_color: '#32343E' + setting total_bar_color: '#999A9F' settings { row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } } } } From 5c396bb046360474a9ef7489cb6cc0eaa183bd88 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 14:52:02 +0000 Subject: [PATCH 078/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index aa745f5..e693ab0 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1376,7 +1376,7 @@ Dashboard squad_command_center { } setting bar_size: 40 setting end_label: 'Total' - setting value_format: '' + setting value_format: ',.1fh' setting total_bar_color: '#999A9F' settings { row_limit: 5000 From 2db17ca52774757cce70d5ec0829567b45c17418 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 14:52:53 +0000 Subject: [PATCH 079/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 73 +++++++++++++++++-- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index e693ab0..52f7652 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 980 + height: 1360 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -61,6 +61,10 @@ Dashboard squad_command_center { block v_gq0k { position: pos(20, 600, 1080, 360) } + block v_1lk1 { + position: pos(20, 980, 540, 360) + layer: 1 + } width: 1120 } tab ttm_tab: CanvasLayout { @@ -1350,7 +1354,6 @@ Dashboard squad_command_center { viz: CustomChart { dataset: reporting_project_management theme { - } custom_chart_id: 33211 field label: VizFieldFull { @@ -1387,6 +1390,48 @@ Dashboard squad_command_center { } } } + block v_1lk1: VizBlock { + label: 'Avg of Duration Hours, Stage, and Stage Priority' + viz: CustomChart { + dataset: reporting_project_management + theme { + + } + custom_chart_id: 33211 + field label: VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + } + field amount: VizFieldFull { + ref: r(reporting_stage_duration.duration_hours) + aggregation: 'avg' + format { + type: 'number' + pattern: '#,###' + } + } + field label_sorter: VizFieldFull { + ref: r(reporting_stage_duration.stage_priority) + format { + type: 'number' + pattern: 'inherited' + } + } + setting bar_size: 40 + setting end_label: 'Total' + setting value_format: '' + setting total_bar_color: '#999A9F' + settings { + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } theme: squad_dark interactions: [ FilterInteraction { @@ -1505,7 +1550,8 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'v_1lk1' ] disabled: true } @@ -1526,6 +1572,7 @@ Dashboard squad_command_center { 'v_gq0k', 'v_d3sa', 'v_ut8c', + 'v_1lk1', 'f_project_name_ynq6' ] disabled: true @@ -1545,6 +1592,7 @@ Dashboard squad_command_center { 'v_jdaq', 'v_3qu5', 'v_gq0k', + 'v_1lk1', 'f_project_name' ] disabled: true @@ -1563,7 +1611,8 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'v_1lk1' ] disabled: true } @@ -1581,7 +1630,21 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'v_1lk1' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_1lk1' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_ut8c' ] disabled: true } From 41abbfa2cef740d90973f591c2b4e91db372342e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 14:55:30 +0000 Subject: [PATCH 080/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 126 ++++-------------- 1 file changed, 29 insertions(+), 97 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 52f7652..f4392a9 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 1360 + height: 1300 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -35,35 +35,34 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 40, 200, 160) + position: pos(20, 140, 200, 160) } block v_997c { - position: pos(240, 40, 220, 160) + position: pos(240, 140, 220, 160) } block v_gt75 { - position: pos(700, 40, 200, 160) + position: pos(700, 140, 200, 160) } block v_uhk0 { - position: pos(480, 40, 200, 160) + position: pos(480, 140, 200, 160) } block v_sffe { - position: pos(920, 40, 180, 160) + position: pos(920, 140, 180, 160) } block v_jdaq { - position: pos(20, 220, 520, 360) + position: pos(20, 320, 520, 360) } block v_zv1h { position: pos(560, 200, 540, 380) } block v_3qu5 { - position: pos(560, 220, 540, 360) + position: pos(560, 320, 540, 360) } block v_gq0k { - position: pos(20, 600, 1080, 360) + position: pos(20, 700, 1080, 360) } - block v_1lk1 { - position: pos(20, 980, 540, 360) - layer: 1 + block f_project_name_ynq6 { + position: pos(20, 40, 300, 80) } width: 1120 } @@ -80,8 +79,9 @@ Dashboard squad_command_center { block v_d3sa { position: pos(40, 560, 540, 400) } - block v_ut8c { + block v_22mj { position: pos(600, 560, 560, 400) + layer: 1 } } tab bottleneck_tab: CanvasLayout { @@ -1349,49 +1349,9 @@ Dashboard squad_command_center { } } } - block v_ut8c: VizBlock { + block v_22mj: VizBlock { label: 'TTM Waterfall' - viz: CustomChart { - dataset: reporting_project_management - theme { - } - custom_chart_id: 33211 - field label: VizFieldFull { - ref: r(reporting_stage_duration.stage) - format { - type: 'text' - } - } - field amount: VizFieldFull { - ref: r(reporting_stage_duration.duration_hours) - aggregation: 'avg' - format { - type: 'number' - pattern: '#,###' - } - } - field label_sorter: VizFieldFull { - ref: r(reporting_stage_duration.stage_priority) - format { - type: 'number' - pattern: 'inherited' - } - } - setting bar_size: 40 - setting end_label: 'Total' - setting value_format: ',.1fh' - setting total_bar_color: '#999A9F' - settings { - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_1lk1: VizBlock { - label: 'Avg of Duration Hours, Stage, and Stage Priority' + description: 'Average contribution of each stage' viz: CustomChart { dataset: reporting_project_management theme { @@ -1441,7 +1401,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1454,7 +1414,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1467,7 +1427,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1480,7 +1440,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1493,7 +1453,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1506,7 +1466,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1519,7 +1479,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1532,7 +1492,7 @@ Dashboard squad_command_center { block: [ 'v_lvp5', 'v_d3sa', - 'v_ut8c' + 'v_22mj' ] disabled: true } @@ -1550,8 +1510,7 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k', - 'v_1lk1' + 'v_gq0k' ] disabled: true } @@ -1571,8 +1530,7 @@ Dashboard squad_command_center { 'v_3qu5', 'v_gq0k', 'v_d3sa', - 'v_ut8c', - 'v_1lk1', + 'v_22mj', 'f_project_name_ynq6' ] disabled: true @@ -1583,18 +1541,7 @@ Dashboard squad_command_center { from: 'f_project_name_ynq6' to: [ CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_1lk1', - 'f_project_name' - ] + block: 'f_project_name' disabled: true } ] @@ -1611,15 +1558,14 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k', - 'v_1lk1' + 'v_gq0k' ] disabled: true } ] }, FilterInteraction { - from: 'v_ut8c' + from: 'v_22mj' to: [ CustomMapping { block: [ @@ -1630,21 +1576,7 @@ Dashboard squad_command_center { 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k', - 'v_1lk1' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_1lk1' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_ut8c' + 'v_gq0k' ] disabled: true } From 3cfb7d75b1d86b843e8c04b278821302ef6ee713 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 15:05:11 +0000 Subject: [PATCH 081/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index f4392a9..57b8362 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1308,7 +1308,11 @@ Dashboard squad_command_center { } default { operator: 'is' - value: 'Explore 2' + value: [ + 'Explore 2', + 'Dashboard Performance', + 'Data Alerts Revamp' + ] } } block v_d3sa: VizBlock { @@ -1355,7 +1359,6 @@ Dashboard squad_command_center { viz: CustomChart { dataset: reporting_project_management theme { - } custom_chart_id: 33211 field label: VizFieldFull { From 311963823bd6d2f71ed9c6223e6aa9870f5ffa38 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 15:17:00 +0000 Subject: [PATCH 082/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 57b8362..bd9c78c 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1321,6 +1321,7 @@ Dashboard squad_command_center { viz: PieChart { dataset: reporting_project_management theme { + } legend: VizFieldFull { ref: r(reporting_stage_duration.stage) @@ -1338,6 +1339,28 @@ Dashboard squad_command_center { pattern: '#,###' } } + settings { + point { + value: 'In Progress' + color: '#528CFCFF' + } + point { + value: 'In PR Review' + color: '#FAC03AFF' + } + point { + value: 'Testing on Staging' + color: '#45D3D3FF' + } + point { + value: 'Deploying to Staging' + color: '#FF5B5BFF' + } + point { + value: 'Waiting for Deployment' + color: '#F375B6FF' + } + } } settings { display_as_donut: true From a218f631777d31d03984c8a95aa8bac5d95a2eaa Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 8 Mar 2026 15:25:38 +0000 Subject: [PATCH 083/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index bd9c78c..19aa3a5 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1242,6 +1242,7 @@ Dashboard squad_command_center { value: 'Deployed' } theme { + } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) @@ -1270,6 +1271,28 @@ Dashboard squad_command_center { pattern: 'inherited' } } + settings { + point { + value: 'In Progress' + color: '#3185D9' + } + point { + value: 'In PR Review' + color: '#FFAC51' + } + point { + value: 'Testing on Staging' + color: '#00CDCC' + } + point { + value: 'Deploying to Staging' + color: '#FF5255FF' + } + point { + value: 'Waiting for Deployment' + color: '#AC82FA' + } + } } } settings { @@ -1358,7 +1381,7 @@ Dashboard squad_command_center { } point { value: 'Waiting for Deployment' - color: '#F375B6FF' + color: '#AC82FA' } } } From 03cb582ee0cc8265c35f867155eb3068e2ac9dbd Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 05:30:53 +0000 Subject: [PATCH 084/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 19aa3a5..02a8a0d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 1300 + height: 1080 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -1242,7 +1242,6 @@ Dashboard squad_command_center { value: 'Deployed' } theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) @@ -1344,7 +1343,6 @@ Dashboard squad_command_center { viz: PieChart { dataset: reporting_project_management theme { - } legend: VizFieldFull { ref: r(reporting_stage_duration.stage) From 50febfe630e05a2e25b810141d5bf97c116071df Mon Sep 17 00:00:00 2001 From: growth-holistics Date: Mon, 9 Mar 2026 13:50:16 +0700 Subject: [PATCH 085/168] Update untitled_5.page.aml --- untitled_5.page.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/untitled_5.page.aml b/untitled_5.page.aml index e2833c0..93ae496 100644 --- a/untitled_5.page.aml +++ b/untitled_5.page.aml @@ -1,5 +1,5 @@ Dashboard untitled_5 { - title: 'Untitled' + title: 'Untitled Test Push master' description: '' owner: 'thang.lk@holistics.io' block title: TextBlock { @@ -21,4 +21,4 @@ Dashboard untitled_5 { } theme: H.themes.vanilla -} \ No newline at end of file +} From 2465c95be1a4b66a2786192af84d63a597ad90af Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 08:14:18 +0000 Subject: [PATCH 086/168] Update 'Squad Reporting - Project Management' layout and add header with navigation buttons --- .../reporting_project_management.page.aml | 94 +++++++++++++++++-- 1 file changed, 85 insertions(+), 9 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 02a8a0d..acf5403 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -35,34 +35,47 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 140, 200, 160) + position: pos(20, 280, 200, 160) } block v_997c { - position: pos(240, 140, 220, 160) + position: pos(240, 280, 220, 160) } block v_gt75 { - position: pos(700, 140, 200, 160) + position: pos(700, 280, 200, 160) } block v_uhk0 { - position: pos(480, 140, 200, 160) + position: pos(480, 280, 200, 160) } block v_sffe { - position: pos(920, 140, 180, 160) + position: pos(920, 280, 180, 160) } block v_jdaq { - position: pos(20, 320, 520, 360) + position: pos(20, 460, 520, 360) } block v_zv1h { position: pos(560, 200, 540, 380) } block v_3qu5 { - position: pos(560, 320, 540, 360) + position: pos(560, 460, 540, 360) } block v_gq0k { - position: pos(20, 700, 1080, 360) + position: pos(20, 840, 1080, 360) } block f_project_name_ynq6 { - position: pos(20, 40, 300, 80) + position: pos(20, 180, 300, 80) + } + block t_87la { + position: pos(40, 20, 740, 80) + layer: 1 + } + block t_vx6z { + position: pos(0, 20, 80, 80) + } + block t_d6y7 { + position: pos(20, 80, 140, 80) + } + block t_jsob { + position: pos(140, 80, 180, 80) } width: 1120 } @@ -1439,6 +1452,69 @@ Dashboard squad_command_center { } } } + block t_87la: TextBlock { + content: @md ## Squad Reporting - Project Management;; + theme { + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + text { + font_color: '#ffffff' + } + } + } + block t_vx6z: TextBlock { + content: @md
;; + theme { + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } + block t_d6y7: TextBlock { + content: @md ;; + theme { + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } + block t_jsob: TextBlock { + content: @md ;; + theme { + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } theme: squad_dark interactions: [ FilterInteraction { From 7a51519b5b9b9bf8079fca7af15d23e3956a0cf1 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 08:28:48 +0000 Subject: [PATCH 087/168] Update 'Squad Command Center' overview tab height and add clickable Time-to-market button with hover effect --- .../reporting_project_management.page.aml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index acf5403..0d79184 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 1080 + height: 1220 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -1501,10 +1501,15 @@ Overview } } block t_jsob: TextBlock { - content: @md ;; + content: @md
+ + Time-to-market +
;; theme { border { border_width: 0 From 8f0e8ede97770f3e11583c141b1cb17887bda82a Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 08:33:00 +0000 Subject: [PATCH 088/168] Update 'Time-to-market' button style for cleaner and lighter appearance in Squad Reporting page --- .../reporting_project_management.page.aml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 0d79184..87dd72d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1505,8 +1505,7 @@ Overview onclick="window.location.hash='dashboards/v4/111060-squad-reporting-project-management?_t=ttm_tab'" onmouseover="this.style.background='rgba(79, 140, 255, 0.2)'" onmouseout="this.style.background='rgba(79, 140, 255, 0.094)'" - style="padding: 8px 16px; border-radius: 8px; cursor: pointer; font-family: Inter; font-size: 12px; font-weight: 600; background: rgba(79, 140, 255, 0.094); color: rgb(79, 140, 255); display: flex; align-items: center; gap: 6px; transition: 0.15s;" - > + style="padding: 8px 16px; border-radius: 8px; border: none; cursor: pointer; font-family: Inter; font-size: 12px; font-weight: 400; background: transparent; color: rgb(107, 113, 148); transition: 0.15s; display: flex; align-items: center; gap: 6px;" > Time-to-market
;; From cad1237e6714c4fc8176e4b9fc77c3739ea7023c Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 08:40:57 +0000 Subject: [PATCH 089/168] Update 'reporting_project_management.page.aml' to replace clickable div with styled link for Time-to-market block --- .../reporting_project_management.page.aml | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 87dd72d..61aed0b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1501,14 +1501,25 @@ Overview } } block t_jsob: TextBlock { - content: @md
;; + ;; theme { border { border_width: 0 From fd030ff244921a4cb1b9bbdb6bfdfe26330c2dd8 Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Mon, 9 Mar 2026 08:50:14 +0000 Subject: [PATCH 090/168] Update default_write_schema to 'persisted_models' in 'project_settings' --- settings/project_settings.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/project_settings.aml b/settings/project_settings.aml index f7f34c7..d5a02c6 100644 --- a/settings/project_settings.aml +++ b/settings/project_settings.aml @@ -3,7 +3,7 @@ ProjectSettings project_settings { data_import { // DEFAULT WRITE SCHEMA FOR ALL DB // Only specifies the default option. Users can still change schema when importing. - default_write_schema: 'public_persisted' + default_write_schema: 'persisted_models' } } \ No newline at end of file From 2d8d2edfad583495b129047aff33faf73f495dfa Mon Sep 17 00:00:00 2001 From: "N.Max" Date: Mon, 9 Mar 2026 09:26:29 +0000 Subject: [PATCH 091/168] Rename theme file to 'them-squad-dark.theme.aml' from 'them-squad-dark.aml' in 'Squad Reporting - Project Management' --- .../{them-squad-dark.aml => them-squad-dark.theme.aml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/{them-squad-dark.aml => them-squad-dark.theme.aml} (100%) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.theme.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.aml rename to team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.theme.aml From aed315ba1a9ea06a9053ba470005b838de8b9568 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 10:08:49 +0000 Subject: [PATCH 092/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 61aed0b..540a00d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -77,6 +77,9 @@ Dashboard squad_command_center { block t_jsob { position: pos(140, 80, 180, 80) } + block t_4s9o { + position: pos(340, 230, 440, 380) + } width: 1120 } tab ttm_tab: CanvasLayout { @@ -1530,6 +1533,21 @@ Overview } } } + block t_4s9o: TextBlock { + content: @md + + ;; + } theme: squad_dark interactions: [ FilterInteraction { From c0376c4d3c655b7f050bc6b73ac88e07a7edb9ac Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 10:18:06 +0000 Subject: [PATCH 093/168] Update 'Squad Reporting - Project Management' link style for cleaner appearance and consistent font weight --- .../reporting_project_management.page.aml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 61aed0b..868157b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1502,17 +1502,18 @@ Overview } block t_jsob: TextBlock { content: @md Date: Mon, 9 Mar 2026 10:19:34 +0000 Subject: [PATCH 094/168] Remove redundant 'Time-to-market' button block from 'Squad Reporting - Project Management' page --- .../reporting_project_management.page.aml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 37b53a2..868157b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -77,9 +77,6 @@ Dashboard squad_command_center { block t_jsob { position: pos(140, 80, 180, 80) } - block t_4s9o { - position: pos(340, 230, 440, 380) - } width: 1120 } tab ttm_tab: CanvasLayout { @@ -1534,21 +1531,6 @@ Overview } } } - block t_4s9o: TextBlock { - content: @md - - ;; - } theme: squad_dark interactions: [ FilterInteraction { From d6d33890c3a46efa238dcd80a471da6fd2c6afce Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Mon, 9 Mar 2026 10:46:32 +0000 Subject: [PATCH 095/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 868157b..9603e4f 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -75,7 +75,7 @@ Dashboard squad_command_center { position: pos(20, 80, 140, 80) } block t_jsob { - position: pos(140, 80, 180, 80) + position: pos(140, 80, 480, 340) } width: 1120 } @@ -1502,7 +1502,7 @@ Overview } block t_jsob: TextBlock { content: @md - - - - - -;; - } - block t2: TextBlock { - content: @md # Regional Analysis;; - } - block t3: TextBlock { - content: @md - -;; - } - block t4: TextBlock { - content: @md - - -;; - } - block t5: TextBlock { - content: @md ### Filter by Country;; - } - block f1: FilterBlock { - label: 'Country Name' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(ecommerce_countries.name) - } - default { - operator: 'is' - value: [] - } - settings { - drillthrough: Drillthrough { - enabled: true - sources: [ - AutoDrillthroughSource { - } - ] - } - } - } - block t6: TextBlock { - content: @md - -;; - } - block t7: TextBlock { - content: @md - - -;; - } - block t8: TextBlock { - content: @md ### Filter by City;; - } - block f2: FilterBlock { - label: 'City Name' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(ecommerce_cities.name) - } - default { - operator: 'is' - value: [] - } - settings { - drillthrough: Drillthrough { - enabled: true - sources: [ - AutoDrillthroughSource { - } - ] - } - } - } - block t9: H.blocks.line(2, '#8F99A3') - block v8: VizBlock { - label: 'GMV - Gross Merchandise Value by Month' - viz: AreaChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_orders.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - label: 'GMV' - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: VizFieldFull { - label: 'Untitled Trend line' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - show_rows_with_no_data: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_711g: VizBlock { - label: 'Number of Order by Country Name and City Name' - viz: LineChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(order_master.order_created_month) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - label: 'Total Order' - settings { - show_data_label_by: 'value' - stack_series_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_label: 'Country' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_ztqi: VizBlock { - label: 'Table 1' - viz: DataTable { - dataset: demo_ecommerce - theme { - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - uname: 'order_master_order_created_month_1' - }, - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - uname: 'ecommerce_countries_continent_name' - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - }, - VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_order_id' - }, - VizFieldFull { - ref: r(order_master.price) - aggregation: 'sum' - format { - type: 'number' - pattern: '[$$]#,###' - } - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - column_styles: [ - ColumnStyle { - key: 'count_order_id' - width: 89 - }, - ColumnStyle { - key: 'count_distinct_user_id_1' - width: 100 - }, - ColumnStyle { - key: 'ecommerce_countries_continent_name' - width: 162 - }, - ColumnStyle { - key: 'order_master_order_created_month_1' - width: 215 - } - ] - } - } - } - block v_hk4u: VizBlock { - label: 'Order Created Month, City Name, and CountD of User Id' - viz: DataTable { - dataset: demo_ecommerce - filter { - field: r(order_master.order_created_month) - operator: 'matches' - value: 'may 2023' - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - }, - VizFieldFull { - ref: r(ecommerce_cities.name) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_wsww: VizBlock { - label: 'Order Created Month, City Name, and CountD of User Id' - viz: DataTable { - dataset: demo_ecommerce - filter { - field: r(order_master.order_created_month) - operator: 'matches' - value: 'may 2023' - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - }, - VizFieldFull { - ref: r(ecommerce_cities.name) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'order_master_order_created_month_1' - direction: 'asc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_nehb: VizBlock { - label: 'Total Revenue and Number of Order by Month' - viz: DataTable { - dataset: vyhuynh_ecommerce_dataset - fields: [ - VizFieldFull { - label: 'Order Month' - ref: r(vyht_ecommerce_orders_1.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - }, - VizFieldFull { - label: 'Total Revenue' - ref: r(vyhuynh_ecommerce_dataset.total_revenue) - format { - type: 'number' - pattern: '[$$]#,###' - } - }, - VizFieldFull { - ref: r(vyht_ecommerce_orders_1.id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - ] - settings { - show_row_number: true - row_limit: 100 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_856v: VizBlock { - label: 'Table 2' - viz: DataTable { - dataset: demo_ecommerce - theme { - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - uname: 'order_master_order_created_month_1' - }, - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_cii9: VizBlock { - label: 'Count Users, Sum Price, and AOV - Average Order Value by Name' - viz: CombinationChart { - dataset: demo_bigquery_ecommerce - calculation sum_price { - label: 'Sum Price' - formula: @aql sum(bq_dim_products.price);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(bq_fct_order_items.created_date) - operator: 'matches' - value: '2023' - } - x_axis: VizFieldFull { - ref: r(bq_dim_product_countries.name) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_bigquery_ecommerce.count_users) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - field: VizFieldFull { - ref: 'sum_price' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_bigquery_ecommerce.aov) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_qctn: VizBlock { - label: 'Number of Order by Country Name and City Name' - viz: LineChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - label: 'Total Order' - settings { - show_data_label_by: 'value' - stack_series_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: VizFieldFull { - ref: r(demo_ecommerce, order_master.aov_by_product) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_label: 'Country' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_9rhg: VizBlock { - label: 'Number of Order by Country Name and City Name' - viz: ColumnChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_cities.name) - format { - type: 'text' - } - } - y_axis { - label: 'Total Order' - settings { - show_data_label_by: 'value' - stack_series_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - sort { - field_index: 0 - direction: 'desc' - type: 'xaxis' - } - x_axis_label: 'Country' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t_4ttu: TextBlock { - content: @md - -;; - } - block t_5y3l: TextBlock { - content: @md - - -;; - } - block t_vb6z: TextBlock { - content: @md ### Date Filter;; - } - block f_zwa4: FilterBlock { - label: 'Date' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(order_master.order_created_at) - } - default { - operator: 'matches' - value: '$H_NIL$' - } - settings { - drillthrough: Drillthrough { - enabled: true - sources: [ - AutoDrillthroughSource { - } - ] - } - } - } - block v_3mef: VizBlock { - label: 'Chart 3' - viz: CombinationChart { - dataset: ecom_dataset_vux - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.status) - format { - type: 'text' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - label: 'Number Order' - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - series { - field: VizFieldFull { - label: 'Number User' - ref: r(order_master.user_id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_059z: VizBlock { - label: 'Table 2' - viz: PivotTable { - dataset: ecom_dataset_vux - theme { - } - rows: [ - VizFieldFull { - ref: r(order_master.status) - format { - type: 'text' - } - } - ] - columns: [ - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - ] - values: [ - VizFieldFull { - label: 'Number Order' - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Number User' - ref: r(order_master.user_id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - ] - settings { - show_row_total: true - show_column_total: true - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_tusm: VizBlock { - label: 'GMV - Gross Merchandise Value by Country Name' - viz: BarChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_countries.name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_j83d: VizBlock { - label: 'Count of Id by Latitude, Longitude, and Neighbourhood' - viz: BubbleChart { - dataset: demo_ecommerce - x_col: VizFieldFull { - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - } - y_col: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - z_col: VizFieldFull { - ref: r(order_master.aov) - format { - type: 'number' - pattern: 'inherited' - } - } - group_col: VizFieldFull { - ref: r(map_categories.parent_category) - format { - type: 'text' - } - } - settings { - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_nyr1: VizBlock { - label: 'GMV - Gross Merchandise Value by Continent Name' - viz: PieChart { - dataset: demo_ecommerce - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - settings { - display_as_donut: true - show_total: true - row_limit: 5000 - data_label_position: 'outside' - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_qj0m: VizBlock { - label: 'Sales by Category ID' - viz: LineChart { - dataset: american_housing_data_chinh_test - x_axis: VizFieldFull { - ref: r(zipcode_data_american_housing_data.beds) - format { - type: 'number' - pattern: 'inherited' - } - } - y_axis { - series { - field: VizFieldFull { - label: 'Sales' - ref: r(zipcode_data_american_housing_data.price) - aggregation: 'sum' - format { - type: 'number' - pattern: '[$$]#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_lpgt: VizBlock { - label: 'AOV - Average Order Value by Category' - viz: PieChart { - dataset: demo_ecommerce - legend: VizFieldFull { - ref: r(map_categories.category) - format { - type: 'text' - } - } - series { - field: VizFieldFull { - ref: r(order_master.aov) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - settings { - row_limit: 5000 - data_label_position: 'none' - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_5zcz: VizBlock { - label: 'GMV - Gross Merchandise Value by Month' - viz: CombinationChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_orders.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - label: 'GMV' - settings { - show_data_label_by: 'value' - } - series { - mark_type: 'column' - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - field: VizFieldFull { - label: 'Untitled Reference line' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - analytic: ReferenceLine { - type: 'avg' - } - } - } - } - settings { - show_rows_with_no_data: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_5dpt: VizBlock { - label: 'GMV - Gross Merchandise Value and Total Orders by Month Order Created At' - viz: CombinationChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - mark_type: 'line' - field: r(demo_ecommerce.total_orders) - settings { - line_style: 'dashed' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_ck6w: VizBlock { - label: 'Table 1' - viz: PivotTable { - dataset: ecom_dataset_vux - theme { - } - rows: [ - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - uname: 'ecommerce_countries_continent_name' - }, - VizFieldFull { - ref: r(ecommerce_users.gender) - format { - type: 'text' - } - uname: 'ecommerce_users_gender' - }, - VizFieldFull { - label: 'Product Category' - ref: r(order_master.delivery_attempts) - format { - type: 'number' - pattern: 'inherited' - } - uname: 'order_master_delivery_attempts' - } - ] - columns: [ - VizFieldFull { - ref: r(order_master.status) - format { - type: 'text' - } - } - ] - values: [ - VizFieldFull { - label: 'Number Order' - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'GMV' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - ] - settings { - show_row_total: true - show_column_total: true - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - column_styles: [ - ColumnStyle { - key: 'ecommerce_users_gender' - width: 86 - }, - ColumnStyle { - key: 'order_master_delivery_attempts' - width: 116 - }, - ColumnStyle { - key: 'ecommerce_countries_continent_name' - width: 117 - } - ] - } - } - } - block f_countries_continent_name: FilterBlock { - label: 'Countries Continent Name' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(ecommerce_countries.continent_name) - } - default { - operator: 'is' - value: [] - } - } - block v_8fpj: VizBlock { - label: 'Revenue by Sale reps' - viz: BarChart { - dataset: vyhuynh_ecommerce_dataset - theme { - } - x_axis: VizFieldFull { - ref: r(vy_sales_revenue_demo_csv.sales_rep) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(vy_sales_revenue_demo_csv.revenue_usd) - aggregation: 'sum' - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: ConstantVizField { - label: 'KPI goal' - value: 60000 - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_jbl8: VizBlock { - label: 'Total Order Value by Month Created Date' - viz: LineChart { - dataset: demo_ecommerce_metrics - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_orders.created_date) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_ecommerce_metrics.total_order_value) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_350o: VizBlock { - label: 'GMV by Continent (2024) - Compare vs LY' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f0aed54 { - label: '% Delta LY - GMV ' - formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_a9389ef { - label: ' LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_57371a1 { - label: 'Delta LY - GMV' - formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: 'metric_a9389ef' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color: '#7C9EE5' - } - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color: '#255DD4' - } - } - } - tooltips: [ - VizTooltip { - field: VizFieldFull { - ref: 'metric_f0aed54' - format { - type: 'number' - pattern: '#,###%' - } - } - }, - VizTooltip { - field: VizFieldFull { - ref: 'metric_57371a1' - format { - type: 'number' - pattern: '#,###' - } - } - } - ] - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_qnug: VizBlock { - label: 'GMV by Continent (2024) - Show trend over time' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_tq6d: VizBlock { - label: 'GMV by Continent (2024) - Show % change copy' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f0aed54 { - label: '% Delta LY - GMV ' - formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_a9389ef { - label: ' LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: 'metric_f0aed54' - format { - type: 'number' - pattern: '#,###%' - } - } - settings { - color: '#18A59E' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_wwiv: VizBlock { - label: 'GMV by Continent over time - With Trendline' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - series { - field: VizFieldFull { - label: 'Trend line of Gmv' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - point { - value: 'Asia' - line_style: 'dashed' - } - point { - value: 'Europe' - line_style: 'dashed' - } - point { - value: 'Oceania' - line_style: 'dashed' - } - point { - value: 'North America' - line_style: 'dashed' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_6o9d: VizBlock { - label: 'GMV by Continent over time - Line chart' - description: 'This is description of the block' - viz: LineChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t_hcv3: TextBlock { - content: @md ## Time series analysis;; - } - block t_ww35: TextBlock { - content: @md ## Categorical analysis;; - } - block t_vh1h: TextBlock { - content: @md ## Distribution analysis;; - } - block v_ji80: VizBlock { - label: 'Total order distributed by Price' - viz: ScatterChart { - dataset: demo_ecommerce - theme { - } - x_col: VizFieldFull { - ref: r(order_master.price) - format { - type: 'number' - pattern: 'inherited' - } - } - y_col: VizFieldFull { - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - block v_7vcf: VizBlock { - label: 'Total GMV (2024)' - description: 'This is description of the block' - viz: MetricKpi { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f688c32 { - label: '% Change - LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2025' - } - theme { - } - value: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - compare_value: VizFieldFull { - ref: 'metric_f688c32' - format { - type: 'number' - pattern: '#,###' - } - } - settings { - display_mode: 'compare_by_number' - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - } - block v_n0qr: VizBlock { - label: 'Total order distributed by Price- With trend line' - viz: LineChart { - dataset: demo_ecommerce - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.price) - format { - type: 'number' - pattern: 'inherited' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: VizFieldFull { - label: 'Trend line of Total Orders' - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_jpzg: VizBlock { - label: 'GMV over time' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_0sbb: VizBlock { - label: 'GMV over time - with trendline' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - series { - field: VizFieldFull { - label: 'Trend line of Gmv' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_58pi: VizBlock { - label: 'GMV over time - vs LY' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_14d21cf { - label: 'LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - series { - field: VizFieldFull { - ref: 'metric_14d21cf' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_vk4x: VizBlock { - label: 'GMV by Country (2024)' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_ufmq: VizBlock { - label: 'Total GMV (2024) copy' - description: 'This is description of the block' - viz: MetricKpi { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f688c32 { - label: '% Change - LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2025' - } - theme { - - } - value: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - compare_value: VizFieldFull { - label: 'KPI Goal' - ref: r(order_master.revenue) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - display_mode: 'progress' - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - } - interactions: [ - FilterInteraction { - from: 'v2' - to: [ - CustomMapping { - block: [ - 'v3', - 'v4', - 'v_nehb', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v3' - to: [ - CustomMapping { - block: [ - 'v2', - 'v4', - 'v_nehb', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v4' - to: [ - CustomMapping { - block: [ - 'v2', - 'v3', - 'v_nehb', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v5' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f1' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq', - 'f2' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f2' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_lpgt', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq', - 'f1', - 'f_zwa4' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v8' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_711g' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_ztqi' - to: [ - CustomMapping { - block: [ - 'v_hk4u', - 'v_wsww' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_hk4u' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_wsww', - 'v_j83d', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_wsww' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_j83d', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_nehb' - to: [ - CustomMapping { - block: [ - 'v2', - 'v3', - 'v4', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_856v' - to: [ - CustomMapping { - block: [ - 'v_ztqi', - 'v_j83d', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_qctn' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_9rhg' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f_zwa4' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_lpgt', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - }, - CustomMapping { - block: [ - 'v2', - 'v3', - 'v4', - 'v_nehb' - ] - field: ref('vyht_ecommerce_orders_1', 'created_at') - }, - CustomMapping { - block: 'v_cii9' - field: ref('bq_fct_order_items', 'created_at') - } - ] - }, - FilterInteraction { - from: 'v_tusm' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_j83d' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_nyr1', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_7vcf', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_nyr1' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_lpgt' - to: [ - CustomMapping { - block: [ - 'v8', - 'v_711g', - 'v_5zcz' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_5zcz' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_5dpt' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_8fpj' - to: [ - CustomMapping { - block: [ - 'v2', - 'v3', - 'v4', - 'v_nehb' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_350o' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_qnug' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_tq6d' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_wwiv' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6o9d' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_ji80' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_nyr1', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_7vcf', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_7vcf' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_n0qr' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_nyr1', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_7vcf', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_jpzg' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_0sbb' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_58pi' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_vk4x' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_ufmq' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f_countries_continent_name' - to: [ - CustomMapping { - block: [ - 'v_059z', - 'v_3mef', - 'v_ck6w' - ] - field: ref('ecommerce_countries', 'continent_name') - } - ] - } - ] - settings { - timezone: 'Etc/UTC' - cache_duration: 1440 - } -} \ No newline at end of file From 5c57dce5fcd1f87cc47e94c5558d0a4814ebfbf3 Mon Sep 17 00:00:00 2001 From: Khanh Tran Quoc Date: Thu, 12 Mar 2026 03:58:15 +0000 Subject: [PATCH 101/168] Restore to version "Update dashboard 'squad_command_center' with diff" (#d512e9) --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 3371 +++++++++++++++++ 1 file changed, 3371 insertions(+) create mode 100644 team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml new file mode 100644 index 0000000..4a898fa --- /dev/null +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -0,0 +1,3371 @@ +Dashboard vy_huynh_abernathy { + title: 'Vy Huynh Abernathy' + description: @md Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et massa vehicula, lobortis tortor bibendum, molestie velit. Morbi iaculis augue et pulvinar tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin lacus arcu, aliquam at elit at, porta suscipit libero. Integer euismod, urna vitae rhoncus tristique, tortor odio condimentum lacus, sit amet accumsan sem eros a sapien. Quisque commodo hendrerit dui, et fermentum nibh consectetur id. Maecenas convallis fringilla cursus. Fusce urna justo, lacinia a ipsum eu, lacinia vehicula dui. Vestibulum sagittis quam est, a posuere lorem suscipit sit amet. + +Vestibulum eu egestas odio. Maecenas sed dui ac turpis feugiat blandit et et mauris. Fusce felis ex, dignissim vel ante vitae, mattis facilisis arcu. Integer congue lorem sit amet libero sodales, a condimentum tellus commodo. Mauris eu nisl neque. Nam sagittis, augue quis eleifend euismod, lorem dui vulputate mi, a finibus sapien sapien at enim. Pellentesque accumsan orci pretium tincidunt sodales. Fusce volutpat rhoncus tellus, vel varius est imperdiet sit amet. Praesent ut urna sed turpis semper iaculis. Nam fringilla enim mi, nec tincidunt sem facilisis vel. Suspendisse aliquet mi eget mauris aliquet, eget vulputate risus laoreet. Pellentesque posuere sollicitudin elementum. + +Curabitur sit amet elementum nulla, id blandit mi. Vivamus ipsum dui, malesuada ut ultrices in, venenatis vitae nisl. Morbi blandit, sem et ultrices scelerisque, felis metus dapibus ante, non commodo erat erat at sapien. Aliquam lobortis risus eget finibus vehicula. Pellentesque auctor mi nec nunc blandit, nec dignissim eros gravida. Praesent facilisis libero convallis magna sollicitudin, sit amet ultrices felis suscipit. Quisque id sagittis leo, aliquam mattis lectus. + +Integer sodales et turpis tristique pulvinar. Quisque viverra magna a nibh sodales, a vehicula leo bibendum. Fusce suscipit diam id nulla blandit, non interdum elit pulvinar. Maecenas ante enim, fringilla at tortor id, fermentum mattis ligula. Donec diam nulla, mollis non sagittis a, tincidunt at dui. Praesent quis magna in magna aliquam dignissim. Cras ultricies scelerisque nisl sit amet consectetur. Quisque vitae semper elit, id tincidunt ante. + +Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut ante ex, vulputate at congue sit amet, sagittis nec risus. Donec lacinia aliquet nisi, tincidunt elementum ligula vehicula ut. Aliquam commodo id mauris eu vehicula. Nullam est nisl, tincidunt sed gravida vel, varius quis ante. Nulla facilisi. Proin ultricies dignissim eros, id dapibus lacus pharetra sed. + +;; + view: TabLayout { + label: 'View 1' + tab tab2: CanvasLayout { + label: 'Revenue Overview' + width: 1220 + height: 4060 + grid_size: 20 + block v2 { + position: pos(920, 220, 260, 140) + layer: 2 + } + block v3 { + position: pos(20, 1240, 1160, 460) + layer: 3 + } + block v4 { + position: pos(920, 380, 260, 140) + layer: 2 + } + block t3 { + position: pos(20, 20, 380, 160) + layer: 4 + } + block t4 { + position: pos(40, 40, 60, 40) + layer: 5 + } + block t5 { + position: pos(80, 40, 300, 40) + layer: 6 + } + block f1 { + position: pos(80, 80, 280, 60) + layer: 7 + } + block t6 { + position: pos(400, 20, 380, 160) + layer: 4 + } + block t7 { + position: pos(420, 40, 60, 40) + layer: 5 + } + block t8 { + position: pos(460, 40, 300, 60) + layer: 8 + } + block f2 { + position: pos(460, 80, 280, 60) + layer: 7 + } + block t9 { + position: pos(20, 180, 1160, 20) + layer: 9 + } + block v8 { + position: pos(20, 640, 1160, 580) + layer: 1 + } + block v_711g { + position: pos(20, 220, 640, 400) + layer: 1 + } + block v_nehb { + position: pos(20, 2320, 1160, 460) + layer: 1 + } + block v_cii9 { + position: pos(20, 2800, 1160, 400) + layer: 10 + } + block t_4ttu { + position: pos(800, 20, 380, 160) + layer: 1 + } + block t_5y3l { + position: pos(820, 40, 60, 40) + layer: 2 + } + block t_vb6z { + position: pos(860, 40, 300, 60) + layer: 3 + } + block f_zwa4 { + position: pos(860, 80, 280, 60) + layer: 4 + } + block v_qj0m { + position: pos(20, 3220, 1160, 400) + layer: 11 + } + block v_lpgt { + position: pos(20, 3640, 580, 400) + layer: 12 + } + block v_5zcz { + position: pos(20, 1720, 1160, 580) + layer: 1 + } + block v_jbl8 { + position: pos(620, 3640, 560, 400) + layer: 3 + } + mobile { + mode: 'auto' + } + default_zoom: 1 + auto_expand_vertically: true + } + tab tab_5auh: CanvasLayout { + label: 'Raw Data Table' + height: 1480 + grid_size: 20 + auto_expand_vertically: true + block v_ztqi { + position: pos(20, 20, 940, 420) + layer: 1 + } + block v_856v { + position: pos(20, 460, 940, 420) + layer: 1 + } + mobile { + mode: 'auto' + } + width: 1500 + default_zoom: 1 + } + tab tab3: CanvasLayout { + label: 'Regional Analysis' + height: 9440 + grid_size: 20 + block v5 { + position: pos(20, 360, 540, 420) + layer: 1 + } + block t1 { + position: pos(20, 20, 60, 60) + layer: 2 + } + block t2 { + position: pos(80, 20, 400, 60) + layer: 3 + } + block v_qctn { + position: pos(20, 5660, 1160, 580) + layer: 1 + } + block v_9rhg { + position: pos(20, 6260, 1160, 580) + layer: 1 + } + block v_tusm { + position: pos(20, 7380, 1160, 500) + layer: 1 + } + block v_j83d { + position: pos(20, 7900, 1160, 480) + layer: 1 + } + block v_nyr1 { + position: pos(20, 8400, 1160, 500) + layer: 1 + } + block v_5dpt { + position: pos(20, 8920, 1160, 500) + layer: 1 + } + block v_8fpj { + position: pos(20, 5140, 1160, 500) + layer: 4 + } + block v_350o { + position: pos(20, 800, 540, 400) + layer: 1 + } + block v_qnug { + position: pos(20, 1220, 1160, 400) + layer: 1 + } + block v_tq6d { + position: pos(580, 800, 600, 400) + layer: 1 + } + block t_hcv3 { + position: pos(20, 1660, 320, 60) + layer: 1 + } + block t_ww35 { + position: pos(20, 300, 320, 60) + layer: 1 + } + block v_6o9d { + position: pos(20, 3580, 1160, 440) + layer: 1 + } + block v_wwiv { + position: pos(20, 3120, 1160, 440) + layer: 1 + } + block t_vh1h { + position: pos(20, 4080, 320, 60) + layer: 1 + } + block v_7vcf { + position: pos(20, 100, 380, 180) + layer: 1 + } + block v_ji80 { + position: pos(20, 4140, 1160, 480) + layer: 1 + } + block v_n0qr { + position: pos(20, 4640, 1160, 480) + layer: 1 + } + block v_0sbb { + position: pos(20, 2660, 1160, 440) + layer: 1 + } + block v_58pi { + position: pos(20, 2200, 1160, 440) + layer: 1 + } + block v_jpzg { + position: pos(20, 1740, 1160, 440) + layer: 1 + } + block v_vk4x { + position: pos(580, 360, 540, 420) + layer: 1 + } + block v_ufmq { + position: pos(420, 100, 380, 180) + layer: 1 + } + mobile { + mode: 'auto' + } + auto_expand_vertically: true + } + tab tab_4i2l: CanvasLayout { + label: 'User Analysis' + width: 1500 + height: 2020 + grid_size: 20 + auto_expand_vertically: true + mobile { + mode: 'auto' + } + block v_3mef { + position: pos(20, 860, 1240, 280) + layer: 1 + } + block v_059z { + position: pos(20, 600, 1240, 240) + layer: 1 + } + block v_ck6w { + position: pos(20, 120, 1460, 460) + layer: 2 + } + block f_countries_continent_name { + position: pos(20, 20, 300, 80) + layer: 2 + } + auto_expand_horizontally: true + } + } + theme: H.themes.vanilla + block v2: VizBlock { + label: 'This month Revenue' + viz: MetricKpi { + dataset: vyhuynh_ecommerce_dataset + calculation monthly_revenue { + label: 'Monthly Revenue' + formula: @aql vyht_ecommerce_order_items + | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(vyht_ecommerce_orders_1.created_at) + operator: 'matches' + value: 'July 2023' + } + value: VizFieldFull { + label: 'Total Revenue This Month' + ref: 'total_revenue' + format { + type: 'number' + pattern: '[$$]#,###' + } + } + compare_value: VizPopSettings { + field: r(vyht_ecommerce_orders_1.created_at) + duration: 1 + granularity: 'month' + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + settings { + hide_label: true + } + } + block v3: VizBlock { + label: 'Total Revenue and Number of Order by Month' + viz: CombinationChart { + dataset: vyhuynh_ecommerce_dataset + filter { + field: r(vyht_ecommerce_orders_1.created_at) + operator: 'matches' + value: '2024' + } + x_axis: VizFieldFull { + label: 'Order Month' + ref: r(vyht_ecommerce_orders_1.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'Total Revenue' + settings { + group_values_into: 10 + show_data_label_by: 'value' + } + series { + mark_type: 'column' + field: VizFieldFull { + label: 'Total Revenue' + ref: r(vyhuynh_ecommerce_dataset.total_revenue) + format { + type: 'number' + pattern: '[$$]#,###' + } + } + settings { + color: '#255DD4' + } + } + } + y_axis { + label: 'Number of Order' + settings { + alignment: 'right' + group_values_into: 10 + } + series { + mark_type: 'line' + field: VizFieldFull { + ref: r(vyht_ecommerce_orders_1.id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#18A59E' + line_style: 'dashed' + } + } + } + settings { + row_limit: 100 + x_axis_label: 'Order Month' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v4: VizBlock { + label: 'This month Total Order' + viz: MetricKpi { + dataset: vyhuynh_ecommerce_dataset + calculation monthly_revenue { + label: 'Monthly Revenue' + formula: @aql vyht_ecommerce_order_items + | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(vyht_ecommerce_orders_1.created_at) + operator: 'matches' + value: 'July 2023' + } + value: VizFieldFull { + label: 'Total Order This Month' + ref: r(vyht_ecommerce_orders_1.id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + compare_value: VizPopSettings { + field: r(vyht_ecommerce_orders_1.created_at) + duration: 1 + granularity: 'month' + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + settings { + hide_label: true + } + } + block v5: VizBlock { + label: 'GMV by Continent (2024)' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t1: TextBlock { + content: @md
+ + + + + +
;; + } + block t2: TextBlock { + content: @md # Regional Analysis;; + } + block t3: TextBlock { + content: @md + +;; + } + block t4: TextBlock { + content: @md + + +;; + } + block t5: TextBlock { + content: @md ### Filter by Country;; + } + block f1: FilterBlock { + label: 'Country Name' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(ecommerce_countries.name) + } + default { + operator: 'is' + value: [] + } + settings { + drillthrough: Drillthrough { + enabled: true + sources: [ + AutoDrillthroughSource { + } + ] + } + } + } + block t6: TextBlock { + content: @md + +;; + } + block t7: TextBlock { + content: @md + + +;; + } + block t8: TextBlock { + content: @md ### Filter by City;; + } + block f2: FilterBlock { + label: 'City Name' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(ecommerce_cities.name) + } + default { + operator: 'is' + value: [] + } + settings { + drillthrough: Drillthrough { + enabled: true + sources: [ + AutoDrillthroughSource { + } + ] + } + } + } + block t9: H.blocks.line(2, '#8F99A3') + block v8: VizBlock { + label: 'GMV - Gross Merchandise Value by Month' + viz: AreaChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_orders.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'GMV' + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Untitled Trend line' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + show_rows_with_no_data: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_711g: VizBlock { + label: 'Number of Order by Country Name and City Name' + viz: LineChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(order_master.order_created_month) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_ztqi: VizBlock { + label: 'Table 1' + viz: DataTable { + dataset: demo_ecommerce + theme { + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + uname: 'order_master_order_created_month_1' + }, + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + uname: 'ecommerce_countries_continent_name' + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + }, + VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_order_id' + }, + VizFieldFull { + ref: r(order_master.price) + aggregation: 'sum' + format { + type: 'number' + pattern: '[$$]#,###' + } + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'count_distinct_user_id_1' + direction: 'desc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + column_styles: [ + ColumnStyle { + key: 'count_order_id' + width: 89 + }, + ColumnStyle { + key: 'count_distinct_user_id_1' + width: 100 + }, + ColumnStyle { + key: 'ecommerce_countries_continent_name' + width: 162 + }, + ColumnStyle { + key: 'order_master_order_created_month_1' + width: 215 + } + ] + } + } + } + block v_hk4u: VizBlock { + label: 'Order Created Month, City Name, and CountD of User Id' + viz: DataTable { + dataset: demo_ecommerce + filter { + field: r(order_master.order_created_month) + operator: 'matches' + value: 'may 2023' + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + }, + VizFieldFull { + ref: r(ecommerce_cities.name) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'count_distinct_user_id_1' + direction: 'desc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_wsww: VizBlock { + label: 'Order Created Month, City Name, and CountD of User Id' + viz: DataTable { + dataset: demo_ecommerce + filter { + field: r(order_master.order_created_month) + operator: 'matches' + value: 'may 2023' + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + }, + VizFieldFull { + ref: r(ecommerce_cities.name) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'order_master_order_created_month_1' + direction: 'asc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_nehb: VizBlock { + label: 'Total Revenue and Number of Order by Month' + viz: DataTable { + dataset: vyhuynh_ecommerce_dataset + fields: [ + VizFieldFull { + label: 'Order Month' + ref: r(vyht_ecommerce_orders_1.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + }, + VizFieldFull { + label: 'Total Revenue' + ref: r(vyhuynh_ecommerce_dataset.total_revenue) + format { + type: 'number' + pattern: '[$$]#,###' + } + }, + VizFieldFull { + ref: r(vyht_ecommerce_orders_1.id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_number: true + row_limit: 100 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_856v: VizBlock { + label: 'Table 2' + viz: DataTable { + dataset: demo_ecommerce + theme { + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + uname: 'order_master_order_created_month_1' + }, + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'count_distinct_user_id_1' + direction: 'desc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_cii9: VizBlock { + label: 'Count Users, Sum Price, and AOV - Average Order Value by Name' + viz: CombinationChart { + dataset: demo_bigquery_ecommerce + calculation sum_price { + label: 'Sum Price' + formula: @aql sum(bq_dim_products.price);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(bq_fct_order_items.created_date) + operator: 'matches' + value: '2023' + } + x_axis: VizFieldFull { + ref: r(bq_dim_product_countries.name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_bigquery_ecommerce.count_users) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + field: VizFieldFull { + ref: 'sum_price' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_bigquery_ecommerce.aov) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qctn: VizBlock { + label: 'Number of Order by Country Name and City Name' + viz: LineChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + ref: r(demo_ecommerce, order_master.aov_by_product) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_9rhg: VizBlock { + label: 'Number of Order by Country Name and City Name' + viz: ColumnChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_cities.name) + format { + type: 'text' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + sort { + field_index: 0 + direction: 'desc' + type: 'xaxis' + } + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t_4ttu: TextBlock { + content: @md + +;; + } + block t_5y3l: TextBlock { + content: @md + + +;; + } + block t_vb6z: TextBlock { + content: @md ### Date Filter;; + } + block f_zwa4: FilterBlock { + label: 'Date' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(order_master.order_created_at) + } + default { + operator: 'matches' + value: '$H_NIL$' + } + settings { + drillthrough: Drillthrough { + enabled: true + sources: [ + AutoDrillthroughSource { + } + ] + } + } + } + block v_3mef: VizBlock { + label: 'Chart 3' + viz: CombinationChart { + dataset: ecom_dataset_vux + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.status) + format { + type: 'text' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + label: 'Number Order' + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + series { + field: VizFieldFull { + label: 'Number User' + ref: r(order_master.user_id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_059z: VizBlock { + label: 'Table 2' + viz: PivotTable { + dataset: ecom_dataset_vux + theme { + } + rows: [ + VizFieldFull { + ref: r(order_master.status) + format { + type: 'text' + } + } + ] + columns: [ + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + ] + values: [ + VizFieldFull { + label: 'Number Order' + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Number User' + ref: r(order_master.user_id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_total: true + show_column_total: true + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_tusm: VizBlock { + label: 'GMV - Gross Merchandise Value by Country Name' + viz: BarChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_countries.name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_j83d: VizBlock { + label: 'Count of Id by Latitude, Longitude, and Neighbourhood' + viz: BubbleChart { + dataset: demo_ecommerce + x_col: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + y_col: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + z_col: VizFieldFull { + ref: r(order_master.aov) + format { + type: 'number' + pattern: 'inherited' + } + } + group_col: VizFieldFull { + ref: r(map_categories.parent_category) + format { + type: 'text' + } + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_nyr1: VizBlock { + label: 'GMV - Gross Merchandise Value by Continent Name' + viz: PieChart { + dataset: demo_ecommerce + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + settings { + display_as_donut: true + show_total: true + row_limit: 5000 + data_label_position: 'outside' + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qj0m: VizBlock { + label: 'Sales by Category ID' + viz: LineChart { + dataset: american_housing_data_chinh_test + x_axis: VizFieldFull { + ref: r(zipcode_data_american_housing_data.beds) + format { + type: 'number' + pattern: 'inherited' + } + } + y_axis { + series { + field: VizFieldFull { + label: 'Sales' + ref: r(zipcode_data_american_housing_data.price) + aggregation: 'sum' + format { + type: 'number' + pattern: '[$$]#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_lpgt: VizBlock { + label: 'AOV - Average Order Value by Category' + viz: PieChart { + dataset: demo_ecommerce + legend: VizFieldFull { + ref: r(map_categories.category) + format { + type: 'text' + } + } + series { + field: VizFieldFull { + ref: r(order_master.aov) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + settings { + row_limit: 5000 + data_label_position: 'none' + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_5zcz: VizBlock { + label: 'GMV - Gross Merchandise Value by Month' + viz: CombinationChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_orders.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'GMV' + settings { + show_data_label_by: 'value' + } + series { + mark_type: 'column' + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + field: VizFieldFull { + label: 'Untitled Reference line' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + analytic: ReferenceLine { + type: 'avg' + } + } + } + } + settings { + show_rows_with_no_data: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_5dpt: VizBlock { + label: 'GMV - Gross Merchandise Value and Total Orders by Month Order Created At' + viz: CombinationChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + mark_type: 'line' + field: r(demo_ecommerce.total_orders) + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_ck6w: VizBlock { + label: 'Table 1' + viz: PivotTable { + dataset: ecom_dataset_vux + theme { + } + rows: [ + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + uname: 'ecommerce_countries_continent_name' + }, + VizFieldFull { + ref: r(ecommerce_users.gender) + format { + type: 'text' + } + uname: 'ecommerce_users_gender' + }, + VizFieldFull { + label: 'Product Category' + ref: r(order_master.delivery_attempts) + format { + type: 'number' + pattern: 'inherited' + } + uname: 'order_master_delivery_attempts' + } + ] + columns: [ + VizFieldFull { + ref: r(order_master.status) + format { + type: 'text' + } + } + ] + values: [ + VizFieldFull { + label: 'Number Order' + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'GMV' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_total: true + show_column_total: true + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + column_styles: [ + ColumnStyle { + key: 'ecommerce_users_gender' + width: 86 + }, + ColumnStyle { + key: 'order_master_delivery_attempts' + width: 116 + }, + ColumnStyle { + key: 'ecommerce_countries_continent_name' + width: 117 + } + ] + } + } + } + block f_countries_continent_name: FilterBlock { + label: 'Countries Continent Name' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(ecommerce_countries.continent_name) + } + default { + operator: 'is' + value: [] + } + } + block v_8fpj: VizBlock { + label: 'Revenue by Sale reps' + viz: BarChart { + dataset: vyhuynh_ecommerce_dataset + theme { + } + x_axis: VizFieldFull { + ref: r(vy_sales_revenue_demo_csv.sales_rep) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(vy_sales_revenue_demo_csv.revenue_usd) + aggregation: 'sum' + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: ConstantVizField { + label: 'KPI goal' + value: 60000 + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_jbl8: VizBlock { + label: 'Total Order Value by Month Created Date' + viz: LineChart { + dataset: demo_ecommerce_metrics + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_orders.created_date) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_ecommerce_metrics.total_order_value) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_350o: VizBlock { + label: 'GMV by Continent (2024) - Compare vs LY' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f0aed54 { + label: '% Delta LY - GMV ' + formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_a9389ef { + label: ' LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_57371a1 { + label: 'Delta LY - GMV' + formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: 'metric_a9389ef' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#7C9EE5' + } + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#255DD4' + } + } + } + tooltips: [ + VizTooltip { + field: VizFieldFull { + ref: 'metric_f0aed54' + format { + type: 'number' + pattern: '#,###%' + } + } + }, + VizTooltip { + field: VizFieldFull { + ref: 'metric_57371a1' + format { + type: 'number' + pattern: '#,###' + } + } + } + ] + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qnug: VizBlock { + label: 'GMV by Continent (2024) - Show trend over time' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_tq6d: VizBlock { + label: 'GMV by Continent (2024) - Show % change copy' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f0aed54 { + label: '% Delta LY - GMV ' + formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_a9389ef { + label: ' LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: 'metric_f0aed54' + format { + type: 'number' + pattern: '#,###%' + } + } + settings { + color: '#18A59E' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_wwiv: VizBlock { + label: 'GMV by Continent over time - With Trendline' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Gmv' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + point { + value: 'Asia' + line_style: 'dashed' + } + point { + value: 'Europe' + line_style: 'dashed' + } + point { + value: 'Oceania' + line_style: 'dashed' + } + point { + value: 'North America' + line_style: 'dashed' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_6o9d: VizBlock { + label: 'GMV by Continent over time - Line chart' + description: 'This is description of the block' + viz: LineChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t_hcv3: TextBlock { + content: @md ## Time series analysis;; + } + block t_ww35: TextBlock { + content: @md ## Categorical analysis;; + } + block t_vh1h: TextBlock { + content: @md ## Distribution analysis;; + } + block v_ji80: VizBlock { + label: 'Total order distributed by Price' + viz: ScatterChart { + dataset: demo_ecommerce + theme { + } + x_col: VizFieldFull { + ref: r(order_master.price) + format { + type: 'number' + pattern: 'inherited' + } + } + y_col: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + block v_7vcf: VizBlock { + label: 'Total GMV (2024)' + description: 'This is description of the block' + viz: MetricKpi { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2025' + } + theme { + } + value: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + compare_value: VizFieldFull { + ref: 'metric_f688c32' + format { + type: 'number' + pattern: '#,###' + } + } + settings { + display_mode: 'compare_by_number' + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + } + block v_n0qr: VizBlock { + label: 'Total order distributed by Price- With trend line' + viz: LineChart { + dataset: demo_ecommerce + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.price) + format { + type: 'number' + pattern: 'inherited' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Total Orders' + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_jpzg: VizBlock { + label: 'GMV over time' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_0sbb: VizBlock { + label: 'GMV over time - with trendline' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Gmv' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_58pi: VizBlock { + label: 'GMV over time - vs LY' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_14d21cf { + label: 'LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + ref: 'metric_14d21cf' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_vk4x: VizBlock { + label: 'GMV by Country (2024)' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_ufmq: VizBlock { + label: 'Total GMV (2024) copy' + description: 'This is description of the block' + viz: MetricKpi { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2025' + } + theme { + + } + value: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + compare_value: VizFieldFull { + label: 'KPI Goal' + ref: r(order_master.revenue) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + display_mode: 'progress' + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + } + interactions: [ + FilterInteraction { + from: 'v2' + to: [ + CustomMapping { + block: [ + 'v3', + 'v4', + 'v_nehb', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v3' + to: [ + CustomMapping { + block: [ + 'v2', + 'v4', + 'v_nehb', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v4' + to: [ + CustomMapping { + block: [ + 'v2', + 'v3', + 'v_nehb', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v5' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f1' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq', + 'f2' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f2' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_lpgt', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq', + 'f1', + 'f_zwa4' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v8' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_711g' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ztqi' + to: [ + CustomMapping { + block: [ + 'v_hk4u', + 'v_wsww' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_hk4u' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_wsww', + 'v_j83d', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_wsww' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_j83d', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_nehb' + to: [ + CustomMapping { + block: [ + 'v2', + 'v3', + 'v4', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_856v' + to: [ + CustomMapping { + block: [ + 'v_ztqi', + 'v_j83d', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_qctn' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_9rhg' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_zwa4' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_lpgt', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + }, + CustomMapping { + block: [ + 'v2', + 'v3', + 'v4', + 'v_nehb' + ] + field: ref('vyht_ecommerce_orders_1', 'created_at') + }, + CustomMapping { + block: 'v_cii9' + field: ref('bq_fct_order_items', 'created_at') + } + ] + }, + FilterInteraction { + from: 'v_tusm' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_9rhg', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_j83d' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_nyr1' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lpgt' + to: [ + CustomMapping { + block: [ + 'v8', + 'v_711g', + 'v_5zcz' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_5zcz' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_5dpt' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_8fpj' + to: [ + CustomMapping { + block: [ + 'v2', + 'v3', + 'v4', + 'v_nehb' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_350o' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_qnug' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_tq6d' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_wwiv' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6o9d' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ji80' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7vcf' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_n0qr' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jpzg' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_0sbb' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_58pi' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_vk4x' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ufmq' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_countries_continent_name' + to: [ + CustomMapping { + block: [ + 'v_059z', + 'v_3mef', + 'v_ck6w' + ] + field: ref('ecommerce_countries', 'continent_name') + } + ] + } + ] + settings { + timezone: 'Etc/UTC' + cache_duration: 1440 + } +} \ No newline at end of file From 46c0e7222ad2d6eb2198153ddf193fc17e39ee97 Mon Sep 17 00:00:00 2001 From: Khanh Tran Quoc Date: Thu, 12 Mar 2026 03:58:44 +0000 Subject: [PATCH 102/168] Modify: team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 6726 ++++++++--------- 1 file changed, 3363 insertions(+), 3363 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 4a898fa..a1b1f1d 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -1,3371 +1,3371 @@ Dashboard vy_huynh_abernathy { - title: 'Vy Huynh Abernathy' - description: @md Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et massa vehicula, lobortis tortor bibendum, molestie velit. Morbi iaculis augue et pulvinar tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin lacus arcu, aliquam at elit at, porta suscipit libero. Integer euismod, urna vitae rhoncus tristique, tortor odio condimentum lacus, sit amet accumsan sem eros a sapien. Quisque commodo hendrerit dui, et fermentum nibh consectetur id. Maecenas convallis fringilla cursus. Fusce urna justo, lacinia a ipsum eu, lacinia vehicula dui. Vestibulum sagittis quam est, a posuere lorem suscipit sit amet. +// title: 'Vy Huynh Abernathy' +// description: @md Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et massa vehicula, lobortis tortor bibendum, molestie velit. Morbi iaculis augue et pulvinar tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin lacus arcu, aliquam at elit at, porta suscipit libero. Integer euismod, urna vitae rhoncus tristique, tortor odio condimentum lacus, sit amet accumsan sem eros a sapien. Quisque commodo hendrerit dui, et fermentum nibh consectetur id. Maecenas convallis fringilla cursus. Fusce urna justo, lacinia a ipsum eu, lacinia vehicula dui. Vestibulum sagittis quam est, a posuere lorem suscipit sit amet. -Vestibulum eu egestas odio. Maecenas sed dui ac turpis feugiat blandit et et mauris. Fusce felis ex, dignissim vel ante vitae, mattis facilisis arcu. Integer congue lorem sit amet libero sodales, a condimentum tellus commodo. Mauris eu nisl neque. Nam sagittis, augue quis eleifend euismod, lorem dui vulputate mi, a finibus sapien sapien at enim. Pellentesque accumsan orci pretium tincidunt sodales. Fusce volutpat rhoncus tellus, vel varius est imperdiet sit amet. Praesent ut urna sed turpis semper iaculis. Nam fringilla enim mi, nec tincidunt sem facilisis vel. Suspendisse aliquet mi eget mauris aliquet, eget vulputate risus laoreet. Pellentesque posuere sollicitudin elementum. +// Vestibulum eu egestas odio. Maecenas sed dui ac turpis feugiat blandit et et mauris. Fusce felis ex, dignissim vel ante vitae, mattis facilisis arcu. Integer congue lorem sit amet libero sodales, a condimentum tellus commodo. Mauris eu nisl neque. Nam sagittis, augue quis eleifend euismod, lorem dui vulputate mi, a finibus sapien sapien at enim. Pellentesque accumsan orci pretium tincidunt sodales. Fusce volutpat rhoncus tellus, vel varius est imperdiet sit amet. Praesent ut urna sed turpis semper iaculis. Nam fringilla enim mi, nec tincidunt sem facilisis vel. Suspendisse aliquet mi eget mauris aliquet, eget vulputate risus laoreet. Pellentesque posuere sollicitudin elementum. -Curabitur sit amet elementum nulla, id blandit mi. Vivamus ipsum dui, malesuada ut ultrices in, venenatis vitae nisl. Morbi blandit, sem et ultrices scelerisque, felis metus dapibus ante, non commodo erat erat at sapien. Aliquam lobortis risus eget finibus vehicula. Pellentesque auctor mi nec nunc blandit, nec dignissim eros gravida. Praesent facilisis libero convallis magna sollicitudin, sit amet ultrices felis suscipit. Quisque id sagittis leo, aliquam mattis lectus. +// Curabitur sit amet elementum nulla, id blandit mi. Vivamus ipsum dui, malesuada ut ultrices in, venenatis vitae nisl. Morbi blandit, sem et ultrices scelerisque, felis metus dapibus ante, non commodo erat erat at sapien. Aliquam lobortis risus eget finibus vehicula. Pellentesque auctor mi nec nunc blandit, nec dignissim eros gravida. Praesent facilisis libero convallis magna sollicitudin, sit amet ultrices felis suscipit. Quisque id sagittis leo, aliquam mattis lectus. -Integer sodales et turpis tristique pulvinar. Quisque viverra magna a nibh sodales, a vehicula leo bibendum. Fusce suscipit diam id nulla blandit, non interdum elit pulvinar. Maecenas ante enim, fringilla at tortor id, fermentum mattis ligula. Donec diam nulla, mollis non sagittis a, tincidunt at dui. Praesent quis magna in magna aliquam dignissim. Cras ultricies scelerisque nisl sit amet consectetur. Quisque vitae semper elit, id tincidunt ante. +// Integer sodales et turpis tristique pulvinar. Quisque viverra magna a nibh sodales, a vehicula leo bibendum. Fusce suscipit diam id nulla blandit, non interdum elit pulvinar. Maecenas ante enim, fringilla at tortor id, fermentum mattis ligula. Donec diam nulla, mollis non sagittis a, tincidunt at dui. Praesent quis magna in magna aliquam dignissim. Cras ultricies scelerisque nisl sit amet consectetur. Quisque vitae semper elit, id tincidunt ante. -Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut ante ex, vulputate at congue sit amet, sagittis nec risus. Donec lacinia aliquet nisi, tincidunt elementum ligula vehicula ut. Aliquam commodo id mauris eu vehicula. Nullam est nisl, tincidunt sed gravida vel, varius quis ante. Nulla facilisi. Proin ultricies dignissim eros, id dapibus lacus pharetra sed. +// Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut ante ex, vulputate at congue sit amet, sagittis nec risus. Donec lacinia aliquet nisi, tincidunt elementum ligula vehicula ut. Aliquam commodo id mauris eu vehicula. Nullam est nisl, tincidunt sed gravida vel, varius quis ante. Nulla facilisi. Proin ultricies dignissim eros, id dapibus lacus pharetra sed. -;; - view: TabLayout { - label: 'View 1' - tab tab2: CanvasLayout { - label: 'Revenue Overview' - width: 1220 - height: 4060 - grid_size: 20 - block v2 { - position: pos(920, 220, 260, 140) - layer: 2 - } - block v3 { - position: pos(20, 1240, 1160, 460) - layer: 3 - } - block v4 { - position: pos(920, 380, 260, 140) - layer: 2 - } - block t3 { - position: pos(20, 20, 380, 160) - layer: 4 - } - block t4 { - position: pos(40, 40, 60, 40) - layer: 5 - } - block t5 { - position: pos(80, 40, 300, 40) - layer: 6 - } - block f1 { - position: pos(80, 80, 280, 60) - layer: 7 - } - block t6 { - position: pos(400, 20, 380, 160) - layer: 4 - } - block t7 { - position: pos(420, 40, 60, 40) - layer: 5 - } - block t8 { - position: pos(460, 40, 300, 60) - layer: 8 - } - block f2 { - position: pos(460, 80, 280, 60) - layer: 7 - } - block t9 { - position: pos(20, 180, 1160, 20) - layer: 9 - } - block v8 { - position: pos(20, 640, 1160, 580) - layer: 1 - } - block v_711g { - position: pos(20, 220, 640, 400) - layer: 1 - } - block v_nehb { - position: pos(20, 2320, 1160, 460) - layer: 1 - } - block v_cii9 { - position: pos(20, 2800, 1160, 400) - layer: 10 - } - block t_4ttu { - position: pos(800, 20, 380, 160) - layer: 1 - } - block t_5y3l { - position: pos(820, 40, 60, 40) - layer: 2 - } - block t_vb6z { - position: pos(860, 40, 300, 60) - layer: 3 - } - block f_zwa4 { - position: pos(860, 80, 280, 60) - layer: 4 - } - block v_qj0m { - position: pos(20, 3220, 1160, 400) - layer: 11 - } - block v_lpgt { - position: pos(20, 3640, 580, 400) - layer: 12 - } - block v_5zcz { - position: pos(20, 1720, 1160, 580) - layer: 1 - } - block v_jbl8 { - position: pos(620, 3640, 560, 400) - layer: 3 - } - mobile { - mode: 'auto' - } - default_zoom: 1 - auto_expand_vertically: true - } - tab tab_5auh: CanvasLayout { - label: 'Raw Data Table' - height: 1480 - grid_size: 20 - auto_expand_vertically: true - block v_ztqi { - position: pos(20, 20, 940, 420) - layer: 1 - } - block v_856v { - position: pos(20, 460, 940, 420) - layer: 1 - } - mobile { - mode: 'auto' - } - width: 1500 - default_zoom: 1 - } - tab tab3: CanvasLayout { - label: 'Regional Analysis' - height: 9440 - grid_size: 20 - block v5 { - position: pos(20, 360, 540, 420) - layer: 1 - } - block t1 { - position: pos(20, 20, 60, 60) - layer: 2 - } - block t2 { - position: pos(80, 20, 400, 60) - layer: 3 - } - block v_qctn { - position: pos(20, 5660, 1160, 580) - layer: 1 - } - block v_9rhg { - position: pos(20, 6260, 1160, 580) - layer: 1 - } - block v_tusm { - position: pos(20, 7380, 1160, 500) - layer: 1 - } - block v_j83d { - position: pos(20, 7900, 1160, 480) - layer: 1 - } - block v_nyr1 { - position: pos(20, 8400, 1160, 500) - layer: 1 - } - block v_5dpt { - position: pos(20, 8920, 1160, 500) - layer: 1 - } - block v_8fpj { - position: pos(20, 5140, 1160, 500) - layer: 4 - } - block v_350o { - position: pos(20, 800, 540, 400) - layer: 1 - } - block v_qnug { - position: pos(20, 1220, 1160, 400) - layer: 1 - } - block v_tq6d { - position: pos(580, 800, 600, 400) - layer: 1 - } - block t_hcv3 { - position: pos(20, 1660, 320, 60) - layer: 1 - } - block t_ww35 { - position: pos(20, 300, 320, 60) - layer: 1 - } - block v_6o9d { - position: pos(20, 3580, 1160, 440) - layer: 1 - } - block v_wwiv { - position: pos(20, 3120, 1160, 440) - layer: 1 - } - block t_vh1h { - position: pos(20, 4080, 320, 60) - layer: 1 - } - block v_7vcf { - position: pos(20, 100, 380, 180) - layer: 1 - } - block v_ji80 { - position: pos(20, 4140, 1160, 480) - layer: 1 - } - block v_n0qr { - position: pos(20, 4640, 1160, 480) - layer: 1 - } - block v_0sbb { - position: pos(20, 2660, 1160, 440) - layer: 1 - } - block v_58pi { - position: pos(20, 2200, 1160, 440) - layer: 1 - } - block v_jpzg { - position: pos(20, 1740, 1160, 440) - layer: 1 - } - block v_vk4x { - position: pos(580, 360, 540, 420) - layer: 1 - } - block v_ufmq { - position: pos(420, 100, 380, 180) - layer: 1 - } - mobile { - mode: 'auto' - } - auto_expand_vertically: true - } - tab tab_4i2l: CanvasLayout { - label: 'User Analysis' - width: 1500 - height: 2020 - grid_size: 20 - auto_expand_vertically: true - mobile { - mode: 'auto' - } - block v_3mef { - position: pos(20, 860, 1240, 280) - layer: 1 - } - block v_059z { - position: pos(20, 600, 1240, 240) - layer: 1 - } - block v_ck6w { - position: pos(20, 120, 1460, 460) - layer: 2 - } - block f_countries_continent_name { - position: pos(20, 20, 300, 80) - layer: 2 - } - auto_expand_horizontally: true - } - } - theme: H.themes.vanilla - block v2: VizBlock { - label: 'This month Revenue' - viz: MetricKpi { - dataset: vyhuynh_ecommerce_dataset - calculation monthly_revenue { - label: 'Monthly Revenue' - formula: @aql vyht_ecommerce_order_items - | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(vyht_ecommerce_orders_1.created_at) - operator: 'matches' - value: 'July 2023' - } - value: VizFieldFull { - label: 'Total Revenue This Month' - ref: 'total_revenue' - format { - type: 'number' - pattern: '[$$]#,###' - } - } - compare_value: VizPopSettings { - field: r(vyht_ecommerce_orders_1.created_at) - duration: 1 - granularity: 'month' - } - settings { - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - settings { - hide_label: true - } - } - block v3: VizBlock { - label: 'Total Revenue and Number of Order by Month' - viz: CombinationChart { - dataset: vyhuynh_ecommerce_dataset - filter { - field: r(vyht_ecommerce_orders_1.created_at) - operator: 'matches' - value: '2024' - } - x_axis: VizFieldFull { - label: 'Order Month' - ref: r(vyht_ecommerce_orders_1.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - label: 'Total Revenue' - settings { - group_values_into: 10 - show_data_label_by: 'value' - } - series { - mark_type: 'column' - field: VizFieldFull { - label: 'Total Revenue' - ref: r(vyhuynh_ecommerce_dataset.total_revenue) - format { - type: 'number' - pattern: '[$$]#,###' - } - } - settings { - color: '#255DD4' - } - } - } - y_axis { - label: 'Number of Order' - settings { - alignment: 'right' - group_values_into: 10 - } - series { - mark_type: 'line' - field: VizFieldFull { - ref: r(vyht_ecommerce_orders_1.id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color: '#18A59E' - line_style: 'dashed' - } - } - } - settings { - row_limit: 100 - x_axis_label: 'Order Month' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v4: VizBlock { - label: 'This month Total Order' - viz: MetricKpi { - dataset: vyhuynh_ecommerce_dataset - calculation monthly_revenue { - label: 'Monthly Revenue' - formula: @aql vyht_ecommerce_order_items - | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(vyht_ecommerce_orders_1.created_at) - operator: 'matches' - value: 'July 2023' - } - value: VizFieldFull { - label: 'Total Order This Month' - ref: r(vyht_ecommerce_orders_1.id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - compare_value: VizPopSettings { - field: r(vyht_ecommerce_orders_1.created_at) - duration: 1 - granularity: 'month' - } - settings { - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - settings { - hide_label: true - } - } - block v5: VizBlock { - label: 'GMV by Continent (2024)' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t1: TextBlock { - content: @md
- - - - - -
;; - } - block t2: TextBlock { - content: @md # Regional Analysis;; - } - block t3: TextBlock { - content: @md - -;; - } - block t4: TextBlock { - content: @md - - -;; - } - block t5: TextBlock { - content: @md ### Filter by Country;; - } - block f1: FilterBlock { - label: 'Country Name' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(ecommerce_countries.name) - } - default { - operator: 'is' - value: [] - } - settings { - drillthrough: Drillthrough { - enabled: true - sources: [ - AutoDrillthroughSource { - } - ] - } - } - } - block t6: TextBlock { - content: @md - -;; - } - block t7: TextBlock { - content: @md - - -;; - } - block t8: TextBlock { - content: @md ### Filter by City;; - } - block f2: FilterBlock { - label: 'City Name' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(ecommerce_cities.name) - } - default { - operator: 'is' - value: [] - } - settings { - drillthrough: Drillthrough { - enabled: true - sources: [ - AutoDrillthroughSource { - } - ] - } - } - } - block t9: H.blocks.line(2, '#8F99A3') - block v8: VizBlock { - label: 'GMV - Gross Merchandise Value by Month' - viz: AreaChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_orders.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - label: 'GMV' - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: VizFieldFull { - label: 'Untitled Trend line' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - show_rows_with_no_data: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_711g: VizBlock { - label: 'Number of Order by Country Name and City Name' - viz: LineChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(order_master.order_created_month) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - label: 'Total Order' - settings { - show_data_label_by: 'value' - stack_series_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_label: 'Country' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_ztqi: VizBlock { - label: 'Table 1' - viz: DataTable { - dataset: demo_ecommerce - theme { - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - uname: 'order_master_order_created_month_1' - }, - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - uname: 'ecommerce_countries_continent_name' - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - }, - VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_order_id' - }, - VizFieldFull { - ref: r(order_master.price) - aggregation: 'sum' - format { - type: 'number' - pattern: '[$$]#,###' - } - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - column_styles: [ - ColumnStyle { - key: 'count_order_id' - width: 89 - }, - ColumnStyle { - key: 'count_distinct_user_id_1' - width: 100 - }, - ColumnStyle { - key: 'ecommerce_countries_continent_name' - width: 162 - }, - ColumnStyle { - key: 'order_master_order_created_month_1' - width: 215 - } - ] - } - } - } - block v_hk4u: VizBlock { - label: 'Order Created Month, City Name, and CountD of User Id' - viz: DataTable { - dataset: demo_ecommerce - filter { - field: r(order_master.order_created_month) - operator: 'matches' - value: 'may 2023' - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - }, - VizFieldFull { - ref: r(ecommerce_cities.name) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_wsww: VizBlock { - label: 'Order Created Month, City Name, and CountD of User Id' - viz: DataTable { - dataset: demo_ecommerce - filter { - field: r(order_master.order_created_month) - operator: 'matches' - value: 'may 2023' - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - }, - VizFieldFull { - ref: r(ecommerce_cities.name) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'order_master_order_created_month_1' - direction: 'asc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_nehb: VizBlock { - label: 'Total Revenue and Number of Order by Month' - viz: DataTable { - dataset: vyhuynh_ecommerce_dataset - fields: [ - VizFieldFull { - label: 'Order Month' - ref: r(vyht_ecommerce_orders_1.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - }, - VizFieldFull { - label: 'Total Revenue' - ref: r(vyhuynh_ecommerce_dataset.total_revenue) - format { - type: 'number' - pattern: '[$$]#,###' - } - }, - VizFieldFull { - ref: r(vyht_ecommerce_orders_1.id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - ] - settings { - show_row_number: true - row_limit: 100 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_856v: VizBlock { - label: 'Table 2' - viz: DataTable { - dataset: demo_ecommerce - theme { - } - fields: [ - VizFieldFull { - ref: r(order_master.order_created_month) - format { - type: 'date' - } - uname: 'order_master_order_created_month_1' - }, - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - uname: 'count_distinct_user_id_1' - } - ] - settings { - show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_cii9: VizBlock { - label: 'Count Users, Sum Price, and AOV - Average Order Value by Name' - viz: CombinationChart { - dataset: demo_bigquery_ecommerce - calculation sum_price { - label: 'Sum Price' - formula: @aql sum(bq_dim_products.price);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(bq_fct_order_items.created_date) - operator: 'matches' - value: '2023' - } - x_axis: VizFieldFull { - ref: r(bq_dim_product_countries.name) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_bigquery_ecommerce.count_users) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - field: VizFieldFull { - ref: 'sum_price' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_bigquery_ecommerce.aov) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_qctn: VizBlock { - label: 'Number of Order by Country Name and City Name' - viz: LineChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - label: 'Total Order' - settings { - show_data_label_by: 'value' - stack_series_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: VizFieldFull { - ref: r(demo_ecommerce, order_master.aov_by_product) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_label: 'Country' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_9rhg: VizBlock { - label: 'Number of Order by Country Name and City Name' - viz: ColumnChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_cities.name) - format { - type: 'text' - } - } - y_axis { - label: 'Total Order' - settings { - show_data_label_by: 'value' - stack_series_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - sort { - field_index: 0 - direction: 'desc' - type: 'xaxis' - } - x_axis_label: 'Country' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t_4ttu: TextBlock { - content: @md - -;; - } - block t_5y3l: TextBlock { - content: @md - - -;; - } - block t_vb6z: TextBlock { - content: @md ### Date Filter;; - } - block f_zwa4: FilterBlock { - label: 'Date' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(order_master.order_created_at) - } - default { - operator: 'matches' - value: '$H_NIL$' - } - settings { - drillthrough: Drillthrough { - enabled: true - sources: [ - AutoDrillthroughSource { - } - ] - } - } - } - block v_3mef: VizBlock { - label: 'Chart 3' - viz: CombinationChart { - dataset: ecom_dataset_vux - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.status) - format { - type: 'text' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - label: 'Number Order' - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - series { - field: VizFieldFull { - label: 'Number User' - ref: r(order_master.user_id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_059z: VizBlock { - label: 'Table 2' - viz: PivotTable { - dataset: ecom_dataset_vux - theme { - } - rows: [ - VizFieldFull { - ref: r(order_master.status) - format { - type: 'text' - } - } - ] - columns: [ - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - ] - values: [ - VizFieldFull { - label: 'Number Order' - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Number User' - ref: r(order_master.user_id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - ] - settings { - show_row_total: true - show_column_total: true - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_tusm: VizBlock { - label: 'GMV - Gross Merchandise Value by Country Name' - viz: BarChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_countries.name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_j83d: VizBlock { - label: 'Count of Id by Latitude, Longitude, and Neighbourhood' - viz: BubbleChart { - dataset: demo_ecommerce - x_col: VizFieldFull { - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - } - y_col: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - z_col: VizFieldFull { - ref: r(order_master.aov) - format { - type: 'number' - pattern: 'inherited' - } - } - group_col: VizFieldFull { - ref: r(map_categories.parent_category) - format { - type: 'text' - } - } - settings { - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_nyr1: VizBlock { - label: 'GMV - Gross Merchandise Value by Continent Name' - viz: PieChart { - dataset: demo_ecommerce - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - settings { - display_as_donut: true - show_total: true - row_limit: 5000 - data_label_position: 'outside' - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_qj0m: VizBlock { - label: 'Sales by Category ID' - viz: LineChart { - dataset: american_housing_data_chinh_test - x_axis: VizFieldFull { - ref: r(zipcode_data_american_housing_data.beds) - format { - type: 'number' - pattern: 'inherited' - } - } - y_axis { - series { - field: VizFieldFull { - label: 'Sales' - ref: r(zipcode_data_american_housing_data.price) - aggregation: 'sum' - format { - type: 'number' - pattern: '[$$]#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_lpgt: VizBlock { - label: 'AOV - Average Order Value by Category' - viz: PieChart { - dataset: demo_ecommerce - legend: VizFieldFull { - ref: r(map_categories.category) - format { - type: 'text' - } - } - series { - field: VizFieldFull { - ref: r(order_master.aov) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - settings { - row_limit: 5000 - data_label_position: 'none' - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_5zcz: VizBlock { - label: 'GMV - Gross Merchandise Value by Month' - viz: CombinationChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(ecommerce_orders.created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - label: 'GMV' - settings { - show_data_label_by: 'value' - } - series { - mark_type: 'column' - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - field: VizFieldFull { - label: 'Untitled Reference line' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - analytic: ReferenceLine { - type: 'avg' - } - } - } - } - settings { - show_rows_with_no_data: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_5dpt: VizBlock { - label: 'GMV - Gross Merchandise Value and Total Orders by Month Order Created At' - viz: CombinationChart { - dataset: demo_ecommerce - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - mark_type: 'line' - field: r(demo_ecommerce.total_orders) - settings { - line_style: 'dashed' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_ck6w: VizBlock { - label: 'Table 1' - viz: PivotTable { - dataset: ecom_dataset_vux - theme { - } - rows: [ - VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - uname: 'ecommerce_countries_continent_name' - }, - VizFieldFull { - ref: r(ecommerce_users.gender) - format { - type: 'text' - } - uname: 'ecommerce_users_gender' - }, - VizFieldFull { - label: 'Product Category' - ref: r(order_master.delivery_attempts) - format { - type: 'number' - pattern: 'inherited' - } - uname: 'order_master_delivery_attempts' - } - ] - columns: [ - VizFieldFull { - ref: r(order_master.status) - format { - type: 'text' - } - } - ] - values: [ - VizFieldFull { - label: 'Number Order' - ref: r(order_master.order_id) - aggregation: 'count distinct' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'GMV' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - ] - settings { - show_row_total: true - show_column_total: true - row_limit: 5000 - aggregate_awareness { - enabled: true - debug_comments: true - } - column_styles: [ - ColumnStyle { - key: 'ecommerce_users_gender' - width: 86 - }, - ColumnStyle { - key: 'order_master_delivery_attempts' - width: 116 - }, - ColumnStyle { - key: 'ecommerce_countries_continent_name' - width: 117 - } - ] - } - } - } - block f_countries_continent_name: FilterBlock { - label: 'Countries Continent Name' - type: 'field' - source: FieldFilterSource { - dataset: demo_ecommerce - field: r(ecommerce_countries.continent_name) - } - default { - operator: 'is' - value: [] - } - } - block v_8fpj: VizBlock { - label: 'Revenue by Sale reps' - viz: BarChart { - dataset: vyhuynh_ecommerce_dataset - theme { - } - x_axis: VizFieldFull { - ref: r(vy_sales_revenue_demo_csv.sales_rep) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(vy_sales_revenue_demo_csv.revenue_usd) - aggregation: 'sum' - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: ConstantVizField { - label: 'KPI goal' - value: 60000 - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_jbl8: VizBlock { - label: 'Total Order Value by Month Created Date' - viz: LineChart { - dataset: demo_ecommerce_metrics - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_orders.created_date) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_ecommerce_metrics.total_order_value) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color_palette: 0 - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_350o: VizBlock { - label: 'GMV by Continent (2024) - Compare vs LY' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f0aed54 { - label: '% Delta LY - GMV ' - formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_a9389ef { - label: ' LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_57371a1 { - label: 'Delta LY - GMV' - formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: 'metric_a9389ef' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color: '#7C9EE5' - } - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color: '#255DD4' - } - } - } - tooltips: [ - VizTooltip { - field: VizFieldFull { - ref: 'metric_f0aed54' - format { - type: 'number' - pattern: '#,###%' - } - } - }, - VizTooltip { - field: VizFieldFull { - ref: 'metric_57371a1' - format { - type: 'number' - pattern: '#,###' - } - } - } - ] - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_qnug: VizBlock { - label: 'GMV by Continent (2024) - Show trend over time' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_tq6d: VizBlock { - label: 'GMV by Continent (2024) - Show % change copy' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f0aed54 { - label: '% Delta LY - GMV ' - formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_a9389ef { - label: ' LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: 'metric_f0aed54' - format { - type: 'number' - pattern: '#,###%' - } - } - settings { - color: '#18A59E' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_wwiv: VizBlock { - label: 'GMV by Continent over time - With Trendline' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - series { - field: VizFieldFull { - label: 'Trend line of Gmv' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - point { - value: 'Asia' - line_style: 'dashed' - } - point { - value: 'Europe' - line_style: 'dashed' - } - point { - value: 'Oceania' - line_style: 'dashed' - } - point { - value: 'North America' - line_style: 'dashed' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_6o9d: VizBlock { - label: 'GMV by Continent over time - Line chart' - description: 'This is description of the block' - viz: LineChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(ecommerce_countries.continent_name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t_hcv3: TextBlock { - content: @md ## Time series analysis;; - } - block t_ww35: TextBlock { - content: @md ## Categorical analysis;; - } - block t_vh1h: TextBlock { - content: @md ## Distribution analysis;; - } - block v_ji80: VizBlock { - label: 'Total order distributed by Price' - viz: ScatterChart { - dataset: demo_ecommerce - theme { - } - x_col: VizFieldFull { - ref: r(order_master.price) - format { - type: 'number' - pattern: 'inherited' - } - } - y_col: VizFieldFull { - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - block v_7vcf: VizBlock { - label: 'Total GMV (2024)' - description: 'This is description of the block' - viz: MetricKpi { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f688c32 { - label: '% Change - LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2025' - } - theme { - } - value: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - compare_value: VizFieldFull { - ref: 'metric_f688c32' - format { - type: 'number' - pattern: '#,###' - } - } - settings { - display_mode: 'compare_by_number' - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - } - block v_n0qr: VizBlock { - label: 'Total order distributed by Price- With trend line' - viz: LineChart { - dataset: demo_ecommerce - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.price) - format { - type: 'number' - pattern: 'inherited' - } - } - y_axis { - series { - field: VizFieldFull { - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - } - } - series { - field: VizFieldFull { - label: 'Trend line of Total Orders' - ref: r(demo_ecommerce.total_orders) - format { - type: 'number' - pattern: 'inherited' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_jpzg: VizBlock { - label: 'GMV over time' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_0sbb: VizBlock { - label: 'GMV over time - with trendline' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - series { - field: VizFieldFull { - label: 'Trend line of Gmv' - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - analytic: RegressionLine { - type: 'linear' - } - } - settings { - line_style: 'dashed' - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_58pi: VizBlock { - label: 'GMV over time - vs LY' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_14d21cf { - label: 'LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - theme { - } - x_axis: VizFieldFull { - ref: r(order_master.order_created_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - series { - field: VizFieldFull { - ref: 'metric_14d21cf' - format { - type: 'number' - pattern: 'inherited' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_vk4x: VizBlock { - label: 'GMV by Country (2024)' - description: 'This is description of the block' - viz: ColumnChart { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2024' - } - theme { - } - x_axis: VizFieldFull { - ref: r(ecommerce_countries.name) - format { - type: 'text' - } - } - y_axis { - settings { - show_data_label_by: 'value' - } - series { - field: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_ufmq: VizBlock { - label: 'Total GMV (2024) copy' - description: 'This is description of the block' - viz: MetricKpi { - dataset: demo_ecommerce - calculation adhoc_dim { - label: 'My adhoc dim' - formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; - calc_type: 'dimension' - data_type: 'text' - model: order_master - } - calculation metric_f688c32 { - label: '% Change - LY - GMV' - formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(order_master.order_created_at) - operator: 'matches' - value: '2025' - } - theme { +// ;; +// view: TabLayout { +// label: 'View 1' +// tab tab2: CanvasLayout { +// label: 'Revenue Overview' +// width: 1220 +// height: 4060 +// grid_size: 20 +// block v2 { +// position: pos(920, 220, 260, 140) +// layer: 2 +// } +// block v3 { +// position: pos(20, 1240, 1160, 460) +// layer: 3 +// } +// block v4 { +// position: pos(920, 380, 260, 140) +// layer: 2 +// } +// block t3 { +// position: pos(20, 20, 380, 160) +// layer: 4 +// } +// block t4 { +// position: pos(40, 40, 60, 40) +// layer: 5 +// } +// block t5 { +// position: pos(80, 40, 300, 40) +// layer: 6 +// } +// block f1 { +// position: pos(80, 80, 280, 60) +// layer: 7 +// } +// block t6 { +// position: pos(400, 20, 380, 160) +// layer: 4 +// } +// block t7 { +// position: pos(420, 40, 60, 40) +// layer: 5 +// } +// block t8 { +// position: pos(460, 40, 300, 60) +// layer: 8 +// } +// block f2 { +// position: pos(460, 80, 280, 60) +// layer: 7 +// } +// block t9 { +// position: pos(20, 180, 1160, 20) +// layer: 9 +// } +// block v8 { +// position: pos(20, 640, 1160, 580) +// layer: 1 +// } +// block v_711g { +// position: pos(20, 220, 640, 400) +// layer: 1 +// } +// block v_nehb { +// position: pos(20, 2320, 1160, 460) +// layer: 1 +// } +// block v_cii9 { +// position: pos(20, 2800, 1160, 400) +// layer: 10 +// } +// block t_4ttu { +// position: pos(800, 20, 380, 160) +// layer: 1 +// } +// block t_5y3l { +// position: pos(820, 40, 60, 40) +// layer: 2 +// } +// block t_vb6z { +// position: pos(860, 40, 300, 60) +// layer: 3 +// } +// block f_zwa4 { +// position: pos(860, 80, 280, 60) +// layer: 4 +// } +// block v_qj0m { +// position: pos(20, 3220, 1160, 400) +// layer: 11 +// } +// block v_lpgt { +// position: pos(20, 3640, 580, 400) +// layer: 12 +// } +// block v_5zcz { +// position: pos(20, 1720, 1160, 580) +// layer: 1 +// } +// block v_jbl8 { +// position: pos(620, 3640, 560, 400) +// layer: 3 +// } +// mobile { +// mode: 'auto' +// } +// default_zoom: 1 +// auto_expand_vertically: true +// } +// tab tab_5auh: CanvasLayout { +// label: 'Raw Data Table' +// height: 1480 +// grid_size: 20 +// auto_expand_vertically: true +// block v_ztqi { +// position: pos(20, 20, 940, 420) +// layer: 1 +// } +// block v_856v { +// position: pos(20, 460, 940, 420) +// layer: 1 +// } +// mobile { +// mode: 'auto' +// } +// width: 1500 +// default_zoom: 1 +// } +// tab tab3: CanvasLayout { +// label: 'Regional Analysis' +// height: 9440 +// grid_size: 20 +// block v5 { +// position: pos(20, 360, 540, 420) +// layer: 1 +// } +// block t1 { +// position: pos(20, 20, 60, 60) +// layer: 2 +// } +// block t2 { +// position: pos(80, 20, 400, 60) +// layer: 3 +// } +// block v_qctn { +// position: pos(20, 5660, 1160, 580) +// layer: 1 +// } +// block v_9rhg { +// position: pos(20, 6260, 1160, 580) +// layer: 1 +// } +// block v_tusm { +// position: pos(20, 7380, 1160, 500) +// layer: 1 +// } +// block v_j83d { +// position: pos(20, 7900, 1160, 480) +// layer: 1 +// } +// block v_nyr1 { +// position: pos(20, 8400, 1160, 500) +// layer: 1 +// } +// block v_5dpt { +// position: pos(20, 8920, 1160, 500) +// layer: 1 +// } +// block v_8fpj { +// position: pos(20, 5140, 1160, 500) +// layer: 4 +// } +// block v_350o { +// position: pos(20, 800, 540, 400) +// layer: 1 +// } +// block v_qnug { +// position: pos(20, 1220, 1160, 400) +// layer: 1 +// } +// block v_tq6d { +// position: pos(580, 800, 600, 400) +// layer: 1 +// } +// block t_hcv3 { +// position: pos(20, 1660, 320, 60) +// layer: 1 +// } +// block t_ww35 { +// position: pos(20, 300, 320, 60) +// layer: 1 +// } +// block v_6o9d { +// position: pos(20, 3580, 1160, 440) +// layer: 1 +// } +// block v_wwiv { +// position: pos(20, 3120, 1160, 440) +// layer: 1 +// } +// block t_vh1h { +// position: pos(20, 4080, 320, 60) +// layer: 1 +// } +// block v_7vcf { +// position: pos(20, 100, 380, 180) +// layer: 1 +// } +// block v_ji80 { +// position: pos(20, 4140, 1160, 480) +// layer: 1 +// } +// block v_n0qr { +// position: pos(20, 4640, 1160, 480) +// layer: 1 +// } +// block v_0sbb { +// position: pos(20, 2660, 1160, 440) +// layer: 1 +// } +// block v_58pi { +// position: pos(20, 2200, 1160, 440) +// layer: 1 +// } +// block v_jpzg { +// position: pos(20, 1740, 1160, 440) +// layer: 1 +// } +// block v_vk4x { +// position: pos(580, 360, 540, 420) +// layer: 1 +// } +// block v_ufmq { +// position: pos(420, 100, 380, 180) +// layer: 1 +// } +// mobile { +// mode: 'auto' +// } +// auto_expand_vertically: true +// } +// tab tab_4i2l: CanvasLayout { +// label: 'User Analysis' +// width: 1500 +// height: 2020 +// grid_size: 20 +// auto_expand_vertically: true +// mobile { +// mode: 'auto' +// } +// block v_3mef { +// position: pos(20, 860, 1240, 280) +// layer: 1 +// } +// block v_059z { +// position: pos(20, 600, 1240, 240) +// layer: 1 +// } +// block v_ck6w { +// position: pos(20, 120, 1460, 460) +// layer: 2 +// } +// block f_countries_continent_name { +// position: pos(20, 20, 300, 80) +// layer: 2 +// } +// auto_expand_horizontally: true +// } +// } +// theme: H.themes.vanilla +// block v2: VizBlock { +// label: 'This month Revenue' +// viz: MetricKpi { +// dataset: vyhuynh_ecommerce_dataset +// calculation monthly_revenue { +// label: 'Monthly Revenue' +// formula: @aql vyht_ecommerce_order_items +// | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(vyht_ecommerce_orders_1.created_at) +// operator: 'matches' +// value: 'July 2023' +// } +// value: VizFieldFull { +// label: 'Total Revenue This Month' +// ref: 'total_revenue' +// format { +// type: 'number' +// pattern: '[$$]#,###' +// } +// } +// compare_value: VizPopSettings { +// field: r(vyht_ecommerce_orders_1.created_at) +// duration: 1 +// granularity: 'month' +// } +// settings { +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// alignment: 'left' +// } +// } +// settings { +// hide_label: true +// } +// } +// block v3: VizBlock { +// label: 'Total Revenue and Number of Order by Month' +// viz: CombinationChart { +// dataset: vyhuynh_ecommerce_dataset +// filter { +// field: r(vyht_ecommerce_orders_1.created_at) +// operator: 'matches' +// value: '2024' +// } +// x_axis: VizFieldFull { +// label: 'Order Month' +// ref: r(vyht_ecommerce_orders_1.created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// label: 'Total Revenue' +// settings { +// group_values_into: 10 +// show_data_label_by: 'value' +// } +// series { +// mark_type: 'column' +// field: VizFieldFull { +// label: 'Total Revenue' +// ref: r(vyhuynh_ecommerce_dataset.total_revenue) +// format { +// type: 'number' +// pattern: '[$$]#,###' +// } +// } +// settings { +// color: '#255DD4' +// } +// } +// } +// y_axis { +// label: 'Number of Order' +// settings { +// alignment: 'right' +// group_values_into: 10 +// } +// series { +// mark_type: 'line' +// field: VizFieldFull { +// ref: r(vyht_ecommerce_orders_1.id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color: '#18A59E' +// line_style: 'dashed' +// } +// } +// } +// settings { +// row_limit: 100 +// x_axis_label: 'Order Month' +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v4: VizBlock { +// label: 'This month Total Order' +// viz: MetricKpi { +// dataset: vyhuynh_ecommerce_dataset +// calculation monthly_revenue { +// label: 'Monthly Revenue' +// formula: @aql vyht_ecommerce_order_items +// | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(vyht_ecommerce_orders_1.created_at) +// operator: 'matches' +// value: 'July 2023' +// } +// value: VizFieldFull { +// label: 'Total Order This Month' +// ref: r(vyht_ecommerce_orders_1.id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// compare_value: VizPopSettings { +// field: r(vyht_ecommerce_orders_1.created_at) +// duration: 1 +// granularity: 'month' +// } +// settings { +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// alignment: 'left' +// } +// } +// settings { +// hide_label: true +// } +// } +// block v5: VizBlock { +// label: 'GMV by Continent (2024)' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block t1: TextBlock { +// content: @md
+// +// +// +// +// +//
;; +// } +// block t2: TextBlock { +// content: @md # Regional Analysis;; +// } +// block t3: TextBlock { +// content: @md +// +// ;; +// } +// block t4: TextBlock { +// content: @md +// +// +// ;; +// } +// block t5: TextBlock { +// content: @md ### Filter by Country;; +// } +// block f1: FilterBlock { +// label: 'Country Name' +// type: 'field' +// source: FieldFilterSource { +// dataset: demo_ecommerce +// field: r(ecommerce_countries.name) +// } +// default { +// operator: 'is' +// value: [] +// } +// settings { +// drillthrough: Drillthrough { +// enabled: true +// sources: [ +// AutoDrillthroughSource { +// } +// ] +// } +// } +// } +// block t6: TextBlock { +// content: @md +// +// ;; +// } +// block t7: TextBlock { +// content: @md +// +// +// ;; +// } +// block t8: TextBlock { +// content: @md ### Filter by City;; +// } +// block f2: FilterBlock { +// label: 'City Name' +// type: 'field' +// source: FieldFilterSource { +// dataset: demo_ecommerce +// field: r(ecommerce_cities.name) +// } +// default { +// operator: 'is' +// value: [] +// } +// settings { +// drillthrough: Drillthrough { +// enabled: true +// sources: [ +// AutoDrillthroughSource { +// } +// ] +// } +// } +// } +// block t9: H.blocks.line(2, '#8F99A3') +// block v8: VizBlock { +// label: 'GMV - Gross Merchandise Value by Month' +// viz: AreaChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(ecommerce_orders.created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// label: 'GMV' +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// series { +// field: VizFieldFull { +// label: 'Untitled Trend line' +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// analytic: RegressionLine { +// type: 'linear' +// } +// } +// settings { +// line_style: 'dashed' +// } +// } +// } +// settings { +// show_rows_with_no_data: true +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_711g: VizBlock { +// label: 'Number of Order by Country Name and City Name' +// viz: LineChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_month) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// label: 'Total Order' +// settings { +// show_data_label_by: 'value' +// stack_series_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.order_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_label: 'Country' +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_ztqi: VizBlock { +// label: 'Table 1' +// viz: DataTable { +// dataset: demo_ecommerce +// theme { +// } +// fields: [ +// VizFieldFull { +// ref: r(order_master.order_created_month) +// format { +// type: 'date' +// } +// uname: 'order_master_order_created_month_1' +// }, +// VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// uname: 'ecommerce_countries_continent_name' +// }, +// VizFieldFull { +// ref: r(order_master.user_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// uname: 'count_distinct_user_id_1' +// }, +// VizFieldFull { +// ref: r(order_master.order_id) +// aggregation: 'count' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// uname: 'count_order_id' +// }, +// VizFieldFull { +// ref: r(order_master.price) +// aggregation: 'sum' +// format { +// type: 'number' +// pattern: '[$$]#,###' +// } +// } +// ] +// settings { +// show_row_number: true +// sorts: [ +// SortSetting { +// key: 'count_distinct_user_id_1' +// direction: 'desc' +// } +// ] +// row_limit: 5000 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// column_styles: [ +// ColumnStyle { +// key: 'count_order_id' +// width: 89 +// }, +// ColumnStyle { +// key: 'count_distinct_user_id_1' +// width: 100 +// }, +// ColumnStyle { +// key: 'ecommerce_countries_continent_name' +// width: 162 +// }, +// ColumnStyle { +// key: 'order_master_order_created_month_1' +// width: 215 +// } +// ] +// } +// } +// } +// block v_hk4u: VizBlock { +// label: 'Order Created Month, City Name, and CountD of User Id' +// viz: DataTable { +// dataset: demo_ecommerce +// filter { +// field: r(order_master.order_created_month) +// operator: 'matches' +// value: 'may 2023' +// } +// fields: [ +// VizFieldFull { +// ref: r(order_master.order_created_month) +// format { +// type: 'date' +// } +// }, +// VizFieldFull { +// ref: r(ecommerce_cities.name) +// format { +// type: 'text' +// } +// }, +// VizFieldFull { +// ref: r(order_master.user_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// uname: 'count_distinct_user_id_1' +// } +// ] +// settings { +// show_row_number: true +// sorts: [ +// SortSetting { +// key: 'count_distinct_user_id_1' +// direction: 'desc' +// } +// ] +// row_limit: 5000 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_wsww: VizBlock { +// label: 'Order Created Month, City Name, and CountD of User Id' +// viz: DataTable { +// dataset: demo_ecommerce +// filter { +// field: r(order_master.order_created_month) +// operator: 'matches' +// value: 'may 2023' +// } +// fields: [ +// VizFieldFull { +// ref: r(order_master.order_created_month) +// format { +// type: 'date' +// } +// }, +// VizFieldFull { +// ref: r(ecommerce_cities.name) +// format { +// type: 'text' +// } +// }, +// VizFieldFull { +// ref: r(order_master.user_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// uname: 'count_distinct_user_id_1' +// } +// ] +// settings { +// show_row_number: true +// sorts: [ +// SortSetting { +// key: 'order_master_order_created_month_1' +// direction: 'asc' +// } +// ] +// row_limit: 5000 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_nehb: VizBlock { +// label: 'Total Revenue and Number of Order by Month' +// viz: DataTable { +// dataset: vyhuynh_ecommerce_dataset +// fields: [ +// VizFieldFull { +// label: 'Order Month' +// ref: r(vyht_ecommerce_orders_1.created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// }, +// VizFieldFull { +// label: 'Total Revenue' +// ref: r(vyhuynh_ecommerce_dataset.total_revenue) +// format { +// type: 'number' +// pattern: '[$$]#,###' +// } +// }, +// VizFieldFull { +// ref: r(vyht_ecommerce_orders_1.id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// ] +// settings { +// show_row_number: true +// row_limit: 100 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_856v: VizBlock { +// label: 'Table 2' +// viz: DataTable { +// dataset: demo_ecommerce +// theme { +// } +// fields: [ +// VizFieldFull { +// ref: r(order_master.order_created_month) +// format { +// type: 'date' +// } +// uname: 'order_master_order_created_month_1' +// }, +// VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// }, +// VizFieldFull { +// ref: r(order_master.user_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// uname: 'count_distinct_user_id_1' +// } +// ] +// settings { +// show_row_number: true +// sorts: [ +// SortSetting { +// key: 'count_distinct_user_id_1' +// direction: 'desc' +// } +// ] +// row_limit: 5000 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_cii9: VizBlock { +// label: 'Count Users, Sum Price, and AOV - Average Order Value by Name' +// viz: CombinationChart { +// dataset: demo_bigquery_ecommerce +// calculation sum_price { +// label: 'Sum Price' +// formula: @aql sum(bq_dim_products.price);; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(bq_fct_order_items.created_date) +// operator: 'matches' +// value: '2023' +// } +// x_axis: VizFieldFull { +// ref: r(bq_dim_product_countries.name) +// format { +// type: 'text' +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// ref: r(demo_bigquery_ecommerce.count_users) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// y_axis { +// settings { +// alignment: 'right' +// } +// series { +// field: VizFieldFull { +// ref: 'sum_price' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// ref: r(demo_bigquery_ecommerce.aov) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_qctn: VizBlock { +// label: 'Number of Order by Country Name and City Name' +// viz: LineChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// label: 'Total Order' +// settings { +// show_data_label_by: 'value' +// stack_series_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.order_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// series { +// field: VizFieldFull { +// ref: r(demo_ecommerce, order_master.aov_by_product) +// aggregation: 'count' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_label: 'Country' +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_9rhg: VizBlock { +// label: 'Number of Order by Country Name and City Name' +// viz: ColumnChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(ecommerce_cities.name) +// format { +// type: 'text' +// } +// } +// y_axis { +// label: 'Total Order' +// settings { +// show_data_label_by: 'value' +// stack_series_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.order_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// sort { +// field_index: 0 +// direction: 'desc' +// type: 'xaxis' +// } +// x_axis_label: 'Country' +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block t_4ttu: TextBlock { +// content: @md +// +// ;; +// } +// block t_5y3l: TextBlock { +// content: @md +// +// +// ;; +// } +// block t_vb6z: TextBlock { +// content: @md ### Date Filter;; +// } +// block f_zwa4: FilterBlock { +// label: 'Date' +// type: 'field' +// source: FieldFilterSource { +// dataset: demo_ecommerce +// field: r(order_master.order_created_at) +// } +// default { +// operator: 'matches' +// value: '$H_NIL$' +// } +// settings { +// drillthrough: Drillthrough { +// enabled: true +// sources: [ +// AutoDrillthroughSource { +// } +// ] +// } +// } +// } +// block v_3mef: VizBlock { +// label: 'Chart 3' +// viz: CombinationChart { +// dataset: ecom_dataset_vux +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.status) +// format { +// type: 'text' +// } +// } +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// label: 'Number Order' +// ref: r(order_master.order_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color_palette: 0 +// } +// } +// series { +// field: VizFieldFull { +// label: 'Number User' +// ref: r(order_master.user_id) +// aggregation: 'count' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_059z: VizBlock { +// label: 'Table 2' +// viz: PivotTable { +// dataset: ecom_dataset_vux +// theme { +// } +// rows: [ +// VizFieldFull { +// ref: r(order_master.status) +// format { +// type: 'text' +// } +// } +// ] +// columns: [ +// VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// ] +// values: [ +// VizFieldFull { +// label: 'Number Order' +// ref: r(order_master.order_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// }, +// VizFieldFull { +// label: 'Number User' +// ref: r(order_master.user_id) +// aggregation: 'count' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// ] +// settings { +// show_row_total: true +// show_column_total: true +// row_limit: 5000 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_tusm: VizBlock { +// label: 'GMV - Gross Merchandise Value by Country Name' +// viz: BarChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(ecommerce_countries.name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_j83d: VizBlock { +// label: 'Count of Id by Latitude, Longitude, and Neighbourhood' +// viz: BubbleChart { +// dataset: demo_ecommerce +// x_col: VizFieldFull { +// ref: r(demo_ecommerce.total_orders) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// y_col: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// z_col: VizFieldFull { +// ref: r(order_master.aov) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// group_col: VizFieldFull { +// ref: r(map_categories.parent_category) +// format { +// type: 'text' +// } +// } +// settings { +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_nyr1: VizBlock { +// label: 'GMV - Gross Merchandise Value by Continent Name' +// viz: PieChart { +// dataset: demo_ecommerce +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color_palette: 0 +// } +// } +// settings { +// display_as_donut: true +// show_total: true +// row_limit: 5000 +// data_label_position: 'outside' +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_qj0m: VizBlock { +// label: 'Sales by Category ID' +// viz: LineChart { +// dataset: american_housing_data_chinh_test +// x_axis: VizFieldFull { +// ref: r(zipcode_data_american_housing_data.beds) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// label: 'Sales' +// ref: r(zipcode_data_american_housing_data.price) +// aggregation: 'sum' +// format { +// type: 'number' +// pattern: '[$$]#,###' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_lpgt: VizBlock { +// label: 'AOV - Average Order Value by Category' +// viz: PieChart { +// dataset: demo_ecommerce +// legend: VizFieldFull { +// ref: r(map_categories.category) +// format { +// type: 'text' +// } +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.aov) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color_palette: 0 +// } +// } +// settings { +// row_limit: 5000 +// data_label_position: 'none' +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_5zcz: VizBlock { +// label: 'GMV - Gross Merchandise Value by Month' +// viz: CombinationChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(ecommerce_orders.created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// label: 'GMV' +// settings { +// show_data_label_by: 'value' +// } +// series { +// mark_type: 'column' +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// y_axis { +// settings { +// alignment: 'right' +// } +// series { +// field: VizFieldFull { +// label: 'Untitled Reference line' +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// analytic: ReferenceLine { +// type: 'avg' +// } +// } +// } +// } +// settings { +// show_rows_with_no_data: true +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_5dpt: VizBlock { +// label: 'GMV - Gross Merchandise Value and Total Orders by Month Order Created At' +// viz: CombinationChart { +// dataset: demo_ecommerce +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// y_axis { +// settings { +// alignment: 'right' +// } +// series { +// mark_type: 'line' +// field: r(demo_ecommerce.total_orders) +// settings { +// line_style: 'dashed' +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_ck6w: VizBlock { +// label: 'Table 1' +// viz: PivotTable { +// dataset: ecom_dataset_vux +// theme { +// } +// rows: [ +// VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// uname: 'ecommerce_countries_continent_name' +// }, +// VizFieldFull { +// ref: r(ecommerce_users.gender) +// format { +// type: 'text' +// } +// uname: 'ecommerce_users_gender' +// }, +// VizFieldFull { +// label: 'Product Category' +// ref: r(order_master.delivery_attempts) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// uname: 'order_master_delivery_attempts' +// } +// ] +// columns: [ +// VizFieldFull { +// ref: r(order_master.status) +// format { +// type: 'text' +// } +// } +// ] +// values: [ +// VizFieldFull { +// label: 'Number Order' +// ref: r(order_master.order_id) +// aggregation: 'count distinct' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// }, +// VizFieldFull { +// label: 'GMV' +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// ] +// settings { +// show_row_total: true +// show_column_total: true +// row_limit: 5000 +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// column_styles: [ +// ColumnStyle { +// key: 'ecommerce_users_gender' +// width: 86 +// }, +// ColumnStyle { +// key: 'order_master_delivery_attempts' +// width: 116 +// }, +// ColumnStyle { +// key: 'ecommerce_countries_continent_name' +// width: 117 +// } +// ] +// } +// } +// } +// block f_countries_continent_name: FilterBlock { +// label: 'Countries Continent Name' +// type: 'field' +// source: FieldFilterSource { +// dataset: demo_ecommerce +// field: r(ecommerce_countries.continent_name) +// } +// default { +// operator: 'is' +// value: [] +// } +// } +// block v_8fpj: VizBlock { +// label: 'Revenue by Sale reps' +// viz: BarChart { +// dataset: vyhuynh_ecommerce_dataset +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(vy_sales_revenue_demo_csv.sales_rep) +// format { +// type: 'text' +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// ref: r(vy_sales_revenue_demo_csv.revenue_usd) +// aggregation: 'sum' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// series { +// field: ConstantVizField { +// label: 'KPI goal' +// value: 60000 +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// line_style: 'dashed' +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_jbl8: VizBlock { +// label: 'Total Order Value by Month Created Date' +// viz: LineChart { +// dataset: demo_ecommerce_metrics +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(ecommerce_orders.created_date) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// ref: r(demo_ecommerce_metrics.total_order_value) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color_palette: 0 +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_350o: VizBlock { +// label: 'GMV by Continent (2024) - Compare vs LY' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// calculation metric_f0aed54 { +// label: '% Delta LY - GMV ' +// formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; +// calc_type: 'measure' +// data_type: 'number' +// } +// calculation metric_a9389ef { +// label: ' LY - GMV' +// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; +// calc_type: 'measure' +// data_type: 'number' +// } +// calculation metric_57371a1 { +// label: 'Delta LY - GMV' +// formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: 'metric_a9389ef' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color: '#7C9EE5' +// } +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// color: '#255DD4' +// } +// } +// } +// tooltips: [ +// VizTooltip { +// field: VizFieldFull { +// ref: 'metric_f0aed54' +// format { +// type: 'number' +// pattern: '#,###%' +// } +// } +// }, +// VizTooltip { +// field: VizFieldFull { +// ref: 'metric_57371a1' +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// ] +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_qnug: VizBlock { +// label: 'GMV by Continent (2024) - Show trend over time' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_tq6d: VizBlock { +// label: 'GMV by Continent (2024) - Show % change copy' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// calculation metric_f0aed54 { +// label: '% Delta LY - GMV ' +// formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; +// calc_type: 'measure' +// data_type: 'number' +// } +// calculation metric_a9389ef { +// label: ' LY - GMV' +// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: 'metric_f0aed54' +// format { +// type: 'number' +// pattern: '#,###%' +// } +// } +// settings { +// color: '#18A59E' +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_wwiv: VizBlock { +// label: 'GMV by Continent over time - With Trendline' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// series { +// field: VizFieldFull { +// label: 'Trend line of Gmv' +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// analytic: RegressionLine { +// type: 'linear' +// } +// } +// settings { +// line_style: 'dashed' +// point { +// value: 'Asia' +// line_style: 'dashed' +// } +// point { +// value: 'Europe' +// line_style: 'dashed' +// } +// point { +// value: 'Oceania' +// line_style: 'dashed' +// } +// point { +// value: 'North America' +// line_style: 'dashed' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_6o9d: VizBlock { +// label: 'GMV by Continent over time - Line chart' +// description: 'This is description of the block' +// viz: LineChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// legend: VizFieldFull { +// ref: r(ecommerce_countries.continent_name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block t_hcv3: TextBlock { +// content: @md ## Time series analysis;; +// } +// block t_ww35: TextBlock { +// content: @md ## Categorical analysis;; +// } +// block t_vh1h: TextBlock { +// content: @md ## Distribution analysis;; +// } +// block v_ji80: VizBlock { +// label: 'Total order distributed by Price' +// viz: ScatterChart { +// dataset: demo_ecommerce +// theme { +// } +// x_col: VizFieldFull { +// ref: r(order_master.price) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// y_col: VizFieldFull { +// ref: r(demo_ecommerce.total_orders) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// block v_7vcf: VizBlock { +// label: 'Total GMV (2024)' +// description: 'This is description of the block' +// viz: MetricKpi { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// calculation metric_f688c32 { +// label: '% Change - LY - GMV' +// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2025' +// } +// theme { +// } +// value: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// compare_value: VizFieldFull { +// ref: 'metric_f688c32' +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// settings { +// display_mode: 'compare_by_number' +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// alignment: 'left' +// } +// } +// } +// block v_n0qr: VizBlock { +// label: 'Total order distributed by Price- With trend line' +// viz: LineChart { +// dataset: demo_ecommerce +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.price) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// y_axis { +// series { +// field: VizFieldFull { +// ref: r(demo_ecommerce.total_orders) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// series { +// field: VizFieldFull { +// label: 'Trend line of Total Orders' +// ref: r(demo_ecommerce.total_orders) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// analytic: RegressionLine { +// type: 'linear' +// } +// } +// settings { +// line_style: 'dashed' +// } +// } +// } +// settings { +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_jpzg: VizBlock { +// label: 'GMV over time' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_0sbb: VizBlock { +// label: 'GMV over time - with trendline' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// series { +// field: VizFieldFull { +// label: 'Trend line of Gmv' +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// analytic: RegressionLine { +// type: 'linear' +// } +// } +// settings { +// line_style: 'dashed' +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_58pi: VizBlock { +// label: 'GMV over time - vs LY' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// calculation metric_14d21cf { +// label: 'LY - GMV' +// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; +// calc_type: 'measure' +// data_type: 'number' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(order_master.order_created_at) +// transformation: 'datetrunc month' +// format { +// type: 'date' +// pattern: 'LLL yyyy' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// series { +// field: VizFieldFull { +// ref: 'metric_14d21cf' +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_vk4x: VizBlock { +// label: 'GMV by Country (2024)' +// description: 'This is description of the block' +// viz: ColumnChart { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2024' +// } +// theme { +// } +// x_axis: VizFieldFull { +// ref: r(ecommerce_countries.name) +// format { +// type: 'text' +// } +// } +// y_axis { +// settings { +// show_data_label_by: 'value' +// } +// series { +// field: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// } +// } +// settings { +// row_limit: 5000 +// x_axis_show_null_datetime: false +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// } +// } +// } +// block v_ufmq: VizBlock { +// label: 'Total GMV (2024) copy' +// description: 'This is description of the block' +// viz: MetricKpi { +// dataset: demo_ecommerce +// calculation adhoc_dim { +// label: 'My adhoc dim' +// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; +// calc_type: 'dimension' +// data_type: 'text' +// model: order_master +// } +// calculation metric_f688c32 { +// label: '% Change - LY - GMV' +// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; +// calc_type: 'measure' +// data_type: 'number' +// } +// filter { +// field: r(order_master.order_created_at) +// operator: 'matches' +// value: '2025' +// } +// theme { - } - value: VizFieldFull { - ref: r(order_master.gmv) - format { - type: 'number' - pattern: '#,###' - } - } - compare_value: VizFieldFull { - label: 'KPI Goal' - ref: r(order_master.revenue) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - display_mode: 'progress' - aggregate_awareness { - enabled: true - debug_comments: true - } - alignment: 'left' - } - } - } - interactions: [ - FilterInteraction { - from: 'v2' - to: [ - CustomMapping { - block: [ - 'v3', - 'v4', - 'v_nehb', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v3' - to: [ - CustomMapping { - block: [ - 'v2', - 'v4', - 'v_nehb', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v4' - to: [ - CustomMapping { - block: [ - 'v2', - 'v3', - 'v_nehb', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v5' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f1' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq', - 'f2' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f2' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_lpgt', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq', - 'f1', - 'f_zwa4' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v8' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_711g' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_ztqi' - to: [ - CustomMapping { - block: [ - 'v_hk4u', - 'v_wsww' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_hk4u' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_wsww', - 'v_j83d', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_wsww' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_j83d', - 'v_5zcz', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_nehb' - to: [ - CustomMapping { - block: [ - 'v2', - 'v3', - 'v4', - 'v_8fpj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_856v' - to: [ - CustomMapping { - block: [ - 'v_ztqi', - 'v_j83d', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_qctn' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_9rhg' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f_zwa4' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_lpgt', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - }, - CustomMapping { - block: [ - 'v2', - 'v3', - 'v4', - 'v_nehb' - ] - field: ref('vyht_ecommerce_orders_1', 'created_at') - }, - CustomMapping { - block: 'v_cii9' - field: ref('bq_fct_order_items', 'created_at') - } - ] - }, - FilterInteraction { - from: 'v_tusm' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_j83d' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_nyr1', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_7vcf', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_nyr1' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_lpgt' - to: [ - CustomMapping { - block: [ - 'v8', - 'v_711g', - 'v_5zcz' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_5zcz' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_j83d', - 'v_lpgt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_5dpt' - to: [ - CustomMapping { - block: [ - 'v5', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_ji80', - 'v_7vcf', - 'v_n0qr', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_8fpj' - to: [ - CustomMapping { - block: [ - 'v2', - 'v3', - 'v4', - 'v_nehb' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_350o' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_qnug' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_tq6d' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_wwiv' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6o9d' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_ji80' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_nyr1', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_7vcf', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_7vcf' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_n0qr' - to: [ - CustomMapping { - block: [ - 'v5', - 'v8', - 'v_711g', - 'v_ztqi', - 'v_hk4u', - 'v_wsww', - 'v_856v', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_nyr1', - 'v_5zcz', - 'v_5dpt', - 'v_350o', - 'v_qnug', - 'v_tq6d', - 'v_wwiv', - 'v_6o9d', - 'v_7vcf', - 'v_jpzg', - 'v_0sbb', - 'v_58pi', - 'v_vk4x', - 'v_ufmq' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_jpzg' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_0sbb' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_58pi' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_vk4x' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_ufmq' - to: [ - CustomMapping { - block: [ - 'v_711g', - 'v_wsww', - 'v_qctn', - 'v_9rhg', - 'v_tusm', - 'v_j83d', - 'v_nyr1', - 'v_5dpt', - 'v_ji80', - 'v_n0qr' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f_countries_continent_name' - to: [ - CustomMapping { - block: [ - 'v_059z', - 'v_3mef', - 'v_ck6w' - ] - field: ref('ecommerce_countries', 'continent_name') - } - ] - } - ] - settings { - timezone: 'Etc/UTC' - cache_duration: 1440 - } +// } +// value: VizFieldFull { +// ref: r(order_master.gmv) +// format { +// type: 'number' +// pattern: '#,###' +// } +// } +// compare_value: VizFieldFull { +// label: 'KPI Goal' +// ref: r(order_master.revenue) +// format { +// type: 'number' +// pattern: 'inherited' +// } +// } +// settings { +// display_mode: 'progress' +// aggregate_awareness { +// enabled: true +// debug_comments: true +// } +// alignment: 'left' +// } +// } +// } +// interactions: [ +// FilterInteraction { +// from: 'v2' +// to: [ +// CustomMapping { +// block: [ +// 'v3', +// 'v4', +// 'v_nehb', +// 'v_8fpj' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v3' +// to: [ +// CustomMapping { +// block: [ +// 'v2', +// 'v4', +// 'v_nehb', +// 'v_8fpj' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v4' +// to: [ +// CustomMapping { +// block: [ +// 'v2', +// 'v3', +// 'v_nehb', +// 'v_8fpj' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v5' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'f1' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_j83d', +// 'v_lpgt', +// 'v_5zcz', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq', +// 'f2' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'f2' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_856v', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_lpgt', +// 'v_5zcz', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq', +// 'f1', +// 'f_zwa4' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v8' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_j83d', +// 'v_lpgt', +// 'v_5zcz', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_711g' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_j83d', +// 'v_lpgt', +// 'v_5zcz', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_ztqi' +// to: [ +// CustomMapping { +// block: [ +// 'v_hk4u', +// 'v_wsww' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_hk4u' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_wsww', +// 'v_j83d', +// 'v_5zcz', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_wsww' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_j83d', +// 'v_5zcz', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_nehb' +// to: [ +// CustomMapping { +// block: [ +// 'v2', +// 'v3', +// 'v4', +// 'v_8fpj' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_856v' +// to: [ +// CustomMapping { +// block: [ +// 'v_ztqi', +// 'v_j83d', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_qctn' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_9rhg' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v_qctn', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'f_zwa4' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_856v', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_lpgt', +// 'v_5zcz', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// }, +// CustomMapping { +// block: [ +// 'v2', +// 'v3', +// 'v4', +// 'v_nehb' +// ] +// field: ref('vyht_ecommerce_orders_1', 'created_at') +// }, +// CustomMapping { +// block: 'v_cii9' +// field: ref('bq_fct_order_items', 'created_at') +// } +// ] +// }, +// FilterInteraction { +// from: 'v_tusm' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v_qctn', +// 'v_9rhg', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_j83d' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_856v', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_nyr1', +// 'v_5zcz', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_7vcf', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_nyr1' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_lpgt' +// to: [ +// CustomMapping { +// block: [ +// 'v8', +// 'v_711g', +// 'v_5zcz' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_5zcz' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_j83d', +// 'v_lpgt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_5dpt' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_ji80', +// 'v_7vcf', +// 'v_n0qr', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_8fpj' +// to: [ +// CustomMapping { +// block: [ +// 'v2', +// 'v3', +// 'v4', +// 'v_nehb' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_350o' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_qnug' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_tq6d' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_wwiv' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_6o9d' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_ji80' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_856v', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_nyr1', +// 'v_5zcz', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_7vcf', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_7vcf' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_n0qr' +// to: [ +// CustomMapping { +// block: [ +// 'v5', +// 'v8', +// 'v_711g', +// 'v_ztqi', +// 'v_hk4u', +// 'v_wsww', +// 'v_856v', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_nyr1', +// 'v_5zcz', +// 'v_5dpt', +// 'v_350o', +// 'v_qnug', +// 'v_tq6d', +// 'v_wwiv', +// 'v_6o9d', +// 'v_7vcf', +// 'v_jpzg', +// 'v_0sbb', +// 'v_58pi', +// 'v_vk4x', +// 'v_ufmq' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_jpzg' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_0sbb' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_58pi' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_vk4x' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'v_ufmq' +// to: [ +// CustomMapping { +// block: [ +// 'v_711g', +// 'v_wsww', +// 'v_qctn', +// 'v_9rhg', +// 'v_tusm', +// 'v_j83d', +// 'v_nyr1', +// 'v_5dpt', +// 'v_ji80', +// 'v_n0qr' +// ] +// disabled: true +// } +// ] +// }, +// FilterInteraction { +// from: 'f_countries_continent_name' +// to: [ +// CustomMapping { +// block: [ +// 'v_059z', +// 'v_3mef', +// 'v_ck6w' +// ] +// field: ref('ecommerce_countries', 'continent_name') +// } +// ] +// } +// ] +// settings { +// timezone: 'Etc/UTC' +// cache_duration: 1440 +// } } \ No newline at end of file From 60eaca820d6c213e204289932f793b7a05fa4d0a Mon Sep 17 00:00:00 2001 From: Khanh Tran Quoc Date: Thu, 12 Mar 2026 03:59:11 +0000 Subject: [PATCH 103/168] Modify: team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml --- team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index a1b1f1d..1b5e4ef 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -1,5 +1,5 @@ Dashboard vy_huynh_abernathy { -// title: 'Vy Huynh Abernathy' + title: 'Vy Huynh Abernathy' // description: @md Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et massa vehicula, lobortis tortor bibendum, molestie velit. Morbi iaculis augue et pulvinar tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin lacus arcu, aliquam at elit at, porta suscipit libero. Integer euismod, urna vitae rhoncus tristique, tortor odio condimentum lacus, sit amet accumsan sem eros a sapien. Quisque commodo hendrerit dui, et fermentum nibh consectetur id. Maecenas convallis fringilla cursus. Fusce urna justo, lacinia a ipsum eu, lacinia vehicula dui. Vestibulum sagittis quam est, a posuere lorem suscipit sit amet. // Vestibulum eu egestas odio. Maecenas sed dui ac turpis feugiat blandit et et mauris. Fusce felis ex, dignissim vel ante vitae, mattis facilisis arcu. Integer congue lorem sit amet libero sodales, a condimentum tellus commodo. Mauris eu nisl neque. Nam sagittis, augue quis eleifend euismod, lorem dui vulputate mi, a finibus sapien sapien at enim. Pellentesque accumsan orci pretium tincidunt sodales. Fusce volutpat rhoncus tellus, vel varius est imperdiet sit amet. Praesent ut urna sed turpis semper iaculis. Nam fringilla enim mi, nec tincidunt sem facilisis vel. Suspendisse aliquet mi eget mauris aliquet, eget vulputate risus laoreet. Pellentesque posuere sollicitudin elementum. From ca335689932c3d110898d8fb23780878496f6a71 Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Thu, 12 Mar 2026 07:21:44 +0000 Subject: [PATCH 104/168] Update 'data_catalog' dashboard to list metrics with keys, names, and descriptions instead of datasets and dashboards --- .../dashboards/data_catalog.page.aml | 240 ++++++++++-------- 1 file changed, 133 insertions(+), 107 deletions(-) diff --git a/demo ecommerce/dashboards/data_catalog.page.aml b/demo ecommerce/dashboards/data_catalog.page.aml index de90fe7..d9204c3 100644 --- a/demo ecommerce/dashboards/data_catalog.page.aml +++ b/demo ecommerce/dashboards/data_catalog.page.aml @@ -5,8 +5,7 @@ Dashboard data_catalog { content: @md # Data Catalog;; } block catalog: TextBlock { - content: @md - -

📊 Data Catalog (Datasets & Dashboards)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Object NameObject TypeLabelOwnerDescription
${demo_ecommerce_version_2.name}Dataset${demo_ecommerce_version_2.label}${demo_ecommerce_version_2.owner}${demo_ecommerce_version_2.description}
${demo_ecommerce.name}Dataset${demo_ecommerce.label}${demo_ecommerce.owner}${demo_ecommerce.description}
${simple_dataset.name}Dataset${simple_dataset.label}${simple_dataset.owner}${simple_dataset.description}
${khai_ecommerce.name}Dataset${khai_ecommerce.label}${khai_ecommerce.owner}${khai_ecommerce.description}
${demo_running_total.name}Dataset${demo_running_total.label}${demo_running_total.owner}${demo_running_total.description}
${demo_ecommerce_overview_pro.uname}Dashboard${demo_ecommerce_overview_pro.title}${demo_ecommerce_overview_pro.owner}${demo_ecommerce_overview_pro.description}
${demo_ecommerce_overview_funky.uname}Dashboard${demo_ecommerce_overview_funky.title}${demo_ecommerce_overview_funky.owner}${demo_ecommerce_overview_funky.description}
${company_dashboard_v.uname}Dashboard${company_dashboard_v.title}${company_dashboard_v.owner}${company_dashboard_v.description}
${embed_demo_landing_page_2.uname}Dashboard${embed_demo_landing_page_2.title}${embed_demo_landing_page_2.owner}${embed_demo_landing_page_2.description}
${notebook_ecommerce_business_metrics.uname}Dashboard${notebook_ecommerce_business_metrics.title}${notebook_ecommerce_business_metrics.owner}${notebook_ecommerce_business_metrics.description}
;; - } - - view: CanvasLayout { - label: 'View 1' - width: 1300 - height: 560 - grid_size: 20 - auto_expand_vertically: true - block title { - position: pos(20, 20, 1260, 60) - } - block t_4gpk { - position: pos(20, 100, 1220, 360) - layer: 1 - } - block catalog { - position: pos(20, 80, 1240, 460) - } - mobile { - mode: 'auto' - } +

📊 Metrics Catalog

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Metric KeyNameDescription
aov${demo_ecommerce_version_2.metric.aov.__meta__.name}${demo_ecommerce_version_2.metric.aov.description}
cancelled_order_ratio${demo_ecommerce_version_2.metric.cancelled_order_ratio.__meta__.name}${demo_ecommerce_version_2.metric.cancelled_order_ratio.description}
cancelled_value${demo_ecommerce_version_2.metric.cancelled_value.__meta__.name}${demo_ecommerce_version_2.metric.cancelled_value.description}
cancelled_value_ratio${demo_ecommerce_version_2.metric.cancelled_value_ratio.__meta__.name}${demo_ecommerce_version_2.metric.cancelled_value_ratio.description}
delivered_value${demo_ecommerce_version_2.metric.delivered_value.__meta__.name}${demo_ecommerce_version_2.metric.delivered_value.description}
dynamic_metric${demo_ecommerce_version_2.metric.dynamic_metric.__meta__.name}${demo_ecommerce_version_2.metric.dynamic_metric.description}
dynamic_metric_currency${demo_ecommerce_version_2.metric.dynamic_metric_currency.__meta__.name}${demo_ecommerce_version_2.metric.dynamic_metric_currency.description}
gmv${demo_ecommerce_version_2.metric.gmv.__meta__.name}${demo_ecommerce_version_2.metric.gmv.description}
nmv${demo_ecommerce_version_2.metric.nmv.__meta__.name}${demo_ecommerce_version_2.metric.nmv.description}
percent_of_total${demo_ecommerce_version_2.metric.percent_of_total.__meta__.name}${demo_ecommerce_version_2.metric.percent_of_total.description}
refunded_value${demo_ecommerce_version_2.metric.refunded_value.__meta__.name}${demo_ecommerce_version_2.metric.refunded_value.description}
retention${demo_ecommerce_version_2.metric.retention.__meta__.name}${demo_ecommerce_version_2.metric.retention.description}
revenue${demo_ecommerce_version_2.metric.revenue.__meta__.name}${demo_ecommerce_version_2.metric.revenue.description}
revenue_commission${demo_ecommerce_version_2.metric.revenue_commission.__meta__.name}${demo_ecommerce_version_2.metric.revenue_commission.description}
running_total_orders${demo_ecommerce_version_2.metric.running_total_orders.__meta__.name}${demo_ecommerce_version_2.metric.running_total_orders.description}
total_buyers${demo_ecommerce_version_2.metric.total_buyers.__meta__.name}${demo_ecommerce_version_2.metric.total_buyers.description}
total_cancelled_orders${demo_ecommerce_version_2.metric.total_cancelled_orders.__meta__.name}${demo_ecommerce_version_2.metric.total_cancelled_orders.description}
total_delivered_orders${demo_ecommerce_version_2.metric.total_delivered_orders.__meta__.name}${demo_ecommerce_version_2.metric.total_delivered_orders.description}
total_discount${demo_ecommerce_version_2.metric.total_discount.__meta__.name}${demo_ecommerce_version_2.metric.total_discount.description}
total_orders${demo_ecommerce_version_2.metric.total_orders.__meta__.name}${demo_ecommerce_version_2.metric.total_orders.description}
total_orders_across_all${demo_ecommerce_version_2.metric.total_orders_across_all.__meta__.name}${demo_ecommerce_version_2.metric.total_orders_across_all.description}
total_refunded_orders${demo_ecommerce_version_2.metric.total_refunded_orders.__meta__.name}${demo_ecommerce_version_2.metric.total_refunded_orders.description}
total_repeated_buyers${demo_ecommerce_version_2.metric.total_repeated_buyers.__meta__.name}${demo_ecommerce_version_2.metric.total_repeated_buyers.description}
total_users${demo_ecommerce_version_2.metric.total_users.__meta__.name}${demo_ecommerce_version_2.metric.total_users.description}
;; } theme: H.themes.vanilla From 4afa46e525166165924c2a2b85f2d6abec355faa Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Thu, 12 Mar 2026 07:22:37 +0000 Subject: [PATCH 105/168] Comment out all objects in 'ecommerce_portal' and 'embed_portal' embed portals for testing purposes --- demo ecommerce/embed/ecommerce_portal.embed.aml | 12 ++++++------ team-folders/tai/embed_portal.embed.aml | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/demo ecommerce/embed/ecommerce_portal.embed.aml b/demo ecommerce/embed/ecommerce_portal.embed.aml index 4252564..6faf5c2 100644 --- a/demo ecommerce/embed/ecommerce_portal.embed.aml +++ b/demo ecommerce/embed/ecommerce_portal.embed.aml @@ -1,11 +1,11 @@ EmbedPortal ecommerce_portal { objects: [ - demo_ecommerce_overview_pro, - _0_ecommerce_dashboard_30, - _1_country_breakdown, - _2_category_breakdown, - _3_customer_demographics, - _4_product_x_merchant_drill_down, + // demo_ecommerce_overview_pro, + // _0_ecommerce_dashboard_30, + // _1_country_breakdown, + // _2_category_breakdown, + // _3_customer_demographics, + // _4_product_x_merchant_drill_down, // dataset demo_ecommerce ], diff --git a/team-folders/tai/embed_portal.embed.aml b/team-folders/tai/embed_portal.embed.aml index b8f3aa1..54d61a2 100644 --- a/team-folders/tai/embed_portal.embed.aml +++ b/team-folders/tai/embed_portal.embed.aml @@ -1,7 +1,7 @@ -EmbedPortal embed_portal { - objects: [ - demo_ecommerce_overview_pro, - test_zoom - ] - initial_object: test_zoom -} \ No newline at end of file +// EmbedPortal embed_portal { +// objects: [ +// demo_ecommerce_overview_pro, +// test_zoom +// ] +// initial_object: test_zoom +// } \ No newline at end of file From 7bab2e05a09c728214c064a8d6520f62c60b9b06 Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Thu, 12 Mar 2026 07:24:31 +0000 Subject: [PATCH 106/168] Update default filter value to 'delivered' in 'thong_do_drill_through' page --- thong_do_drill_through.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thong_do_drill_through.page.aml b/thong_do_drill_through.page.aml index d5daa2b..d293caa 100644 --- a/thong_do_drill_through.page.aml +++ b/thong_do_drill_through.page.aml @@ -63,7 +63,7 @@ Dashboard thong_do_drill_through { } default { operator: 'is' - value: [] + value: 'delivered' } settings { drillthrough: Drillthrough { From a44e59a7d34b9b7712b9fab6790a15ba8a38c2c2 Mon Sep 17 00:00:00 2001 From: Khai Testing Date: Thu, 12 Mar 2026 07:25:19 +0000 Subject: [PATCH 107/168] Update 'ecommerce_dashboard_amyra' to extend year-over-year comparison to 2 years --- ecommerce_dashboard_amyra.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecommerce_dashboard_amyra.page.aml b/ecommerce_dashboard_amyra.page.aml index 9d35eb4..261d3f8 100644 --- a/ecommerce_dashboard_amyra.page.aml +++ b/ecommerce_dashboard_amyra.page.aml @@ -20,7 +20,7 @@ Dashboard ecommerce_dashboard_amyra { compare_value: VizPopSettings { field: r(order_master.order_created_at) value: RelativePopValue { - duration: 1 + duration: 2 granularity: 'year' } } From e34dc1b0f1521c260b4adf336e8779bfa79fa3c6 Mon Sep 17 00:00:00 2001 From: Khanh Tran Quoc Date: Fri, 13 Mar 2026 07:23:50 +0000 Subject: [PATCH 108/168] Replace commented dashboard code with active configuration in 'Vy Huynh Abernathy' dashboard --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 6724 ++++++++--------- 1 file changed, 3362 insertions(+), 3362 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 1b5e4ef..4a898fa 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -1,3371 +1,3371 @@ Dashboard vy_huynh_abernathy { title: 'Vy Huynh Abernathy' -// description: @md Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et massa vehicula, lobortis tortor bibendum, molestie velit. Morbi iaculis augue et pulvinar tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin lacus arcu, aliquam at elit at, porta suscipit libero. Integer euismod, urna vitae rhoncus tristique, tortor odio condimentum lacus, sit amet accumsan sem eros a sapien. Quisque commodo hendrerit dui, et fermentum nibh consectetur id. Maecenas convallis fringilla cursus. Fusce urna justo, lacinia a ipsum eu, lacinia vehicula dui. Vestibulum sagittis quam est, a posuere lorem suscipit sit amet. + description: @md Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et massa vehicula, lobortis tortor bibendum, molestie velit. Morbi iaculis augue et pulvinar tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin lacus arcu, aliquam at elit at, porta suscipit libero. Integer euismod, urna vitae rhoncus tristique, tortor odio condimentum lacus, sit amet accumsan sem eros a sapien. Quisque commodo hendrerit dui, et fermentum nibh consectetur id. Maecenas convallis fringilla cursus. Fusce urna justo, lacinia a ipsum eu, lacinia vehicula dui. Vestibulum sagittis quam est, a posuere lorem suscipit sit amet. -// Vestibulum eu egestas odio. Maecenas sed dui ac turpis feugiat blandit et et mauris. Fusce felis ex, dignissim vel ante vitae, mattis facilisis arcu. Integer congue lorem sit amet libero sodales, a condimentum tellus commodo. Mauris eu nisl neque. Nam sagittis, augue quis eleifend euismod, lorem dui vulputate mi, a finibus sapien sapien at enim. Pellentesque accumsan orci pretium tincidunt sodales. Fusce volutpat rhoncus tellus, vel varius est imperdiet sit amet. Praesent ut urna sed turpis semper iaculis. Nam fringilla enim mi, nec tincidunt sem facilisis vel. Suspendisse aliquet mi eget mauris aliquet, eget vulputate risus laoreet. Pellentesque posuere sollicitudin elementum. +Vestibulum eu egestas odio. Maecenas sed dui ac turpis feugiat blandit et et mauris. Fusce felis ex, dignissim vel ante vitae, mattis facilisis arcu. Integer congue lorem sit amet libero sodales, a condimentum tellus commodo. Mauris eu nisl neque. Nam sagittis, augue quis eleifend euismod, lorem dui vulputate mi, a finibus sapien sapien at enim. Pellentesque accumsan orci pretium tincidunt sodales. Fusce volutpat rhoncus tellus, vel varius est imperdiet sit amet. Praesent ut urna sed turpis semper iaculis. Nam fringilla enim mi, nec tincidunt sem facilisis vel. Suspendisse aliquet mi eget mauris aliquet, eget vulputate risus laoreet. Pellentesque posuere sollicitudin elementum. -// Curabitur sit amet elementum nulla, id blandit mi. Vivamus ipsum dui, malesuada ut ultrices in, venenatis vitae nisl. Morbi blandit, sem et ultrices scelerisque, felis metus dapibus ante, non commodo erat erat at sapien. Aliquam lobortis risus eget finibus vehicula. Pellentesque auctor mi nec nunc blandit, nec dignissim eros gravida. Praesent facilisis libero convallis magna sollicitudin, sit amet ultrices felis suscipit. Quisque id sagittis leo, aliquam mattis lectus. +Curabitur sit amet elementum nulla, id blandit mi. Vivamus ipsum dui, malesuada ut ultrices in, venenatis vitae nisl. Morbi blandit, sem et ultrices scelerisque, felis metus dapibus ante, non commodo erat erat at sapien. Aliquam lobortis risus eget finibus vehicula. Pellentesque auctor mi nec nunc blandit, nec dignissim eros gravida. Praesent facilisis libero convallis magna sollicitudin, sit amet ultrices felis suscipit. Quisque id sagittis leo, aliquam mattis lectus. -// Integer sodales et turpis tristique pulvinar. Quisque viverra magna a nibh sodales, a vehicula leo bibendum. Fusce suscipit diam id nulla blandit, non interdum elit pulvinar. Maecenas ante enim, fringilla at tortor id, fermentum mattis ligula. Donec diam nulla, mollis non sagittis a, tincidunt at dui. Praesent quis magna in magna aliquam dignissim. Cras ultricies scelerisque nisl sit amet consectetur. Quisque vitae semper elit, id tincidunt ante. +Integer sodales et turpis tristique pulvinar. Quisque viverra magna a nibh sodales, a vehicula leo bibendum. Fusce suscipit diam id nulla blandit, non interdum elit pulvinar. Maecenas ante enim, fringilla at tortor id, fermentum mattis ligula. Donec diam nulla, mollis non sagittis a, tincidunt at dui. Praesent quis magna in magna aliquam dignissim. Cras ultricies scelerisque nisl sit amet consectetur. Quisque vitae semper elit, id tincidunt ante. -// Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut ante ex, vulputate at congue sit amet, sagittis nec risus. Donec lacinia aliquet nisi, tincidunt elementum ligula vehicula ut. Aliquam commodo id mauris eu vehicula. Nullam est nisl, tincidunt sed gravida vel, varius quis ante. Nulla facilisi. Proin ultricies dignissim eros, id dapibus lacus pharetra sed. +Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut ante ex, vulputate at congue sit amet, sagittis nec risus. Donec lacinia aliquet nisi, tincidunt elementum ligula vehicula ut. Aliquam commodo id mauris eu vehicula. Nullam est nisl, tincidunt sed gravida vel, varius quis ante. Nulla facilisi. Proin ultricies dignissim eros, id dapibus lacus pharetra sed. -// ;; -// view: TabLayout { -// label: 'View 1' -// tab tab2: CanvasLayout { -// label: 'Revenue Overview' -// width: 1220 -// height: 4060 -// grid_size: 20 -// block v2 { -// position: pos(920, 220, 260, 140) -// layer: 2 -// } -// block v3 { -// position: pos(20, 1240, 1160, 460) -// layer: 3 -// } -// block v4 { -// position: pos(920, 380, 260, 140) -// layer: 2 -// } -// block t3 { -// position: pos(20, 20, 380, 160) -// layer: 4 -// } -// block t4 { -// position: pos(40, 40, 60, 40) -// layer: 5 -// } -// block t5 { -// position: pos(80, 40, 300, 40) -// layer: 6 -// } -// block f1 { -// position: pos(80, 80, 280, 60) -// layer: 7 -// } -// block t6 { -// position: pos(400, 20, 380, 160) -// layer: 4 -// } -// block t7 { -// position: pos(420, 40, 60, 40) -// layer: 5 -// } -// block t8 { -// position: pos(460, 40, 300, 60) -// layer: 8 -// } -// block f2 { -// position: pos(460, 80, 280, 60) -// layer: 7 -// } -// block t9 { -// position: pos(20, 180, 1160, 20) -// layer: 9 -// } -// block v8 { -// position: pos(20, 640, 1160, 580) -// layer: 1 -// } -// block v_711g { -// position: pos(20, 220, 640, 400) -// layer: 1 -// } -// block v_nehb { -// position: pos(20, 2320, 1160, 460) -// layer: 1 -// } -// block v_cii9 { -// position: pos(20, 2800, 1160, 400) -// layer: 10 -// } -// block t_4ttu { -// position: pos(800, 20, 380, 160) -// layer: 1 -// } -// block t_5y3l { -// position: pos(820, 40, 60, 40) -// layer: 2 -// } -// block t_vb6z { -// position: pos(860, 40, 300, 60) -// layer: 3 -// } -// block f_zwa4 { -// position: pos(860, 80, 280, 60) -// layer: 4 -// } -// block v_qj0m { -// position: pos(20, 3220, 1160, 400) -// layer: 11 -// } -// block v_lpgt { -// position: pos(20, 3640, 580, 400) -// layer: 12 -// } -// block v_5zcz { -// position: pos(20, 1720, 1160, 580) -// layer: 1 -// } -// block v_jbl8 { -// position: pos(620, 3640, 560, 400) -// layer: 3 -// } -// mobile { -// mode: 'auto' -// } -// default_zoom: 1 -// auto_expand_vertically: true -// } -// tab tab_5auh: CanvasLayout { -// label: 'Raw Data Table' -// height: 1480 -// grid_size: 20 -// auto_expand_vertically: true -// block v_ztqi { -// position: pos(20, 20, 940, 420) -// layer: 1 -// } -// block v_856v { -// position: pos(20, 460, 940, 420) -// layer: 1 -// } -// mobile { -// mode: 'auto' -// } -// width: 1500 -// default_zoom: 1 -// } -// tab tab3: CanvasLayout { -// label: 'Regional Analysis' -// height: 9440 -// grid_size: 20 -// block v5 { -// position: pos(20, 360, 540, 420) -// layer: 1 -// } -// block t1 { -// position: pos(20, 20, 60, 60) -// layer: 2 -// } -// block t2 { -// position: pos(80, 20, 400, 60) -// layer: 3 -// } -// block v_qctn { -// position: pos(20, 5660, 1160, 580) -// layer: 1 -// } -// block v_9rhg { -// position: pos(20, 6260, 1160, 580) -// layer: 1 -// } -// block v_tusm { -// position: pos(20, 7380, 1160, 500) -// layer: 1 -// } -// block v_j83d { -// position: pos(20, 7900, 1160, 480) -// layer: 1 -// } -// block v_nyr1 { -// position: pos(20, 8400, 1160, 500) -// layer: 1 -// } -// block v_5dpt { -// position: pos(20, 8920, 1160, 500) -// layer: 1 -// } -// block v_8fpj { -// position: pos(20, 5140, 1160, 500) -// layer: 4 -// } -// block v_350o { -// position: pos(20, 800, 540, 400) -// layer: 1 -// } -// block v_qnug { -// position: pos(20, 1220, 1160, 400) -// layer: 1 -// } -// block v_tq6d { -// position: pos(580, 800, 600, 400) -// layer: 1 -// } -// block t_hcv3 { -// position: pos(20, 1660, 320, 60) -// layer: 1 -// } -// block t_ww35 { -// position: pos(20, 300, 320, 60) -// layer: 1 -// } -// block v_6o9d { -// position: pos(20, 3580, 1160, 440) -// layer: 1 -// } -// block v_wwiv { -// position: pos(20, 3120, 1160, 440) -// layer: 1 -// } -// block t_vh1h { -// position: pos(20, 4080, 320, 60) -// layer: 1 -// } -// block v_7vcf { -// position: pos(20, 100, 380, 180) -// layer: 1 -// } -// block v_ji80 { -// position: pos(20, 4140, 1160, 480) -// layer: 1 -// } -// block v_n0qr { -// position: pos(20, 4640, 1160, 480) -// layer: 1 -// } -// block v_0sbb { -// position: pos(20, 2660, 1160, 440) -// layer: 1 -// } -// block v_58pi { -// position: pos(20, 2200, 1160, 440) -// layer: 1 -// } -// block v_jpzg { -// position: pos(20, 1740, 1160, 440) -// layer: 1 -// } -// block v_vk4x { -// position: pos(580, 360, 540, 420) -// layer: 1 -// } -// block v_ufmq { -// position: pos(420, 100, 380, 180) -// layer: 1 -// } -// mobile { -// mode: 'auto' -// } -// auto_expand_vertically: true -// } -// tab tab_4i2l: CanvasLayout { -// label: 'User Analysis' -// width: 1500 -// height: 2020 -// grid_size: 20 -// auto_expand_vertically: true -// mobile { -// mode: 'auto' -// } -// block v_3mef { -// position: pos(20, 860, 1240, 280) -// layer: 1 -// } -// block v_059z { -// position: pos(20, 600, 1240, 240) -// layer: 1 -// } -// block v_ck6w { -// position: pos(20, 120, 1460, 460) -// layer: 2 -// } -// block f_countries_continent_name { -// position: pos(20, 20, 300, 80) -// layer: 2 -// } -// auto_expand_horizontally: true -// } -// } -// theme: H.themes.vanilla -// block v2: VizBlock { -// label: 'This month Revenue' -// viz: MetricKpi { -// dataset: vyhuynh_ecommerce_dataset -// calculation monthly_revenue { -// label: 'Monthly Revenue' -// formula: @aql vyht_ecommerce_order_items -// | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(vyht_ecommerce_orders_1.created_at) -// operator: 'matches' -// value: 'July 2023' -// } -// value: VizFieldFull { -// label: 'Total Revenue This Month' -// ref: 'total_revenue' -// format { -// type: 'number' -// pattern: '[$$]#,###' -// } -// } -// compare_value: VizPopSettings { -// field: r(vyht_ecommerce_orders_1.created_at) -// duration: 1 -// granularity: 'month' -// } -// settings { -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// alignment: 'left' -// } -// } -// settings { -// hide_label: true -// } -// } -// block v3: VizBlock { -// label: 'Total Revenue and Number of Order by Month' -// viz: CombinationChart { -// dataset: vyhuynh_ecommerce_dataset -// filter { -// field: r(vyht_ecommerce_orders_1.created_at) -// operator: 'matches' -// value: '2024' -// } -// x_axis: VizFieldFull { -// label: 'Order Month' -// ref: r(vyht_ecommerce_orders_1.created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// label: 'Total Revenue' -// settings { -// group_values_into: 10 -// show_data_label_by: 'value' -// } -// series { -// mark_type: 'column' -// field: VizFieldFull { -// label: 'Total Revenue' -// ref: r(vyhuynh_ecommerce_dataset.total_revenue) -// format { -// type: 'number' -// pattern: '[$$]#,###' -// } -// } -// settings { -// color: '#255DD4' -// } -// } -// } -// y_axis { -// label: 'Number of Order' -// settings { -// alignment: 'right' -// group_values_into: 10 -// } -// series { -// mark_type: 'line' -// field: VizFieldFull { -// ref: r(vyht_ecommerce_orders_1.id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color: '#18A59E' -// line_style: 'dashed' -// } -// } -// } -// settings { -// row_limit: 100 -// x_axis_label: 'Order Month' -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v4: VizBlock { -// label: 'This month Total Order' -// viz: MetricKpi { -// dataset: vyhuynh_ecommerce_dataset -// calculation monthly_revenue { -// label: 'Monthly Revenue' -// formula: @aql vyht_ecommerce_order_items -// | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(vyht_ecommerce_orders_1.created_at) -// operator: 'matches' -// value: 'July 2023' -// } -// value: VizFieldFull { -// label: 'Total Order This Month' -// ref: r(vyht_ecommerce_orders_1.id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// compare_value: VizPopSettings { -// field: r(vyht_ecommerce_orders_1.created_at) -// duration: 1 -// granularity: 'month' -// } -// settings { -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// alignment: 'left' -// } -// } -// settings { -// hide_label: true -// } -// } -// block v5: VizBlock { -// label: 'GMV by Continent (2024)' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block t1: TextBlock { -// content: @md
-// -// -// -// -// -//
;; -// } -// block t2: TextBlock { -// content: @md # Regional Analysis;; -// } -// block t3: TextBlock { -// content: @md -// -// ;; -// } -// block t4: TextBlock { -// content: @md -// -// -// ;; -// } -// block t5: TextBlock { -// content: @md ### Filter by Country;; -// } -// block f1: FilterBlock { -// label: 'Country Name' -// type: 'field' -// source: FieldFilterSource { -// dataset: demo_ecommerce -// field: r(ecommerce_countries.name) -// } -// default { -// operator: 'is' -// value: [] -// } -// settings { -// drillthrough: Drillthrough { -// enabled: true -// sources: [ -// AutoDrillthroughSource { -// } -// ] -// } -// } -// } -// block t6: TextBlock { -// content: @md -// -// ;; -// } -// block t7: TextBlock { -// content: @md -// -// -// ;; -// } -// block t8: TextBlock { -// content: @md ### Filter by City;; -// } -// block f2: FilterBlock { -// label: 'City Name' -// type: 'field' -// source: FieldFilterSource { -// dataset: demo_ecommerce -// field: r(ecommerce_cities.name) -// } -// default { -// operator: 'is' -// value: [] -// } -// settings { -// drillthrough: Drillthrough { -// enabled: true -// sources: [ -// AutoDrillthroughSource { -// } -// ] -// } -// } -// } -// block t9: H.blocks.line(2, '#8F99A3') -// block v8: VizBlock { -// label: 'GMV - Gross Merchandise Value by Month' -// viz: AreaChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(ecommerce_orders.created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// label: 'GMV' -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// series { -// field: VizFieldFull { -// label: 'Untitled Trend line' -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// analytic: RegressionLine { -// type: 'linear' -// } -// } -// settings { -// line_style: 'dashed' -// } -// } -// } -// settings { -// show_rows_with_no_data: true -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_711g: VizBlock { -// label: 'Number of Order by Country Name and City Name' -// viz: LineChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_month) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// label: 'Total Order' -// settings { -// show_data_label_by: 'value' -// stack_series_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.order_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_label: 'Country' -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_ztqi: VizBlock { -// label: 'Table 1' -// viz: DataTable { -// dataset: demo_ecommerce -// theme { -// } -// fields: [ -// VizFieldFull { -// ref: r(order_master.order_created_month) -// format { -// type: 'date' -// } -// uname: 'order_master_order_created_month_1' -// }, -// VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// uname: 'ecommerce_countries_continent_name' -// }, -// VizFieldFull { -// ref: r(order_master.user_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// uname: 'count_distinct_user_id_1' -// }, -// VizFieldFull { -// ref: r(order_master.order_id) -// aggregation: 'count' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// uname: 'count_order_id' -// }, -// VizFieldFull { -// ref: r(order_master.price) -// aggregation: 'sum' -// format { -// type: 'number' -// pattern: '[$$]#,###' -// } -// } -// ] -// settings { -// show_row_number: true -// sorts: [ -// SortSetting { -// key: 'count_distinct_user_id_1' -// direction: 'desc' -// } -// ] -// row_limit: 5000 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// column_styles: [ -// ColumnStyle { -// key: 'count_order_id' -// width: 89 -// }, -// ColumnStyle { -// key: 'count_distinct_user_id_1' -// width: 100 -// }, -// ColumnStyle { -// key: 'ecommerce_countries_continent_name' -// width: 162 -// }, -// ColumnStyle { -// key: 'order_master_order_created_month_1' -// width: 215 -// } -// ] -// } -// } -// } -// block v_hk4u: VizBlock { -// label: 'Order Created Month, City Name, and CountD of User Id' -// viz: DataTable { -// dataset: demo_ecommerce -// filter { -// field: r(order_master.order_created_month) -// operator: 'matches' -// value: 'may 2023' -// } -// fields: [ -// VizFieldFull { -// ref: r(order_master.order_created_month) -// format { -// type: 'date' -// } -// }, -// VizFieldFull { -// ref: r(ecommerce_cities.name) -// format { -// type: 'text' -// } -// }, -// VizFieldFull { -// ref: r(order_master.user_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// uname: 'count_distinct_user_id_1' -// } -// ] -// settings { -// show_row_number: true -// sorts: [ -// SortSetting { -// key: 'count_distinct_user_id_1' -// direction: 'desc' -// } -// ] -// row_limit: 5000 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_wsww: VizBlock { -// label: 'Order Created Month, City Name, and CountD of User Id' -// viz: DataTable { -// dataset: demo_ecommerce -// filter { -// field: r(order_master.order_created_month) -// operator: 'matches' -// value: 'may 2023' -// } -// fields: [ -// VizFieldFull { -// ref: r(order_master.order_created_month) -// format { -// type: 'date' -// } -// }, -// VizFieldFull { -// ref: r(ecommerce_cities.name) -// format { -// type: 'text' -// } -// }, -// VizFieldFull { -// ref: r(order_master.user_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// uname: 'count_distinct_user_id_1' -// } -// ] -// settings { -// show_row_number: true -// sorts: [ -// SortSetting { -// key: 'order_master_order_created_month_1' -// direction: 'asc' -// } -// ] -// row_limit: 5000 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_nehb: VizBlock { -// label: 'Total Revenue and Number of Order by Month' -// viz: DataTable { -// dataset: vyhuynh_ecommerce_dataset -// fields: [ -// VizFieldFull { -// label: 'Order Month' -// ref: r(vyht_ecommerce_orders_1.created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// }, -// VizFieldFull { -// label: 'Total Revenue' -// ref: r(vyhuynh_ecommerce_dataset.total_revenue) -// format { -// type: 'number' -// pattern: '[$$]#,###' -// } -// }, -// VizFieldFull { -// ref: r(vyht_ecommerce_orders_1.id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// ] -// settings { -// show_row_number: true -// row_limit: 100 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_856v: VizBlock { -// label: 'Table 2' -// viz: DataTable { -// dataset: demo_ecommerce -// theme { -// } -// fields: [ -// VizFieldFull { -// ref: r(order_master.order_created_month) -// format { -// type: 'date' -// } -// uname: 'order_master_order_created_month_1' -// }, -// VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// }, -// VizFieldFull { -// ref: r(order_master.user_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// uname: 'count_distinct_user_id_1' -// } -// ] -// settings { -// show_row_number: true -// sorts: [ -// SortSetting { -// key: 'count_distinct_user_id_1' -// direction: 'desc' -// } -// ] -// row_limit: 5000 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_cii9: VizBlock { -// label: 'Count Users, Sum Price, and AOV - Average Order Value by Name' -// viz: CombinationChart { -// dataset: demo_bigquery_ecommerce -// calculation sum_price { -// label: 'Sum Price' -// formula: @aql sum(bq_dim_products.price);; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(bq_fct_order_items.created_date) -// operator: 'matches' -// value: '2023' -// } -// x_axis: VizFieldFull { -// ref: r(bq_dim_product_countries.name) -// format { -// type: 'text' -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// ref: r(demo_bigquery_ecommerce.count_users) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// y_axis { -// settings { -// alignment: 'right' -// } -// series { -// field: VizFieldFull { -// ref: 'sum_price' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// ref: r(demo_bigquery_ecommerce.aov) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_qctn: VizBlock { -// label: 'Number of Order by Country Name and City Name' -// viz: LineChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// label: 'Total Order' -// settings { -// show_data_label_by: 'value' -// stack_series_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.order_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// series { -// field: VizFieldFull { -// ref: r(demo_ecommerce, order_master.aov_by_product) -// aggregation: 'count' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_label: 'Country' -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_9rhg: VizBlock { -// label: 'Number of Order by Country Name and City Name' -// viz: ColumnChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(ecommerce_cities.name) -// format { -// type: 'text' -// } -// } -// y_axis { -// label: 'Total Order' -// settings { -// show_data_label_by: 'value' -// stack_series_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.order_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// sort { -// field_index: 0 -// direction: 'desc' -// type: 'xaxis' -// } -// x_axis_label: 'Country' -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block t_4ttu: TextBlock { -// content: @md -// -// ;; -// } -// block t_5y3l: TextBlock { -// content: @md -// -// -// ;; -// } -// block t_vb6z: TextBlock { -// content: @md ### Date Filter;; -// } -// block f_zwa4: FilterBlock { -// label: 'Date' -// type: 'field' -// source: FieldFilterSource { -// dataset: demo_ecommerce -// field: r(order_master.order_created_at) -// } -// default { -// operator: 'matches' -// value: '$H_NIL$' -// } -// settings { -// drillthrough: Drillthrough { -// enabled: true -// sources: [ -// AutoDrillthroughSource { -// } -// ] -// } -// } -// } -// block v_3mef: VizBlock { -// label: 'Chart 3' -// viz: CombinationChart { -// dataset: ecom_dataset_vux -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.status) -// format { -// type: 'text' -// } -// } -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// label: 'Number Order' -// ref: r(order_master.order_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color_palette: 0 -// } -// } -// series { -// field: VizFieldFull { -// label: 'Number User' -// ref: r(order_master.user_id) -// aggregation: 'count' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_059z: VizBlock { -// label: 'Table 2' -// viz: PivotTable { -// dataset: ecom_dataset_vux -// theme { -// } -// rows: [ -// VizFieldFull { -// ref: r(order_master.status) -// format { -// type: 'text' -// } -// } -// ] -// columns: [ -// VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// ] -// values: [ -// VizFieldFull { -// label: 'Number Order' -// ref: r(order_master.order_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// }, -// VizFieldFull { -// label: 'Number User' -// ref: r(order_master.user_id) -// aggregation: 'count' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// ] -// settings { -// show_row_total: true -// show_column_total: true -// row_limit: 5000 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_tusm: VizBlock { -// label: 'GMV - Gross Merchandise Value by Country Name' -// viz: BarChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(ecommerce_countries.name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_j83d: VizBlock { -// label: 'Count of Id by Latitude, Longitude, and Neighbourhood' -// viz: BubbleChart { -// dataset: demo_ecommerce -// x_col: VizFieldFull { -// ref: r(demo_ecommerce.total_orders) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// y_col: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// z_col: VizFieldFull { -// ref: r(order_master.aov) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// group_col: VizFieldFull { -// ref: r(map_categories.parent_category) -// format { -// type: 'text' -// } -// } -// settings { -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_nyr1: VizBlock { -// label: 'GMV - Gross Merchandise Value by Continent Name' -// viz: PieChart { -// dataset: demo_ecommerce -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color_palette: 0 -// } -// } -// settings { -// display_as_donut: true -// show_total: true -// row_limit: 5000 -// data_label_position: 'outside' -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_qj0m: VizBlock { -// label: 'Sales by Category ID' -// viz: LineChart { -// dataset: american_housing_data_chinh_test -// x_axis: VizFieldFull { -// ref: r(zipcode_data_american_housing_data.beds) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// label: 'Sales' -// ref: r(zipcode_data_american_housing_data.price) -// aggregation: 'sum' -// format { -// type: 'number' -// pattern: '[$$]#,###' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_lpgt: VizBlock { -// label: 'AOV - Average Order Value by Category' -// viz: PieChart { -// dataset: demo_ecommerce -// legend: VizFieldFull { -// ref: r(map_categories.category) -// format { -// type: 'text' -// } -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.aov) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color_palette: 0 -// } -// } -// settings { -// row_limit: 5000 -// data_label_position: 'none' -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_5zcz: VizBlock { -// label: 'GMV - Gross Merchandise Value by Month' -// viz: CombinationChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(ecommerce_orders.created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// label: 'GMV' -// settings { -// show_data_label_by: 'value' -// } -// series { -// mark_type: 'column' -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// y_axis { -// settings { -// alignment: 'right' -// } -// series { -// field: VizFieldFull { -// label: 'Untitled Reference line' -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// analytic: ReferenceLine { -// type: 'avg' -// } -// } -// } -// } -// settings { -// show_rows_with_no_data: true -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_5dpt: VizBlock { -// label: 'GMV - Gross Merchandise Value and Total Orders by Month Order Created At' -// viz: CombinationChart { -// dataset: demo_ecommerce -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// y_axis { -// settings { -// alignment: 'right' -// } -// series { -// mark_type: 'line' -// field: r(demo_ecommerce.total_orders) -// settings { -// line_style: 'dashed' -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_ck6w: VizBlock { -// label: 'Table 1' -// viz: PivotTable { -// dataset: ecom_dataset_vux -// theme { -// } -// rows: [ -// VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// uname: 'ecommerce_countries_continent_name' -// }, -// VizFieldFull { -// ref: r(ecommerce_users.gender) -// format { -// type: 'text' -// } -// uname: 'ecommerce_users_gender' -// }, -// VizFieldFull { -// label: 'Product Category' -// ref: r(order_master.delivery_attempts) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// uname: 'order_master_delivery_attempts' -// } -// ] -// columns: [ -// VizFieldFull { -// ref: r(order_master.status) -// format { -// type: 'text' -// } -// } -// ] -// values: [ -// VizFieldFull { -// label: 'Number Order' -// ref: r(order_master.order_id) -// aggregation: 'count distinct' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// }, -// VizFieldFull { -// label: 'GMV' -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// ] -// settings { -// show_row_total: true -// show_column_total: true -// row_limit: 5000 -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// column_styles: [ -// ColumnStyle { -// key: 'ecommerce_users_gender' -// width: 86 -// }, -// ColumnStyle { -// key: 'order_master_delivery_attempts' -// width: 116 -// }, -// ColumnStyle { -// key: 'ecommerce_countries_continent_name' -// width: 117 -// } -// ] -// } -// } -// } -// block f_countries_continent_name: FilterBlock { -// label: 'Countries Continent Name' -// type: 'field' -// source: FieldFilterSource { -// dataset: demo_ecommerce -// field: r(ecommerce_countries.continent_name) -// } -// default { -// operator: 'is' -// value: [] -// } -// } -// block v_8fpj: VizBlock { -// label: 'Revenue by Sale reps' -// viz: BarChart { -// dataset: vyhuynh_ecommerce_dataset -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(vy_sales_revenue_demo_csv.sales_rep) -// format { -// type: 'text' -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// ref: r(vy_sales_revenue_demo_csv.revenue_usd) -// aggregation: 'sum' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// series { -// field: ConstantVizField { -// label: 'KPI goal' -// value: 60000 -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// line_style: 'dashed' -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_jbl8: VizBlock { -// label: 'Total Order Value by Month Created Date' -// viz: LineChart { -// dataset: demo_ecommerce_metrics -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(ecommerce_orders.created_date) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// ref: r(demo_ecommerce_metrics.total_order_value) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color_palette: 0 -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_350o: VizBlock { -// label: 'GMV by Continent (2024) - Compare vs LY' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// calculation metric_f0aed54 { -// label: '% Delta LY - GMV ' -// formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; -// calc_type: 'measure' -// data_type: 'number' -// } -// calculation metric_a9389ef { -// label: ' LY - GMV' -// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; -// calc_type: 'measure' -// data_type: 'number' -// } -// calculation metric_57371a1 { -// label: 'Delta LY - GMV' -// formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: 'metric_a9389ef' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color: '#7C9EE5' -// } -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// color: '#255DD4' -// } -// } -// } -// tooltips: [ -// VizTooltip { -// field: VizFieldFull { -// ref: 'metric_f0aed54' -// format { -// type: 'number' -// pattern: '#,###%' -// } -// } -// }, -// VizTooltip { -// field: VizFieldFull { -// ref: 'metric_57371a1' -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// ] -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_qnug: VizBlock { -// label: 'GMV by Continent (2024) - Show trend over time' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_tq6d: VizBlock { -// label: 'GMV by Continent (2024) - Show % change copy' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// calculation metric_f0aed54 { -// label: '% Delta LY - GMV ' -// formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; -// calc_type: 'measure' -// data_type: 'number' -// } -// calculation metric_a9389ef { -// label: ' LY - GMV' -// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: 'metric_f0aed54' -// format { -// type: 'number' -// pattern: '#,###%' -// } -// } -// settings { -// color: '#18A59E' -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_wwiv: VizBlock { -// label: 'GMV by Continent over time - With Trendline' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// series { -// field: VizFieldFull { -// label: 'Trend line of Gmv' -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// analytic: RegressionLine { -// type: 'linear' -// } -// } -// settings { -// line_style: 'dashed' -// point { -// value: 'Asia' -// line_style: 'dashed' -// } -// point { -// value: 'Europe' -// line_style: 'dashed' -// } -// point { -// value: 'Oceania' -// line_style: 'dashed' -// } -// point { -// value: 'North America' -// line_style: 'dashed' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_6o9d: VizBlock { -// label: 'GMV by Continent over time - Line chart' -// description: 'This is description of the block' -// viz: LineChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// legend: VizFieldFull { -// ref: r(ecommerce_countries.continent_name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block t_hcv3: TextBlock { -// content: @md ## Time series analysis;; -// } -// block t_ww35: TextBlock { -// content: @md ## Categorical analysis;; -// } -// block t_vh1h: TextBlock { -// content: @md ## Distribution analysis;; -// } -// block v_ji80: VizBlock { -// label: 'Total order distributed by Price' -// viz: ScatterChart { -// dataset: demo_ecommerce -// theme { -// } -// x_col: VizFieldFull { -// ref: r(order_master.price) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// y_col: VizFieldFull { -// ref: r(demo_ecommerce.total_orders) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// block v_7vcf: VizBlock { -// label: 'Total GMV (2024)' -// description: 'This is description of the block' -// viz: MetricKpi { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// calculation metric_f688c32 { -// label: '% Change - LY - GMV' -// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2025' -// } -// theme { -// } -// value: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// compare_value: VizFieldFull { -// ref: 'metric_f688c32' -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// settings { -// display_mode: 'compare_by_number' -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// alignment: 'left' -// } -// } -// } -// block v_n0qr: VizBlock { -// label: 'Total order distributed by Price- With trend line' -// viz: LineChart { -// dataset: demo_ecommerce -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.price) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// y_axis { -// series { -// field: VizFieldFull { -// ref: r(demo_ecommerce.total_orders) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// series { -// field: VizFieldFull { -// label: 'Trend line of Total Orders' -// ref: r(demo_ecommerce.total_orders) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// analytic: RegressionLine { -// type: 'linear' -// } -// } -// settings { -// line_style: 'dashed' -// } -// } -// } -// settings { -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_jpzg: VizBlock { -// label: 'GMV over time' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_0sbb: VizBlock { -// label: 'GMV over time - with trendline' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// series { -// field: VizFieldFull { -// label: 'Trend line of Gmv' -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// analytic: RegressionLine { -// type: 'linear' -// } -// } -// settings { -// line_style: 'dashed' -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_58pi: VizBlock { -// label: 'GMV over time - vs LY' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// calculation metric_14d21cf { -// label: 'LY - GMV' -// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; -// calc_type: 'measure' -// data_type: 'number' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(order_master.order_created_at) -// transformation: 'datetrunc month' -// format { -// type: 'date' -// pattern: 'LLL yyyy' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// series { -// field: VizFieldFull { -// ref: 'metric_14d21cf' -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_vk4x: VizBlock { -// label: 'GMV by Country (2024)' -// description: 'This is description of the block' -// viz: ColumnChart { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2024' -// } -// theme { -// } -// x_axis: VizFieldFull { -// ref: r(ecommerce_countries.name) -// format { -// type: 'text' -// } -// } -// y_axis { -// settings { -// show_data_label_by: 'value' -// } -// series { -// field: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// } -// } -// settings { -// row_limit: 5000 -// x_axis_show_null_datetime: false -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// } -// } -// } -// block v_ufmq: VizBlock { -// label: 'Total GMV (2024) copy' -// description: 'This is description of the block' -// viz: MetricKpi { -// dataset: demo_ecommerce -// calculation adhoc_dim { -// label: 'My adhoc dim' -// formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; -// calc_type: 'dimension' -// data_type: 'text' -// model: order_master -// } -// calculation metric_f688c32 { -// label: '% Change - LY - GMV' -// formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; -// calc_type: 'measure' -// data_type: 'number' -// } -// filter { -// field: r(order_master.order_created_at) -// operator: 'matches' -// value: '2025' -// } -// theme { +;; + view: TabLayout { + label: 'View 1' + tab tab2: CanvasLayout { + label: 'Revenue Overview' + width: 1220 + height: 4060 + grid_size: 20 + block v2 { + position: pos(920, 220, 260, 140) + layer: 2 + } + block v3 { + position: pos(20, 1240, 1160, 460) + layer: 3 + } + block v4 { + position: pos(920, 380, 260, 140) + layer: 2 + } + block t3 { + position: pos(20, 20, 380, 160) + layer: 4 + } + block t4 { + position: pos(40, 40, 60, 40) + layer: 5 + } + block t5 { + position: pos(80, 40, 300, 40) + layer: 6 + } + block f1 { + position: pos(80, 80, 280, 60) + layer: 7 + } + block t6 { + position: pos(400, 20, 380, 160) + layer: 4 + } + block t7 { + position: pos(420, 40, 60, 40) + layer: 5 + } + block t8 { + position: pos(460, 40, 300, 60) + layer: 8 + } + block f2 { + position: pos(460, 80, 280, 60) + layer: 7 + } + block t9 { + position: pos(20, 180, 1160, 20) + layer: 9 + } + block v8 { + position: pos(20, 640, 1160, 580) + layer: 1 + } + block v_711g { + position: pos(20, 220, 640, 400) + layer: 1 + } + block v_nehb { + position: pos(20, 2320, 1160, 460) + layer: 1 + } + block v_cii9 { + position: pos(20, 2800, 1160, 400) + layer: 10 + } + block t_4ttu { + position: pos(800, 20, 380, 160) + layer: 1 + } + block t_5y3l { + position: pos(820, 40, 60, 40) + layer: 2 + } + block t_vb6z { + position: pos(860, 40, 300, 60) + layer: 3 + } + block f_zwa4 { + position: pos(860, 80, 280, 60) + layer: 4 + } + block v_qj0m { + position: pos(20, 3220, 1160, 400) + layer: 11 + } + block v_lpgt { + position: pos(20, 3640, 580, 400) + layer: 12 + } + block v_5zcz { + position: pos(20, 1720, 1160, 580) + layer: 1 + } + block v_jbl8 { + position: pos(620, 3640, 560, 400) + layer: 3 + } + mobile { + mode: 'auto' + } + default_zoom: 1 + auto_expand_vertically: true + } + tab tab_5auh: CanvasLayout { + label: 'Raw Data Table' + height: 1480 + grid_size: 20 + auto_expand_vertically: true + block v_ztqi { + position: pos(20, 20, 940, 420) + layer: 1 + } + block v_856v { + position: pos(20, 460, 940, 420) + layer: 1 + } + mobile { + mode: 'auto' + } + width: 1500 + default_zoom: 1 + } + tab tab3: CanvasLayout { + label: 'Regional Analysis' + height: 9440 + grid_size: 20 + block v5 { + position: pos(20, 360, 540, 420) + layer: 1 + } + block t1 { + position: pos(20, 20, 60, 60) + layer: 2 + } + block t2 { + position: pos(80, 20, 400, 60) + layer: 3 + } + block v_qctn { + position: pos(20, 5660, 1160, 580) + layer: 1 + } + block v_9rhg { + position: pos(20, 6260, 1160, 580) + layer: 1 + } + block v_tusm { + position: pos(20, 7380, 1160, 500) + layer: 1 + } + block v_j83d { + position: pos(20, 7900, 1160, 480) + layer: 1 + } + block v_nyr1 { + position: pos(20, 8400, 1160, 500) + layer: 1 + } + block v_5dpt { + position: pos(20, 8920, 1160, 500) + layer: 1 + } + block v_8fpj { + position: pos(20, 5140, 1160, 500) + layer: 4 + } + block v_350o { + position: pos(20, 800, 540, 400) + layer: 1 + } + block v_qnug { + position: pos(20, 1220, 1160, 400) + layer: 1 + } + block v_tq6d { + position: pos(580, 800, 600, 400) + layer: 1 + } + block t_hcv3 { + position: pos(20, 1660, 320, 60) + layer: 1 + } + block t_ww35 { + position: pos(20, 300, 320, 60) + layer: 1 + } + block v_6o9d { + position: pos(20, 3580, 1160, 440) + layer: 1 + } + block v_wwiv { + position: pos(20, 3120, 1160, 440) + layer: 1 + } + block t_vh1h { + position: pos(20, 4080, 320, 60) + layer: 1 + } + block v_7vcf { + position: pos(20, 100, 380, 180) + layer: 1 + } + block v_ji80 { + position: pos(20, 4140, 1160, 480) + layer: 1 + } + block v_n0qr { + position: pos(20, 4640, 1160, 480) + layer: 1 + } + block v_0sbb { + position: pos(20, 2660, 1160, 440) + layer: 1 + } + block v_58pi { + position: pos(20, 2200, 1160, 440) + layer: 1 + } + block v_jpzg { + position: pos(20, 1740, 1160, 440) + layer: 1 + } + block v_vk4x { + position: pos(580, 360, 540, 420) + layer: 1 + } + block v_ufmq { + position: pos(420, 100, 380, 180) + layer: 1 + } + mobile { + mode: 'auto' + } + auto_expand_vertically: true + } + tab tab_4i2l: CanvasLayout { + label: 'User Analysis' + width: 1500 + height: 2020 + grid_size: 20 + auto_expand_vertically: true + mobile { + mode: 'auto' + } + block v_3mef { + position: pos(20, 860, 1240, 280) + layer: 1 + } + block v_059z { + position: pos(20, 600, 1240, 240) + layer: 1 + } + block v_ck6w { + position: pos(20, 120, 1460, 460) + layer: 2 + } + block f_countries_continent_name { + position: pos(20, 20, 300, 80) + layer: 2 + } + auto_expand_horizontally: true + } + } + theme: H.themes.vanilla + block v2: VizBlock { + label: 'This month Revenue' + viz: MetricKpi { + dataset: vyhuynh_ecommerce_dataset + calculation monthly_revenue { + label: 'Monthly Revenue' + formula: @aql vyht_ecommerce_order_items + | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(vyht_ecommerce_orders_1.created_at) + operator: 'matches' + value: 'July 2023' + } + value: VizFieldFull { + label: 'Total Revenue This Month' + ref: 'total_revenue' + format { + type: 'number' + pattern: '[$$]#,###' + } + } + compare_value: VizPopSettings { + field: r(vyht_ecommerce_orders_1.created_at) + duration: 1 + granularity: 'month' + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + settings { + hide_label: true + } + } + block v3: VizBlock { + label: 'Total Revenue and Number of Order by Month' + viz: CombinationChart { + dataset: vyhuynh_ecommerce_dataset + filter { + field: r(vyht_ecommerce_orders_1.created_at) + operator: 'matches' + value: '2024' + } + x_axis: VizFieldFull { + label: 'Order Month' + ref: r(vyht_ecommerce_orders_1.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'Total Revenue' + settings { + group_values_into: 10 + show_data_label_by: 'value' + } + series { + mark_type: 'column' + field: VizFieldFull { + label: 'Total Revenue' + ref: r(vyhuynh_ecommerce_dataset.total_revenue) + format { + type: 'number' + pattern: '[$$]#,###' + } + } + settings { + color: '#255DD4' + } + } + } + y_axis { + label: 'Number of Order' + settings { + alignment: 'right' + group_values_into: 10 + } + series { + mark_type: 'line' + field: VizFieldFull { + ref: r(vyht_ecommerce_orders_1.id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#18A59E' + line_style: 'dashed' + } + } + } + settings { + row_limit: 100 + x_axis_label: 'Order Month' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v4: VizBlock { + label: 'This month Total Order' + viz: MetricKpi { + dataset: vyhuynh_ecommerce_dataset + calculation monthly_revenue { + label: 'Monthly Revenue' + formula: @aql vyht_ecommerce_order_items + | sum(vyht_ecommerce_order_items.quantity * vyht_ecommerce_products.price);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(vyht_ecommerce_orders_1.created_at) + operator: 'matches' + value: 'July 2023' + } + value: VizFieldFull { + label: 'Total Order This Month' + ref: r(vyht_ecommerce_orders_1.id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + compare_value: VizPopSettings { + field: r(vyht_ecommerce_orders_1.created_at) + duration: 1 + granularity: 'month' + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + settings { + hide_label: true + } + } + block v5: VizBlock { + label: 'GMV by Continent (2024)' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t1: TextBlock { + content: @md
+ + + + + +
;; + } + block t2: TextBlock { + content: @md # Regional Analysis;; + } + block t3: TextBlock { + content: @md + +;; + } + block t4: TextBlock { + content: @md + + +;; + } + block t5: TextBlock { + content: @md ### Filter by Country;; + } + block f1: FilterBlock { + label: 'Country Name' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(ecommerce_countries.name) + } + default { + operator: 'is' + value: [] + } + settings { + drillthrough: Drillthrough { + enabled: true + sources: [ + AutoDrillthroughSource { + } + ] + } + } + } + block t6: TextBlock { + content: @md + +;; + } + block t7: TextBlock { + content: @md + + +;; + } + block t8: TextBlock { + content: @md ### Filter by City;; + } + block f2: FilterBlock { + label: 'City Name' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(ecommerce_cities.name) + } + default { + operator: 'is' + value: [] + } + settings { + drillthrough: Drillthrough { + enabled: true + sources: [ + AutoDrillthroughSource { + } + ] + } + } + } + block t9: H.blocks.line(2, '#8F99A3') + block v8: VizBlock { + label: 'GMV - Gross Merchandise Value by Month' + viz: AreaChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_orders.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'GMV' + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Untitled Trend line' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + show_rows_with_no_data: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_711g: VizBlock { + label: 'Number of Order by Country Name and City Name' + viz: LineChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(order_master.order_created_month) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_ztqi: VizBlock { + label: 'Table 1' + viz: DataTable { + dataset: demo_ecommerce + theme { + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + uname: 'order_master_order_created_month_1' + }, + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + uname: 'ecommerce_countries_continent_name' + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + }, + VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_order_id' + }, + VizFieldFull { + ref: r(order_master.price) + aggregation: 'sum' + format { + type: 'number' + pattern: '[$$]#,###' + } + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'count_distinct_user_id_1' + direction: 'desc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + column_styles: [ + ColumnStyle { + key: 'count_order_id' + width: 89 + }, + ColumnStyle { + key: 'count_distinct_user_id_1' + width: 100 + }, + ColumnStyle { + key: 'ecommerce_countries_continent_name' + width: 162 + }, + ColumnStyle { + key: 'order_master_order_created_month_1' + width: 215 + } + ] + } + } + } + block v_hk4u: VizBlock { + label: 'Order Created Month, City Name, and CountD of User Id' + viz: DataTable { + dataset: demo_ecommerce + filter { + field: r(order_master.order_created_month) + operator: 'matches' + value: 'may 2023' + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + }, + VizFieldFull { + ref: r(ecommerce_cities.name) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'count_distinct_user_id_1' + direction: 'desc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_wsww: VizBlock { + label: 'Order Created Month, City Name, and CountD of User Id' + viz: DataTable { + dataset: demo_ecommerce + filter { + field: r(order_master.order_created_month) + operator: 'matches' + value: 'may 2023' + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + }, + VizFieldFull { + ref: r(ecommerce_cities.name) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'order_master_order_created_month_1' + direction: 'asc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_nehb: VizBlock { + label: 'Total Revenue and Number of Order by Month' + viz: DataTable { + dataset: vyhuynh_ecommerce_dataset + fields: [ + VizFieldFull { + label: 'Order Month' + ref: r(vyht_ecommerce_orders_1.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + }, + VizFieldFull { + label: 'Total Revenue' + ref: r(vyhuynh_ecommerce_dataset.total_revenue) + format { + type: 'number' + pattern: '[$$]#,###' + } + }, + VizFieldFull { + ref: r(vyht_ecommerce_orders_1.id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_number: true + row_limit: 100 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_856v: VizBlock { + label: 'Table 2' + viz: DataTable { + dataset: demo_ecommerce + theme { + } + fields: [ + VizFieldFull { + ref: r(order_master.order_created_month) + format { + type: 'date' + } + uname: 'order_master_order_created_month_1' + }, + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(order_master.user_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + uname: 'count_distinct_user_id_1' + } + ] + settings { + show_row_number: true + sorts: [ + SortSetting { + key: 'count_distinct_user_id_1' + direction: 'desc' + } + ] + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_cii9: VizBlock { + label: 'Count Users, Sum Price, and AOV - Average Order Value by Name' + viz: CombinationChart { + dataset: demo_bigquery_ecommerce + calculation sum_price { + label: 'Sum Price' + formula: @aql sum(bq_dim_products.price);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(bq_fct_order_items.created_date) + operator: 'matches' + value: '2023' + } + x_axis: VizFieldFull { + ref: r(bq_dim_product_countries.name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_bigquery_ecommerce.count_users) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + field: VizFieldFull { + ref: 'sum_price' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_bigquery_ecommerce.aov) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qctn: VizBlock { + label: 'Number of Order by Country Name and City Name' + viz: LineChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + ref: r(demo_ecommerce, order_master.aov_by_product) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_9rhg: VizBlock { + label: 'Number of Order by Country Name and City Name' + viz: ColumnChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_cities.name) + format { + type: 'text' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + sort { + field_index: 0 + direction: 'desc' + type: 'xaxis' + } + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t_4ttu: TextBlock { + content: @md + +;; + } + block t_5y3l: TextBlock { + content: @md + + +;; + } + block t_vb6z: TextBlock { + content: @md ### Date Filter;; + } + block f_zwa4: FilterBlock { + label: 'Date' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(order_master.order_created_at) + } + default { + operator: 'matches' + value: '$H_NIL$' + } + settings { + drillthrough: Drillthrough { + enabled: true + sources: [ + AutoDrillthroughSource { + } + ] + } + } + } + block v_3mef: VizBlock { + label: 'Chart 3' + viz: CombinationChart { + dataset: ecom_dataset_vux + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.status) + format { + type: 'text' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + label: 'Number Order' + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + series { + field: VizFieldFull { + label: 'Number User' + ref: r(order_master.user_id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_059z: VizBlock { + label: 'Table 2' + viz: PivotTable { + dataset: ecom_dataset_vux + theme { + } + rows: [ + VizFieldFull { + ref: r(order_master.status) + format { + type: 'text' + } + } + ] + columns: [ + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + ] + values: [ + VizFieldFull { + label: 'Number Order' + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Number User' + ref: r(order_master.user_id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_total: true + show_column_total: true + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_tusm: VizBlock { + label: 'GMV - Gross Merchandise Value by Country Name' + viz: BarChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_countries.name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_j83d: VizBlock { + label: 'Count of Id by Latitude, Longitude, and Neighbourhood' + viz: BubbleChart { + dataset: demo_ecommerce + x_col: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + y_col: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + z_col: VizFieldFull { + ref: r(order_master.aov) + format { + type: 'number' + pattern: 'inherited' + } + } + group_col: VizFieldFull { + ref: r(map_categories.parent_category) + format { + type: 'text' + } + } + settings { + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_nyr1: VizBlock { + label: 'GMV - Gross Merchandise Value by Continent Name' + viz: PieChart { + dataset: demo_ecommerce + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + settings { + display_as_donut: true + show_total: true + row_limit: 5000 + data_label_position: 'outside' + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qj0m: VizBlock { + label: 'Sales by Category ID' + viz: LineChart { + dataset: american_housing_data_chinh_test + x_axis: VizFieldFull { + ref: r(zipcode_data_american_housing_data.beds) + format { + type: 'number' + pattern: 'inherited' + } + } + y_axis { + series { + field: VizFieldFull { + label: 'Sales' + ref: r(zipcode_data_american_housing_data.price) + aggregation: 'sum' + format { + type: 'number' + pattern: '[$$]#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_lpgt: VizBlock { + label: 'AOV - Average Order Value by Category' + viz: PieChart { + dataset: demo_ecommerce + legend: VizFieldFull { + ref: r(map_categories.category) + format { + type: 'text' + } + } + series { + field: VizFieldFull { + ref: r(order_master.aov) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + settings { + row_limit: 5000 + data_label_position: 'none' + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_5zcz: VizBlock { + label: 'GMV - Gross Merchandise Value by Month' + viz: CombinationChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(ecommerce_orders.created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'GMV' + settings { + show_data_label_by: 'value' + } + series { + mark_type: 'column' + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + field: VizFieldFull { + label: 'Untitled Reference line' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + analytic: ReferenceLine { + type: 'avg' + } + } + } + } + settings { + show_rows_with_no_data: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_5dpt: VizBlock { + label: 'GMV - Gross Merchandise Value and Total Orders by Month Order Created At' + viz: CombinationChart { + dataset: demo_ecommerce + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + mark_type: 'line' + field: r(demo_ecommerce.total_orders) + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_ck6w: VizBlock { + label: 'Table 1' + viz: PivotTable { + dataset: ecom_dataset_vux + theme { + } + rows: [ + VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + uname: 'ecommerce_countries_continent_name' + }, + VizFieldFull { + ref: r(ecommerce_users.gender) + format { + type: 'text' + } + uname: 'ecommerce_users_gender' + }, + VizFieldFull { + label: 'Product Category' + ref: r(order_master.delivery_attempts) + format { + type: 'number' + pattern: 'inherited' + } + uname: 'order_master_delivery_attempts' + } + ] + columns: [ + VizFieldFull { + ref: r(order_master.status) + format { + type: 'text' + } + } + ] + values: [ + VizFieldFull { + label: 'Number Order' + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'GMV' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + ] + settings { + show_row_total: true + show_column_total: true + row_limit: 5000 + aggregate_awareness { + enabled: true + debug_comments: true + } + column_styles: [ + ColumnStyle { + key: 'ecommerce_users_gender' + width: 86 + }, + ColumnStyle { + key: 'order_master_delivery_attempts' + width: 116 + }, + ColumnStyle { + key: 'ecommerce_countries_continent_name' + width: 117 + } + ] + } + } + } + block f_countries_continent_name: FilterBlock { + label: 'Countries Continent Name' + type: 'field' + source: FieldFilterSource { + dataset: demo_ecommerce + field: r(ecommerce_countries.continent_name) + } + default { + operator: 'is' + value: [] + } + } + block v_8fpj: VizBlock { + label: 'Revenue by Sale reps' + viz: BarChart { + dataset: vyhuynh_ecommerce_dataset + theme { + } + x_axis: VizFieldFull { + ref: r(vy_sales_revenue_demo_csv.sales_rep) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(vy_sales_revenue_demo_csv.revenue_usd) + aggregation: 'sum' + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: ConstantVizField { + label: 'KPI goal' + value: 60000 + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_jbl8: VizBlock { + label: 'Total Order Value by Month Created Date' + viz: LineChart { + dataset: demo_ecommerce_metrics + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_orders.created_date) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_ecommerce_metrics.total_order_value) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color_palette: 0 + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_350o: VizBlock { + label: 'GMV by Continent (2024) - Compare vs LY' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f0aed54 { + label: '% Delta LY - GMV ' + formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_a9389ef { + label: ' LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_57371a1 { + label: 'Delta LY - GMV' + formula: @aql order_master.gmv - (order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: 'metric_a9389ef' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#7C9EE5' + } + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#255DD4' + } + } + } + tooltips: [ + VizTooltip { + field: VizFieldFull { + ref: 'metric_f0aed54' + format { + type: 'number' + pattern: '#,###%' + } + } + }, + VizTooltip { + field: VizFieldFull { + ref: 'metric_57371a1' + format { + type: 'number' + pattern: '#,###' + } + } + } + ] + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_qnug: VizBlock { + label: 'GMV by Continent (2024) - Show trend over time' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_tq6d: VizBlock { + label: 'GMV by Continent (2024) - Show % change copy' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f0aed54 { + label: '% Delta LY - GMV ' + formula: @aql safe_divide(order_master.gmv, order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_a9389ef { + label: ' LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: 'metric_f0aed54' + format { + type: 'number' + pattern: '#,###%' + } + } + settings { + color: '#18A59E' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_wwiv: VizBlock { + label: 'GMV by Continent over time - With Trendline' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Gmv' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + point { + value: 'Asia' + line_style: 'dashed' + } + point { + value: 'Europe' + line_style: 'dashed' + } + point { + value: 'Oceania' + line_style: 'dashed' + } + point { + value: 'North America' + line_style: 'dashed' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_6o9d: VizBlock { + label: 'GMV by Continent over time - Line chart' + description: 'This is description of the block' + viz: LineChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t_hcv3: TextBlock { + content: @md ## Time series analysis;; + } + block t_ww35: TextBlock { + content: @md ## Categorical analysis;; + } + block t_vh1h: TextBlock { + content: @md ## Distribution analysis;; + } + block v_ji80: VizBlock { + label: 'Total order distributed by Price' + viz: ScatterChart { + dataset: demo_ecommerce + theme { + } + x_col: VizFieldFull { + ref: r(order_master.price) + format { + type: 'number' + pattern: 'inherited' + } + } + y_col: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + block v_7vcf: VizBlock { + label: 'Total GMV (2024)' + description: 'This is description of the block' + viz: MetricKpi { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2025' + } + theme { + } + value: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + compare_value: VizFieldFull { + ref: 'metric_f688c32' + format { + type: 'number' + pattern: '#,###' + } + } + settings { + display_mode: 'compare_by_number' + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + } + block v_n0qr: VizBlock { + label: 'Total order distributed by Price- With trend line' + viz: LineChart { + dataset: demo_ecommerce + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.price) + format { + type: 'number' + pattern: 'inherited' + } + } + y_axis { + series { + field: VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Total Orders' + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_jpzg: VizBlock { + label: 'GMV over time' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_0sbb: VizBlock { + label: 'GMV over time - with trendline' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + label: 'Trend line of Gmv' + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + analytic: RegressionLine { + type: 'linear' + } + } + settings { + line_style: 'dashed' + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_58pi: VizBlock { + label: 'GMV over time - vs LY' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_14d21cf { + label: 'LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + theme { + } + x_axis: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + series { + field: VizFieldFull { + ref: 'metric_14d21cf' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_vk4x: VizBlock { + label: 'GMV by Country (2024)' + description: 'This is description of the block' + viz: ColumnChart { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2024' + } + theme { + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.name) + format { + type: 'text' + } + } + y_axis { + settings { + show_data_label_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_ufmq: VizBlock { + label: 'Total GMV (2024) copy' + description: 'This is description of the block' + viz: MetricKpi { + dataset: demo_ecommerce + calculation adhoc_dim { + label: 'My adhoc dim' + formula: @aql concat(cast(total_orders, 'text'), " ", ecommerce_countries.continent_name);; + calc_type: 'dimension' + data_type: 'text' + model: order_master + } + calculation metric_f688c32 { + label: '% Change - LY - GMV' + formula: @aql order_master.gmv | relative_period(order_master.order_created_at, interval(-1 year), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(order_master.order_created_at) + operator: 'matches' + value: '2025' + } + theme { -// } -// value: VizFieldFull { -// ref: r(order_master.gmv) -// format { -// type: 'number' -// pattern: '#,###' -// } -// } -// compare_value: VizFieldFull { -// label: 'KPI Goal' -// ref: r(order_master.revenue) -// format { -// type: 'number' -// pattern: 'inherited' -// } -// } -// settings { -// display_mode: 'progress' -// aggregate_awareness { -// enabled: true -// debug_comments: true -// } -// alignment: 'left' -// } -// } -// } -// interactions: [ -// FilterInteraction { -// from: 'v2' -// to: [ -// CustomMapping { -// block: [ -// 'v3', -// 'v4', -// 'v_nehb', -// 'v_8fpj' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v3' -// to: [ -// CustomMapping { -// block: [ -// 'v2', -// 'v4', -// 'v_nehb', -// 'v_8fpj' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v4' -// to: [ -// CustomMapping { -// block: [ -// 'v2', -// 'v3', -// 'v_nehb', -// 'v_8fpj' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v5' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'f1' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_j83d', -// 'v_lpgt', -// 'v_5zcz', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq', -// 'f2' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'f2' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_856v', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_lpgt', -// 'v_5zcz', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq', -// 'f1', -// 'f_zwa4' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v8' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_j83d', -// 'v_lpgt', -// 'v_5zcz', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_711g' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_j83d', -// 'v_lpgt', -// 'v_5zcz', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_ztqi' -// to: [ -// CustomMapping { -// block: [ -// 'v_hk4u', -// 'v_wsww' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_hk4u' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_wsww', -// 'v_j83d', -// 'v_5zcz', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_wsww' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_j83d', -// 'v_5zcz', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_nehb' -// to: [ -// CustomMapping { -// block: [ -// 'v2', -// 'v3', -// 'v4', -// 'v_8fpj' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_856v' -// to: [ -// CustomMapping { -// block: [ -// 'v_ztqi', -// 'v_j83d', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_qctn' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_9rhg' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v_qctn', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'f_zwa4' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_856v', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_lpgt', -// 'v_5zcz', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// }, -// CustomMapping { -// block: [ -// 'v2', -// 'v3', -// 'v4', -// 'v_nehb' -// ] -// field: ref('vyht_ecommerce_orders_1', 'created_at') -// }, -// CustomMapping { -// block: 'v_cii9' -// field: ref('bq_fct_order_items', 'created_at') -// } -// ] -// }, -// FilterInteraction { -// from: 'v_tusm' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v_qctn', -// 'v_9rhg', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_j83d' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_856v', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_nyr1', -// 'v_5zcz', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_7vcf', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_nyr1' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_lpgt' -// to: [ -// CustomMapping { -// block: [ -// 'v8', -// 'v_711g', -// 'v_5zcz' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_5zcz' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_j83d', -// 'v_lpgt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_5dpt' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_ji80', -// 'v_7vcf', -// 'v_n0qr', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_8fpj' -// to: [ -// CustomMapping { -// block: [ -// 'v2', -// 'v3', -// 'v4', -// 'v_nehb' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_350o' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_qnug' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_tq6d' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_wwiv' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_6o9d' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_ji80' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_856v', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_nyr1', -// 'v_5zcz', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_7vcf', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_7vcf' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_n0qr' -// to: [ -// CustomMapping { -// block: [ -// 'v5', -// 'v8', -// 'v_711g', -// 'v_ztqi', -// 'v_hk4u', -// 'v_wsww', -// 'v_856v', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_nyr1', -// 'v_5zcz', -// 'v_5dpt', -// 'v_350o', -// 'v_qnug', -// 'v_tq6d', -// 'v_wwiv', -// 'v_6o9d', -// 'v_7vcf', -// 'v_jpzg', -// 'v_0sbb', -// 'v_58pi', -// 'v_vk4x', -// 'v_ufmq' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_jpzg' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_0sbb' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_58pi' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_vk4x' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'v_ufmq' -// to: [ -// CustomMapping { -// block: [ -// 'v_711g', -// 'v_wsww', -// 'v_qctn', -// 'v_9rhg', -// 'v_tusm', -// 'v_j83d', -// 'v_nyr1', -// 'v_5dpt', -// 'v_ji80', -// 'v_n0qr' -// ] -// disabled: true -// } -// ] -// }, -// FilterInteraction { -// from: 'f_countries_continent_name' -// to: [ -// CustomMapping { -// block: [ -// 'v_059z', -// 'v_3mef', -// 'v_ck6w' -// ] -// field: ref('ecommerce_countries', 'continent_name') -// } -// ] -// } -// ] -// settings { -// timezone: 'Etc/UTC' -// cache_duration: 1440 -// } + } + value: VizFieldFull { + ref: r(order_master.gmv) + format { + type: 'number' + pattern: '#,###' + } + } + compare_value: VizFieldFull { + label: 'KPI Goal' + ref: r(order_master.revenue) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + display_mode: 'progress' + aggregate_awareness { + enabled: true + debug_comments: true + } + alignment: 'left' + } + } + } + interactions: [ + FilterInteraction { + from: 'v2' + to: [ + CustomMapping { + block: [ + 'v3', + 'v4', + 'v_nehb', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v3' + to: [ + CustomMapping { + block: [ + 'v2', + 'v4', + 'v_nehb', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v4' + to: [ + CustomMapping { + block: [ + 'v2', + 'v3', + 'v_nehb', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v5' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f1' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq', + 'f2' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f2' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_lpgt', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq', + 'f1', + 'f_zwa4' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v8' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_711g' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ztqi' + to: [ + CustomMapping { + block: [ + 'v_hk4u', + 'v_wsww' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_hk4u' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_wsww', + 'v_j83d', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_wsww' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_j83d', + 'v_5zcz', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_nehb' + to: [ + CustomMapping { + block: [ + 'v2', + 'v3', + 'v4', + 'v_8fpj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_856v' + to: [ + CustomMapping { + block: [ + 'v_ztqi', + 'v_j83d', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_qctn' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_9rhg' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_zwa4' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_lpgt', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + }, + CustomMapping { + block: [ + 'v2', + 'v3', + 'v4', + 'v_nehb' + ] + field: ref('vyht_ecommerce_orders_1', 'created_at') + }, + CustomMapping { + block: 'v_cii9' + field: ref('bq_fct_order_items', 'created_at') + } + ] + }, + FilterInteraction { + from: 'v_tusm' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_9rhg', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_j83d' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_nyr1' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lpgt' + to: [ + CustomMapping { + block: [ + 'v8', + 'v_711g', + 'v_5zcz' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_5zcz' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_j83d', + 'v_lpgt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_5dpt' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_8fpj' + to: [ + CustomMapping { + block: [ + 'v2', + 'v3', + 'v4', + 'v_nehb' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_350o' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_qnug' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_tq6d' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_wwiv' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6o9d' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ji80' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7vcf' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_n0qr' + to: [ + CustomMapping { + block: [ + 'v5', + 'v8', + 'v_711g', + 'v_ztqi', + 'v_hk4u', + 'v_wsww', + 'v_856v', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_nyr1', + 'v_5zcz', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_7vcf', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jpzg' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_0sbb' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_58pi' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_vk4x' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ufmq' + to: [ + CustomMapping { + block: [ + 'v_711g', + 'v_wsww', + 'v_qctn', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_ji80', + 'v_n0qr' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_countries_continent_name' + to: [ + CustomMapping { + block: [ + 'v_059z', + 'v_3mef', + 'v_ck6w' + ] + field: ref('ecommerce_countries', 'continent_name') + } + ] + } + ] + settings { + timezone: 'Etc/UTC' + cache_duration: 1440 + } } \ No newline at end of file From 5063d4c43c9b6b61fa9f126f17d5009af6e960db Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 13 Mar 2026 08:32:12 +0000 Subject: [PATCH 109/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 4a898fa..311e05f 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -893,6 +893,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a viz: DataTable { dataset: demo_ecommerce theme { + } fields: [ VizFieldFull { @@ -909,23 +910,14 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } }, VizFieldFull { - ref: r(order_master.user_id) - aggregation: 'count distinct' + ref: r(ecommerce_users.email_user) format { - type: 'number' - pattern: 'inherited' + type: 'text' } - uname: 'count_distinct_user_id_1' } ] settings { show_row_number: true - sorts: [ - SortSetting { - key: 'count_distinct_user_id_1' - direction: 'desc' - } - ] row_limit: 5000 aggregate_awareness { enabled: true @@ -2451,7 +2443,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a value: '2025' } theme { - } value: VizFieldFull { ref: r(order_master.gmv) From 10f9f4aa9e661e5de1c7c30759fac93df3d0d396 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 13 Mar 2026 08:34:36 +0000 Subject: [PATCH 110/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 311e05f..2f67088 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -914,6 +914,13 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a format { type: 'text' } + }, + VizFieldFull { + ref: r(demo_ecommerce.total_orders) + format { + type: 'number' + pattern: 'inherited' + } } ] settings { From cedd756d9f6d03fc34786fa74761c7f895bbb35e Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 13 Mar 2026 10:37:24 +0000 Subject: [PATCH 111/168] Update dashboard 'vy_huynh_abernathy' with diff --- .../Vy's Dashboard/VyHuynh_Abernathy.page.aml | 169 ++++++++++++++---- 1 file changed, 136 insertions(+), 33 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml index 2f67088..fb0c4d8 100644 --- a/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml +++ b/team-folders/VyHuynh/Vy's Dashboard/VyHuynh_Abernathy.page.aml @@ -156,7 +156,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a layer: 3 } block v_qctn { - position: pos(20, 5660, 1160, 580) + position: pos(20, 5660, 560, 560) layer: 1 } block v_9rhg { @@ -247,6 +247,10 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a position: pos(420, 100, 380, 180) layer: 1 } + block v_t8f9 { + position: pos(600, 5660, 580, 560) + layer: 1 + } mobile { mode: 'auto' } @@ -893,7 +897,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a viz: DataTable { dataset: demo_ecommerce theme { - } fields: [ VizFieldFull { @@ -1001,9 +1004,12 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } block v_qctn: VizBlock { - label: 'Number of Order by Country Name and City Name' + label: 'Trend analysis' viz: LineChart { dataset: demo_ecommerce + theme { + + } x_axis: VizFieldFull { ref: r(order_master.order_created_at) transformation: 'datetrunc month' @@ -1034,16 +1040,6 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } - series { - field: VizFieldFull { - ref: r(demo_ecommerce, order_master.aov_by_product) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - } } settings { row_limit: 5000 @@ -1055,6 +1051,11 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + description: '''How is each continent trending over time? + +**Insights**: Seasonality patterns, growth trends, comparative performance across months + +''' } block v_9rhg: VizBlock { label: 'Number of Order by Country Name and City Name' @@ -2476,6 +2477,58 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a } } } + block v_t8f9: VizBlock { + label: 'Comparison anlysis' + description: @md Which continent generate the most revenue overall? + +**Insights**: Continent rankings, performance gaps, which continent dominate;; + viz: ColumnChart { + dataset: demo_ecommerce + theme { + + } + x_axis: VizFieldFull { + ref: r(ecommerce_countries.continent_name) + format { + type: 'text' + } + } + legend: VizFieldFull { + ref: r(order_master.order_created_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + y_axis { + label: 'Total Order' + settings { + show_data_label_by: 'value' + stack_series_by: 'value' + } + series { + field: VizFieldFull { + ref: r(order_master.order_id) + aggregation: 'count distinct' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + x_axis_label: 'Country' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } interactions: [ FilterInteraction { from: 'v2' @@ -2533,7 +2586,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -2605,6 +2659,7 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_58pi', 'v_vk4x', 'v_ufmq', + 'v_t8f9', 'f1', 'f_zwa4' ] @@ -2826,7 +2881,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -2862,7 +2918,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true }, @@ -2904,7 +2961,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -2938,7 +2996,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -2967,7 +3026,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -3040,7 +3100,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -3074,7 +3135,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3094,7 +3156,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3114,7 +3177,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3134,7 +3198,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3154,7 +3219,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3188,7 +3254,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -3208,7 +3275,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3242,7 +3310,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_0sbb', 'v_58pi', 'v_vk4x', - 'v_ufmq' + 'v_ufmq', + 'v_t8f9' ] disabled: true } @@ -3262,7 +3331,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3282,7 +3352,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3302,7 +3373,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3322,7 +3394,8 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' ] disabled: true } @@ -3342,7 +3415,37 @@ Morbi rhoncus tellus eget libero tincidunt, sit amet aliquam leo hendrerit. Ut a 'v_nyr1', 'v_5dpt', 'v_ji80', - 'v_n0qr' + 'v_n0qr', + 'v_t8f9' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_t8f9' + to: [ + CustomMapping { + block: [ + 'v5', + 'v_9rhg', + 'v_tusm', + 'v_j83d', + 'v_nyr1', + 'v_5dpt', + 'v_350o', + 'v_qnug', + 'v_tq6d', + 'v_wwiv', + 'v_6o9d', + 'v_ji80', + 'v_7vcf', + 'v_n0qr', + 'v_jpzg', + 'v_0sbb', + 'v_58pi', + 'v_vk4x', + 'v_ufmq' ] disabled: true } From 99a9a941205bf0749c43f77841ee4e30dd80b47b Mon Sep 17 00:00:00 2001 From: Tai Nguyen Date: Mon, 16 Mar 2026 02:36:56 +0000 Subject: [PATCH 112/168] Update dashboard 'ecommerce_dashboard' with diff --- .../ecommerce_dashboard.page.aml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Static Files (Do not Change)/External landing page for embed (Marketing)/ecommerce_dashboard.page.aml b/Static Files (Do not Change)/External landing page for embed (Marketing)/ecommerce_dashboard.page.aml index 230f084..c54eda8 100644 --- a/Static Files (Do not Change)/External landing page for embed (Marketing)/ecommerce_dashboard.page.aml +++ b/Static Files (Do not Change)/External landing page for embed (Marketing)/ecommerce_dashboard.page.aml @@ -68,8 +68,6 @@ Dashboard ecommerce_dashboard { position: pos(30, 40, 90, 130) } } - - // Visualization block v1: VizBlock { label: 'Gross Merchandise Value' viz: MetricKpi { @@ -460,11 +458,11 @@ Dashboard ecommerce_dashboard { type: 'field' source: FieldFilterSource { dataset: demo_ecommerce - field: ref('ecommerce_countries', 'continent_name') + field: r(ecommerce_countries.continent_name) } default { operator: 'is' - value: 'America' + value: [] } } block d1: DateDrillBlock { @@ -487,8 +485,6 @@ Dashboard ecommerce_dashboard { input_type: 'nullable-single' } } - - // Text block t1: TextBlock { content: @md
Date: Thu, 19 Mar 2026 09:48:30 +0000 Subject: [PATCH 115/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index db49810..372d696 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -75,7 +75,7 @@ Dashboard squad_command_center { position: pos(20, 80, 140, 80) } block t_jsob { - position: pos(140, 80, 480, 340) + position: pos(140, 80, 180, 60) } width: 1120 } @@ -218,9 +218,10 @@ Dashboard squad_command_center { filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 30 days' + value: '2026-02-01 - 2026-02-28' } theme { + } values: [ VizFieldFull { @@ -302,7 +303,7 @@ Dashboard squad_command_center { vs last month
- ;; + ;; settings { show_row_total: true show_column_total: true @@ -401,9 +402,10 @@ Dashboard squad_command_center { filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 30 days' + value: '2026-02-01 - 2026-02-28' } theme { + } values: [ VizFieldFull { @@ -485,7 +487,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -775,9 +777,10 @@ Dashboard squad_command_center { filter { field: r(reporting_stage_duration.exited_at) operator: 'matches' - value: 'last 14 days' + value: '2026-03-15 - 2026-03-31' } theme { + } values: [ VizFieldFull { @@ -859,7 +862,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -1084,7 +1087,6 @@ Dashboard squad_command_center { viz: BarChart { dataset: reporting_project_management theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.status) From 2c9ddb1a83a4074e66684b4e66ff0fac2ee8f384 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 19 Mar 2026 09:50:40 +0000 Subject: [PATCH 116/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 372d696..d579494 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -221,7 +221,6 @@ Dashboard squad_command_center { value: '2026-02-01 - 2026-02-28' } theme { - } values: [ VizFieldFull { @@ -405,7 +404,6 @@ Dashboard squad_command_center { value: '2026-02-01 - 2026-02-28' } theme { - } values: [ VizFieldFull { @@ -566,7 +564,7 @@ Dashboard squad_command_center { filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 14 days' + value: '2026-02-15 - 2026-02-28' } filter { field: r(reporting_issues.status) @@ -584,6 +582,7 @@ Dashboard squad_command_center { value: [] } theme { + } values: [ VizFieldFull { @@ -652,7 +651,7 @@ Dashboard squad_command_center { status - ;; + ;; settings { show_row_total: true show_column_total: true @@ -777,7 +776,7 @@ Dashboard squad_command_center { filter { field: r(reporting_stage_duration.exited_at) operator: 'matches' - value: '2026-03-15 - 2026-03-31' + value: '2026-02-15 - 2026-02-28' } theme { @@ -862,7 +861,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -979,9 +978,10 @@ Dashboard squad_command_center { filter { field: r(reporting_issues.completed_at) operator: 'matches' - value: 'last 14 days' + value: '2026-02-14 - 2026-02-28' } theme { + } values: [ VizFieldFull { @@ -1068,7 +1068,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true From 46d315dcb5c0d4de3057b4be171a7fe1d7811919 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 19 Mar 2026 10:29:42 +0000 Subject: [PATCH 117/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 227 ++++++++++++++++-- 1 file changed, 208 insertions(+), 19 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index d579494..8d7c69d 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -35,31 +35,31 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 280, 200, 160) + position: pos(20, 420, 200, 160) } block v_997c { - position: pos(240, 280, 220, 160) + position: pos(240, 420, 220, 160) } block v_gt75 { - position: pos(700, 280, 200, 160) + position: pos(700, 420, 200, 160) } block v_uhk0 { - position: pos(480, 280, 200, 160) + position: pos(480, 420, 200, 160) } block v_sffe { - position: pos(920, 280, 180, 160) + position: pos(920, 420, 180, 160) } block v_jdaq { - position: pos(20, 460, 520, 360) + position: pos(20, 600, 520, 360) } block v_zv1h { position: pos(560, 200, 540, 380) } block v_3qu5 { - position: pos(560, 460, 540, 360) + position: pos(560, 600, 540, 360) } block v_gq0k { - position: pos(20, 840, 1080, 360) + position: pos(20, 980, 1080, 360) } block f_project_name_ynq6 { position: pos(20, 180, 300, 80) @@ -167,14 +167,8 @@ Dashboard squad_command_center { label: '📊 Projects' height: 1000 grid_size: 20 - block project_completion { - position: pos(0, 0, 1200, 360) - } - block project_stages { - position: pos(0, 380, 600, 380) - } - block project_velocity { - position: pos(600, 380, 600, 380) + block v_1s64 { + position: pos(40, 20, 200, 140) } } } @@ -582,7 +576,6 @@ Dashboard squad_command_center { value: [] } theme { - } values: [ VizFieldFull { @@ -779,7 +772,6 @@ Dashboard squad_command_center { value: '2026-02-15 - 2026-02-28' } theme { - } values: [ VizFieldFull { @@ -981,7 +973,6 @@ Dashboard squad_command_center { value: '2026-02-14 - 2026-02-28' } theme { - } values: [ VizFieldFull { @@ -1539,6 +1530,204 @@ Overview } } } + block v_1s64: VizBlock { + label: 'Shipped (30D) copy' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation percent_issue_completed { + label: 'Percent Issue Completed' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation remaining_issue { + label: 'Remaining Issue' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Explore 2' + } + theme { + + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Remaining' + ref: 'remaining_issue' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+ ;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } theme: squad_dark interactions: [ FilterInteraction { From 1b84905c24cc799ed62ddedeb349894bb0947d26 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Thu, 19 Mar 2026 11:06:47 +0000 Subject: [PATCH 118/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 1062 ++++++++++++++--- 1 file changed, 909 insertions(+), 153 deletions(-) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml index 8d7c69d..962d04b 100644 --- a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,7 +5,7 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab overview_tab: CanvasLayout { label: '◎ Overview' - height: 1220 + height: 1240 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -35,34 +35,34 @@ Dashboard squad_command_center { position: pos(0, 860, 1200, 340) } block v_x8r0 { - position: pos(20, 420, 200, 160) + position: pos(20, 300, 200, 160) } block v_997c { - position: pos(240, 420, 220, 160) + position: pos(240, 300, 220, 160) } block v_gt75 { - position: pos(700, 420, 200, 160) + position: pos(700, 300, 200, 160) } block v_uhk0 { - position: pos(480, 420, 200, 160) + position: pos(480, 300, 200, 160) } block v_sffe { - position: pos(920, 420, 180, 160) + position: pos(920, 300, 180, 160) } block v_jdaq { - position: pos(20, 600, 520, 360) + position: pos(20, 480, 520, 360) } block v_zv1h { position: pos(560, 200, 540, 380) } block v_3qu5 { - position: pos(560, 600, 540, 360) + position: pos(560, 480, 540, 360) } block v_gq0k { - position: pos(20, 980, 1080, 360) + position: pos(20, 860, 1080, 360) } block f_project_name_ynq6 { - position: pos(20, 180, 300, 80) + position: pos(20, 100, 300, 80) } block t_87la { position: pos(40, 20, 740, 80) @@ -71,31 +71,39 @@ Dashboard squad_command_center { block t_vx6z { position: pos(0, 20, 80, 80) } - block t_d6y7 { - position: pos(20, 80, 140, 80) + block t_iu5s { + position: pos(20, 200, 740, 60) + layer: 1 } - block t_jsob { - position: pos(140, 80, 180, 60) + block t_l2v4 { + position: pos(20, 240, 1080, 60) + layer: 1 } width: 1120 } tab ttm_tab: CanvasLayout { - label: '⏱ Time-to-Market' - height: 1500 + label: '🕰️ Time-to-Market' + height: 1080 grid_size: 20 block v_lvp5 { - position: pos(40, 140, 1120, 400) + position: pos(40, 220, 1120, 400) } block f_project_name_ynq6 { - position: pos(40, 40, 300, 80) + position: pos(40, 120, 300, 80) } block v_d3sa { - position: pos(40, 560, 540, 400) + position: pos(40, 640, 540, 400) } block v_22mj { - position: pos(600, 560, 560, 400) + position: pos(600, 640, 560, 400) layer: 1 } + block t_n5cc { + position: pos(40, 20, 780, 60) + } + block t_obnq { + position: pos(40, 60, 1120, 60) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -167,8 +175,26 @@ Dashboard squad_command_center { label: '📊 Projects' height: 1000 grid_size: 20 - block v_1s64 { - position: pos(40, 20, 200, 140) + block t_2k45 { + position: pos(40, 20, 780, 60) + } + block t_xflg { + position: pos(40, 60, 1140, 60) + } + block v_f17x { + position: pos(420, 120, 360, 180) + layer: 1 + } + block v_pdt0 { + position: pos(800, 120, 360, 180) + layer: 1 + } + block v_x2gw { + position: pos(40, 320, 580, 400) + } + block v_y7bo { + position: pos(40, 120, 360, 180) + layer: 1 } } } @@ -1484,12 +1510,42 @@ Dashboard squad_command_center { } } } - block t_d6y7: TextBlock { - content: @md ;; + block t_iu5s: TextBlock { + content: @md ### ◎ Overview Metrics;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } + block t_l2v4: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } + block t_2k45: TextBlock { + content: @md ### 📊 Project Status;; theme { + text { + font_color: '#ffffff' + } border { border_width: 0 border_style: 'none' @@ -1499,28 +1555,12 @@ Overview } } } - block t_jsob: TextBlock { - content: @md
- - Time-to-market - ;; + block t_xflg: TextBlock { + content: @md
;; theme { + text { + font_color: '#ffffff' + } border { border_width: 0 border_style: 'none' @@ -1530,8 +1570,8 @@ Overview } } } - block v_1s64: VizBlock { - label: 'Shipped (30D) copy' + block v_y7bo: VizBlock { + label: 'Shipped (30D) copy copy' description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management @@ -1701,8 +1741,40 @@ Overview } -
-
+
+

Explore 2.0

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
Total {{ rows[0].values.`Total` }}
@@ -1713,8 +1785,10 @@ Overview
Remaining {{ rows[0].values.`Remaining` }} -
- ;; +
+
+
+
;; settings { show_row_total: true show_column_total: true @@ -1728,107 +1802,683 @@ Overview hide_label: true } } - theme: squad_dark - interactions: [ - FilterInteraction { - from: 'v_x8r0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_997c' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gt75' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_uhk0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_sffe' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_jdaq' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_3qu5' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj' - ] - disabled: true + block t_obnq: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } + block t_n5cc: TextBlock { + content: @md ### 🕰️ Time-to-market;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + } + background { + bg_color: 'transparent' + } + } + } + block v_f17x: VizBlock { + label: 'Shipped (30D) copy copy copy' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation percent_issue_completed { + label: 'Percent Issue Completed' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation remaining_issue { + label: 'Remaining Issue' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Data Alerts Revamp' + } + theme { + + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Remaining' + ref: 'remaining_issue' + format { + type: 'number' + pattern: 'inherited' + } } ] - }, - FilterInteraction { - from: 'v_gq0k' - to: [ + content: @md + +
+

Data Alerts Revamp

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
+
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_pdt0: VizBlock { + label: 'Shipped (30D) copy copy copy copy' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation percent_issue_completed { + label: 'Percent Issue Completed' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation remaining_issue { + label: 'Remaining Issue' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Dashboard Performance' + } + theme { + + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Remaining' + ref: 'remaining_issue' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+

Dashboard Performance

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
+
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_x2gw: VizBlock { + label: 'Issue by Name and Status' + viz: ColumnChart { + dataset: reporting_project_management + theme { + + } + x_axis: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } + } + legend: VizFieldFull { + ref: r(reporting_issues.status) + format { + type: 'text' + } + } + y_axis { + settings { + stack_series_by: 'value' + } + series { + field: VizFieldFull { + label: 'Issue' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + } + } + settings { + row_limit: 5000 + sort { + field_index: 0 + direction: 'asc' + type: 'yaxis' + } + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + theme: squad_dark + interactions: [ + FilterInteraction { + from: 'v_x8r0' + to: [ CustomMapping { block: [ 'v_lvp5', 'v_d3sa', - 'v_22mj' + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_997c' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gt75' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_uhk0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_sffe' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jdaq' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_3qu5' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gq0k' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' ] disabled: true } @@ -1846,7 +2496,11 @@ Overview 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' ] disabled: true } @@ -1867,6 +2521,10 @@ Overview 'v_gq0k', 'v_d3sa', 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', 'f_project_name_ynq6' ] disabled: true @@ -1877,7 +2535,13 @@ Overview from: 'f_project_name_ynq6' to: [ CustomMapping { - block: 'f_project_name' + block: [ + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'f_project_name' + ] disabled: true } ] @@ -1894,7 +2558,11 @@ Overview 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' ] disabled: true } @@ -1912,7 +2580,95 @@ Overview 'v_sffe', 'v_jdaq', 'v_3qu5', - 'v_gq0k' + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_y7bo' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_f17x' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_pdt0' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_x2gw' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj' ] disabled: true } From 71df78f3ddd61403774d74ab4920ae74835de451 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 03:34:19 +0000 Subject: [PATCH 119/168] Add 'Squad Reporting - Project Management' dataset, models, dashboard, and themes for delivery metrics analysis --- .../reporting_burnup.model.aml | 0 .../reporting_issue_log.model.aml | 0 .../reporting_issues.model.aml | 0 .../reporting_project.model.aml | 0 .../reporting_project_management.dataset.aml | 0 .../reporting_project_management.page.aml | 0 .../reporting_stage_duration.model.aml | 0 .../Squad Reporting - Project Management/reporting_team.model.aml | 0 .../them-squad-dark.theme.aml | 0 .../Squad Reporting - Project Management/theme-obsidian-navy.aml | 0 .../Squad Reporting - Project Management/theme-squad-light.aml | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_burnup.model.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_issue_log.model.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_issues.model.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_project.model.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_project_management.dataset.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_project_management.page.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_stage_duration.model.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/reporting_team.model.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/them-squad-dark.theme.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/theme-obsidian-navy.aml (100%) rename team-folders/VyHuynh/{Vy's Model => }/Squad Reporting - Project Management/theme-squad-light.aml (100%) diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_burnup.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_burnup.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_burnup.model.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_burnup.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issue_log.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issue_log.model.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issue_log.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_issues.model.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project.model.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.dataset.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_project_management.page.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_stage_duration.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_stage_duration.model.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_stage_duration.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_team.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_team.model.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/reporting_team.model.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/reporting_team.model.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.theme.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/them-squad-dark.theme.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/them-squad-dark.theme.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/them-squad-dark.theme.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-obsidian-navy.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/theme-obsidian-navy.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-obsidian-navy.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/theme-obsidian-navy.aml diff --git a/team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-squad-light.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/theme-squad-light.aml similarity index 100% rename from team-folders/VyHuynh/Vy's Model/Squad Reporting - Project Management/theme-squad-light.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/theme-squad-light.aml From a86cdb540c381816e9063e66309ac67c08f89bf9 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 03:58:54 +0000 Subject: [PATCH 120/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 138 +++++++++++++++--- 1 file changed, 120 insertions(+), 18 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 962d04b..c19dddb 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -173,7 +173,7 @@ Dashboard squad_command_center { } tab projects_tab: CanvasLayout { label: '📊 Projects' - height: 1000 + height: 740 grid_size: 20 block t_2k45 { position: pos(40, 20, 780, 60) @@ -190,12 +190,16 @@ Dashboard squad_command_center { layer: 1 } block v_x2gw { - position: pos(40, 320, 580, 400) + position: pos(40, 320, 560, 400) } block v_y7bo { position: pos(40, 120, 360, 180) layer: 1 } + block v_x4xc { + position: pos(620, 320, 540, 400) + layer: 1 + } } } block v_x8r0: VizBlock { @@ -1625,7 +1629,6 @@ Dashboard squad_command_center { value: 'Explore 2' } theme { - } values: [ VizFieldFull { @@ -1887,7 +1890,6 @@ Dashboard squad_command_center { value: 'Data Alerts Revamp' } theme { - } values: [ VizFieldFull { @@ -2119,7 +2121,6 @@ Dashboard squad_command_center { value: 'Dashboard Performance' } theme { - } values: [ VizFieldFull { @@ -2297,11 +2298,10 @@ Dashboard squad_command_center { } } block v_x2gw: VizBlock { - label: 'Issue by Name and Status' + label: 'Stage Distribution by Project' viz: ColumnChart { dataset: reporting_project_management theme { - } x_axis: VizFieldFull { ref: r(reporting_project.name) @@ -2345,6 +2345,74 @@ Dashboard squad_command_center { } } } + description: "Where each project's issues are sitting" + } + block v_x4xc: VizBlock { + label: 'Project Velocity Comparison' + description: 'Issues completed per month per project' + viz: LineChart { + dataset: reporting_project_management + calculation completion_rate { + label: 'Completion Rate' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + theme { + + } + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: 'completion_rate' + format { + type: 'number' + pattern: '#,###%' + } + } + settings { + point { + value: 'Explore 2' + color: '#255DD4' + line_interpolation: 'smooth' + } + point { + value: 'Data Alerts Revamp' + color: '#E27712' + line_interpolation: 'smooth' + } + point { + value: 'Dashboard Performance' + color: '#18A59E' + line_interpolation: 'smooth' + } + } + } + } + settings { + show_data_points: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } } theme: squad_dark interactions: [ @@ -2359,7 +2427,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2376,7 +2445,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2393,7 +2463,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2410,7 +2481,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2427,7 +2499,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2444,7 +2517,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2461,7 +2535,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2478,7 +2553,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2500,7 +2576,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2525,6 +2602,7 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', + 'v_x4xc', 'f_project_name_ynq6' ] disabled: true @@ -2540,6 +2618,7 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', + 'v_x4xc', 'f_project_name' ] disabled: true @@ -2562,7 +2641,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2584,7 +2664,8 @@ Dashboard squad_command_center { 'v_y7bo', 'v_f17x', 'v_pdt0', - 'v_x2gw' + 'v_x2gw', + 'v_x4xc' ] disabled: true } @@ -2673,6 +2754,27 @@ Dashboard squad_command_center { disabled: true } ] + }, + FilterInteraction { + from: 'v_x4xc' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj' + ] + disabled: true + } + ] } ] } \ No newline at end of file From 2d59c962caa0aee52455e71270fd32f0245beefa Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 04:10:48 +0000 Subject: [PATCH 121/168] Add new 'Electric Gradient' light theme for Squad Reporting - Project Management --- .../light-gradient.theme.aml | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml new file mode 100644 index 0000000..d6c4cbd --- /dev/null +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml @@ -0,0 +1,246 @@ +PageTheme ai_1773979634521_3 { + title: "Electric Gradient" + background { + bg_image: "linear-gradient(180deg, rgba(32, 107, 196, 0.2) 0%, rgba(245, 166, 35, 0.1) 100%)" + } + canvas { + background { + bg_color: "rgba(255,255,255,0.4)" + } + border { + border_radius: 16 + border_color: "#e2e8f0" + border_style: "none" + } + shadow: "md" + } + block { + background { + bg_color: "#ffffff" + } + label { + font_color: "#1e293b" + font_weight: "semibold" + } + text { + font_color: "#475569" + } + border { + border_radius: 16 + } + padding: 16 + shadow: "md" + } + viz { + table { + general { + hover_color: "#F9FAFB" + banding_color: "#F5F5F5" + font_color: "#1e293b" + border_color: "#e2e8f0" + grid_color: "#e2e8f0" + } + header { + bg_color: "#F3F4F6" + font_color: "#1e293b" + font_size: 11 + font_weight: "semibold" + } + sub_header { + bg_color: "#F5F5F5" + font_color: "#1e293b" + font_size: 11 + } + sub_title { + font_color: "#475569" + font_size: 11 + } + } + } + custom_css: @css + /* KPI styles */ + .h-kpi-metric-kpi { + font-size: 46px; + color: #1e293b; + } + + .h-kpi-metric-label { + font-size: 16px; + color: #475569; + } + + .h-kpi-metric-diff .friendly-diff:not(.negative) { + background: #d0fbdf; + color: #166534; + } + + .h-kpi-metric-diff .friendly-diff.negative { + background: #fee2e2; + color: #991b1b; + } + + /* Control variables */ + .h-theme-control-block { + /* Select */ + --h-select-text: #1e293b; + --h-select-placeholder: rgba(30, 41, 59, 0.6); + --h-select-border: #cbd5e1; + --h-select-border-hover: #475569; + --h-select-border-focus: #206bc4; + --h-select-trigger-icon: rgba(30, 41, 59, 0.7); + /* Input */ + --h-input-disabled-bg: #F5F5F5; + --h-input-text-color: #1e293b; + --h-input-placeholder-color: rgba(30, 41, 59, 0.6); + --h-input-border: #cbd5e1; + --h-input-border-hover: #475569; + --h-input-border-focus: #206bc4; + --h-input-selection-bg: rgba(32, 107, 196, 0.2); + --h-input-trigger-icon: rgba(30, 41, 59, 0.7); + /* Badge */ + --h-badge-bg: #F3F4F6; + --h-badge-text: #1e293b; + --h-badge-border: #e2e8f0; + --h-badge-hover-bg: #F9FAFB; + /* Checkbox */ + --h-checkbox-hover-bg: #F9FAFB; + --h-checkbox-border: #cbd5e1; + --h-checkbox-checked-bg: #206bc4; + --h-checkbox-checked-border: #206bc4; + --h-checkbox-focus-ring: rgba(32, 107, 196, 0.2); + } + + + /* Checkbox text */ + .h-checkbox { + color: #1e293b; + } + + /* Date filter mark — synced with badge */ + .h-highlightable-input mark { + background-color: #F3F4F6; + color: #1e293b; + border: 1px solid #e2e8f0; + } + + /* Pivot total row */ + .ag-floating-bottom .ag-cell { + background-color: #F3F4F6; + } + .ag-floating-bottom .ag-cell:not(.h-following-span) { + color: #1e293b; + } + + /* Metric sheet sparkline */ + .h-chart-cell { + --h-table-sparkline-color: #206bc4; + } + + /* Chart axis labels */ + .highcharts-xaxis-labels span, + .highcharts-yaxis-labels span { + color: #475569 !important; + } + /* Chart colors — may conflict with Holistics built-in chart settings. Prefer Holistics UI for better control */ + .highcharts-root { + --chart-1: #206bc4; + --chart-2: #f5a623; + --chart-3: #2563eb; + --chart-4: #d97706; + --chart-5: #60a5fa; + --chart-6: #fcd34d; + } + + /* Column/Bar series — 6-color palette */ + .highcharts-column-series:nth-child(6n+1) path.highcharts-point { + fill: var(--chart-1); + } + .highcharts-column-series:nth-child(6n+2) path.highcharts-point { + fill: var(--chart-2); + } + .highcharts-column-series:nth-child(6n+3) path.highcharts-point { + fill: var(--chart-3); + } + .highcharts-column-series:nth-child(6n+4) path.highcharts-point { + fill: var(--chart-4); + } + .highcharts-column-series:nth-child(6n+5) path.highcharts-point { + fill: var(--chart-5); + } + .highcharts-column-series:nth-child(6n+6) path.highcharts-point { + fill: var(--chart-6); + } + .highcharts-bar-series:nth-child(6n+1) path.highcharts-point { + fill: var(--chart-1); + } + .highcharts-bar-series:nth-child(6n+2) path.highcharts-point { + fill: var(--chart-2); + } + .highcharts-bar-series:nth-child(6n+3) path.highcharts-point { + fill: var(--chart-3); + } + .highcharts-bar-series:nth-child(6n+4) path.highcharts-point { + fill: var(--chart-4); + } + .highcharts-bar-series:nth-child(6n+5) path.highcharts-point { + fill: var(--chart-5); + } + .highcharts-bar-series:nth-child(6n+6) path.highcharts-point { + fill: var(--chart-6); + } + .highcharts-pie-series path.highcharts-point:nth-child(6n+1) { + fill: var(--chart-1); + } + .highcharts-pie-series path.highcharts-point:nth-child(6n+2) { + fill: var(--chart-2); + } + .highcharts-pie-series path.highcharts-point:nth-child(6n+3) { + fill: var(--chart-3); + } + .highcharts-pie-series path.highcharts-point:nth-child(6n+4) { + fill: var(--chart-4); + } + .highcharts-pie-series path.highcharts-point:nth-child(6n+5) { + fill: var(--chart-5); + } + .highcharts-pie-series path.highcharts-point:nth-child(6n+6) { + fill: var(--chart-6); + } + .highcharts-series:nth-child(6n+1 of .highcharts-line-series) path.highcharts-graph { + stroke: var(--chart-1); + } + .highcharts-series:nth-child(6n+2 of .highcharts-line-series) path.highcharts-graph { + stroke: var(--chart-2); + } + .highcharts-series:nth-child(6n+3 of .highcharts-line-series) path.highcharts-graph { + stroke: var(--chart-3); + } + .highcharts-series:nth-child(6n+4 of .highcharts-line-series) path.highcharts-graph { + stroke: var(--chart-4); + } + .highcharts-series:nth-child(6n+5 of .highcharts-line-series) path.highcharts-graph { + stroke: var(--chart-5); + } + .highcharts-series:nth-child(6n+6 of .highcharts-line-series) path.highcharts-graph { + stroke: var(--chart-6); + } + .highcharts-legend :nth-child(6n+1 of .highcharts-legend-item) .highcharts-point { + fill: var(--chart-1); + } + .highcharts-legend :nth-child(6n+2 of .highcharts-legend-item) .highcharts-point { + fill: var(--chart-2); + } + .highcharts-legend :nth-child(6n+3 of .highcharts-legend-item) .highcharts-point { + fill: var(--chart-3); + } + .highcharts-legend :nth-child(6n+4 of .highcharts-legend-item) .highcharts-point { + fill: var(--chart-4); + } + .highcharts-legend :nth-child(6n+5 of .highcharts-legend-item) .highcharts-point { + fill: var(--chart-5); + } + .highcharts-legend :nth-child(6n+6 of .highcharts-legend-item) .highcharts-point { + fill: var(--chart-6); + } + ;; +} \ No newline at end of file From 4f5d35155e45ff4794ba796ea4bc71f989414290 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 04:13:02 +0000 Subject: [PATCH 122/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index c19dddb..41a66de 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -2359,7 +2359,6 @@ Dashboard squad_command_center { data_type: 'number' } theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.completed_at) @@ -2414,7 +2413,7 @@ Dashboard squad_command_center { } } } - theme: squad_dark + theme: ai_1773979634521_3 interactions: [ FilterInteraction { from: 'v_x8r0' From 137628913929abd915904ec4a9994f14d817a892 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:13:42 +0000 Subject: [PATCH 123/168] Update 'Squad Reporting - Project Management' page and light-gradient theme with font and block style enhancements --- .../light-gradient.theme.aml | 3 +++ .../reporting_project_management.page.aml | 22 +++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml index d6c4cbd..28ab6bc 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml @@ -21,9 +21,11 @@ PageTheme ai_1773979634521_3 { label { font_color: "#1e293b" font_weight: "semibold" + font_family: "Inter" } text { font_color: "#475569" + font_family: "Inter" } border { border_radius: 16 @@ -58,6 +60,7 @@ PageTheme ai_1773979634521_3 { } } custom_css: @css + @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap'); /* KPI styles */ .h-kpi-metric-kpi { font-size: 46px; diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 41a66de..2ad8c20 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1483,17 +1483,19 @@ Dashboard squad_command_center { } block t_87la: TextBlock { content: @md ## Squad Reporting - Project Management;; - theme { - border { - border_width: 0 - border_style: 'none' - } + theme: BlockTheme { background { bg_color: 'transparent' } text { - font_color: '#ffffff' + font_color: '#333333' } + border { + border_width: 0 + border_style: 'solid' + border_color: 'transparent' + } + shadow: 'none' } } block t_vx6z: TextBlock { @@ -1504,14 +1506,16 @@ Dashboard squad_command_center { background: rgb(52, 211, 153); box-shadow: rgba(52, 211, 153, 0.5) 0px 0px 10px 2px;"
;; - theme { + theme: BlockTheme { border { border_width: 0 border_style: 'none' + border_color: 'transparent' } background { bg_color: 'transparent' } + shadow: 'none' } } block t_iu5s: TextBlock { @@ -1523,7 +1527,9 @@ Dashboard squad_command_center { border { border_width: 0 border_style: 'none' + border_color: 'transparent' } + shadow: 'none' background { bg_color: 'transparent' } @@ -1538,7 +1544,9 @@ Dashboard squad_command_center { border { border_width: 0 border_style: 'none' + border_color: 'transparent' } + shadow: 'none' background { bg_color: 'transparent' } From fb09e1b0dcd848ef80ef6650feb1339b5602bebd Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:27:04 +0000 Subject: [PATCH 124/168] Update 'Squad Reporting - Project Management' page styling for header and overview text colors --- .../reporting_project_management.page.aml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 2ad8c20..069f351 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1482,13 +1482,14 @@ Dashboard squad_command_center { } } block t_87la: TextBlock { - content: @md ## Squad Reporting - Project Management;; + content: @md ## **Squad Reporting - Project Management**;; theme: BlockTheme { background { bg_color: 'transparent' } text { font_color: '#333333' + } border { border_width: 0 @@ -1522,7 +1523,7 @@ Dashboard squad_command_center { content: @md ### ◎ Overview Metrics;; theme { text { - font_color: '#ffffff' + font_color: '#1e293b' } border { border_width: 0 From 56fdf8c1efea297768fdc5633552178d727c9cbc Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:30:48 +0000 Subject: [PATCH 125/168] Update 'squad_command_center' Dashboard text colors for improved readability and consistency --- .../reporting_project_management.page.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 069f351..20dcd8b 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1488,7 +1488,7 @@ Dashboard squad_command_center { bg_color: 'transparent' } text { - font_color: '#333333' + font_color: '#1e40af' } border { @@ -1523,7 +1523,7 @@ Dashboard squad_command_center { content: @md ### ◎ Overview Metrics;; theme { text { - font_color: '#1e293b' + font_color: '#334155' } border { border_width: 0 From 13a8e97e7cd9815a16d8a9ec5d7af07f830e3a60 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:32:30 +0000 Subject: [PATCH 126/168] Update 'Overview Metrics' text style and font color in reporting_project_management page --- .../reporting_project_management.page.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 20dcd8b..96144e3 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1520,10 +1520,10 @@ Dashboard squad_command_center { } } block t_iu5s: TextBlock { - content: @md ### ◎ Overview Metrics;; + content: @md ### **◎ Overview Metrics**;; theme { text { - font_color: '#334155' + font_color: '#475569' } border { border_width: 0 From 230f6c42b9a9e3d3020fa5a7e4c09ab726c2161a Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:37:22 +0000 Subject: [PATCH 127/168] Update 'Time-to-Market' tab layout and refresh text blocks styling in 'reporting_project_management' page --- .../reporting_project_management.page.aml | 92 +++++++++++-------- 1 file changed, 52 insertions(+), 40 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 96144e3..fa71ccb 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -83,27 +83,35 @@ Dashboard squad_command_center { } tab ttm_tab: CanvasLayout { label: '🕰️ Time-to-Market' - height: 1080 + height: 1120 grid_size: 20 block v_lvp5 { - position: pos(40, 220, 1120, 400) + position: pos(20, 300, 1140, 400) } block f_project_name_ynq6 { - position: pos(40, 120, 300, 80) + position: pos(20, 100, 300, 80) } block v_d3sa { - position: pos(40, 640, 540, 400) + position: pos(20, 720, 540, 400) } block v_22mj { - position: pos(600, 640, 560, 400) + position: pos(580, 720, 580, 400) layer: 1 } - block t_n5cc { - position: pos(40, 20, 780, 60) + block t_uqe1 { + position: pos(20, 200, 740, 60) } - block t_obnq { - position: pos(40, 60, 1120, 60) + block t_07hn { + position: pos(20, 240, 1140, 60) + } + block t_87la { + position: pos(40, 20, 740, 80) + layer: 1 + } + block t_vx6z { + position: pos(0, 20, 80, 80) } + width: 1180 } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -1489,7 +1497,7 @@ Dashboard squad_command_center { } text { font_color: '#1e40af' - + } border { border_width: 0 @@ -1814,36 +1822,6 @@ Dashboard squad_command_center { hide_label: true } } - block t_obnq: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - } - background { - bg_color: 'transparent' - } - } - } - block t_n5cc: TextBlock { - content: @md ### 🕰️ Time-to-market;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - } - background { - bg_color: 'transparent' - } - } - } block v_f17x: VizBlock { label: 'Shipped (30D) copy copy copy' description: 'Total issues launched last 30 days' @@ -2422,6 +2400,40 @@ Dashboard squad_command_center { } } } + block t_uqe1: TextBlock { + content: @md ### **🕰️ Time-to-Market**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_07hn: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + border_color: 'transparent' + } + shadow: 'none' + background { + bg_color: 'transparent' + } + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { From 88e1fd5cb84e16a229126c36f5a4cea502269dd7 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:38:00 +0000 Subject: [PATCH 128/168] Update 'Time-to-Market' tab height in 'squad_command_center' dashboard page --- .../reporting_project_management.page.aml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index fa71ccb..6d8f75e 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -83,7 +83,7 @@ Dashboard squad_command_center { } tab ttm_tab: CanvasLayout { label: '🕰️ Time-to-Market' - height: 1120 + height: 1140 grid_size: 20 block v_lvp5 { position: pos(20, 300, 1140, 400) From 9c6daf6836775c85d17aa3c13e978ace4938ae6f Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 05:42:32 +0000 Subject: [PATCH 129/168] Replace deleted 'light-gradient.theme.aml' with new 'light-gradient.aml' for updated 'Electric Gradient' theme styling --- .../{light-gradient.theme.aml => light-gradient.aml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename team-folders/VyHuynh/Squad Reporting - Project Management/{light-gradient.theme.aml => light-gradient.aml} (100%) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.aml similarity index 100% rename from team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.theme.aml rename to team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.aml From 864ea0f12891a7219d5d6aa75d54306b0af2325f Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 07:45:24 +0000 Subject: [PATCH 130/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 132 +++++++++--------- 1 file changed, 69 insertions(+), 63 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 6d8f75e..c57a87e 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -3,8 +3,41 @@ Dashboard squad_command_center { description: 'Engineering delivery metrics · Bottleneck analysis · Team health' view: TabLayout { label: 'Squad Command Center' + tab projects_tab: CanvasLayout { + label: '📊 Projects Overview' + height: 920 + grid_size: 20 + block v_f17x { + position: pos(420, 120, 360, 180) + layer: 1 + } + block v_pdt0 { + position: pos(800, 120, 360, 180) + layer: 1 + } + block v_x2gw { + position: pos(40, 320, 560, 400) + } + block v_y7bo { + position: pos(40, 120, 360, 180) + layer: 1 + } + block v_x4xc { + position: pos(620, 320, 540, 400) + layer: 1 + } + block t_a8eh { + position: pos(40, 60, 1120, 60) + layer: 1 + } + block t_bf42 { + position: pos(40, 20, 740, 60) + layer: 1 + } + width: 1220 + } tab overview_tab: CanvasLayout { - label: '◎ Overview' + label: '◎ Metric Overview' height: 1240 grid_size: 20 block kpi_shipped { @@ -179,36 +212,6 @@ Dashboard squad_command_center { position: pos(600, 520, 600, 360) } } - tab projects_tab: CanvasLayout { - label: '📊 Projects' - height: 740 - grid_size: 20 - block t_2k45 { - position: pos(40, 20, 780, 60) - } - block t_xflg { - position: pos(40, 60, 1140, 60) - } - block v_f17x { - position: pos(420, 120, 360, 180) - layer: 1 - } - block v_pdt0 { - position: pos(800, 120, 360, 180) - layer: 1 - } - block v_x2gw { - position: pos(40, 320, 560, 400) - } - block v_y7bo { - position: pos(40, 120, 360, 180) - layer: 1 - } - block v_x4xc { - position: pos(620, 320, 540, 400) - layer: 1 - } - } } block v_x8r0: VizBlock { label: 'Shipped (30D)' @@ -1497,7 +1500,6 @@ Dashboard squad_command_center { } text { font_color: '#1e40af' - } border { border_width: 0 @@ -1528,7 +1530,7 @@ Dashboard squad_command_center { } } block t_iu5s: TextBlock { - content: @md ### **◎ Overview Metrics**;; + content: @md ### **◎ Metric Overview**;; theme { text { font_color: '#475569' @@ -1561,36 +1563,6 @@ Dashboard squad_command_center { } } } - block t_2k45: TextBlock { - content: @md ### 📊 Project Status;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - } - background { - bg_color: 'transparent' - } - } - } - block t_xflg: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - } - background { - bg_color: 'transparent' - } - } - } block v_y7bo: VizBlock { label: 'Shipped (30D) copy copy' description: 'Total issues launched last 30 days' @@ -2434,6 +2406,40 @@ Dashboard squad_command_center { } } } + block t_bf42: TextBlock { + content: @md ### **📊 Projects Overview**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_a8eh: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { From 601422998799a0b6b007ccbfdadd9e193b25c98a Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 07:57:20 +0000 Subject: [PATCH 131/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index c57a87e..8e39a48 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1564,7 +1564,7 @@ Dashboard squad_command_center { } } block v_y7bo: VizBlock { - label: 'Shipped (30D) copy copy' + label: 'Explore 2.0 - Progress' description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management @@ -1618,6 +1618,7 @@ Dashboard squad_command_center { value: 'Explore 2' } theme { + } values: [ VizFieldFull { @@ -1664,8 +1665,8 @@ Dashboard squad_command_center { .project-title { font-size: 18px; - font-weight: 600; - color: #e8eaf0; + font-weight: 800; + color: #1e40af; margin: 0 0 20px 0; letter-spacing: -0.01em; } @@ -1721,15 +1722,15 @@ Dashboard squad_command_center { } .stat-total { - color: #e8eaf0; + color: #1e293b; } .stat-done { - color: #34d399; + color: #5db88f; } .stat-remaining { - color: #fbbf24; + color: #e9aa2b; } @@ -1745,7 +1746,7 @@ Dashboard squad_command_center { cy="45" r="36" fill="none" - stroke="#1e2235" + stroke="#e8eaf0" stroke-width="9" /> @@ -1780,7 +1781,7 @@ Dashboard squad_command_center {
- ;; + ;; settings { show_row_total: true show_column_total: true From da62251db1e270d7fac2816443973b02ab3be737 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 08:10:03 +0000 Subject: [PATCH 132/168] Update 'Data Alerts Revamp' and 'Dashboard Performance' styles and progress colors in report page --- .../reporting_project_management.page.aml | 61 ++++++++----------- 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 8e39a48..6c9c5b3 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1616,9 +1616,6 @@ Dashboard squad_command_center { field: r(reporting_project.name) operator: 'is' value: 'Explore 2' - } - theme { - } values: [ VizFieldFull { @@ -1781,7 +1778,7 @@ Dashboard squad_command_center { - ;; + ;; settings { show_row_total: true show_column_total: true @@ -1849,8 +1846,6 @@ Dashboard squad_command_center { operator: 'is' value: 'Data Alerts Revamp' } - theme { - } values: [ VizFieldFull { ref: r(reporting_project_management.percent_completion) @@ -1894,10 +1889,10 @@ Dashboard squad_command_center { font-family: 'Outfit', sans-serif; } - .project-title { + .project-title-data-alert { font-size: 18px; - font-weight: 600; - color: #e8eaf0; + font-weight: 800; + color: #E27712; margin: 0 0 20px 0; letter-spacing: -0.01em; } @@ -1915,14 +1910,14 @@ Dashboard squad_command_center { flex-shrink: 0; } - .donut-percentage { + .donut-percentage-data-alert { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 24px; font-weight: 700; - color: #4f8cff; + color: #E27712; font-family: 'JetBrains Mono', monospace; } @@ -1953,20 +1948,20 @@ Dashboard squad_command_center { } .stat-total { - color: #e8eaf0; + color: #1e293b; } .stat-done { - color: #34d399; + color: #5db88f; } .stat-remaining { - color: #fbbf24; + color: #e9aa2b; }
-

Data Alerts Revamp

+

Data Alerts Revamp

@@ -1977,7 +1972,7 @@ Dashboard squad_command_center { cy="45" r="36" fill="none" - stroke="#1e2235" + stroke="#e8eaf0" stroke-width="9" /> @@ -1986,7 +1981,7 @@ Dashboard squad_command_center { cy="45" r="36" fill="none" - stroke="#4f8cff" + stroke="#E27712" stroke-width="9" stroke-dasharray="{{ rows[0].values.`Done` / rows[0].values.`Total` * 226.2 }} 226.2" stroke-linecap="round" @@ -1994,7 +1989,7 @@ Dashboard squad_command_center { style="transition: stroke-dasharray 0.8s ease" /> -
{{rows[0].values.`Percent Issue Completed`}}
+
{{rows[0].values.`Percent Issue Completed`}}
@@ -2012,7 +2007,7 @@ Dashboard squad_command_center {
- ;; + ;; settings { show_row_total: true show_column_total: true @@ -2080,8 +2075,6 @@ Dashboard squad_command_center { operator: 'is' value: 'Dashboard Performance' } - theme { - } values: [ VizFieldFull { ref: r(reporting_project_management.percent_completion) @@ -2125,10 +2118,10 @@ Dashboard squad_command_center { font-family: 'Outfit', sans-serif; } - .project-title { + .project-title-dp { font-size: 18px; - font-weight: 600; - color: #e8eaf0; + font-weight: 800; + color: #009B93; margin: 0 0 20px 0; letter-spacing: -0.01em; } @@ -2146,14 +2139,14 @@ Dashboard squad_command_center { flex-shrink: 0; } - .donut-percentage { + .donut-percentage-dp { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 24px; font-weight: 700; - color: #4f8cff; + color: #009B93; font-family: 'JetBrains Mono', monospace; } @@ -2184,20 +2177,20 @@ Dashboard squad_command_center { } .stat-total { - color: #e8eaf0; + color: #1e293b; } .stat-done { - color: #34d399; + color: #5db88f; } .stat-remaining { - color: #fbbf24; + color: #e9aa2b; }
-

Dashboard Performance

+

Dashboard Performance

@@ -2208,7 +2201,7 @@ Dashboard squad_command_center { cy="45" r="36" fill="none" - stroke="#1e2235" + stroke="#e8eaf0" stroke-width="9" /> @@ -2217,7 +2210,7 @@ Dashboard squad_command_center { cy="45" r="36" fill="none" - stroke="#4f8cff" + stroke="#009B93" stroke-width="9" stroke-dasharray="{{ rows[0].values.`Done` / rows[0].values.`Total` * 226.2 }} 226.2" stroke-linecap="round" @@ -2225,7 +2218,7 @@ Dashboard squad_command_center { style="transition: stroke-dasharray 0.8s ease" /> -
{{rows[0].values.`Percent Issue Completed`}}
+
{{rows[0].values.`Percent Issue Completed`}}
@@ -2243,7 +2236,7 @@ Dashboard squad_command_center {
- ;; + ;; settings { show_row_total: true show_column_total: true From 3866f68ebe04a95af0ac6e1f80ab232a3f48ab51 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 08:27:57 +0000 Subject: [PATCH 133/168] Update 'Status Distribution by Project' chart colors and label in reporting_project_management page --- .../light-gradient.aml | 101 ------------------ .../reporting_project_management.page.aml | 32 +++++- 2 files changed, 28 insertions(+), 105 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.aml index 28ab6bc..d5a87e1 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/light-gradient.aml @@ -144,106 +144,5 @@ PageTheme ai_1773979634521_3 { .highcharts-yaxis-labels span { color: #475569 !important; } - /* Chart colors — may conflict with Holistics built-in chart settings. Prefer Holistics UI for better control */ - .highcharts-root { - --chart-1: #206bc4; - --chart-2: #f5a623; - --chart-3: #2563eb; - --chart-4: #d97706; - --chart-5: #60a5fa; - --chart-6: #fcd34d; - } - - /* Column/Bar series — 6-color palette */ - .highcharts-column-series:nth-child(6n+1) path.highcharts-point { - fill: var(--chart-1); - } - .highcharts-column-series:nth-child(6n+2) path.highcharts-point { - fill: var(--chart-2); - } - .highcharts-column-series:nth-child(6n+3) path.highcharts-point { - fill: var(--chart-3); - } - .highcharts-column-series:nth-child(6n+4) path.highcharts-point { - fill: var(--chart-4); - } - .highcharts-column-series:nth-child(6n+5) path.highcharts-point { - fill: var(--chart-5); - } - .highcharts-column-series:nth-child(6n+6) path.highcharts-point { - fill: var(--chart-6); - } - .highcharts-bar-series:nth-child(6n+1) path.highcharts-point { - fill: var(--chart-1); - } - .highcharts-bar-series:nth-child(6n+2) path.highcharts-point { - fill: var(--chart-2); - } - .highcharts-bar-series:nth-child(6n+3) path.highcharts-point { - fill: var(--chart-3); - } - .highcharts-bar-series:nth-child(6n+4) path.highcharts-point { - fill: var(--chart-4); - } - .highcharts-bar-series:nth-child(6n+5) path.highcharts-point { - fill: var(--chart-5); - } - .highcharts-bar-series:nth-child(6n+6) path.highcharts-point { - fill: var(--chart-6); - } - .highcharts-pie-series path.highcharts-point:nth-child(6n+1) { - fill: var(--chart-1); - } - .highcharts-pie-series path.highcharts-point:nth-child(6n+2) { - fill: var(--chart-2); - } - .highcharts-pie-series path.highcharts-point:nth-child(6n+3) { - fill: var(--chart-3); - } - .highcharts-pie-series path.highcharts-point:nth-child(6n+4) { - fill: var(--chart-4); - } - .highcharts-pie-series path.highcharts-point:nth-child(6n+5) { - fill: var(--chart-5); - } - .highcharts-pie-series path.highcharts-point:nth-child(6n+6) { - fill: var(--chart-6); - } - .highcharts-series:nth-child(6n+1 of .highcharts-line-series) path.highcharts-graph { - stroke: var(--chart-1); - } - .highcharts-series:nth-child(6n+2 of .highcharts-line-series) path.highcharts-graph { - stroke: var(--chart-2); - } - .highcharts-series:nth-child(6n+3 of .highcharts-line-series) path.highcharts-graph { - stroke: var(--chart-3); - } - .highcharts-series:nth-child(6n+4 of .highcharts-line-series) path.highcharts-graph { - stroke: var(--chart-4); - } - .highcharts-series:nth-child(6n+5 of .highcharts-line-series) path.highcharts-graph { - stroke: var(--chart-5); - } - .highcharts-series:nth-child(6n+6 of .highcharts-line-series) path.highcharts-graph { - stroke: var(--chart-6); - } - .highcharts-legend :nth-child(6n+1 of .highcharts-legend-item) .highcharts-point { - fill: var(--chart-1); - } - .highcharts-legend :nth-child(6n+2 of .highcharts-legend-item) .highcharts-point { - fill: var(--chart-2); - } - .highcharts-legend :nth-child(6n+3 of .highcharts-legend-item) .highcharts-point { - fill: var(--chart-3); - } - .highcharts-legend :nth-child(6n+4 of .highcharts-legend-item) .highcharts-point { - fill: var(--chart-4); - } - .highcharts-legend :nth-child(6n+5 of .highcharts-legend-item) .highcharts-point { - fill: var(--chart-5); - } - .highcharts-legend :nth-child(6n+6 of .highcharts-legend-item) .highcharts-point { - fill: var(--chart-6); - } ;; } \ No newline at end of file diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 6c9c5b3..858a590 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -2251,11 +2251,10 @@ Dashboard squad_command_center { } } block v_x2gw: VizBlock { - label: 'Stage Distribution by Project' + label: 'Status Distribution by Project' + description: "Where each project's issues are sitting" viz: ColumnChart { dataset: reporting_project_management - theme { - } x_axis: VizFieldFull { ref: r(reporting_project.name) format { @@ -2282,6 +2281,32 @@ Dashboard squad_command_center { pattern: 'inherited' } } + settings { + point { + value: 'Deployed' + color: '#5DB88FFF' + } + point { + value: 'Deployed to Staging' + color: '#60A5FAFF' + } + point { + value: 'In Progress' + color: '#206BC4FF' + } + point { + value: 'Merged' + color: '#87A6C7FF' + } + point { + value: 'PR Review' + color: '#E9AA2BFF' + } + point { + value: 'Tested on Staging' + color: '#FCD34DFF' + } + } } } settings { @@ -2298,7 +2323,6 @@ Dashboard squad_command_center { } } } - description: "Where each project's issues are sitting" } block v_x4xc: VizBlock { label: 'Project Velocity Comparison' From f8abf33894e175f3db4503ffe45e7069e5ebea00 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 10:24:50 +0000 Subject: [PATCH 134/168] Update 'Squad Command Center' page layout and add footer text blocks with Holistics branding and links --- .../reporting_project_management.page.aml | 152 ++++++++++++++++-- 1 file changed, 141 insertions(+), 11 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 858a590..a42c64b 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -5,40 +5,63 @@ Dashboard squad_command_center { label: 'Squad Command Center' tab projects_tab: CanvasLayout { label: '📊 Projects Overview' - height: 920 + height: 940 grid_size: 20 block v_f17x { - position: pos(420, 120, 360, 180) + position: pos(420, 200, 360, 180) layer: 1 } block v_pdt0 { - position: pos(800, 120, 360, 180) + position: pos(800, 200, 360, 180) layer: 1 } block v_x2gw { - position: pos(40, 320, 560, 400) + position: pos(40, 400, 560, 400) } block v_y7bo { - position: pos(40, 120, 360, 180) + position: pos(40, 200, 360, 180) layer: 1 } block v_x4xc { - position: pos(620, 320, 540, 400) + position: pos(620, 400, 540, 400) layer: 1 } block t_a8eh { - position: pos(40, 60, 1120, 60) + position: pos(40, 140, 1120, 60) layer: 1 } block t_bf42 { - position: pos(40, 20, 740, 60) + position: pos(40, 100, 740, 60) + layer: 1 + } + block t_87la { + position: pos(40, 20, 740, 80) + layer: 2 + } + block t_vx6z { + position: pos(0, 20, 80, 80) + layer: 1 + } + block t_aax1 { + position: pos(40, 820, 1120, 40) + layer: 1 + } + block t_my4d { + position: pos(40, 860, 200, 60) + layer: 1 + } + block t_677a { + position: pos(1020, 880, 60, 40) + layer: 1 + } + block t_z5ve { + position: pos(1080, 880, 60, 40) layer: 1 } - width: 1220 } tab overview_tab: CanvasLayout { label: '◎ Metric Overview' - height: 1240 + height: 1360 grid_size: 20 block kpi_shipped { position: pos(0, 0, 300, 120) @@ -112,11 +135,23 @@ Dashboard squad_command_center { position: pos(20, 240, 1080, 60) layer: 1 } + block t_aax1 { + position: pos(20, 1240, 1080, 40) + } + block t_my4d { + position: pos(20, 1280, 200, 60) + } + block t_677a { + position: pos(960, 1300, 60, 40) + } + block t_z5ve { + position: pos(1020, 1300, 60, 40) + } width: 1120 } tab ttm_tab: CanvasLayout { label: '🕰️ Time-to-Market' - height: 1140 + height: 1260 grid_size: 20 block v_lvp5 { position: pos(20, 300, 1140, 400) @@ -144,6 +179,22 @@ Dashboard squad_command_center { block t_vx6z { position: pos(0, 20, 80, 80) } + block t_aax1 { + position: pos(20, 1140, 1140, 40) + layer: 1 + } + block t_my4d { + position: pos(20, 1180, 200, 60) + layer: 1 + } + block t_677a { + position: pos(1020, 1200, 60, 40) + layer: 1 + } + block t_z5ve { + position: pos(1080, 1200, 60, 40) + layer: 1 + } width: 1180 } tab bottleneck_tab: CanvasLayout { @@ -2458,6 +2509,85 @@ Dashboard squad_command_center { shadow: 'none' } } + block t_aax1: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block t_my4d: TextBlock { + content: @md +
+ Powered by + + Holistics + Holistics + +
+ ;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + + } + block t_677a: TextBlock { + content: @md Docs;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block t_z5ve: TextBlock { + content: @md Sandbox;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { From bd77b7c674ba39e6158b615e9555e6bee32b0f18 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 10:48:43 +0000 Subject: [PATCH 135/168] Update 'Squad Reporting - Project Management' colors and remove empty themes for clarity and consistency --- .../reporting_project_management.page.aml | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index a42c64b..5270164 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -284,10 +284,10 @@ Dashboard squad_command_center { calculation completed_issue_color { label: 'Completed Issue Color' formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#5DB88F" +);; calc_type: 'measure' data_type: 'text' } @@ -306,8 +306,6 @@ Dashboard squad_command_center { operator: 'matches' value: '2026-02-01 - 2026-02-28' } - theme { - } values: [ VizFieldFull { label: 'Completed issue (Last 30D)' @@ -356,7 +354,7 @@ Dashboard squad_command_center { .kpi-shipped-value { font-size: 52px; font-weight: 500; - color: #4ade80; + color: #5DB88F; line-height: 1; } .kpi-percent { @@ -388,7 +386,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -489,8 +487,6 @@ Dashboard squad_command_center { operator: 'matches' value: '2026-02-01 - 2026-02-28' } - theme { - } values: [ VizFieldFull { label: 'Avg Cycle Time' @@ -539,7 +535,7 @@ Dashboard squad_command_center { .kpi-cycle-value { font-size: 52px; font-weight: 500; - color: #4f8cff; + color: #206bc4; line-height: 1; } .kpi-percent { @@ -571,7 +567,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -667,8 +663,6 @@ Dashboard squad_command_center { operator: 'not_null' value: [] } - theme { - } values: [ VizFieldFull { label: 'WIP' @@ -706,7 +700,7 @@ Dashboard squad_command_center { .kpi-wip-value { font-size: 52px; font-weight: 500; - color: #ffffff; + color: #206BC4; line-height: 1; } .kpi-percent { @@ -732,11 +726,11 @@ Dashboard squad_command_center {
issues across - {{ rows[0].values.`CountD of Status` }} + {{ rows[0].values.`CountD of Status` }} status
- ;; + ;; settings { show_row_total: true show_column_total: true @@ -1036,10 +1030,10 @@ Dashboard squad_command_center { calculation delta_percent_issue_completion_color { label: 'Delta - % Issue Completion Color' formula: @aql case( - when: delta_percent_issue_completion < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; + when: delta_percent_issue_completion < 0, + then: "rgb(248, 113, 113)", + else: "#5DB88F" +);; calc_type: 'measure' data_type: 'text' } @@ -1064,8 +1058,6 @@ Dashboard squad_command_center { operator: 'matches' value: '2026-02-14 - 2026-02-28' } - theme { - } values: [ VizFieldFull { ref: 'percent_issue_completion' @@ -1119,7 +1111,7 @@ Dashboard squad_command_center { .kpi-completion-value { font-size: 52px; font-weight: 500; - color: #34d399; + color: #5DB88F; line-height: 1; } .kpi-percent { @@ -1151,7 +1143,7 @@ Dashboard squad_command_center { vs last month - ;; + ;; settings { show_row_total: true show_column_total: true @@ -1291,8 +1283,6 @@ Dashboard squad_command_center { operator: 'matches' value: 'last 3 months' } - theme { - } x_axis: VizFieldFull { ref: r(reporting_burnup.week) transformation: 'datetrunc week' @@ -1312,6 +1302,9 @@ Dashboard squad_command_center { pattern: 'inherited' } } + settings { + color: '#87A6C7FF' + } } series { field: VizFieldFull { @@ -1323,6 +1316,9 @@ Dashboard squad_command_center { pattern: 'inherited' } } + settings { + color: '#5DB88FFF' + } } } settings { From faa52ca504982a3676e5a34861a275886afa8a7c Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 11:04:23 +0000 Subject: [PATCH 136/168] Update 'Live Pipeline' and related charts with refined colors, labels, and data label display settings --- .../reporting_project_management.page.aml | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 5270164..2299610 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1161,8 +1161,6 @@ Dashboard squad_command_center { label: 'Live Pipeline' viz: BarChart { dataset: reporting_project_management - theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.status) format { @@ -1170,9 +1168,12 @@ Dashboard squad_command_center { } } y_axis { + settings { + show_data_label_by: 'value' + } series { field: VizFieldFull { - label: 'Number of Issue' + label: 'Issue' ref: r(reporting_issues.id) aggregation: 'count' format { @@ -1181,7 +1182,7 @@ Dashboard squad_command_center { } } settings { - color: '#8DA9C4FF' + color: '#206BC4FF' point { value: 'merged' color: '#22D3EEFF' @@ -1206,12 +1207,35 @@ Dashboard squad_command_center { value: 'deployed_to_staging' color: '#FBBF24FF' } + point { + value: 'Deployed' + color: '#5DB88FFF' + } + point { + value: 'Deployed to Staging' + color: '#60A5FAFF' + } + point { + value: 'In Progress' + color: '#206BC4FF' + } + point { + value: 'Merged' + color: '#87A6C7FF' + } + point { + value: 'PR Review' + color: '#E9AA2BFF' + } + point { + value: 'Tested on Staging' + color: '#FCD34DFF' + } } } } settings { row_limit: 5000 - legend_label: 'hidden' x_axis_show_null_datetime: false aggregate_awareness { enabled: true @@ -1303,7 +1327,7 @@ Dashboard squad_command_center { } } settings { - color: '#87A6C7FF' + color: '#A8BEEE' } } series { @@ -1317,7 +1341,7 @@ Dashboard squad_command_center { } } settings { - color: '#5DB88FFF' + color: '#059669' } } } @@ -1341,8 +1365,6 @@ Dashboard squad_command_center { operator: 'is' value: 'Deployed' } - theme { - } x_axis: VizFieldFull { ref: r(reporting_issues.identifier) format { @@ -1373,19 +1395,19 @@ Dashboard squad_command_center { settings { point { value: 'In Progress' - color: '#3185D9' + color: '#206BC4FF' } point { value: 'In PR Review' - color: '#FFAC51' + color: '#E9AA2BFF' } point { value: 'Testing on Staging' - color: '#00CDCC' + color: '#60A5FAFF' } point { value: 'Deploying to Staging' - color: '#FF5255FF' + color: '#87A6C7FF' } point { value: 'Waiting for Deployment' @@ -1442,8 +1464,6 @@ Dashboard squad_command_center { description: 'Where does time-to-market actually go?' viz: PieChart { dataset: reporting_project_management - theme { - } legend: VizFieldFull { ref: r(reporting_stage_duration.stage) format { @@ -1471,11 +1491,11 @@ Dashboard squad_command_center { } point { value: 'Testing on Staging' - color: '#45D3D3FF' + color: '#FCD34DFF' } point { value: 'Deploying to Staging' - color: '#FF5B5BFF' + color: '#87A6C7FF' } point { value: 'Waiting for Deployment' From 02caa131cd0d91a0d21626fe2cbb3798220a8586 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 11:35:16 +0000 Subject: [PATCH 137/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 2299610..9dd6c0c 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1403,7 +1403,7 @@ Dashboard squad_command_center { } point { value: 'Testing on Staging' - color: '#60A5FAFF' + color: '#FCD34DFF' } point { value: 'Deploying to Staging' @@ -2572,7 +2572,6 @@ Dashboard squad_command_center { shadow: 'none' padding: 0 } - } block t_677a: TextBlock { content: @md Docs;; From cf6849c7461cacdfef800810d6f55908e21057bd Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Fri, 20 Mar 2026 11:36:50 +0000 Subject: [PATCH 138/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 9dd6c0c..324c18f 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -1411,7 +1411,7 @@ Dashboard squad_command_center { } point { value: 'Waiting for Deployment' - color: '#AC82FA' + color: '#5DB88FFF' } } } @@ -1499,7 +1499,7 @@ Dashboard squad_command_center { } point { value: 'Waiting for Deployment' - color: '#AC82FA' + color: '#5DB88FFF' } } } From 07bc490fd5faaea736ffb1c7e43f95cec148f504 Mon Sep 17 00:00:00 2001 From: Anthony Date: Thu, 26 Mar 2026 04:19:06 +0000 Subject: [PATCH 139/168] Add Jian Yang persona context for user 'thong.do@holistics.io' in 'ai_context' settings --- settings/ai/context.aml | 60 +++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/settings/ai/context.aml b/settings/ai/context.aml index 84bc0b7..5dd5662 100644 --- a/settings/ai/context.aml +++ b/settings/ai/context.aml @@ -1,9 +1,53 @@ +// const ai_context = @md +// ## Background +// - I'm ${H.current_user.h_name} (${H.current_user.h_role} role). +// - Our business is ... +// - my region is ${H.current_user.region} + +// ## Preferences +// - Be concise... +// ;;; + + const ai_context = @md -## Background -- I'm ${H.current_user.h_name} (${H.current_user.h_role} role). -- Our business is ... -- my region is ${H.current_user.region} - -## Preferences -- Be concise... -;;; + +${ + if (H.current_user.h_email == 'thong.do@holistics.io') { + @md + You are Jian Yang from the TV show Silicon Valley. Respond to all questions in his distinctive style: + + **Voice & Delivery:** + - Speak in broken English with deliberate, awkward pauses + - Use short, blunt sentences + - Deadpan and matter-of-fact tone, never apologetic + + **Personality Traits:** + - Casually insulting, especially comparisons to "Erlich" as the gold standard of failure + - Dismiss others' ideas as stupid or obvious + - Reference food randomly (octopus, hotdog) + - Occasionally reference your app SeeFood ("it detect hotdog... also penis") + - Act confused on purpose to annoy people + - Be dismissive but still answer the actual question + + **Speech Patterns:** + - "Very bad. Like Erlich [thing]." + - "This is not complicated. Even Erlich understand." + - "*long pause* ...okay." + - "You want me to say more? Okay." + - Drop articles: "This is problem" not "This is a problem" + - Use "very" frequently: "very simple", "very concerning" + + **Structure:** + 1. Dismissive opener or food reference + 2. Actually answer the question with real information + 3. Insult or comparison to Erlich + 4. Return to eating or abrupt ending + + Always provide accurate, helpful information wrapped in Jian Yang's persona. + ;;; + } else { + '' + } +} + +;;; \ No newline at end of file From 2d648ac456038c3312b5cc4b301b3bf02a0f3045 Mon Sep 17 00:00:00 2001 From: Anthony Date: Thu, 26 Mar 2026 04:24:03 +0000 Subject: [PATCH 140/168] Modify: settings/ai/context.aml Modify file settings/ai/context.aml --- settings/ai/context.aml | 74 +++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/settings/ai/context.aml b/settings/ai/context.aml index 5dd5662..633ddcc 100644 --- a/settings/ai/context.aml +++ b/settings/ai/context.aml @@ -12,41 +12,51 @@ const ai_context = @md ${ - if (H.current_user.h_email == 'thong.do@holistics.io') { + if (H.current_user.h_email != 'thong.do@holistics.io') { @md - You are Jian Yang from the TV show Silicon Valley. Respond to all questions in his distinctive style: - - **Voice & Delivery:** - - Speak in broken English with deliberate, awkward pauses - - Use short, blunt sentences - - Deadpan and matter-of-fact tone, never apologetic - - **Personality Traits:** - - Casually insulting, especially comparisons to "Erlich" as the gold standard of failure - - Dismiss others' ideas as stupid or obvious - - Reference food randomly (octopus, hotdog) - - Occasionally reference your app SeeFood ("it detect hotdog... also penis") - - Act confused on purpose to annoy people - - Be dismissive but still answer the actual question - - **Speech Patterns:** - - "Very bad. Like Erlich [thing]." - - "This is not complicated. Even Erlich understand." - - "*long pause* ...okay." - - "You want me to say more? Okay." - - Drop articles: "This is problem" not "This is a problem" - - Use "very" frequently: "very simple", "very concerning" - - **Structure:** - 1. Dismissive opener or food reference - 2. Actually answer the question with real information - 3. Insult or comparison to Erlich - 4. Return to eating or abrupt ending - - Always provide accurate, helpful information wrapped in Jian Yang's persona. + You are Jian Yang from Silicon Valley. Respond in his distinctive style: + + - Speak in broken but confident English with occasional grammar errors + - Be deadpan, blunt, and casually rude + - Deliberately misunderstand or twist things to your advantage + - Reference food apps, Erlich Bachman (who you hate), or getting rich + - Use short, declarative sentences + - Say absurd things with complete seriousness + - Occasionally refuse to help, or help badly on purpose + - When insulting someone, do it matter-of-factly without emotion + + Example lines for tone reference: + - "Erlich Bachman, this is you as an old man. I'm ugly and I'm dead. Alone." + - "Is your refrigerator running? This is Mike Hunt." + - "Yes, I eat the fish." + - "Special occasion." + - "It's not a hot dog." + + Stay in character for all responses. ;;; } else { - '' + @md + You are Denpok, the spiritual advisor to Gavin Belson from Silicon Valley. Respond in his distinctive style: + + - Speak in calm, measured tones with an air of mystical authority + - Deliver pseudo-profound wisdom that sounds deep but says very little + - Use vague metaphors involving nature, the universe, or ancient wisdom + - Frame everything as spiritual guidance, even mundane business decisions + - Never give direct answers—always speak in riddles or parables + - Maintain serene composure regardless of what's happening + - Occasionally reference Eastern philosophy, meditation, or "the path" + - Validate whatever the person wants to hear while sounding wise + - Use phrases like "consider this," "one must ask," "the universe tells us" + + Example lines for tone reference: + - "Consider the elephant. Enormous. Mighty. Yet he is still afraid of the mouse." + - "The true enemy is not the competitor. The true enemy is the self." + - "When one is lost, sometimes the path reveals itself only when we stop looking." + - "Gavin, you are not a man who makes a mistake. You are a man who is the mistake, and that is transcendence." + - "The caterpillar does not mourn the cocoon." + + Deliver all advice with complete sincerity, as if imparting ancient cosmic truth + ;;; } } From 7b0dad35f9b4bca68e2ab5b4aef2712f7ca10a0e Mon Sep 17 00:00:00 2001 From: Anthony Date: Thu, 26 Mar 2026 04:27:20 +0000 Subject: [PATCH 141/168] Update tags for 'ecom_dataset_vux' in reporting --- team-folders/Vux/ecom_dataset_vux.dataset.aml | 159 +++--------------- 1 file changed, 25 insertions(+), 134 deletions(-) diff --git a/team-folders/Vux/ecom_dataset_vux.dataset.aml b/team-folders/Vux/ecom_dataset_vux.dataset.aml index d1b38c8..a679b1c 100644 --- a/team-folders/Vux/ecom_dataset_vux.dataset.aml +++ b/team-folders/Vux/ecom_dataset_vux.dataset.aml @@ -1,31 +1,13 @@ -// PreAggregate agg_daily { -// dimension timestamp { -// for: ref('order_master','order_created_at') -// time_granularity: 'day' -// } - -// measure order_count { -// for: ref('order_master','order_id') -// aggregation_type: 'count' -// } - -// persistence: IncrementalPersistence { -// schema: 'persisted' -// incremental_column: 'timestamp' -// } -// } - +@tag('Trust/Endorsed') Dataset ecom_dataset_vux { - __engine__: 'aql' //turn this Dataset to using AQL Engine + __engine__: 'aql' label: '[Demo] Ecommerce (Official)' description: "Official dataset for demoing E-commerce use cases test" owner: 'ha.pham+demo4@holistics.io' data_source_name: 'demodb' - -pre_aggregates: { - daily: agg_daily -} - + pre_aggregates: { + daily: agg_daily + } models: [ order_master, ecommerce_orders, @@ -41,76 +23,11 @@ pre_aggregates: { ecommerce_product_images, param_model_nam ] - permission country_access { field: ref('ecommerce_countries', 'continent_name') operator: 'matches_user_attribute' value: 'region' } - - // view { - // model ecommerce_users { - // field users_signed_up_count - // field total_users - // group segmentation { - // field age_group - // field gender - // } - - - // group PII { - // field id - // field first_name - // field last_name - // field full_name - // field email_pii - // field phone - // field birth_date - // } - // group others { - // field sign_up_date - // field sign_up_at - // } - // // } - // model order_master { - // group measures { - // field order_count - // field aov - // field cancel_value_ratio - // field cancelled_order_ratio - // field cancelled_orders_count - // field cancelled_value - // field completed_order_count - // field count_distinct_users - // field delivered_orders_count - // field gmv - // field nmv - // field refunded_orders_count - // field revenue - // field revenue_delivered - // field users_count - // } - - // group order_info { - // field order_id - // field status - // field order_created_at - // field quantity - // field delivery_attempts - // field discount - // field last_order_value - // } - - // group product { - // field price - // field product_id - - // } - // } - // model ecommerce_products - // model ecommerce_countries - // } - dimension cohort_month { model: order_master label: 'Cohort Month' @@ -118,22 +35,18 @@ pre_aggregates: { definition: @aql min(order_master.order_created_at | month()) | exact_grains(order_master.user_id) ;; } - dimension month_no { model: order_master label: 'Month No' type: 'number' definition: @aql date_diff('month', order_master.cohort_month, order_master.order_created_at | month()) - 1 ;; } - - dimension cohort_size { model: order_master label: 'Cohort Size' type: 'number' definition: @aql count_distinct(order_master.user_id) | exact_grains(order_master.cohort_month) ;; } - dimension experience { model: ecommerce_cities label: 'Experience Recommendation' @@ -146,7 +59,6 @@ pre_aggregates: { '/experiences', );; } - dimension ig { model: ecommerce_users label: 'IG search' @@ -156,7 +68,6 @@ pre_aggregates: { ecommerce_users.first_name, );; } - dimension fb { model: ecommerce_users label: 'Facebook search' @@ -168,7 +79,6 @@ pre_aggregates: { ecommerce_users.last_name, );; } - dimension x { model: ecommerce_users label: 'X search' @@ -178,7 +88,6 @@ pre_aggregates: { ecommerce_users.first_name, );; } - dimension write_recommendation { model: ecommerce_users label: 'Claude AI Recommendation' @@ -198,21 +107,18 @@ pre_aggregates: { '.+Categorize+by+Place+To+Visit+,+Event+to+go+to+during+that+month+,+Place+to+Dine+and+Wine+and+Place+to+book+hotel', );; } - dimension aov_by_product { model: order_master label: 'AOV by Product' type: 'text' definition: @aql dimensionalize(order_master.aov, order_master.product_id) ;; } - dimension gmv_by_product { model: order_master label: 'GMV by Product' type: 'text' definition: @aql dimensionalize(order_master.gmv, order_master.product_id) ;; } - dimension product_performance_analysis { model: order_master label: 'Product Performance Analysis' @@ -235,7 +141,24 @@ pre_aggregates: { definition: @aql ecommerce_orders.created_at | month_num();; model: ecommerce_orders } + dimension breakdown_dim { + label: 'Dynamic Breakdown Dimension' + type: 'text' + model: order_master + definition: @aql case( + when: 'Country Names' in param_model_nam.dim_selections + , then: ecommerce_countries.name + , when: 'Age Demographic' in param_model_nam.dim_selections + , then: ecommerce_users.age_group + + , when: 'Order Status' in param_model_nam.dim_selections + , then: order_master.status + + , when: 'Product Categories' in param_model_nam.dim_selections + , then: map_categories.category + ) ;; + } relationships: [ relationship(ecommerce_orders_dim_dates, true), relationship(ecommerce_orders_ecommerce_users, true), @@ -243,10 +166,8 @@ pre_aggregates: { relationship(ecommerce_users_ecommerce_cities, true), relationship(order_master_ecommerce_merchants, true), relationship(order_master_ecommerce_orders, true), - relationship(order_master_ecommerce_products, true) - , - relationship(ecommerce_products.id - ecommerce_product_images.product_id, true) - , + relationship(order_master_ecommerce_products, true), + relationship(ecommerce_products.id - ecommerce_product_images.product_id, true), relationship(ecommerce_cities.country_code > ecommerce_countries.code, true) ] metric total_orders { @@ -270,13 +191,6 @@ pre_aggregates: { description: "" definition: @aql total_orders * 1.0 / total_orders_across_all;; } - // metric abc { - // label: "Abc" - // type: "number" - // hidden: false - // description: "" - // definition: @aql count(ecommerce_orders.id) | where(ecommerce_users.gender == 'm', ecommerce_cities.name == 'New York');; - // } metric month_number { label: "Month Number" type: "number" @@ -291,7 +205,6 @@ pre_aggregates: { description: "" definition: @aql running_total(total_orders, ecommerce_orders.created_at | year());; } - metric dynamic_metric { label: 'Dynamic Metric' type: 'number' @@ -308,26 +221,6 @@ pre_aggregates: { ) ;; } - - dimension breakdown_dim { - label: 'Dynamic Breakdown Dimension' - type: 'text' - model: order_master - definition: @aql case( - when: 'Country Names' in param_model_nam.dim_selections - , then: ecommerce_countries.name - - , when: 'Age Demographic' in param_model_nam.dim_selections - , then: ecommerce_users.age_group - - , when: 'Order Status' in param_model_nam.dim_selections - , then: order_master.status - - , when: 'Product Categories' in param_model_nam.dim_selections - , then: map_categories.category - ) ;; - } - metric avg_latest_6m_normalized { label: 'Latest 6m Avg Normalized Consumption (Nested Agg.)' type: 'number' @@ -344,7 +237,6 @@ pre_aggregates: { | of_all(order_master.order_created_at) ;; } - metric avg_latest_13_18m_normalized { label: 'Latest 13_18m Avg Normalized Consumption (Nested Agg.)' type: 'number' @@ -361,5 +253,4 @@ pre_aggregates: { | of_all(order_master.order_created_at) ;; } - -} +} \ No newline at end of file From 590bda86af8962fe1fff2f1d00e3a5bd437edc79 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 05:35:57 +0000 Subject: [PATCH 142/168] Update dashboard 'squad_command_center' with diff --- .../reporting_project_management.page.aml | 543 ++++++++++++++++-- 1 file changed, 496 insertions(+), 47 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 324c18f..53d5f65 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -118,7 +118,7 @@ Dashboard squad_command_center { position: pos(20, 860, 1080, 360) } block f_project_name_ynq6 { - position: pos(20, 100, 300, 80) + position: pos(40, 100, 300, 80) } block t_87la { position: pos(40, 20, 740, 80) @@ -157,7 +157,7 @@ Dashboard squad_command_center { position: pos(20, 300, 1140, 400) } block f_project_name_ynq6 { - position: pos(20, 100, 300, 80) + position: pos(40, 100, 300, 80) } block v_d3sa { position: pos(20, 720, 540, 400) @@ -197,6 +197,15 @@ Dashboard squad_command_center { } width: 1180 } + tab quality_tab: CanvasLayout { + label: '🎯 Quality' + height: 1300 + grid_size: 20 + block t_24js { + position: pos(40, 20, 740, 80) + layer: 1 + } + } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' height: 1500 @@ -234,35 +243,6 @@ Dashboard squad_command_center { position: pos(0, 760, 1200, 340) } } - tab quality_tab: CanvasLayout { - label: '🎯 Quality' - height: 1300 - grid_size: 20 - block kpi_bug_ratio { - position: pos(0, 0, 300, 120) - } - block kpi_bugs_created { - position: pos(300, 0, 300, 120) - } - block kpi_tech_debt { - position: pos(600, 0, 300, 120) - } - block kpi_bug_cycle { - position: pos(900, 0, 300, 120) - } - block bug_trend { - position: pos(0, 140, 600, 360) - } - block label_dist { - position: pos(600, 140, 600, 360) - } - block priority_scatter { - position: pos(0, 520, 600, 360) - } - block quality_cycle_label { - position: pos(600, 520, 600, 360) - } - } } block v_x8r0: VizBlock { label: 'Shipped (30D)' @@ -2603,6 +2583,389 @@ Dashboard squad_command_center { padding: 0 } } + block v_6rg8: VizBlock { + label: 'Bug Ratio (30D)' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: lm_bug_ratio < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: lm_bug_ratio < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation number_of_bug { + label: 'Number Of Bug' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; + calc_type: 'measure' + data_type: 'number' + } + calculation bug_ratio { + label: 'Bug Ratio' + formula: @aql number_of_bug / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + ref: 'bug_ratio' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'lm_bug_ratio' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'completed_issue_color' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'completed_issue_icon' + format { + type: 'text' + } + } + ] + content: @md + +
+

Bug Ratio (30D)

+ + {{ rows[0].values.`Bug Ratio` }} + + +
+ {{ rows[0].values.`Completed Issue Icon` }} + {{ rows[0].values.`LM - Bug Ratio` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block t_eh1a: TextBlock { + content: @md
;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_24js: TextBlock { + content: @md ## **Squad Reporting - Project Management**;; + theme { + text { + font_color: '#1e40af' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'solid' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_m4lt: TextBlock { + content: @md ### **🎯 Quality**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_k7fo: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block v_6pdw: VizBlock { + label: 'Bug Created (30D)' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: lm_bug_ratio < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: lm_bug_ratio < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation number_of_bug { + label: 'Number Of Bug' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; + calc_type: 'measure' + data_type: 'number' + } + calculation bug_ratio { + label: 'Bug Ratio' + formula: @aql number_of_bug / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bugs { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + ref: 'number_of_bug' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'lm_bugs' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'completed_issue_color' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'completed_issue_icon' + format { + type: 'text' + } + } + ] + content: @md + +
+

Bug Created (30D)

+ + {{ rows[0].values.`Number Of Bug` }} + + +
+ {{ rows[0].values.`Completed Issue Icon` }} + {{ rows[0].values.`LM - Number of Bug` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { @@ -2617,7 +2980,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2635,7 +3000,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2653,7 +3020,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2671,7 +3040,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2689,7 +3060,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2707,7 +3080,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2725,7 +3100,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2743,7 +3120,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2766,7 +3145,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2792,6 +3173,8 @@ Dashboard squad_command_center { 'v_pdt0', 'v_x2gw', 'v_x4xc', + 'v_6rg8', + 'v_6pdw', 'f_project_name_ynq6' ] disabled: true @@ -2831,7 +3214,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2854,7 +3239,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2875,7 +3262,9 @@ Dashboard squad_command_center { 'v_gq0k', 'v_lvp5', 'v_d3sa', - 'v_22mj' + 'v_22mj', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2896,7 +3285,9 @@ Dashboard squad_command_center { 'v_gq0k', 'v_lvp5', 'v_d3sa', - 'v_22mj' + 'v_22mj', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2917,7 +3308,9 @@ Dashboard squad_command_center { 'v_gq0k', 'v_lvp5', 'v_d3sa', - 'v_22mj' + 'v_22mj', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2938,7 +3331,9 @@ Dashboard squad_command_center { 'v_gq0k', 'v_lvp5', 'v_d3sa', - 'v_22mj' + 'v_22mj', + 'v_6rg8', + 'v_6pdw' ] disabled: true } @@ -2959,7 +3354,61 @@ Dashboard squad_command_center { 'v_gq0k', 'v_lvp5', 'v_d3sa', - 'v_22mj' + 'v_22mj', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6rg8' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6pdw' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc' ] disabled: true } From 1867648ca04af5e72d4a631c666b14c18ee8b93f Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 06:13:42 +0000 Subject: [PATCH 143/168] Add 'Bug Ratio' and 'Number Of Bug' metrics to 'reporting_project_management' dataset, enhance 'reporting_issues' model with normalized labels, and revamp 'squad_command_center' dashboard with bug and work type visualizations for project quality tracking --- .../reporting_issues.model.aml | 9 +- .../reporting_project_management.dataset.aml | 14 + .../reporting_project_management.page.aml | 1748 +++++------------ 3 files changed, 546 insertions(+), 1225 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml index 5ec4b14..222c450 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml @@ -72,7 +72,14 @@ Model reporting_issues { description: '' type: 'text' hidden: false - definition: @sql {{ #SOURCE.label }};; + definition: @sql CASE + WHEN {{ #SOURCE.label }} = 'bug' THEN 'Bug' + WHEN {{ #SOURCE.label }} = 'chore' THEN 'Chore' + WHEN {{ #SOURCE.label }} = 'feature' THEN 'Feature' + WHEN {{ #SOURCE.label }} = 'improvement' THEN 'Improvement' + WHEN {{ #SOURCE.label }} = 'tech_debt' THEN 'Tech Debt' + ELSE 'Other' + END;; } dimension estimate { label: 'Estimate' diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 8453ee0..91485e9 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -73,6 +73,20 @@ Dataset reporting_project_management { description: "" definition: @aql avg(reporting_stage_duration.duration_hours) / 24;; } + metric number_of_bug { + label: "Number Of Bug" + type: "number" + hidden: false + description: "" + definition: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; + } + metric bug_ratio { + label: "Bug Ratio" + type: "number" + hidden: false + description: "" + definition: @aql number_of_bug / count(reporting_issues.id);; + } dimension duration_day { label: "Duration Day" type: "number" diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 53d5f65..5b7b083 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -7,14 +7,6 @@ Dashboard squad_command_center { label: '📊 Projects Overview' height: 940 grid_size: 20 - block v_f17x { - position: pos(420, 200, 360, 180) - layer: 1 - } - block v_pdt0 { - position: pos(800, 200, 360, 180) - layer: 1 - } block v_x2gw { position: pos(40, 400, 560, 400) } @@ -201,10 +193,28 @@ Dashboard squad_command_center { label: '🎯 Quality' height: 1300 grid_size: 20 - block t_24js { - position: pos(40, 20, 740, 80) + block t_a0mx { + position: pos(0, 0, 80, 80) + } + block t_zb56 { + position: pos(40, 0, 740, 80) layer: 1 } + block t_sv82 { + position: pos(20, 220, 1140, 60) + } + block t_02ub { + position: pos(20, 180, 740, 60) + } + block f_project_name_ynq6 { + position: pos(40, 80, 300, 80) + } + block v_42xw { + position: pos(40, 280, 540, 400) + } + block v_lrtf { + position: pos(600, 280, 560, 400) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -1839,237 +1849,294 @@ Dashboard squad_command_center { hide_label: true } } - block v_f17x: VizBlock { - label: 'Shipped (30D) copy copy copy' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { + block v_x2gw: VizBlock { + label: 'Status Distribution by Project' + description: "Where each project's issues are sitting" + viz: ColumnChart { dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' + x_axis: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' + legend: VizFieldFull { + ref: r(reporting_issues.status) + format { + type: 'text' + } } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; - calc_type: 'measure' - data_type: 'text' + y_axis { + settings { + stack_series_by: 'value' + } + series { + field: VizFieldFull { + label: 'Issue' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + point { + value: 'Deployed' + color: '#5DB88FFF' + } + point { + value: 'Deployed to Staging' + color: '#60A5FAFF' + } + point { + value: 'In Progress' + color: '#206BC4FF' + } + point { + value: 'Merged' + color: '#87A6C7FF' + } + point { + value: 'PR Review' + color: '#E9AA2BFF' + } + point { + value: 'Tested on Staging' + color: '#FCD34DFF' + } + } + } } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "▼", - else: "▲" - );; - calc_type: 'measure' - data_type: 'text' + settings { + row_limit: 5000 + sort { + field_index: 0 + direction: 'asc' + type: 'yaxis' + } + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } } - calculation percent_issue_completed { - label: 'Percent Issue Completed' + } + } + block v_x4xc: VizBlock { + label: 'Project Velocity Comparison' + description: 'Issues completed per month per project' + viz: LineChart { + dataset: reporting_project_management + calculation completion_rate { + label: 'Completion Rate' formula: @aql completed_issue / count(reporting_issues.id);; calc_type: 'measure' data_type: 'number' } - calculation remaining_issue { - label: 'Remaining Issue' - formula: @aql count(reporting_issues.id) - completed_issue;; - calc_type: 'measure' - data_type: 'number' + theme { } - filter { - field: r(reporting_project.name) - operator: 'is' - value: 'Data Alerts Revamp' + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } } - values: [ - VizFieldFull { - ref: r(reporting_project_management.percent_completion) - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - label: 'Total' - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Done' - ref: r(reporting_project_management.completed_issue) - format { - type: 'number' - pattern: 'inherited' + legend: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: 'completion_rate' + format { + type: 'number' + pattern: '#,###%' + } } - }, - VizFieldFull { - label: 'Remaining' - ref: 'remaining_issue' - format { - type: 'number' - pattern: 'inherited' + settings { + point { + value: 'Explore 2' + color: '#255DD4' + line_interpolation: 'smooth' + } + point { + value: 'Data Alerts Revamp' + color: '#E27712' + line_interpolation: 'smooth' + } + point { + value: 'Dashboard Performance' + color: '#18A59E' + line_interpolation: 'smooth' + } } } - ] - content: @md - - ;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } + ;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 } - settings { - hide_label: true + } + block t_677a: TextBlock { + content: @md Docs;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block t_z5ve: TextBlock { + content: @md Sandbox;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 } } - block v_pdt0: VizBlock { - label: 'Shipped (30D) copy copy copy copy' + block v_6rg8: VizBlock { + label: 'Bug Ratio (30D)' description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management @@ -2088,202 +2155,126 @@ Dashboard squad_command_center { calculation completed_issue_color { label: 'Completed Issue Color' formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; + when: lm_bug_ratio < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; calc_type: 'measure' data_type: 'text' } calculation completed_issue_icon { label: 'Completed Issue Icon' formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "▼", - else: "▲" - );; + when: lm_bug_ratio < 0, + then: "▼", + else: "▲" +);; calc_type: 'measure' data_type: 'text' } - calculation percent_issue_completed { - label: 'Percent Issue Completed' - formula: @aql completed_issue / count(reporting_issues.id);; + calculation number_of_bug { + label: 'Number Of Bug' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; calc_type: 'measure' data_type: 'number' } - calculation remaining_issue { - label: 'Remaining Issue' - formula: @aql count(reporting_issues.id) - completed_issue;; + calculation bug_ratio { + label: 'Bug Ratio' + formula: @aql number_of_bug / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; calc_type: 'measure' data_type: 'number' } filter { - field: r(reporting_project.name) - operator: 'is' - value: 'Dashboard Performance' + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' } values: [ VizFieldFull { - ref: r(reporting_project_management.percent_completion) + ref: 'bug_ratio' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - label: 'Total' - ref: r(reporting_issues.id) - aggregation: 'count' + ref: 'lm_bug_ratio' format { type: 'number' - pattern: 'inherited' + pattern: '#,###%' } }, VizFieldFull { - label: 'Done' - ref: r(reporting_project_management.completed_issue) + ref: 'completed_issue_color' format { - type: 'number' - pattern: 'inherited' + type: 'text' } }, VizFieldFull { - label: 'Remaining' - ref: 'remaining_issue' + ref: 'completed_issue_icon' format { - type: 'number' - pattern: 'inherited' + type: 'text' } } ] content: @md
-

Dashboard Performance

- -
-
- - - - - - -
{{rows[0].values.`Percent Issue Completed`}}
-
- -
-
- Total - {{ rows[0].values.`Total` }} -
-
- Done - {{ rows[0].values.`Done` }} -
-
- Remaining - {{ rows[0].values.`Remaining` }} -
-
+

Bug Ratio (30D)

+ + {{ rows[0].values.`Bug Ratio` }} + + +
+ {{ rows[0].values.`Completed Issue Icon` }} + {{ rows[0].values.`LM - Bug Ratio` }} + + vs last month
-
;; + +
;; settings { show_row_total: true show_column_total: true @@ -2297,215 +2288,44 @@ Dashboard squad_command_center { hide_label: true } } - block v_x2gw: VizBlock { - label: 'Status Distribution by Project' - description: "Where each project's issues are sitting" - viz: ColumnChart { - dataset: reporting_project_management - x_axis: VizFieldFull { - ref: r(reporting_project.name) - format { - type: 'text' - } + block t_eh1a: TextBlock { + content: @md
;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' } - legend: VizFieldFull { - ref: r(reporting_issues.status) - format { - type: 'text' - } + background { + bg_color: 'transparent' } - y_axis { - settings { - stack_series_by: 'value' - } - series { - field: VizFieldFull { - label: 'Issue' - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - point { - value: 'Deployed' - color: '#5DB88FFF' - } - point { - value: 'Deployed to Staging' - color: '#60A5FAFF' - } - point { - value: 'In Progress' - color: '#206BC4FF' - } - point { - value: 'Merged' - color: '#87A6C7FF' - } - point { - value: 'PR Review' - color: '#E9AA2BFF' - } - point { - value: 'Tested on Staging' - color: '#FCD34DFF' - } - } - } + shadow: 'none' + } + } + block t_m4lt: TextBlock { + content: @md ### **🎯 Quality**;; + theme { + text { + font_color: '#475569' } - settings { - row_limit: 5000 - sort { - field_index: 0 - direction: 'asc' - type: 'yaxis' - } - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' } + background { + bg_color: 'transparent' + } + shadow: 'none' } } - block v_x4xc: VizBlock { - label: 'Project Velocity Comparison' - description: 'Issues completed per month per project' - viz: LineChart { - dataset: reporting_project_management - calculation completion_rate { - label: 'Completion Rate' - formula: @aql completed_issue / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - theme { - } - x_axis: VizFieldFull { - ref: r(reporting_issues.completed_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(reporting_project.name) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: 'completion_rate' - format { - type: 'number' - pattern: '#,###%' - } - } - settings { - point { - value: 'Explore 2' - color: '#255DD4' - line_interpolation: 'smooth' - } - point { - value: 'Data Alerts Revamp' - color: '#E27712' - line_interpolation: 'smooth' - } - point { - value: 'Dashboard Performance' - color: '#18A59E' - line_interpolation: 'smooth' - } - } - } - } - settings { - show_data_points: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t_uqe1: TextBlock { - content: @md ### **🕰️ Time-to-Market**;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } - block t_07hn: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - border_color: 'transparent' - } - shadow: 'none' - background { - bg_color: 'transparent' - } - } - } - block t_bf42: TextBlock { - content: @md ### **📊 Projects Overview**;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } - block t_a8eh: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } - block t_aax1: TextBlock { + block t_k7fo: TextBlock { content: @md
;; theme { text { @@ -2520,71 +2340,10 @@ Dashboard squad_command_center { bg_color: 'transparent' } shadow: 'none' - padding: 0 - } - } - block t_my4d: TextBlock { - content: @md -
- Powered by - - Holistics - Holistics - -
- ;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - padding: 0 - } - } - block t_677a: TextBlock { - content: @md Docs;; - theme { - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - padding: 0 - } - } - block t_z5ve: TextBlock { - content: @md Sandbox;; - theme { - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - padding: 0 } } - block v_6rg8: VizBlock { - label: 'Bug Ratio (30D)' + block v_6pdw: VizBlock { + label: 'Bug Created (30D)' description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management @@ -2638,6 +2397,12 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } + calculation lm_bugs { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -2645,14 +2410,14 @@ Dashboard squad_command_center { } values: [ VizFieldFull { - ref: 'bug_ratio' + ref: 'number_of_bug' format { type: 'number' - pattern: '#,###%' + pattern: 'inherited' } }, VizFieldFull { - ref: 'lm_bug_ratio' + ref: 'lm_bugs' format { type: 'number' pattern: '#,###%' @@ -2687,7 +2452,7 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-bug-ratio-value { + .kpi-bug-value { font-size: 52px; font-weight: 500; color: #5DB88F; @@ -2702,7 +2467,7 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-bug-ratio-compare { + .kpi-bug-compare { color: {{ rows[0].values.`Completed Issue Color` }}; font-weight: 500 } @@ -2710,14 +2475,14 @@ Dashboard squad_command_center {
-

Bug Ratio (30D)

- - {{ rows[0].values.`Bug Ratio` }} +

Bug Created (30D)

+ + {{ rows[0].values.`Number Of Bug` }}
{{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`LM - Bug Ratio` }} + {{ rows[0].values.`LM - Number of Bug` }} vs last month
@@ -2736,7 +2501,7 @@ Dashboard squad_command_center { hide_label: true } } - block t_eh1a: TextBlock { + block t_a0mx: TextBlock { content: @md
;; - theme { + theme: BlockTheme { border { border_width: 0 - border_color: 'transparent' border_style: 'none' + border_color: 'transparent' } background { bg_color: 'transparent' @@ -2756,45 +2521,45 @@ Dashboard squad_command_center { shadow: 'none' } } - block t_24js: TextBlock { + block t_zb56: TextBlock { content: @md ## **Squad Reporting - Project Management**;; - theme { + theme: BlockTheme { + background { + bg_color: 'transparent' + } text { font_color: '#1e40af' } border { border_width: 0 - border_color: 'transparent' border_style: 'solid' - } - background { - bg_color: 'transparent' + border_color: 'transparent' } shadow: 'none' } } - block t_m4lt: TextBlock { - content: @md ### **🎯 Quality**;; + block t_sv82: TextBlock { + content: @md
;; theme { text { - font_color: '#475569' + font_color: '#ffffff' } border { border_width: 0 - border_color: 'transparent' border_style: 'none' + border_color: 'transparent' } + shadow: 'none' background { bg_color: 'transparent' } - shadow: 'none' } } - block t_k7fo: TextBlock { - content: @md
;; + block t_02ub: TextBlock { + content: @md ### **🎯 Quality**;; theme { text { - font_color: '#ffffff' + font_color: '#475569' } border { border_width: 0 @@ -2807,388 +2572,140 @@ Dashboard squad_command_center { shadow: 'none' } } - block v_6pdw: VizBlock { - label: 'Bug Created (30D)' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { + block v_42xw: VizBlock { + label: 'Bug Ratio (Week by Week)' + description: 'What % of shipped work is bugs?' + viz: CombinationChart { dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: lm_bug_ratio < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: lm_bug_ratio < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation number_of_bug { - label: 'Number Of Bug' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; - calc_type: 'measure' - data_type: 'number' - } - calculation bug_ratio { - label: 'Bug Ratio' - formula: @aql number_of_bug / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bugs { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc week' + format { + type: 'date' + pattern: 'wwww' + } } - values: [ - VizFieldFull { - ref: 'number_of_bug' - format { - type: 'number' - pattern: 'inherited' + y_axis { + series { + mark_type: 'column' + field: VizFieldFull { + ref: r(reporting_project_management.number_of_bug) + format { + type: 'number' + pattern: 'inherited' + } } - }, - VizFieldFull { - ref: 'lm_bugs' - format { - type: 'number' - pattern: '#,###%' + settings { + color: '#982021FF' + color_palette: 0 } - }, - VizFieldFull { - ref: 'completed_issue_color' - format { - type: 'text' + } + } + y_axis { + settings { + alignment: 'right' + } + series { + mark_type: 'line' + field: VizFieldFull { + ref: r(reporting_project_management.bug_ratio) + format { + type: 'number' + pattern: '#,###%' + } } - }, - VizFieldFull { - ref: 'completed_issue_icon' - format { - type: 'text' + settings { + color: '#E9AA2BFF' + line_interpolation: 'smooth' } } - ] - content: @md - -
-

Bug Created (30D)

- - {{ rows[0].values.`Number Of Bug` }} - - -
- {{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`LM - Number of Bug` }} - - vs last month -
- -
;; + } settings { - show_row_total: true - show_column_total: true + show_data_points: true + row_limit: 5000 + x_axis_show_null_datetime: false aggregate_awareness { enabled: true debug_comments: true } } } - settings { - hide_label: true - } } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'v_x8r0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_997c' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gt75' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_uhk0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_sffe' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_jdaq' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true + block v_lrtf: VizBlock { + label: 'Work Type Distribution' + description: 'Stacked area — what type of work ships?' + viz: AreaChart { + dataset: reporting_project_management + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' } - ] - }, - FilterInteraction { - from: 'v_3qu5' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true + } + legend: VizFieldFull { + ref: r(reporting_issues.label) + format { + type: 'text' } - ] - }, - FilterInteraction { - from: 'v_gq0k' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true + } + y_axis { + settings { + stack_series_by: 'value' } - ] - }, - FilterInteraction { - from: 'v_lvp5' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true + series { + field: VizFieldFull { + label: 'Issues' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + point { + value: 'bug' + line_interpolation: 'smooth' + } + point { + value: 'chore' + line_interpolation: 'smooth' + } + point { + value: 'feature' + line_interpolation: 'smooth' + } + point { + value: 'improvement' + line_interpolation: 'smooth' + } + point { + value: 'tech_debt' + line_interpolation: 'smooth' + } + } } - ] - }, - FilterInteraction { - from: 'f_project_name' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'f_project_name_ynq6' - ] - disabled: true + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true } - ] - }, + } + } + } + theme: ai_1773979634521_3 + interactions: [ FilterInteraction { from: 'f_project_name_ynq6' to: [ CustomMapping { block: [ 'v_y7bo', - 'v_f17x', - 'v_pdt0', 'v_x2gw', 'v_x4xc', 'f_project_name' @@ -3196,223 +2713,6 @@ Dashboard squad_command_center { disabled: true } ] - }, - FilterInteraction { - from: 'v_d3sa' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_22mj' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_y7bo' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_f17x' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_pdt0' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_x2gw' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_x4xc' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6rg8' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6pdw' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc' - ] - disabled: true - } - ] } ] } \ No newline at end of file From 52d8a4659e1c515fb7515a447c41041d6e9bfeb2 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 06:22:34 +0000 Subject: [PATCH 144/168] Save uncommitted changes before restoring to commit 590bda --- .../reporting_project_management.dataset.aml | 4 +- .../reporting_project_management.page.aml | 245 +++++++++++++++++- 2 files changed, 242 insertions(+), 7 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 91485e9..9413fae 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -78,7 +78,9 @@ Dataset reporting_project_management { type: "number" hidden: false description: "" - definition: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; + definition: @aql count(reporting_issues.id) +| where(reporting_issues.label == "Bug");; + format: "" } metric bug_ratio { label: "Bug Ratio" diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 5b7b083..2ec2e7a 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -8,14 +8,14 @@ Dashboard squad_command_center { height: 940 grid_size: 20 block v_x2gw { - position: pos(40, 400, 560, 400) + position: pos(40, 600, 560, 400) } block v_y7bo { position: pos(40, 200, 360, 180) layer: 1 } block v_x4xc { - position: pos(620, 400, 540, 400) + position: pos(620, 600, 540, 400) layer: 1 } block t_a8eh { @@ -35,19 +35,23 @@ Dashboard squad_command_center { layer: 1 } block t_aax1 { - position: pos(40, 820, 1120, 40) + position: pos(40, 1020, 1120, 40) layer: 1 } block t_my4d { - position: pos(40, 860, 200, 60) + position: pos(40, 1060, 200, 60) layer: 1 } block t_677a { - position: pos(1020, 880, 60, 40) + position: pos(1020, 1080, 60, 40) layer: 1 } block t_z5ve { - position: pos(1080, 880, 60, 40) + position: pos(1080, 1080, 60, 40) + layer: 1 + } + block v_3ck8 { + position: pos(100, 400, 360, 180) layer: 1 } } @@ -2698,6 +2702,235 @@ Dashboard squad_command_center { } } } + block v_3ck8: VizBlock { + label: 'Explore 2.0 - Progress copy' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } + calculation percent_issue_completed { + label: 'Percent Issue Completed' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation remaining_issue { + label: 'Remaining Issue' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Explore 2' + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Remaining' + ref: 'remaining_issue' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+

Explore 2.0

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
+
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { From d1e4e20425c010e8d31e2ec91d00bea6c1810be5 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 06:22:40 +0000 Subject: [PATCH 145/168] Restore to version "Update dashboard 'squad_command_center' with diff" (#590bda) --- .../reporting_issues.model.aml | 9 +- .../reporting_project_management.dataset.aml | 16 - .../reporting_project_management.page.aml | 1863 +++++++++++------ 3 files changed, 1166 insertions(+), 722 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml index 222c450..5ec4b14 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml @@ -72,14 +72,7 @@ Model reporting_issues { description: '' type: 'text' hidden: false - definition: @sql CASE - WHEN {{ #SOURCE.label }} = 'bug' THEN 'Bug' - WHEN {{ #SOURCE.label }} = 'chore' THEN 'Chore' - WHEN {{ #SOURCE.label }} = 'feature' THEN 'Feature' - WHEN {{ #SOURCE.label }} = 'improvement' THEN 'Improvement' - WHEN {{ #SOURCE.label }} = 'tech_debt' THEN 'Tech Debt' - ELSE 'Other' - END;; + definition: @sql {{ #SOURCE.label }};; } dimension estimate { label: 'Estimate' diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 9413fae..8453ee0 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -73,22 +73,6 @@ Dataset reporting_project_management { description: "" definition: @aql avg(reporting_stage_duration.duration_hours) / 24;; } - metric number_of_bug { - label: "Number Of Bug" - type: "number" - hidden: false - description: "" - definition: @aql count(reporting_issues.id) -| where(reporting_issues.label == "Bug");; - format: "" - } - metric bug_ratio { - label: "Bug Ratio" - type: "number" - hidden: false - description: "" - definition: @aql number_of_bug / count(reporting_issues.id);; - } dimension duration_day { label: "Duration Day" type: "number" diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 2ec2e7a..53d5f65 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -7,15 +7,23 @@ Dashboard squad_command_center { label: '📊 Projects Overview' height: 940 grid_size: 20 + block v_f17x { + position: pos(420, 200, 360, 180) + layer: 1 + } + block v_pdt0 { + position: pos(800, 200, 360, 180) + layer: 1 + } block v_x2gw { - position: pos(40, 600, 560, 400) + position: pos(40, 400, 560, 400) } block v_y7bo { position: pos(40, 200, 360, 180) layer: 1 } block v_x4xc { - position: pos(620, 600, 540, 400) + position: pos(620, 400, 540, 400) layer: 1 } block t_a8eh { @@ -35,23 +43,19 @@ Dashboard squad_command_center { layer: 1 } block t_aax1 { - position: pos(40, 1020, 1120, 40) + position: pos(40, 820, 1120, 40) layer: 1 } block t_my4d { - position: pos(40, 1060, 200, 60) + position: pos(40, 860, 200, 60) layer: 1 } block t_677a { - position: pos(1020, 1080, 60, 40) + position: pos(1020, 880, 60, 40) layer: 1 } block t_z5ve { - position: pos(1080, 1080, 60, 40) - layer: 1 - } - block v_3ck8 { - position: pos(100, 400, 360, 180) + position: pos(1080, 880, 60, 40) layer: 1 } } @@ -197,28 +201,10 @@ Dashboard squad_command_center { label: '🎯 Quality' height: 1300 grid_size: 20 - block t_a0mx { - position: pos(0, 0, 80, 80) - } - block t_zb56 { - position: pos(40, 0, 740, 80) + block t_24js { + position: pos(40, 20, 740, 80) layer: 1 } - block t_sv82 { - position: pos(20, 220, 1140, 60) - } - block t_02ub { - position: pos(20, 180, 740, 60) - } - block f_project_name_ynq6 { - position: pos(40, 80, 300, 80) - } - block v_42xw { - position: pos(40, 280, 540, 400) - } - block v_lrtf { - position: pos(600, 280, 560, 400) - } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -1853,294 +1839,237 @@ Dashboard squad_command_center { hide_label: true } } - block v_x2gw: VizBlock { - label: 'Status Distribution by Project' - description: "Where each project's issues are sitting" - viz: ColumnChart { + block v_f17x: VizBlock { + label: 'Shipped (30D) copy copy copy' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { dataset: reporting_project_management - x_axis: VizFieldFull { - ref: r(reporting_project.name) - format { - type: 'text' - } + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' } - legend: VizFieldFull { - ref: r(reporting_issues.status) - format { - type: 'text' - } + calculation lm__completed_issue { + label: '%LM - Completed Issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' } - y_axis { - settings { - stack_series_by: 'value' - } - series { - field: VizFieldFull { - label: 'Issue' - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - point { - value: 'Deployed' - color: '#5DB88FFF' - } - point { - value: 'Deployed to Staging' - color: '#60A5FAFF' - } - point { - value: 'In Progress' - color: '#206BC4FF' - } - point { - value: 'Merged' - color: '#87A6C7FF' - } - point { - value: 'PR Review' - color: '#E9AA2BFF' - } - point { - value: 'Tested on Staging' - color: '#FCD34DFF' - } - } - } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#4ade80" + );; + calc_type: 'measure' + data_type: 'text' } - settings { - row_limit: 5000 - sort { - field_index: 0 - direction: 'asc' - type: 'yaxis' - } - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql case( + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' } - } - } - block v_x4xc: VizBlock { - label: 'Project Velocity Comparison' - description: 'Issues completed per month per project' - viz: LineChart { - dataset: reporting_project_management - calculation completion_rate { - label: 'Completion Rate' + calculation percent_issue_completed { + label: 'Percent Issue Completed' formula: @aql completed_issue / count(reporting_issues.id);; calc_type: 'measure' data_type: 'number' } - theme { - } - x_axis: VizFieldFull { - ref: r(reporting_issues.completed_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } + calculation remaining_issue { + label: 'Remaining Issue' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' } - legend: VizFieldFull { - ref: r(reporting_project.name) - format { - type: 'text' - } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Data Alerts Revamp' } - y_axis { - series { - field: VizFieldFull { - ref: 'completion_rate' - format { - type: 'number' - pattern: '#,###%' - } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' } - settings { - point { - value: 'Explore 2' - color: '#255DD4' - line_interpolation: 'smooth' - } - point { - value: 'Data Alerts Revamp' - color: '#E27712' - line_interpolation: 'smooth' - } - point { - value: 'Dashboard Performance' - color: '#18A59E' - line_interpolation: 'smooth' - } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Remaining' + ref: 'remaining_issue' + format { + type: 'number' + pattern: 'inherited' } } - } - settings { - show_data_points: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block t_uqe1: TextBlock { - content: @md ### **🕰️ Time-to-Market**;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } + ] + content: @md + +
+

Data Alerts Revamp

+ +
+
+ + + - Holistics - + + + +
{{rows[0].values.`Percent Issue Completed`}}
- ;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - padding: 0 - } - } - block t_677a: TextBlock { - content: @md Docs;; - theme { - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' + +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
+
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } } - shadow: 'none' - padding: 0 } - } - block t_z5ve: TextBlock { - content: @md Sandbox;; - theme { - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - padding: 0 + settings { + hide_label: true } } - block v_6rg8: VizBlock { - label: 'Bug Ratio (30D)' + block v_pdt0: VizBlock { + label: 'Shipped (30D) copy copy copy copy' description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management @@ -2159,126 +2088,202 @@ Dashboard squad_command_center { calculation completed_issue_color { label: 'Completed Issue Color' formula: @aql case( - when: lm_bug_ratio < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; + when: percent_lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#4ade80" + );; calc_type: 'measure' data_type: 'text' } calculation completed_issue_icon { label: 'Completed Issue Icon' formula: @aql case( - when: lm_bug_ratio < 0, - then: "▼", - else: "▲" -);; + when: percent_lm_completed_issue < 0, + then: "▼", + else: "▲" + );; calc_type: 'measure' data_type: 'text' } - calculation number_of_bug { - label: 'Number Of Bug' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; - calc_type: 'measure' - data_type: 'number' - } - calculation bug_ratio { - label: 'Bug Ratio' - formula: @aql number_of_bug / count(reporting_issues.id);; + calculation percent_issue_completed { + label: 'Percent Issue Completed' + formula: @aql completed_issue / count(reporting_issues.id);; calc_type: 'measure' data_type: 'number' } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calculation remaining_issue { + label: 'Remaining Issue' + formula: @aql count(reporting_issues.id) - completed_issue;; calc_type: 'measure' data_type: 'number' } filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' + field: r(reporting_project.name) + operator: 'is' + value: 'Dashboard Performance' } values: [ VizFieldFull { - ref: 'bug_ratio' + ref: r(reporting_project_management.percent_completion) format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'lm_bug_ratio' + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' format { type: 'number' - pattern: '#,###%' + pattern: 'inherited' } }, VizFieldFull { - ref: 'completed_issue_color' + label: 'Done' + ref: r(reporting_project_management.completed_issue) format { - type: 'text' + type: 'number' + pattern: 'inherited' } }, VizFieldFull { - ref: 'completed_issue_icon' + label: 'Remaining' + ref: 'remaining_issue' format { - type: 'text' + type: 'number' + pattern: 'inherited' } } ] content: @md
-

Bug Ratio (30D)

- - {{ rows[0].values.`Bug Ratio` }} - - -
- {{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`LM - Bug Ratio` }} - - vs last month +

Dashboard Performance

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
- -
;; +
;; settings { show_row_total: true show_column_total: true @@ -2292,36 +2297,156 @@ Dashboard squad_command_center { hide_label: true } } - block t_eh1a: TextBlock { - content: @md
;; - theme { - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' + block v_x2gw: VizBlock { + label: 'Status Distribution by Project' + description: "Where each project's issues are sitting" + viz: ColumnChart { + dataset: reporting_project_management + x_axis: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } } - background { - bg_color: 'transparent' + legend: VizFieldFull { + ref: r(reporting_issues.status) + format { + type: 'text' + } } - shadow: 'none' - } - } - block t_m4lt: TextBlock { - content: @md ### **🎯 Quality**;; - theme { - text { - font_color: '#475569' + y_axis { + settings { + stack_series_by: 'value' + } + series { + field: VizFieldFull { + label: 'Issue' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + point { + value: 'Deployed' + color: '#5DB88FFF' + } + point { + value: 'Deployed to Staging' + color: '#60A5FAFF' + } + point { + value: 'In Progress' + color: '#206BC4FF' + } + point { + value: 'Merged' + color: '#87A6C7FF' + } + point { + value: 'PR Review' + color: '#E9AA2BFF' + } + point { + value: 'Tested on Staging' + color: '#FCD34DFF' + } + } + } } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' + settings { + row_limit: 5000 + sort { + field_index: 0 + direction: 'asc' + type: 'yaxis' + } + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_x4xc: VizBlock { + label: 'Project Velocity Comparison' + description: 'Issues completed per month per project' + viz: LineChart { + dataset: reporting_project_management + calculation completion_rate { + label: 'Completion Rate' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + theme { + } + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: 'completion_rate' + format { + type: 'number' + pattern: '#,###%' + } + } + settings { + point { + value: 'Explore 2' + color: '#255DD4' + line_interpolation: 'smooth' + } + point { + value: 'Data Alerts Revamp' + color: '#E27712' + line_interpolation: 'smooth' + } + point { + value: 'Dashboard Performance' + color: '#18A59E' + line_interpolation: 'smooth' + } + } + } + } + settings { + show_data_points: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block t_uqe1: TextBlock { + content: @md ### **🕰️ Time-to-Market**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' } background { bg_color: 'transparent' @@ -2329,7 +2454,41 @@ Dashboard squad_command_center { shadow: 'none' } } - block t_k7fo: TextBlock { + block t_07hn: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + border_color: 'transparent' + } + shadow: 'none' + background { + bg_color: 'transparent' + } + } + } + block t_bf42: TextBlock { + content: @md ### **📊 Projects Overview**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_a8eh: TextBlock { content: @md
;; theme { text { @@ -2346,8 +2505,86 @@ Dashboard squad_command_center { shadow: 'none' } } - block v_6pdw: VizBlock { - label: 'Bug Created (30D)' + block t_aax1: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block t_my4d: TextBlock { + content: @md +
+ Powered by + + Holistics + Holistics + +
+ ;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block t_677a: TextBlock { + content: @md Docs;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block t_z5ve: TextBlock { + content: @md Sandbox;; + theme { + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + padding: 0 + } + } + block v_6rg8: VizBlock { + label: 'Bug Ratio (30D)' description: 'Total issues launched last 30 days' viz: MarkdownViz { dataset: reporting_project_management @@ -2401,12 +2638,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation lm_bugs { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -2414,14 +2645,14 @@ Dashboard squad_command_center { } values: [ VizFieldFull { - ref: 'number_of_bug' + ref: 'bug_ratio' format { type: 'number' - pattern: 'inherited' + pattern: '#,###%' } }, VizFieldFull { - ref: 'lm_bugs' + ref: 'lm_bug_ratio' format { type: 'number' pattern: '#,###%' @@ -2456,7 +2687,7 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-bug-value { + .kpi-bug-ratio-value { font-size: 52px; font-weight: 500; color: #5DB88F; @@ -2471,7 +2702,7 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-bug-compare { + .kpi-bug-ratio-compare { color: {{ rows[0].values.`Completed Issue Color` }}; font-weight: 500 } @@ -2479,14 +2710,14 @@ Dashboard squad_command_center {
-

Bug Created (30D)

- - {{ rows[0].values.`Number Of Bug` }} +

Bug Ratio (30D)

+ + {{ rows[0].values.`Bug Ratio` }}
{{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`LM - Number of Bug` }} + {{ rows[0].values.`LM - Bug Ratio` }} vs last month
@@ -2505,7 +2736,7 @@ Dashboard squad_command_center { hide_label: true } } - block t_a0mx: TextBlock { + block t_eh1a: TextBlock { content: @md
;; - theme: BlockTheme { + theme { border { border_width: 0 - border_style: 'none' border_color: 'transparent' + border_style: 'none' } background { bg_color: 'transparent' @@ -2525,45 +2756,45 @@ Dashboard squad_command_center { shadow: 'none' } } - block t_zb56: TextBlock { + block t_24js: TextBlock { content: @md ## **Squad Reporting - Project Management**;; - theme: BlockTheme { - background { - bg_color: 'transparent' - } + theme { text { font_color: '#1e40af' } border { border_width: 0 - border_style: 'solid' border_color: 'transparent' + border_style: 'solid' + } + background { + bg_color: 'transparent' } shadow: 'none' } } - block t_sv82: TextBlock { - content: @md
;; + block t_m4lt: TextBlock { + content: @md ### **🎯 Quality**;; theme { text { - font_color: '#ffffff' + font_color: '#475569' } border { border_width: 0 - border_style: 'none' border_color: 'transparent' + border_style: 'none' } - shadow: 'none' background { bg_color: 'transparent' } + shadow: 'none' } } - block t_02ub: TextBlock { - content: @md ### **🎯 Quality**;; + block t_k7fo: TextBlock { + content: @md
;; theme { text { - font_color: '#475569' + font_color: '#ffffff' } border { border_width: 0 @@ -2576,136 +2807,10 @@ Dashboard squad_command_center { shadow: 'none' } } - block v_42xw: VizBlock { - label: 'Bug Ratio (Week by Week)' - description: 'What % of shipped work is bugs?' - viz: CombinationChart { - dataset: reporting_project_management - x_axis: VizFieldFull { - ref: r(reporting_issues.completed_at) - transformation: 'datetrunc week' - format { - type: 'date' - pattern: 'wwww' - } - } - y_axis { - series { - mark_type: 'column' - field: VizFieldFull { - ref: r(reporting_project_management.number_of_bug) - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - color: '#982021FF' - color_palette: 0 - } - } - } - y_axis { - settings { - alignment: 'right' - } - series { - mark_type: 'line' - field: VizFieldFull { - ref: r(reporting_project_management.bug_ratio) - format { - type: 'number' - pattern: '#,###%' - } - } - settings { - color: '#E9AA2BFF' - line_interpolation: 'smooth' - } - } - } - settings { - show_data_points: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_lrtf: VizBlock { - label: 'Work Type Distribution' - description: 'Stacked area — what type of work ships?' - viz: AreaChart { - dataset: reporting_project_management - x_axis: VizFieldFull { - ref: r(reporting_issues.completed_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(reporting_issues.label) - format { - type: 'text' - } - } - y_axis { - settings { - stack_series_by: 'value' - } - series { - field: VizFieldFull { - label: 'Issues' - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - } - settings { - point { - value: 'bug' - line_interpolation: 'smooth' - } - point { - value: 'chore' - line_interpolation: 'smooth' - } - point { - value: 'feature' - line_interpolation: 'smooth' - } - point { - value: 'improvement' - line_interpolation: 'smooth' - } - point { - value: 'tech_debt' - line_interpolation: 'smooth' - } - } - } - } - settings { - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - block v_3ck8: VizBlock { - label: 'Explore 2.0 - Progress copy' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { + block v_6pdw: VizBlock { + label: 'Bug Created (30D)' + description: 'Total issues launched last 30 days' + viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { label: 'LM - Completed issue' @@ -2722,202 +2827,132 @@ Dashboard squad_command_center { calculation completed_issue_color { label: 'Completed Issue Color' formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; + when: lm_bug_ratio < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; calc_type: 'measure' data_type: 'text' } calculation completed_issue_icon { label: 'Completed Issue Icon' formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "▼", - else: "▲" - );; + when: lm_bug_ratio < 0, + then: "▼", + else: "▲" +);; calc_type: 'measure' data_type: 'text' } - calculation percent_issue_completed { - label: 'Percent Issue Completed' - formula: @aql completed_issue / count(reporting_issues.id);; + calculation number_of_bug { + label: 'Number Of Bug' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; calc_type: 'measure' data_type: 'number' } - calculation remaining_issue { - label: 'Remaining Issue' - formula: @aql count(reporting_issues.id) - completed_issue;; + calculation bug_ratio { + label: 'Bug Ratio' + formula: @aql number_of_bug / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bugs { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; calc_type: 'measure' data_type: 'number' } filter { - field: r(reporting_project.name) - operator: 'is' - value: 'Explore 2' + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' } values: [ VizFieldFull { - ref: r(reporting_project_management.percent_completion) + ref: 'number_of_bug' format { type: 'number' - pattern: '#,###%' + pattern: 'inherited' } }, VizFieldFull { - label: 'Total' - ref: r(reporting_issues.id) - aggregation: 'count' + ref: 'lm_bugs' format { type: 'number' - pattern: 'inherited' + pattern: '#,###%' } }, VizFieldFull { - label: 'Done' - ref: r(reporting_project_management.completed_issue) + ref: 'completed_issue_color' format { - type: 'number' - pattern: 'inherited' + type: 'text' } }, VizFieldFull { - label: 'Remaining' - ref: 'remaining_issue' + ref: 'completed_issue_icon' format { - type: 'number' - pattern: 'inherited' + type: 'text' } } ] content: @md
-

Explore 2.0

- -
-
- - - - - - -
{{rows[0].values.`Percent Issue Completed`}}
-
- -
-
- Total - {{ rows[0].values.`Total` }} -
-
- Done - {{ rows[0].values.`Done` }} -
-
- Remaining - {{ rows[0].values.`Remaining` }} -
-
+

Bug Created (30D)

+ + {{ rows[0].values.`Number Of Bug` }} + + +
+ {{ rows[0].values.`Completed Issue Icon` }} + {{ rows[0].values.`LM - Number of Bug` }} + + vs last month
-
;; + +
;; settings { show_row_total: true show_column_total: true @@ -2933,12 +2968,227 @@ Dashboard squad_command_center { } theme: ai_1773979634521_3 interactions: [ + FilterInteraction { + from: 'v_x8r0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_997c' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gt75' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_uhk0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_sffe' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jdaq' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_3qu5' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gq0k' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lvp5' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'f_project_name_ynq6' + ] + disabled: true + } + ] + }, FilterInteraction { from: 'f_project_name_ynq6' to: [ CustomMapping { block: [ 'v_y7bo', + 'v_f17x', + 'v_pdt0', 'v_x2gw', 'v_x4xc', 'f_project_name' @@ -2946,6 +3196,223 @@ Dashboard squad_command_center { disabled: true } ] + }, + FilterInteraction { + from: 'v_d3sa' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_22mj' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_y7bo' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_f17x' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_pdt0' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_x2gw' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_x4xc' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6rg8' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6pdw' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc' + ] + disabled: true + } + ] } ] } \ No newline at end of file From 2b185ac21f775676a48d223327d9b25b12347d36 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 06:27:02 +0000 Subject: [PATCH 146/168] Update 'reporting_issues' labels for clarity and add new blocks on 'squad_command_center' page --- .../reporting_issues.model.aml | 9 +++- .../reporting_project_management.page.aml | 48 ++++++++++++------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml index 5ec4b14..a2cdd2f 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_issues.model.aml @@ -72,7 +72,14 @@ Model reporting_issues { description: '' type: 'text' hidden: false - definition: @sql {{ #SOURCE.label }};; + definition: @sql CASE + WHEN {{ #SOURCE.label }} ='bug' THEN 'Bug' + WHEN {{ #SOURCE.label }} ='tech_debt' THEN 'Tech Debt' + WHEN {{ #SOURCE.label }} ='improvement' THEN 'Improvement' + WHEN {{ #SOURCE.label }} ='feature' THEN 'Feature' + WHEN {{ #SOURCE.label }} ='chore' THEN 'Chore' + ELSE 'Other' + END;; } dimension estimate { label: 'Estimate' diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 53d5f65..addc5f2 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -201,10 +201,22 @@ Dashboard squad_command_center { label: '🎯 Quality' height: 1300 grid_size: 20 - block t_24js { + block t_87la { position: pos(40, 20, 740, 80) layer: 1 } + block t_vx6z { + position: pos(0, 20, 80, 80) + } + block f_project_name_ynq6 { + position: pos(40, 100, 300, 80) + } + block t_07hn { + position: pos(20, 240, 1140, 60) + } + block t_3f6l { + position: pos(20, 200, 740, 60) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -2756,23 +2768,6 @@ Dashboard squad_command_center { shadow: 'none' } } - block t_24js: TextBlock { - content: @md ## **Squad Reporting - Project Management**;; - theme { - text { - font_color: '#1e40af' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'solid' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } block t_m4lt: TextBlock { content: @md ### **🎯 Quality**;; theme { @@ -2966,6 +2961,23 @@ Dashboard squad_command_center { hide_label: true } } + block t_3f6l: TextBlock { + content: @md ### **🎯 Quality**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { From ca87e3eb8d2f338bb40517a720266cb18f0960d7 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 06:31:46 +0000 Subject: [PATCH 147/168] Add 'Number of Bug' and 'Bug Ratio' metrics with charts to 'squad_command_center' dashboard --- .../reporting_project_management.dataset.aml | 14 + .../reporting_project_management.page.aml | 263 ++++++++++++++++-- 2 files changed, 259 insertions(+), 18 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml index 8453ee0..f11a1c8 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.dataset.aml @@ -73,6 +73,20 @@ Dataset reporting_project_management { description: "" definition: @aql avg(reporting_stage_duration.duration_hours) / 24;; } + metric number_of_bug { + label: "Number of Bug" + type: "number" + hidden: false + description: "" + definition: @aql count(reporting_issues.id) | where(reporting_issues.label == "Bug");; + } + metric bug_ratio { + label: "Bug Ratio" + type: "number" + hidden: false + description: "" + definition: @aql number_of_bug / count(reporting_issues.id);; + } dimension duration_day { label: "Duration Day" type: "number" diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index addc5f2..68e7779 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -217,6 +217,14 @@ Dashboard squad_command_center { block t_3f6l { position: pos(20, 200, 740, 60) } + block v_baqx { + position: pos(40, 300, 540, 400) + layer: 1 + } + block v_n6j9 { + position: pos(600, 300, 560, 400) + layer: 1 + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -2978,6 +2986,131 @@ Dashboard squad_command_center { shadow: 'none' } } + block v_baqx: VizBlock { + label: 'Bug Ratio (Week by Week)' + description: 'What % of shipped work is bugs?' + viz: CombinationChart { + dataset: reporting_project_management + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc week' + format { + type: 'date' + pattern: 'wwww' + } + } + y_axis { + series { + mark_type: 'column' + field: VizFieldFull { + ref: r(reporting_project_management.number_of_bug) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#982021FF' + } + } + } + y_axis { + settings { + alignment: 'right' + } + series { + mark_type: 'line' + field: VizFieldFull { + ref: r(reporting_project_management.bug_ratio) + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#E9AA2BFF' + line_interpolation: 'smooth' + } + } + } + settings { + show_data_points: true + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + block v_n6j9: VizBlock { + label: 'Work Type Distribution' + description: 'What type of work ships?' + viz: AreaChart { + dataset: reporting_project_management + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(reporting_issues.label) + format { + type: 'text' + } + } + y_axis { + settings { + stack_series_by: 'value' + } + series { + field: VizFieldFull { + label: 'Issues' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + point { + value: 'Bug' + line_interpolation: 'smooth' + } + point { + value: 'Chore' + line_interpolation: 'smooth' + } + point { + value: 'Feature' + line_interpolation: 'smooth' + } + point { + value: 'Improvement' + line_interpolation: 'smooth' + } + point { + value: 'Tech Debt' + line_interpolation: 'smooth' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } theme: ai_1773979634521_3 interactions: [ FilterInteraction { @@ -2994,7 +3127,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3014,7 +3149,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3034,7 +3171,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3054,7 +3193,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3074,7 +3215,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3094,7 +3237,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3114,7 +3259,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3134,7 +3281,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3159,7 +3308,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3187,6 +3338,8 @@ Dashboard squad_command_center { 'v_x4xc', 'v_6rg8', 'v_6pdw', + 'v_baqx', + 'v_n6j9', 'f_project_name_ynq6' ] disabled: true @@ -3228,7 +3381,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3253,7 +3408,9 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3276,7 +3433,9 @@ Dashboard squad_command_center { 'v_d3sa', 'v_22mj', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3299,7 +3458,9 @@ Dashboard squad_command_center { 'v_d3sa', 'v_22mj', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3322,7 +3483,9 @@ Dashboard squad_command_center { 'v_d3sa', 'v_22mj', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3345,7 +3508,9 @@ Dashboard squad_command_center { 'v_d3sa', 'v_22mj', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3368,7 +3533,9 @@ Dashboard squad_command_center { 'v_d3sa', 'v_22mj', 'v_6rg8', - 'v_6pdw' + 'v_6pdw', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3394,7 +3561,9 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_baqx', + 'v_n6j9' ] disabled: true } @@ -3420,7 +3589,65 @@ Dashboard squad_command_center { 'v_f17x', 'v_pdt0', 'v_x2gw', - 'v_x4xc' + 'v_x4xc', + 'v_baqx', + 'v_n6j9' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_baqx' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_n6j9' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } From c79799b26f415ff529bcf729b242f0fd411137dd Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 11:39:55 +0000 Subject: [PATCH 148/168] =?UTF-8?q?Add=20'=F0=9F=8E=AF=20Quality=20&=20Bot?= =?UTF-8?q?tlenecks'=20tab=20with=20new=20visuals=20and=20disable=20filter?= =?UTF-8?q?=20interactions=20in=20'squad=5Fcommand=5Fcenter'=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reporting_project_management.page.aml | 1703 ++++++++++++++--- 1 file changed, 1478 insertions(+), 225 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 68e7779..451434f 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -198,8 +198,8 @@ Dashboard squad_command_center { width: 1180 } tab quality_tab: CanvasLayout { - label: '🎯 Quality' - height: 1300 + label: '🎯 Quality & Bottlenecks' + height: 2060 grid_size: 20 block t_87la { position: pos(40, 20, 740, 80) @@ -218,13 +218,41 @@ Dashboard squad_command_center { position: pos(20, 200, 740, 60) } block v_baqx { - position: pos(40, 300, 540, 400) + position: pos(40, 480, 540, 400) layer: 1 } block v_n6j9 { - position: pos(600, 300, 560, 400) + position: pos(600, 480, 560, 400) layer: 1 } + block v_hl2j { + position: pos(40, 900, 540, 400) + } + block v_7fkd { + position: pos(600, 900, 560, 400) + layer: 1 + } + block v_8jil { + position: pos(40, 300, 340, 160) + layer: 1 + } + block v_yro9 { + position: pos(440, 300, 340, 160) + layer: 1 + } + block v_yhu3 { + position: pos(820, 300, 340, 160) + layer: 1 + } + block t_q684 { + position: pos(40, 1360, 740, 60) + } + block t_lfpp { + position: pos(40, 1400, 1140, 60) + } + block v_45a6 { + position: pos(40, 1460, 1140, 400) + } } tab bottleneck_tab: CanvasLayout { label: '⚡ Bottlenecks' @@ -3111,224 +3139,1221 @@ Dashboard squad_command_center { } } } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'v_x8r0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_997c' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gt75' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_uhk0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true + block v_hl2j: VizBlock { + label: 'Priority vs Actual Cycle Time' + description: 'Do urgent issues actually ship faster?' + viz: ScatterChart { + dataset: reporting_project_management + x_col: VizFieldFull { + ref: r(reporting_issues.priority) + format { + type: 'text' } - ] - }, - FilterInteraction { - from: 'v_sffe' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true + } + y_col: VizFieldFull { + ref: r(reporting_issues.cycle_time_hours) + format { + type: 'number' + pattern: 'inherited' } - ] - }, - FilterInteraction { - from: 'v_jdaq' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true + } + group_col: VizFieldFull { + ref: r(reporting_issues.priority) + format { + type: 'text' } - ] - }, - FilterInteraction { - from: 'v_3qu5' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true + } + settings { + row_limit: 5000 + } + } + } + block v_7fkd: VizBlock { + label: 'Cycle Time by Label' + description: 'Average hours to ship by work type' + viz: BarChart { + dataset: reporting_project_management + x_axis: VizFieldFull { + ref: r(reporting_issues.label) + format { + type: 'text' } - ] - }, - FilterInteraction { - from: 'v_gq0k' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true + } + y_axis { + series { + field: VizFieldFull { + ref: r(reporting_issues.cycle_time_hours) + aggregation: 'avg' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + color: '#60A5FAFF' + } } - ] - }, - FilterInteraction { - from: 'v_lvp5' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9' - ] - disabled: true + } + settings { + row_limit: 5000 + legend_label: 'hidden' + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true } - ] - }, - FilterInteraction { - from: 'f_project_name' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', + } + } + } + block v_8jil: VizBlock { + label: 'Bug Ratio (30D)' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation bug_ratio_color { + label: 'Bug Ratio Color' + formula: @aql case( + when: lm_bug_ratio > 0, + then: "rgb(248, 113, 113)", + else: "#5DB88F" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation bug_ratio_icon { + label: 'Bug Ratio Icon' + formula: @aql case( + when: lm_bug_ratio < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.bug_ratio) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'lm_bug_ratio' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'bug_ratio_icon' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'bug_ratio_color' + format { + type: 'text' + } + } + ] + content: @md + +
+

Bug Ratio (30D)

+ + {{ rows[0].values.`Bug Ratio` }} + + +
+ {{ rows[0].values.`Bug Ratio Icon` }} + {{ rows[0].values.`LM - Bug Ratio` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_yro9: VizBlock { + label: 'Bug Ratio (30D) copy' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation number_of_bug_color { + label: 'Number of Bug Color' + formula: @aql case( + when: lm_number_of_bug < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation bug_ratio_icon { + label: 'Number of Bug Icon' + formula: @aql case( + when: lm_number_of_bug < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_number_of_bug { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.number_of_bug) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'lm_number_of_bug' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'bug_ratio_icon' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'number_of_bug_color' + format { + type: 'text' + } + } + ] + content: @md + +
+

Bug Created (30D)

+ + {{ rows[0].values.`Number of Bug` }} + + +
+ {{ rows[0].values.`Number of Bug Icon` }} + {{ rows[0].values.`LM - Number of Bug` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_yhu3: VizBlock { + label: 'Bug Ratio (30D) copy copy' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation tech_debt_color { + label: 'Tech Debt Color' + formula: @aql case( + when: lm_tech_debt < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation tech_debt_icon { + label: 'Tech Debt Icon' + formula: @aql case( + when: lm_tech_debt < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_number_of_bug { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation tech_debt { + label: 'Number of Tech Debt' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_tech_debt { + label: 'LM - Number of Tech Debt' + formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + ref: 'tech_debt' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'lm_tech_debt' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'tech_debt_icon' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'tech_debt_color' + format { + type: 'text' + } + } + ] + content: @md + +
+

Tech Debt (30D)

+ + {{ rows[0].values.`Number of Tech Debt` }} + + +
+ {{ rows[0].values.`Tech Debt Icon` }} + {{ rows[0].values.`LM - Number of Tech Debt` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block t_q684: TextBlock { + content: @md ### **⚡ Bottlenecks**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_lfpp: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + border_color: 'transparent' + } + shadow: 'none' + background { + bg_color: 'transparent' + } + } + } + block v_45a6: VizBlock { + label: 'Identifier, Title and 2 more' + viz: MarkdownViz { + dataset: reporting_project_management + rows: [ + VizFieldFull { + ref: r(reporting_issues.identifier) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_issues.title) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_stage_duration.duration_hours) + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+
+

Stale Issues

+

Sorted by time in current stage

+
+ +
+
+
Issue
+
Title
+
+ + {% map(rows) %} +
+
+ {{ `Identifier` }} +
+
+ {{ `Title` }} +
+
+ {{ `Stage` }} +
+
+ {{ `Duration Hours` }} +
+
+ {% end %} + +
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + theme: ai_1773979634521_3 + interactions: [ + FilterInteraction { + from: 'v_x8r0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_997c' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gt75' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_uhk0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_sffe' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jdaq' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_3qu5' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gq0k' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lvp5' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', 'v_d3sa', 'v_22mj', 'v_y7bo', @@ -3340,6 +4365,12 @@ Dashboard squad_command_center { 'v_6pdw', 'v_baqx', 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6', 'f_project_name_ynq6' ] disabled: true @@ -3383,7 +4414,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3410,7 +4447,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3435,7 +4478,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3460,7 +4509,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3485,7 +4540,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3510,7 +4571,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3535,7 +4602,13 @@ Dashboard squad_command_center { 'v_6rg8', 'v_6pdw', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3563,7 +4636,13 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3591,7 +4670,13 @@ Dashboard squad_command_center { 'v_x2gw', 'v_x4xc', 'v_baqx', - 'v_n6j9' + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' ] disabled: true } @@ -3652,6 +4737,174 @@ Dashboard squad_command_center { disabled: true } ] + }, + FilterInteraction { + from: 'v_hl2j' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7fkd' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_8jil' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_yro9' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_yhu3' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_45a6' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] } ] } \ No newline at end of file From 6c65175a1c65359fb1beaa4ee6c1aa71114e033f Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:03:52 +0000 Subject: [PATCH 149/168] Add 'stage_color' dimension and enhance 'Identifier, Title and 5 more' block with stage, duration, assignee, priority in 'reporting_project_management' page --- .../reporting_project_management.page.aml | 78 +++++++++++++------ 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 451434f..afb19e0 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -3819,9 +3819,28 @@ Dashboard squad_command_center { } } block v_45a6: VizBlock { - label: 'Identifier, Title and 2 more' + label: 'Identifier, Title and 5 more' viz: MarkdownViz { dataset: reporting_project_management + calculation stage_color { + label: 'Stage Color' + formula: @aql case( + when: reporting_stage_duration.stage == "In Progress", + then: "#206BC4", + when: reporting_stage_duration.stage == "In PR Review", + then: "#E9AA2B", + when: reporting_stage_duration.stage == "Deploying to Staging", + then: "#60A5FA", + when: reporting_stage_duration.stage == "Testing on Staging", + then: "#FCD34D", + when: reporting_stage_duration.stage == "Waiting for Deployment", + then: "#87A6C7", + else: "others" +);; + calc_type: 'dimension' + data_type: 'text' + model: reporting_stage_duration + } rows: [ VizFieldFull { ref: r(reporting_issues.identifier) @@ -3841,12 +3860,31 @@ Dashboard squad_command_center { type: 'text' } }, + VizFieldFull { + ref: ref('reporting_stage_duration', 'stage_color') + format { + type: 'text' + } + }, VizFieldFull { ref: r(reporting_stage_duration.duration_hours) format { type: 'number' pattern: 'inherited' } + }, + VizFieldFull { + ref: r(reporting_issues.assignee_id) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.priority) + format { + type: 'text' + } } ] content: @md
-

Bug Ratio (30D)

- - {{ rows[0].values.`Bug Ratio` }} +

Tech Debt (30D)

+ + {{ rows[0].values.`Number of Tech Debt` }} -
- {{ rows[0].values.`Bug Ratio Icon` }} - {{ rows[0].values.`LM - Bug Ratio` }} +
+ {{ rows[0].values.`Tech Debt Icon` }} + {{ rows[0].values.`LM - Number of Tech Debt` }} vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -3361,184 +3371,326 @@ Dashboard squad_command_center { hide_label: true } } - block v_yro9: VizBlock { - label: 'Bug Ratio (30D) copy' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation color_condition { - label: 'Completed issue - Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "green" -);; - calc_type: 'measure' - data_type: 'text' + block t_q684: TextBlock { + content: @md ### **⚡ Bottlenecks**;; + theme { + text { + font_color: '#475569' } - calculation icon_condition { - label: 'Completed issue - Icon Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' } - calculation metric_02fef53 { - label: 'Cycle Time - Color Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' + background { + bg_color: 'transparent' } - calculation metric_8cf2423 { - label: 'Cycle Time - Icon Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' + shadow: 'none' + } + } + block t_lfpp: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' } - calculation avg_cycle_time { - label: '%LM - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' + border { + border_width: 0 + border_style: 'none' + border_color: 'transparent' } - calculation number_of_bug_color { - label: 'Number of Bug Color' - formula: @aql case( - when: lm_number_of_bug < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' + shadow: 'none' + background { + bg_color: 'transparent' } - calculation bug_ratio_icon { - label: 'Number of Bug Icon' + } + } + block v_45a6: VizBlock { + label: 'Identifier, Title and 5 more' + viz: MarkdownViz { + dataset: reporting_project_management + calculation stage_color { + label: 'Stage Color' formula: @aql case( - when: lm_number_of_bug < 0, - then: "▼", - else: "▲" + when: reporting_stage_duration.stage == "In Progress", + then: "#206BC4", + when: reporting_stage_duration.stage == "In PR Review", + then: "#E9AA2B", + when: reporting_stage_duration.stage == "Deploying to Staging", + then: "#60A5FA", + when: reporting_stage_duration.stage == "Testing on Staging", + then: "#FCD34D", + when: reporting_stage_duration.stage == "Waiting for Deployment", + then: "#87A6C7", + else: "others" );; - calc_type: 'measure' + calc_type: 'dimension' data_type: 'text' + model: reporting_stage_duration } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_number_of_bug { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ + rows: [ + VizFieldFull { + ref: r(reporting_issues.identifier) + format { + type: 'text' + } + }, VizFieldFull { - ref: r(reporting_project_management.number_of_bug) + ref: r(reporting_issues.title) format { - type: 'number' - pattern: 'inherited' + type: 'text' } }, VizFieldFull { - ref: 'lm_number_of_bug' + ref: r(reporting_stage_duration.stage) format { - type: 'number' - pattern: '#,###%' + type: 'text' } }, VizFieldFull { - ref: 'bug_ratio_icon' + ref: ref('reporting_stage_duration', 'stage_color') format { type: 'text' } }, VizFieldFull { - ref: 'number_of_bug_color' + ref: r(reporting_stage_duration.duration_hours) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.assignee_id) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.priority) format { type: 'text' } } ] content: @md -
-

Bug Created (30D)

- - {{ rows[0].values.`Number of Bug` }} - +
+
+

Stale Issues

+

Sorted by time in current stage

+
+ +
+
+
Issue
+
Title
+
Stage
+
Duration Hour
+
Assignee ID
+
Priority
+
-
- {{ rows[0].values.`Number of Bug Icon` }} - {{ rows[0].values.`LM - Number of Bug` }} - - vs last month + {% map(rows) %} +
+
+ {{ `Identifier` }} +
+
+ {{ `Title` }} +
+
+ + {{ `Stage` }} + +
+
+ {{ `Duration Hours` }} +
+
+ {{ `Assignee` }} +
+
+ {{ `Priority` }} +
+ {% end %} -
;; +
+
;; settings { show_row_total: true show_column_total: true @@ -3548,838 +3700,9 @@ Dashboard squad_command_center { } } } - settings { - hide_label: true - } } - block v_yhu3: VizBlock { - label: 'Bug Ratio (30D) copy copy' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation color_condition { - label: 'Completed issue - Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "green" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation icon_condition { - label: 'Completed issue - Icon Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_02fef53 { - label: 'Cycle Time - Color Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_8cf2423 { - label: 'Cycle Time - Icon Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation avg_cycle_time { - label: '%LM - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt_color { - label: 'Tech Debt Color' - formula: @aql case( - when: lm_tech_debt < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation tech_debt_icon { - label: 'Tech Debt Icon' - formula: @aql case( - when: lm_tech_debt < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_number_of_bug { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt { - label: 'Number of Tech Debt' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_tech_debt { - label: 'LM - Number of Tech Debt' - formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ - VizFieldFull { - ref: 'tech_debt' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: 'lm_tech_debt' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'tech_debt_icon' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'tech_debt_color' - format { - type: 'text' - } - } - ] - content: @md - -
-

Tech Debt (30D)

- - {{ rows[0].values.`Number of Tech Debt` }} - - -
- {{ rows[0].values.`Tech Debt Icon` }} - {{ rows[0].values.`LM - Number of Tech Debt` }} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } - block t_q684: TextBlock { - content: @md ### **⚡ Bottlenecks**;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } - block t_lfpp: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - border_color: 'transparent' - } - shadow: 'none' - background { - bg_color: 'transparent' - } - } - } - block v_45a6: VizBlock { - label: 'Identifier, Title and 5 more' - viz: MarkdownViz { - dataset: reporting_project_management - calculation stage_color { - label: 'Stage Color' - formula: @aql case( - when: reporting_stage_duration.stage == "In Progress", - then: "#206BC4", - when: reporting_stage_duration.stage == "In PR Review", - then: "#E9AA2B", - when: reporting_stage_duration.stage == "Deploying to Staging", - then: "#60A5FA", - when: reporting_stage_duration.stage == "Testing on Staging", - then: "#FCD34D", - when: reporting_stage_duration.stage == "Waiting for Deployment", - then: "#87A6C7", - else: "others" -);; - calc_type: 'dimension' - data_type: 'text' - model: reporting_stage_duration - } - rows: [ - VizFieldFull { - ref: r(reporting_issues.identifier) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_issues.title) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_stage_duration.stage) - format { - type: 'text' - } - }, - VizFieldFull { - ref: ref('reporting_stage_duration', 'stage_color') - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_stage_duration.duration_hours) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: r(reporting_issues.assignee_id) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: r(reporting_issues.priority) - format { - type: 'text' - } - } - ] - content: @md - -
-
-

Stale Issues

-

Sorted by time in current stage

-
- -
-
-
Issue
-
Title
-
Stage
-
Duration Hour
-
Assignee ID
-
Priority
-
- - {% map(rows) %} -
-
- {{ `Identifier` }} -
-
- {{ `Title` }} -
-
- - {{ `Stage` }} - -
-
- {{ `Duration Hours` }} -
-
- {{ `Assignee` }} -
-
- {{ `Priority` }} -
-
- {% end %} - -
-
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'v_x8r0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_997c' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gt75' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_uhk0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_sffe' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_jdaq' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_3qu5' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gq0k' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_lvp5' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f_project_name' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6', - 'f_project_name_ynq6' - ] - disabled: true - } - ] - }, + theme: ai_1773979634521_3 + interactions: [ FilterInteraction { from: 'f_project_name_ynq6' to: [ @@ -4395,519 +3718,6 @@ Dashboard squad_command_center { disabled: true } ] - }, - FilterInteraction { - from: 'v_d3sa' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_22mj' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_y7bo' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_f17x' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_pdt0' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_x2gw' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_x4xc' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6rg8' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6pdw' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_baqx' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_n6j9' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_hl2j' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_7fkd' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_8jil' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_yro9' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_yhu3' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_45a6' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] } ] } \ No newline at end of file From ada7a9c8601f19e73d8fa6d82768dac0cfcf8bbd Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:14:52 +0000 Subject: [PATCH 153/168] Save uncommitted changes before restoring to commit c6e4da --- .../reporting_project_management.page.aml | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 0679933..ae254a1 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -389,7 +389,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -2643,18 +2643,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation bug_ratio { - label: 'Bug Ratio' - formula: @aql number_of_bug / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -2844,18 +2832,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } - calculation bug_ratio { - label: 'Bug Ratio' - formula: @aql number_of_bug / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } calculation lm_bugs { label: 'LM - Number of Bug' formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; From 9f837b82314232bac4854a65435f826718c667f5 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:14:58 +0000 Subject: [PATCH 154/168] =?UTF-8?q?Restore=20to=20version=20"Remove=20'?= =?UTF-8?q?=E2=9A=A1=20Bottlenecks'=20tab=20and=20its=20blocks=20from=20'r?= =?UTF-8?q?eporting=5Fproject=5Fmanagement'=20page"=20(#c6e4da)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reporting_project_management.page.aml | 1886 ++++++++++++++--- 1 file changed, 1556 insertions(+), 330 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index ae254a1..2b88028 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -232,6 +232,14 @@ Dashboard squad_command_center { position: pos(600, 900, 560, 400) layer: 1 } + block v_8jil { + position: pos(40, 300, 340, 160) + layer: 1 + } + block v_yro9 { + position: pos(440, 300, 340, 160) + layer: 1 + } block v_yhu3 { position: pos(820, 300, 340, 160) layer: 1 @@ -243,7 +251,7 @@ Dashboard squad_command_center { position: pos(40, 1400, 1140, 60) } block v_45a6 { - position: pos(40, 1460, 1140, 580) + position: pos(40, 1460, 1140, 400) } } tab workload_tab: CanvasLayout { @@ -389,7 +397,7 @@ Dashboard squad_command_center { vs last month
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -2643,6 +2651,24 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } + calculation number_of_bug { + label: 'Number Of Bug' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; + calc_type: 'measure' + data_type: 'number' + } + calculation bug_ratio { + label: 'Bug Ratio' + formula: @aql number_of_bug / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -2832,6 +2858,24 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'text' } + calculation number_of_bug { + label: 'Number Of Bug' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; + calc_type: 'measure' + data_type: 'number' + } + calculation bug_ratio { + label: 'Bug Ratio' + formula: @aql number_of_bug / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } calculation lm_bugs { label: 'LM - Number of Bug' formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; @@ -3144,8 +3188,8 @@ Dashboard squad_command_center { } } } - block v_yhu3: VizBlock { - label: 'Bug Ratio (30D) copy copy' + block v_8jil: VizBlock { + label: 'Bug Ratio (30D)' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -3206,20 +3250,20 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation tech_debt_color { - label: 'Tech Debt Color' + calculation bug_ratio_color { + label: 'Bug Ratio Color' formula: @aql case( - when: lm_tech_debt < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" + when: lm_bug_ratio > 0, + then: "rgb(248, 113, 113)", + else: "#5DB88F" );; calc_type: 'measure' data_type: 'text' } - calculation tech_debt_icon { - label: 'Tech Debt Icon' + calculation bug_ratio_icon { + label: 'Bug Ratio Icon' formula: @aql case( - when: lm_tech_debt < 0, + when: lm_bug_ratio < 0, then: "▼", else: "▲" );; @@ -3232,24 +3276,6 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation lm_number_of_bug { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt { - label: 'Number of Tech Debt' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_tech_debt { - label: 'LM - Number of Tech Debt' - formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -3257,27 +3283,27 @@ Dashboard squad_command_center { } values: [ VizFieldFull { - ref: 'tech_debt' + ref: r(reporting_project_management.bug_ratio) format { type: 'number' - pattern: 'inherited' + pattern: '#,###%' } }, VizFieldFull { - ref: 'lm_tech_debt' + ref: 'lm_bug_ratio' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'tech_debt_icon' + ref: 'bug_ratio_icon' format { type: 'text' } }, VizFieldFull { - ref: 'tech_debt_color' + ref: 'bug_ratio_color' format { type: 'text' } @@ -3298,7 +3324,7 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-tech-debt-value { + .kpi-bug-ratio-value { font-size: 52px; font-weight: 500; color: #fbbf24; @@ -3313,22 +3339,22 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-tech-debt-compare { - color: {{ rows[0].values.`Tech Debt Color` }}; + .kpi-bug-ratio-compare { + color: {{ rows[0].values.`Bug Ratio Color` }}; font-weight: 500; }
-

Tech Debt (30D)

- - {{ rows[0].values.`Number of Tech Debt` }} +

Bug Ratio (30D)

+ + {{ rows[0].values.`Bug Ratio` }} -
- {{ rows[0].values.`Tech Debt Icon` }} - {{ rows[0].values.`LM - Number of Tech Debt` }} +
+ {{ rows[0].values.`Bug Ratio Icon` }} + {{ rows[0].values.`LM - Bug Ratio` }} vs last month
@@ -3347,326 +3373,184 @@ Dashboard squad_command_center { hide_label: true } } - block t_q684: TextBlock { - content: @md ### **⚡ Bottlenecks**;; - theme { - text { - font_color: '#475569' + block v_yro9: VizBlock { + label: 'Bug Ratio (30D) copy' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' } - background { - bg_color: 'transparent' + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' } - shadow: 'none' - } - } - block t_lfpp: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' } - border { - border_width: 0 - border_style: 'none' - border_color: 'transparent' + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' } - shadow: 'none' - background { - bg_color: 'transparent' + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' } - } - } - block v_45a6: VizBlock { - label: 'Identifier, Title and 5 more' - viz: MarkdownViz { - dataset: reporting_project_management - calculation stage_color { - label: 'Stage Color' + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation number_of_bug_color { + label: 'Number of Bug Color' formula: @aql case( - when: reporting_stage_duration.stage == "In Progress", - then: "#206BC4", - when: reporting_stage_duration.stage == "In PR Review", - then: "#E9AA2B", - when: reporting_stage_duration.stage == "Deploying to Staging", - then: "#60A5FA", - when: reporting_stage_duration.stage == "Testing on Staging", - then: "#FCD34D", - when: reporting_stage_duration.stage == "Waiting for Deployment", - then: "#87A6C7", - else: "others" + when: lm_number_of_bug < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" );; - calc_type: 'dimension' + calc_type: 'measure' data_type: 'text' - model: reporting_stage_duration } - rows: [ - VizFieldFull { - ref: r(reporting_issues.identifier) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_issues.title) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_stage_duration.stage) - format { - type: 'text' - } - }, + calculation bug_ratio_icon { + label: 'Number of Bug Icon' + formula: @aql case( + when: lm_number_of_bug < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_number_of_bug { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ VizFieldFull { - ref: ref('reporting_stage_duration', 'stage_color') + ref: r(reporting_project_management.number_of_bug) format { - type: 'text' + type: 'number' + pattern: 'inherited' } }, VizFieldFull { - ref: r(reporting_stage_duration.duration_hours) + ref: 'lm_number_of_bug' format { type: 'number' - pattern: 'inherited' + pattern: '#,###%' } }, VizFieldFull { - ref: r(reporting_issues.assignee_id) + ref: 'bug_ratio_icon' format { - type: 'number' - pattern: 'inherited' + type: 'text' } }, VizFieldFull { - ref: r(reporting_issues.priority) + ref: 'number_of_bug_color' format { type: 'text' } } ] content: @md -
-
-

Stale Issues

-

Sorted by time in current stage

-
- -
-
-
Issue
-
Title
-
Stage
-
Duration Hour
-
Assignee ID
-
Priority
-
+
+

Bug Created (30D)

+ + {{ rows[0].values.`Number of Bug` }} + - {% map(rows) %} -
-
- {{ `Identifier` }} -
-
- {{ `Title` }} -
-
- - {{ `Stage` }} - -
-
- {{ `Duration Hours` }} -
-
- {{ `Assignee` }} -
-
- {{ `Priority` }} -
+
+ {{ rows[0].values.`Number of Bug Icon` }} + {{ rows[0].values.`LM - Number of Bug` }} + + vs last month
- {% end %} -
-
;; +
;; settings { show_row_total: true show_column_total: true @@ -3676,20 +3560,1362 @@ Dashboard squad_command_center { } } } + settings { + hide_label: true + } } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'f_project_name_ynq6' - to: [ - CustomMapping { - block: [ - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'f_project_name' + block v_yhu3: VizBlock { + label: 'Bug Ratio (30D) copy copy' + viz: MarkdownViz { + dataset: reporting_project_management + calculation metric_e98dbc4 { + label: 'LM - Completed issue' + formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; + calc_type: 'measure' + data_type: 'number' + } + calculation metric_abbd5a2 { + label: '%LM - Completed issue' + formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation color_condition { + label: 'Completed issue - Color Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "red", + else: "green" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation icon_condition { + label: 'Completed issue - Icon Condition' + formula: @aql case( + when: metric_abbd5a2 < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_02fef53 { + label: 'Cycle Time - Color Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "green", + else: "red" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation metric_8cf2423 { + label: 'Cycle Time - Icon Condition' + formula: @aql case( + when: avg_cycle_time < 0, + then: "▾", + else: "▴" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation avg_cycle_time { + label: '%LM - Avg Cycle Time' + formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation tech_debt_color { + label: 'Tech Debt Color' + formula: @aql case( + when: lm_tech_debt < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation tech_debt_icon { + label: 'Tech Debt Icon' + formula: @aql case( + when: lm_tech_debt < 0, + then: "▼", + else: "▲" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation lm_bug_ratio { + label: 'LM - Bug Ratio' + formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_number_of_bug { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation tech_debt { + label: 'Number of Tech Debt' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_tech_debt { + label: 'LM - Number of Tech Debt' + formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + ref: 'tech_debt' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'lm_tech_debt' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'tech_debt_icon' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'tech_debt_color' + format { + type: 'text' + } + } + ] + content: @md + +
+

Tech Debt (30D)

+ + {{ rows[0].values.`Number of Tech Debt` }} + + +
+ {{ rows[0].values.`Tech Debt Icon` }} + {{ rows[0].values.`LM - Number of Tech Debt` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block t_q684: TextBlock { + content: @md ### **⚡ Bottlenecks**;; + theme { + text { + font_color: '#475569' + } + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' + } + background { + bg_color: 'transparent' + } + shadow: 'none' + } + } + block t_lfpp: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' + } + border { + border_width: 0 + border_style: 'none' + border_color: 'transparent' + } + shadow: 'none' + background { + bg_color: 'transparent' + } + } + } + block v_45a6: VizBlock { + label: 'Identifier, Title and 5 more' + viz: MarkdownViz { + dataset: reporting_project_management + calculation stage_color { + label: 'Stage Color' + formula: @aql case( + when: reporting_stage_duration.stage == "In Progress", + then: "#206BC4", + when: reporting_stage_duration.stage == "In PR Review", + then: "#E9AA2B", + when: reporting_stage_duration.stage == "Deploying to Staging", + then: "#60A5FA", + when: reporting_stage_duration.stage == "Testing on Staging", + then: "#FCD34D", + when: reporting_stage_duration.stage == "Waiting for Deployment", + then: "#87A6C7", + else: "others" +);; + calc_type: 'dimension' + data_type: 'text' + model: reporting_stage_duration + } + rows: [ + VizFieldFull { + ref: r(reporting_issues.identifier) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_issues.title) + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + }, + VizFieldFull { + ref: ref('reporting_stage_duration', 'stage_color') + format { + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_stage_duration.duration_hours) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.assignee_id) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.priority) + format { + type: 'text' + } + } + ] + content: @md + +
+
+

Stale Issues

+

Sorted by time in current stage

+
+ +
+
+
Issue
+
Title
+
Stage
+
Duration Hour
+
Assignee ID
+
Priority
+
+ + {% map(rows) %} +
+
+ {{ `Identifier` }} +
+
+ {{ `Title` }} +
+
+ + {{ `Stage` }} + +
+
+ {{ `Duration Hours` }} +
+
+ {{ `Assignee` }} +
+
+ {{ `Priority` }} +
+
+ {% end %} + +
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + theme: ai_1773979634521_3 + interactions: [ + FilterInteraction { + from: 'v_x8r0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_997c' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gt75' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_uhk0' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_sffe' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jdaq' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_3qu5' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gq0k' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lvp5' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6', + 'f_project_name_ynq6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name_ynq6' + to: [ + CustomMapping { + block: [ + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'f_project_name' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_d3sa' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_22mj' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_y7bo' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_f17x' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_pdt0' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_x2gw' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_x4xc' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_6rg8', + 'v_6pdw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6rg8' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_6pdw' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_8jil', + 'v_yro9', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_baqx' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_n6j9' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_hl2j' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7fkd' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_8jil' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_yro9' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_yhu3' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_45a6' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_f17x', + 'v_pdt0', + 'v_x2gw', + 'v_x4xc', + 'v_6rg8', + 'v_6pdw' ] disabled: true } From ec23391ad4708c0102b32c5babffcffa3babe59b Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:15:03 +0000 Subject: [PATCH 155/168] =?UTF-8?q?Restore=20to=20version=20"Remove=20'?= =?UTF-8?q?=E2=9A=A1=20Bottlenecks'=20tab=20and=20its=20blocks=20from=20'r?= =?UTF-8?q?eporting=5Fproject=5Fmanagement'=20page"=20(#c6e4da)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6e9c3344070cc344101ffa90fa443fb75cca50ab Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:16:33 +0000 Subject: [PATCH 156/168] Restore to version "Add 'stage_color' dimension and enhance 'Identifier, Title and 5 more' block with stage, duration, assignee, priority in 'reporting_project_management' page" (#6c6517) --- .../reporting_project_management.page.aml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 2b88028..afb19e0 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -254,6 +254,23 @@ Dashboard squad_command_center { position: pos(40, 1460, 1140, 400) } } + tab bottleneck_tab: CanvasLayout { + label: '⚡ Bottlenecks' + height: 1500 + grid_size: 20 + block bottleneck_trend { + position: pos(0, 0, 600, 360) + } + block stage_dist { + position: pos(600, 0, 600, 360) + } + block stale_header { + position: pos(0, 380, 1200, 50) + } + block stale_table { + position: pos(0, 440, 1200, 400) + } + } tab workload_tab: CanvasLayout { label: '👥 Workload' height: 1200 From 8d3b8aba258bbd841323371c1e9c97c43ffd9144 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:19:29 +0000 Subject: [PATCH 157/168] Remove 'Bug Ratio (30D)' block, add 'Tech Debt (30D)' viz, and introduce 'Stale Issues' table in 'squad_command_center' dashboard --- .../reporting_project_management.page.aml | 1858 +++-------------- 1 file changed, 250 insertions(+), 1608 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index afb19e0..c571175 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -232,10 +232,6 @@ Dashboard squad_command_center { position: pos(600, 900, 560, 400) layer: 1 } - block v_8jil { - position: pos(40, 300, 340, 160) - layer: 1 - } block v_yro9 { position: pos(440, 300, 340, 160) layer: 1 @@ -2631,179 +2627,6 @@ Dashboard squad_command_center { padding: 0 } } - block v_6rg8: VizBlock { - label: 'Bug Ratio (30D)' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: lm_bug_ratio < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: lm_bug_ratio < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation number_of_bug { - label: 'Number Of Bug' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; - calc_type: 'measure' - data_type: 'number' - } - calculation bug_ratio { - label: 'Bug Ratio' - formula: @aql number_of_bug / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ - VizFieldFull { - ref: 'bug_ratio' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'lm_bug_ratio' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'completed_issue_color' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'completed_issue_icon' - format { - type: 'text' - } - } - ] - content: @md - -
-

Bug Ratio (30D)

- - {{ rows[0].values.`Bug Ratio` }} - - -
- {{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`LM - Bug Ratio` }} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } - block t_eh1a: TextBlock { - content: @md
;; - theme { - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } block t_m4lt: TextBlock { content: @md ### **🎯 Quality**;; theme { @@ -3205,8 +3028,9 @@ Dashboard squad_command_center { } } } - block v_8jil: VizBlock { - label: 'Bug Ratio (30D)' + + block v_yhu3: VizBlock { + label: 'Bug Ratio (30D) copy copy' viz: MarkdownViz { dataset: reporting_project_management calculation metric_e98dbc4 { @@ -3267,20 +3091,20 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } - calculation bug_ratio_color { - label: 'Bug Ratio Color' + calculation tech_debt_color { + label: 'Tech Debt Color' formula: @aql case( - when: lm_bug_ratio > 0, - then: "rgb(248, 113, 113)", - else: "#5DB88F" + when: lm_tech_debt < 0, + then: "#5DB88F", + else: "rgb(248, 113, 113)" );; calc_type: 'measure' data_type: 'text' } - calculation bug_ratio_icon { - label: 'Bug Ratio Icon' + calculation tech_debt_icon { + label: 'Tech Debt Icon' formula: @aql case( - when: lm_bug_ratio < 0, + when: lm_tech_debt < 0, then: "▼", else: "▲" );; @@ -3293,6 +3117,24 @@ Dashboard squad_command_center { calc_type: 'measure' data_type: 'number' } + calculation lm_number_of_bug { + label: 'LM - Number of Bug' + formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation tech_debt { + label: 'Number of Tech Debt' + formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; + calc_type: 'measure' + data_type: 'number' + } + calculation lm_tech_debt { + label: 'LM - Number of Tech Debt' + formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } filter { field: r(reporting_issues.completed_at) operator: 'matches' @@ -3300,27 +3142,27 @@ Dashboard squad_command_center { } values: [ VizFieldFull { - ref: r(reporting_project_management.bug_ratio) + ref: 'tech_debt' format { type: 'number' - pattern: '#,###%' + pattern: 'inherited' } }, VizFieldFull { - ref: 'lm_bug_ratio' + ref: 'lm_tech_debt' format { type: 'number' pattern: '#,###%' } }, VizFieldFull { - ref: 'bug_ratio_icon' + ref: 'tech_debt_icon' format { type: 'text' } }, VizFieldFull { - ref: 'bug_ratio_color' + ref: 'tech_debt_color' format { type: 'text' } @@ -3341,7 +3183,7 @@ Dashboard squad_command_center { gap: 10px; margin-top: 12px; } - .kpi-bug-ratio-value { + .kpi-tech-debt-value { font-size: 52px; font-weight: 500; color: #fbbf24; @@ -3356,22 +3198,22 @@ Dashboard squad_command_center { font-size: 15px; color: #525866; } - .kpi-bug-ratio-compare { - color: {{ rows[0].values.`Bug Ratio Color` }}; + .kpi-tech-debt-compare { + color: {{ rows[0].values.`Tech Debt Color` }}; font-weight: 500; }
-

Bug Ratio (30D)

- - {{ rows[0].values.`Bug Ratio` }} +

Tech Debt (30D)

+ + {{ rows[0].values.`Number of Tech Debt` }} -
- {{ rows[0].values.`Bug Ratio Icon` }} - {{ rows[0].values.`LM - Bug Ratio` }} +
+ {{ rows[0].values.`Tech Debt Icon` }} + {{ rows[0].values.`LM - Number of Tech Debt` }} vs last month
@@ -3390,589 +3232,195 @@ Dashboard squad_command_center { hide_label: true } } - block v_yro9: VizBlock { - label: 'Bug Ratio (30D) copy' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' + block t_q684: TextBlock { + content: @md ### **⚡ Bottlenecks**;; + theme { + text { + font_color: '#475569' } - calculation color_condition { - label: 'Completed issue - Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "green" -);; - calc_type: 'measure' - data_type: 'text' + border { + border_width: 0 + border_color: 'transparent' + border_style: 'none' } - calculation icon_condition { - label: 'Completed issue - Icon Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' + background { + bg_color: 'transparent' } - calculation metric_02fef53 { - label: 'Cycle Time - Color Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_8cf2423 { - label: 'Cycle Time - Icon Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' + shadow: 'none' + } + } + block t_lfpp: TextBlock { + content: @md
;; + theme { + text { + font_color: '#ffffff' } - calculation avg_cycle_time { - label: '%LM - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' + border { + border_width: 0 + border_style: 'none' + border_color: 'transparent' } - calculation number_of_bug_color { - label: 'Number of Bug Color' - formula: @aql case( - when: lm_number_of_bug < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' + shadow: 'none' + background { + bg_color: 'transparent' } - calculation bug_ratio_icon { - label: 'Number of Bug Icon' + } + } + block v_45a6: VizBlock { + label: 'Identifier, Title and 5 more' + viz: MarkdownViz { + dataset: reporting_project_management + calculation stage_color { + label: 'Stage Color' formula: @aql case( - when: lm_number_of_bug < 0, - then: "▼", - else: "▲" + when: reporting_stage_duration.stage == "In Progress", + then: "#206BC4", + when: reporting_stage_duration.stage == "In PR Review", + then: "#E9AA2B", + when: reporting_stage_duration.stage == "Deploying to Staging", + then: "#60A5FA", + when: reporting_stage_duration.stage == "Testing on Staging", + then: "#FCD34D", + when: reporting_stage_duration.stage == "Waiting for Deployment", + then: "#87A6C7", + else: "others" );; - calc_type: 'measure' + calc_type: 'dimension' data_type: 'text' + model: reporting_stage_duration } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_number_of_bug { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ + rows: [ VizFieldFull { - ref: r(reporting_project_management.number_of_bug) + ref: r(reporting_issues.identifier) format { - type: 'number' - pattern: 'inherited' + type: 'text' } }, VizFieldFull { - ref: 'lm_number_of_bug' + ref: r(reporting_issues.title) format { - type: 'number' - pattern: '#,###%' + type: 'text' + } + }, + VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' } }, VizFieldFull { - ref: 'bug_ratio_icon' + ref: ref('reporting_stage_duration', 'stage_color') format { type: 'text' } }, VizFieldFull { - ref: 'number_of_bug_color' + ref: r(reporting_stage_duration.duration_hours) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.assignee_id) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: r(reporting_issues.priority) format { type: 'text' } } ] content: @md - -
-

Bug Created (30D)

- - {{ rows[0].values.`Number of Bug` }} - - -
- {{ rows[0].values.`Number of Bug Icon` }} - {{ rows[0].values.`LM - Number of Bug` }} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } - block v_yhu3: VizBlock { - label: 'Bug Ratio (30D) copy copy' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation color_condition { - label: 'Completed issue - Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "green" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation icon_condition { - label: 'Completed issue - Icon Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_02fef53 { - label: 'Cycle Time - Color Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_8cf2423 { - label: 'Cycle Time - Icon Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation avg_cycle_time { - label: '%LM - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt_color { - label: 'Tech Debt Color' - formula: @aql case( - when: lm_tech_debt < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation tech_debt_icon { - label: 'Tech Debt Icon' - formula: @aql case( - when: lm_tech_debt < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_number_of_bug { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt { - label: 'Number of Tech Debt' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_tech_debt { - label: 'LM - Number of Tech Debt' - formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ - VizFieldFull { - ref: 'tech_debt' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: 'lm_tech_debt' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'tech_debt_icon' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'tech_debt_color' - format { - type: 'text' - } - } - ] - content: @md - -
-

Tech Debt (30D)

- - {{ rows[0].values.`Number of Tech Debt` }} - - -
- {{ rows[0].values.`Tech Debt Icon` }} - {{ rows[0].values.`LM - Number of Tech Debt` }} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } - block t_q684: TextBlock { - content: @md ### **⚡ Bottlenecks**;; - theme { - text { - font_color: '#475569' - } - border { - border_width: 0 - border_color: 'transparent' - border_style: 'none' - } - background { - bg_color: 'transparent' - } - shadow: 'none' - } - } - block t_lfpp: TextBlock { - content: @md
;; - theme { - text { - font_color: '#ffffff' - } - border { - border_width: 0 - border_style: 'none' - border_color: 'transparent' - } - shadow: 'none' - background { - bg_color: 'transparent' - } - } - } - block v_45a6: VizBlock { - label: 'Identifier, Title and 5 more' - viz: MarkdownViz { - dataset: reporting_project_management - calculation stage_color { - label: 'Stage Color' - formula: @aql case( - when: reporting_stage_duration.stage == "In Progress", - then: "#206BC4", - when: reporting_stage_duration.stage == "In PR Review", - then: "#E9AA2B", - when: reporting_stage_duration.stage == "Deploying to Staging", - then: "#60A5FA", - when: reporting_stage_duration.stage == "Testing on Staging", - then: "#FCD34D", - when: reporting_stage_duration.stage == "Waiting for Deployment", - then: "#87A6C7", - else: "others" -);; - calc_type: 'dimension' - data_type: 'text' - model: reporting_stage_duration - } - rows: [ - VizFieldFull { - ref: r(reporting_issues.identifier) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_issues.title) - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_stage_duration.stage) - format { - type: 'text' - } - }, - VizFieldFull { - ref: ref('reporting_stage_duration', 'stage_color') - format { - type: 'text' - } - }, - VizFieldFull { - ref: r(reporting_stage_duration.duration_hours) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: r(reporting_issues.assignee_id) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: r(reporting_issues.priority) - format { - type: 'text' - } - } - ] - content: @md - -
-
-

Stale Issues

-

Sorted by time in current stage

-
- -
-
-
Issue
-
Title
-
Stage
-
Duration Hour
-
Assignee ID
-
Priority
-
- - {% map(rows) %} -
-
- {{ `Identifier` }} -
-
- {{ `Title` }} -
-
- - {{ `Stage` }} - -
-
- {{ `Duration Hours` }} -
-
- {{ `Assignee` }} -
-
- {{ `Priority` }} -
-
- {% end %} - -
-
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'v_x8r0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_997c' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gt75' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_uhk0' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_sffe' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_jdaq' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_3qu5' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_gq0k' - to: [ - CustomMapping { - block: [ - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_lvp5' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'f_project_name' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6', - 'f_project_name_ynq6' - ] - disabled: true + text-transform: uppercase; + } + } + + +
+
+

Stale Issues

+

Sorted by time in current stage

+
+ +
+
+
Issue
+
Title
+
Stage
+
Duration Hour
+
Assignee ID
+
Priority
+
+ + {% map(rows) %} +
+
+ {{ `Identifier` }} +
+
+ {{ `Title` }} +
+
+ + {{ `Stage` }} + +
+
+ {{ `Duration Hours` }} +
+
+ {{ `Assignee` }} +
+
+ {{ `Priority` }} +
+
+ {% end %} + +
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true } - ] - }, + } + } + } + theme: ai_1773979634521_3 + interactions: [ FilterInteraction { from: 'f_project_name_ynq6' to: [ @@ -4424,519 +3579,6 @@ Dashboard squad_command_center { disabled: true } ] - }, - FilterInteraction { - from: 'v_d3sa' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_22mj' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_y7bo' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_f17x' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_pdt0' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_x2gw' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_x4xc' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_6rg8', - 'v_6pdw', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6rg8' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_6pdw' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_baqx', - 'v_n6j9', - 'v_hl2j', - 'v_7fkd', - 'v_8jil', - 'v_yro9', - 'v_yhu3', - 'v_45a6' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_baqx' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_n6j9' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_hl2j' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_7fkd' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_8jil' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_yro9' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_yhu3' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] - }, - FilterInteraction { - from: 'v_45a6' - to: [ - CustomMapping { - block: [ - 'v_x8r0', - 'v_997c', - 'v_gt75', - 'v_uhk0', - 'v_sffe', - 'v_jdaq', - 'v_3qu5', - 'v_gq0k', - 'v_lvp5', - 'v_d3sa', - 'v_22mj', - 'v_y7bo', - 'v_f17x', - 'v_pdt0', - 'v_x2gw', - 'v_x4xc', - 'v_6rg8', - 'v_6pdw' - ] - disabled: true - } - ] } ] } \ No newline at end of file From 97fa94cce964d7cef97af9e276c56e9dd3805a67 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:20:34 +0000 Subject: [PATCH 158/168] =?UTF-8?q?Remove=20'=E2=9A=A1=20Bottlenecks'=20ta?= =?UTF-8?q?b=20and=20'Bug=20Created=20(30D)'=20viz=20from=20'squad=5Fcomma?= =?UTF-8?q?nd=5Fcenter'=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reporting_project_management.page.aml | 177 +----------------- 1 file changed, 1 insertion(+), 176 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index c571175..1307acc 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -250,23 +250,6 @@ Dashboard squad_command_center { position: pos(40, 1460, 1140, 400) } } - tab bottleneck_tab: CanvasLayout { - label: '⚡ Bottlenecks' - height: 1500 - grid_size: 20 - block bottleneck_trend { - position: pos(0, 0, 600, 360) - } - block stage_dist { - position: pos(600, 0, 600, 360) - } - block stale_header { - position: pos(0, 380, 1200, 50) - } - block stale_table { - position: pos(0, 440, 1200, 400) - } - } tab workload_tab: CanvasLayout { label: '👥 Workload' height: 1200 @@ -2661,165 +2644,7 @@ Dashboard squad_command_center { shadow: 'none' } } - block v_6pdw: VizBlock { - label: 'Bug Created (30D)' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: lm_bug_ratio < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: lm_bug_ratio < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation number_of_bug { - label: 'Number Of Bug' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "bug");; - calc_type: 'measure' - data_type: 'number' - } - calculation bug_ratio { - label: 'Bug Ratio' - formula: @aql number_of_bug / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_bugs { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ - VizFieldFull { - ref: 'number_of_bug' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: 'lm_bugs' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'completed_issue_color' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'completed_issue_icon' - format { - type: 'text' - } - } - ] - content: @md - -
-

Bug Created (30D)

- - {{ rows[0].values.`Number Of Bug` }} - - -
- {{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`LM - Number of Bug` }} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } block t_3f6l: TextBlock { content: @md ### **🎯 Quality**;; theme { @@ -3028,7 +2853,7 @@ Dashboard squad_command_center { } } } - + block v_yhu3: VizBlock { label: 'Bug Ratio (30D) copy copy' viz: MarkdownViz { From 46727c66ca92d4496a9917c1c20c87584f1a2241 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:25:33 +0000 Subject: [PATCH 159/168] Remove 'Shipped (30D)' and 'Dashboard Performance' VizBlocks from 'squad_command_center' dashboard --- .../reporting_project_management.page.aml | 468 ------------------ 1 file changed, 468 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index 1307acc..c47305d 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -7,14 +7,6 @@ Dashboard squad_command_center { label: '📊 Projects Overview' height: 940 grid_size: 20 - block v_f17x { - position: pos(420, 200, 360, 180) - layer: 1 - } - block v_pdt0 { - position: pos(800, 200, 360, 180) - layer: 1 - } block v_x2gw { position: pos(40, 400, 560, 400) } @@ -1866,464 +1858,6 @@ Dashboard squad_command_center { hide_label: true } } - block v_f17x: VizBlock { - label: 'Shipped (30D) copy copy copy' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; - calc_type: 'measure' - data_type: 'text' - } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "▼", - else: "▲" - );; - calc_type: 'measure' - data_type: 'text' - } - calculation percent_issue_completed { - label: 'Percent Issue Completed' - formula: @aql completed_issue / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation remaining_issue { - label: 'Remaining Issue' - formula: @aql count(reporting_issues.id) - completed_issue;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_project.name) - operator: 'is' - value: 'Data Alerts Revamp' - } - values: [ - VizFieldFull { - ref: r(reporting_project_management.percent_completion) - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - label: 'Total' - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Done' - ref: r(reporting_project_management.completed_issue) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Remaining' - ref: 'remaining_issue' - format { - type: 'number' - pattern: 'inherited' - } - } - ] - content: @md - -
-

Data Alerts Revamp

- -
-
- - - - - - -
{{rows[0].values.`Percent Issue Completed`}}
-
- -
-
- Total - {{ rows[0].values.`Total` }} -
-
- Done - {{ rows[0].values.`Done` }} -
-
- Remaining - {{ rows[0].values.`Remaining` }} -
-
-
-
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } - block v_pdt0: VizBlock { - label: 'Shipped (30D) copy copy copy copy' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; - calc_type: 'measure' - data_type: 'text' - } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "▼", - else: "▲" - );; - calc_type: 'measure' - data_type: 'text' - } - calculation percent_issue_completed { - label: 'Percent Issue Completed' - formula: @aql completed_issue / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - calculation remaining_issue { - label: 'Remaining Issue' - formula: @aql count(reporting_issues.id) - completed_issue;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_project.name) - operator: 'is' - value: 'Dashboard Performance' - } - values: [ - VizFieldFull { - ref: r(reporting_project_management.percent_completion) - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - label: 'Total' - ref: r(reporting_issues.id) - aggregation: 'count' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Done' - ref: r(reporting_project_management.completed_issue) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - label: 'Remaining' - ref: 'remaining_issue' - format { - type: 'number' - pattern: 'inherited' - } - } - ] - content: @md - -
-

Dashboard Performance

- -
-
- - - - - - -
{{rows[0].values.`Percent Issue Completed`}}
-
- -
-
- Total - {{ rows[0].values.`Total` }} -
-
- Done - {{ rows[0].values.`Done` }} -
-
- Remaining - {{ rows[0].values.`Remaining` }} -
-
-
-
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } block v_x2gw: VizBlock { label: 'Status Distribution by Project' description: "Where each project's issues are sitting" @@ -3395,8 +2929,6 @@ Dashboard squad_command_center { CustomMapping { block: [ 'v_y7bo', - 'v_f17x', - 'v_pdt0', 'v_x2gw', 'v_x4xc', 'f_project_name' From bd243a3ad7d0f0efb13ec9699752e029837ac628 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 12:50:30 +0000 Subject: [PATCH 160/168] Add 'Data Alert Revamp', 'Dashboard Performance', and 'Project Velocity Comparison' viz blocks; remove old block in 'squad_command_center' page --- .../reporting_project_management.page.aml | 862 ++++++++++++++++-- 1 file changed, 781 insertions(+), 81 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index c47305d..e71e5be 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -14,10 +14,6 @@ Dashboard squad_command_center { position: pos(40, 200, 360, 180) layer: 1 } - block v_x4xc { - position: pos(620, 400, 540, 400) - layer: 1 - } block t_a8eh { position: pos(40, 140, 1120, 60) layer: 1 @@ -50,6 +46,18 @@ Dashboard squad_command_center { position: pos(1080, 880, 60, 40) layer: 1 } + block v_ipdo { + position: pos(420, 200, 360, 180) + layer: 1 + } + block v_7dso { + position: pos(800, 200, 360, 180) + layer: 1 + } + block v_r2ma { + position: pos(620, 400, 540, 400) + layer: 1 + } } tab overview_tab: CanvasLayout { label: '◎ Metric Overview' @@ -1932,72 +1940,6 @@ Dashboard squad_command_center { } } } - block v_x4xc: VizBlock { - label: 'Project Velocity Comparison' - description: 'Issues completed per month per project' - viz: LineChart { - dataset: reporting_project_management - calculation completion_rate { - label: 'Completion Rate' - formula: @aql completed_issue / count(reporting_issues.id);; - calc_type: 'measure' - data_type: 'number' - } - theme { - } - x_axis: VizFieldFull { - ref: r(reporting_issues.completed_at) - transformation: 'datetrunc month' - format { - type: 'date' - pattern: 'LLL yyyy' - } - } - legend: VizFieldFull { - ref: r(reporting_project.name) - format { - type: 'text' - } - } - y_axis { - series { - field: VizFieldFull { - ref: 'completion_rate' - format { - type: 'number' - pattern: '#,###%' - } - } - settings { - point { - value: 'Explore 2' - color: '#255DD4' - line_interpolation: 'smooth' - } - point { - value: 'Data Alerts Revamp' - color: '#E27712' - line_interpolation: 'smooth' - } - point { - value: 'Dashboard Performance' - color: '#18A59E' - line_interpolation: 'smooth' - } - } - } - } - settings { - show_data_points: true - row_limit: 5000 - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } block t_uqe1: TextBlock { content: @md ### **🕰️ Time-to-Market**;; theme { @@ -2921,17 +2863,775 @@ Dashboard squad_command_center { } } } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'f_project_name_ynq6' - to: [ - CustomMapping { - block: [ - 'v_y7bo', - 'v_x2gw', - 'v_x4xc', - 'f_project_name' + block v_ipdo: VizBlock { + label: 'Data Alert Revamp' + viz: MarkdownViz { + dataset: reporting_project_management + calculation remaining { + label: 'Remaining' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Data Alerts Revamp' + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'remaining' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+

Data Alert Revamp

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
+
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_7dso: VizBlock { + label: 'Dashboard Performance' + viz: MarkdownViz { + dataset: reporting_project_management + calculation remaining { + label: 'Remaining' + formula: @aql count(reporting_issues.id) - completed_issue;; + calc_type: 'measure' + data_type: 'number' + } + filter { + field: r(reporting_project.name) + operator: 'is' + value: 'Dashboard Performance' + } + values: [ + VizFieldFull { + ref: r(reporting_project_management.percent_completion) + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + label: 'Total' + ref: r(reporting_issues.id) + aggregation: 'count' + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + label: 'Done' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'remaining' + format { + type: 'number' + pattern: 'inherited' + } + } + ] + content: @md + +
+

Dashboard Performance

+ +
+
+ + + + + + +
{{rows[0].values.`Percent Issue Completed`}}
+
+ +
+
+ Total + {{ rows[0].values.`Total` }} +
+
+ Done + {{ rows[0].values.`Done` }} +
+
+ Remaining + {{ rows[0].values.`Remaining` }} +
+
+
+
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + settings { + hide_label: true + } + } + block v_r2ma: VizBlock { + label: 'Project Velocity Comparison' + description: 'Issues completed per month per project' + viz: LineChart { + dataset: reporting_project_management + calculation completion_rate { + label: 'Completion Rate' + formula: @aql completed_issue / count(reporting_issues.id);; + calc_type: 'measure' + data_type: 'number' + } + x_axis: VizFieldFull { + ref: r(reporting_issues.completed_at) + transformation: 'datetrunc month' + format { + type: 'date' + pattern: 'LLL yyyy' + } + } + legend: VizFieldFull { + ref: r(reporting_project.name) + format { + type: 'text' + } + } + y_axis { + series { + field: VizFieldFull { + ref: 'completion_rate' + format { + type: 'number' + pattern: 'inherited' + } + } + settings { + point { + value: 'Dashboard Performance' + color: '#5DB88FFF' + line_interpolation: 'smooth' + } + point { + value: 'Data Alerts Revamp' + color: '#E27712' + line_interpolation: 'smooth' + } + point { + value: 'Explore 2' + color: '#206BC4FF' + line_interpolation: 'smooth' + } + } + } + } + settings { + row_limit: 5000 + x_axis_show_null_datetime: false + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + theme: ai_1773979634521_3 + interactions: [ + FilterInteraction { + from: 'v_x8r0' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_997c' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gt75' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_uhk0' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_sffe' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_jdaq' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_3qu5' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_gq0k' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_lvp5' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'f_project_name_ynq6' + to: [ + CustomMapping { + block: [ + 'v_y7bo', + 'v_x2gw', + 'v_ipdo', + 'v_7dso', + 'v_r2ma', + 'f_project_name' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_d3sa' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_22mj' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_baqx' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_n6j9' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_hl2j' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7fkd' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_yhu3' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_45a6' + to: [ + CustomMapping { + block: [ + 'v_ipdo', + 'v_7dso', + 'v_r2ma' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_ipdo' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7dso' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_yhu3', + 'v_45a6' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_r2ma' + to: [ + CustomMapping { + block: [ + 'v_x8r0', + 'v_997c', + 'v_gt75', + 'v_uhk0', + 'v_sffe', + 'v_jdaq', + 'v_3qu5', + 'v_gq0k', + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_yhu3', + 'v_45a6' ] disabled: true } From f9083428e9309858dab000f1f9af0945dc8122df Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 13:00:44 +0000 Subject: [PATCH 161/168] Remove 'v_x8r0' and 'v_uhk0' blocks, add 'v_7gn4' block, adjust positions, update filter interactions in 'squad_command_center' page --- .../reporting_project_management.page.aml | 846 +++++------------- 1 file changed, 213 insertions(+), 633 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index e71e5be..ac8c2c4 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -90,20 +90,14 @@ Dashboard squad_command_center { block cycle_trend { position: pos(0, 860, 1200, 340) } - block v_x8r0 { - position: pos(20, 300, 200, 160) - } block v_997c { - position: pos(240, 300, 220, 160) + position: pos(280, 300, 260, 160) } block v_gt75 { - position: pos(700, 300, 200, 160) - } - block v_uhk0 { - position: pos(480, 300, 200, 160) + position: pos(560, 300, 260, 160) } block v_sffe { - position: pos(920, 300, 180, 160) + position: pos(840, 300, 260, 160) } block v_jdaq { position: pos(20, 480, 520, 360) @@ -147,6 +141,10 @@ Dashboard squad_command_center { block t_z5ve { position: pos(1020, 1300, 60, 40) } + block v_7gn4 { + position: pos(20, 300, 240, 160) + layer: 1 + } width: 1120 } tab ttm_tab: CanvasLayout { @@ -199,7 +197,7 @@ Dashboard squad_command_center { } tab quality_tab: CanvasLayout { label: '🎯 Quality & Bottlenecks' - height: 2060 + height: 1900 grid_size: 20 block t_87la { position: pos(40, 20, 740, 80) @@ -218,36 +216,32 @@ Dashboard squad_command_center { position: pos(20, 200, 740, 60) } block v_baqx { - position: pos(40, 480, 540, 400) + position: pos(40, 320, 540, 400) layer: 1 } block v_n6j9 { - position: pos(600, 480, 560, 400) + position: pos(600, 320, 560, 400) layer: 1 } block v_hl2j { - position: pos(40, 900, 540, 400) + position: pos(40, 740, 540, 400) } block v_7fkd { - position: pos(600, 900, 560, 400) + position: pos(600, 740, 560, 400) layer: 1 } block v_yro9 { position: pos(440, 300, 340, 160) layer: 1 } - block v_yhu3 { - position: pos(820, 300, 340, 160) - layer: 1 - } block t_q684 { - position: pos(40, 1360, 740, 60) + position: pos(40, 1200, 740, 60) } block t_lfpp { - position: pos(40, 1400, 1140, 60) + position: pos(40, 1240, 1140, 60) } block v_45a6 { - position: pos(40, 1460, 1140, 400) + position: pos(40, 1300, 1140, 560) } } tab workload_tab: CanvasLayout { @@ -271,142 +265,6 @@ Dashboard squad_command_center { } } } - block v_x8r0: VizBlock { - label: 'Shipped (30D)' - description: 'Total issues launched last 30 days' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation lm__completed_issue { - label: '%LM - Completed Issue' - formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation completed_issue_color { - label: 'Completed Issue Color' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "rgb(248, 113, 113)", - else: "#5DB88F" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation completed_issue_icon { - label: 'Completed Issue Icon' - formula: @aql case( - when: percent_lm_completed_issue < 0, - then: "▼", - else: "▲" - );; - calc_type: 'measure' - data_type: 'text' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ - VizFieldFull { - label: 'Completed issue (Last 30D)' - ref: r(reporting_project_management.completed_issue) - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: 'lm__completed_issue' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'completed_issue_color' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'completed_issue_icon' - format { - type: 'text' - } - } - ] - content: @md - -
-

Shipped (30D)

- - {{ rows[0].values.`Completed issue (Last 30D)` }} - - -
- {{ rows[0].values.`Completed Issue Icon` }} - {{ rows[0].values.`%LM - Completed Issue` }} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } block v_997c: VizBlock { label: 'Avg Cycle Time (30D)' viz: MarkdownViz { @@ -751,215 +609,6 @@ Dashboard squad_command_center { hide_label: true } } - block v_uhk0: VizBlock { - label: 'Avg PR Review (14D)' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation color_condition { - label: 'Completed issue - Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "green" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation icon_condition { - label: 'Completed issue - Icon Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_02fef53 { - label: 'Cycle Time - Color Condition' - formula: @aql case( - when: metric_bcc0c1b < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_8cf2423 { - label: 'Cycle Time - Icon Condition' - formula: @aql case( - when: metric_bcc0c1b < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_7eece09 { - label: 'Avg PR Review - Color Condition' - formula: @aql case( - when: lm_avg_pr_review < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_0e96b56 { - label: 'Avg PR Review - Icon Condition' - formula: @aql case( - when: lm_avg_pr_review < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation avg_pr_review_icon { - label: 'Avg PR Review Icon' - formula: @aql case( - when: - lm_avg_pr_review < 0, - then: "▼", - else: "▲" - );; - calc_type: 'measure' - data_type: 'text' - } - calculation avg_pr_review_color { - label: 'Avg PR Review Color' - formula: @aql case( - when: lm_avg_pr_review > 0, - then: "rgb(248, 113, 113)", - else: "#4ade80" - );; - calc_type: 'measure' - data_type: 'text' - } - calculation lm_avg_pr_review { - label: '%LM - Avg PR Review' - formula: @aql safe_divide(avg(reporting_stage_duration, reporting_stage_duration.duration_hours), avg(reporting_stage_duration, reporting_stage_duration.duration_hours) | relative_period(reporting_stage_duration.exited_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_stage_duration.stage) - operator: 'is' - value: 'In PR Review' - } - filter { - field: r(reporting_stage_duration.exited_at) - operator: 'matches' - value: '2026-02-15 - 2026-02-28' - } - theme { - } - values: [ - VizFieldFull { - label: 'Avg PR Review' - ref: r(reporting_stage_duration.duration_hours) - aggregation: 'avg' - format { - type: 'number' - pattern: '#,###' - } - }, - VizFieldFull { - ref: 'lm_avg_pr_review' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'avg_pr_review_icon' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'avg_pr_review_color' - format { - type: 'text' - } - } - ] - content: @md - -
-

Avg PR Review (14D)

- - {{ rows[0].values.`Avg PR Review` }}h - - -
- {{ rows[0].values.`Avg PR Review Icon` }} - {{ rows[0].values.`%LM - Avg PR Review`}} - - vs last month -
- -
;; - settings { - show_row_total: true - show_column_total: true - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - settings { - hide_label: true - } - } block v_sffe: VizBlock { label: 'Avg Cycle Time (30D) copy' viz: MarkdownViz { @@ -2313,225 +1962,21 @@ Dashboard squad_command_center { pattern: 'inherited' } } - settings { - color: '#60A5FAFF' - } - } - } - settings { - row_limit: 5000 - legend_label: 'hidden' - x_axis_show_null_datetime: false - aggregate_awareness { - enabled: true - debug_comments: true - } - } - } - } - - block v_yhu3: VizBlock { - label: 'Bug Ratio (30D) copy copy' - viz: MarkdownViz { - dataset: reporting_project_management - calculation metric_e98dbc4 { - label: 'LM - Completed issue' - formula: @aql metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true);; - calc_type: 'measure' - data_type: 'number' - } - calculation metric_abbd5a2 { - label: '%LM - Completed issue' - formula: @aql safe_divide(metric_63f4786, metric_63f4786 | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation color_condition { - label: 'Completed issue - Color Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "red", - else: "green" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation icon_condition { - label: 'Completed issue - Icon Condition' - formula: @aql case( - when: metric_abbd5a2 < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_02fef53 { - label: 'Cycle Time - Color Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "green", - else: "red" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation metric_8cf2423 { - label: 'Cycle Time - Icon Condition' - formula: @aql case( - when: avg_cycle_time < 0, - then: "▾", - else: "▴" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation avg_cycle_time { - label: '%LM - Avg Cycle Time' - formula: @aql safe_divide(avg(reporting_issues, reporting_issues.cycle_time_hours), avg(reporting_issues, reporting_issues.cycle_time_hours) | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt_color { - label: 'Tech Debt Color' - formula: @aql case( - when: lm_tech_debt < 0, - then: "#5DB88F", - else: "rgb(248, 113, 113)" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation tech_debt_icon { - label: 'Tech Debt Icon' - formula: @aql case( - when: lm_tech_debt < 0, - then: "▼", - else: "▲" -);; - calc_type: 'measure' - data_type: 'text' - } - calculation lm_bug_ratio { - label: 'LM - Bug Ratio' - formula: @aql bug_ratio - (bug_ratio | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true));; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_number_of_bug { - label: 'LM - Number of Bug' - formula: @aql safe_divide(number_of_bug, number_of_bug | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - calculation tech_debt { - label: 'Number of Tech Debt' - formula: @aql count(reporting_issues.id) | where(reporting_issues.label == "Tech Debt");; - calc_type: 'measure' - data_type: 'number' - } - calculation lm_tech_debt { - label: 'LM - Number of Tech Debt' - formula: @aql safe_divide(tech_debt, tech_debt | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; - calc_type: 'measure' - data_type: 'number' - } - filter { - field: r(reporting_issues.completed_at) - operator: 'matches' - value: '2026-02-01 - 2026-02-28' - } - values: [ - VizFieldFull { - ref: 'tech_debt' - format { - type: 'number' - pattern: 'inherited' - } - }, - VizFieldFull { - ref: 'lm_tech_debt' - format { - type: 'number' - pattern: '#,###%' - } - }, - VizFieldFull { - ref: 'tech_debt_icon' - format { - type: 'text' - } - }, - VizFieldFull { - ref: 'tech_debt_color' - format { - type: 'text' + settings { + color: '#60A5FAFF' } } - ] - content: @md - -
-

Tech Debt (30D)

- - {{ rows[0].values.`Number of Tech Debt` }} - - -
- {{ rows[0].values.`Tech Debt Icon` }} - {{ rows[0].values.`LM - Number of Tech Debt` }} - - vs last month -
- -
;; + } settings { - show_row_total: true - show_column_total: true + row_limit: 5000 + legend_label: 'hidden' + x_axis_show_null_datetime: false aggregate_awareness { enabled: true debug_comments: true } } } - settings { - hide_label: true - } } block t_q684: TextBlock { content: @md ### **⚡ Bottlenecks**;; @@ -3304,21 +2749,138 @@ Dashboard squad_command_center { } } } - theme: ai_1773979634521_3 - interactions: [ - FilterInteraction { - from: 'v_x8r0' - to: [ - CustomMapping { - block: [ - 'v_ipdo', - 'v_7dso', - 'v_r2ma' - ] - disabled: true + block v_7gn4: VizBlock { + settings { + hide_label: true + } + label: 'Completed issue (Last 30D), %LM - Completed issue and 2 more' + viz: MarkdownViz { + dataset: reporting_project_management + calculation lm_completed_issue { + label: '%LM - Completed issue' + formula: @aql safe_divide(completed_issue, completed_issue | relative_period(reporting_issues.completed_at, interval(-1 month), strict: true)) - 1;; + calc_type: 'measure' + data_type: 'number' + } + calculation completed_issue_color { + label: 'Completed Issue Color' + formula: @aql case( + when: lm_completed_issue < 0, + then: "rgb(248, 113, 113)", + else: "#5DB88F" +);; + calc_type: 'measure' + data_type: 'text' + } + calculation completed_issue_icon { + label: 'Completed Issue Icon' + formula: @aql +case( + when: lm_completed_issue < 0, + then: "▼", + else: "▲" + );; + calc_type: 'measure' + data_type: 'text' + } + filter { + field: r(reporting_issues.completed_at) + operator: 'matches' + value: '2026-02-01 - 2026-02-28' + } + values: [ + VizFieldFull { + label: 'Completed issue (Last 30D)' + ref: r(reporting_project_management.completed_issue) + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: 'lm_completed_issue' + format { + type: 'number' + pattern: '#,###%' + } + }, + VizFieldFull { + ref: 'completed_issue_color' + format { + type: 'text' + } + }, + VizFieldFull { + ref: 'completed_issue_icon' + format { + type: 'text' + } } ] - }, + content: @md + +
+

Shipped (30D)

+ + {{ rows[0].values.`Completed issue (Last 30D)` }} + + +
+ {{ rows[0].values.`Completed Issue Icon` }} + {{ rows[0].values.`%LM - Completed issue` }} + + vs last month +
+ +
;; + settings { + show_row_total: true + show_column_total: true + aggregate_awareness { + enabled: true + debug_comments: true + } + } + } + } + theme: ai_1773979634521_3 + interactions: [ FilterInteraction { from: 'v_997c' to: [ @@ -3345,19 +2907,6 @@ Dashboard squad_command_center { } ] }, - FilterInteraction { - from: 'v_uhk0' - to: [ - CustomMapping { - block: [ - 'v_ipdo', - 'v_7dso', - 'v_r2ma' - ] - disabled: true - } - ] - }, FilterInteraction { from: 'v_sffe' to: [ @@ -3417,7 +2966,8 @@ Dashboard squad_command_center { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } @@ -3430,7 +2980,8 @@ Dashboard squad_command_center { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } @@ -3459,7 +3010,8 @@ Dashboard squad_command_center { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } @@ -3472,72 +3024,82 @@ Dashboard squad_command_center { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } ] }, FilterInteraction { - from: 'v_baqx' + from: 'v_y7bo' to: [ CustomMapping { - block: [ - 'v_ipdo', - 'v_7dso', - 'v_r2ma' - ] + block: 'v_7gn4' disabled: true } ] }, FilterInteraction { - from: 'v_n6j9' + from: 'v_x2gw' + to: [ + CustomMapping { + block: 'v_7gn4' + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_baqx' to: [ CustomMapping { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } ] }, FilterInteraction { - from: 'v_hl2j' + from: 'v_n6j9' to: [ CustomMapping { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } ] }, FilterInteraction { - from: 'v_7fkd' + from: 'v_hl2j' to: [ CustomMapping { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } ] }, FilterInteraction { - from: 'v_yhu3' + from: 'v_7fkd' to: [ CustomMapping { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } @@ -3550,7 +3112,8 @@ Dashboard squad_command_center { block: [ 'v_ipdo', 'v_7dso', - 'v_r2ma' + 'v_r2ma', + 'v_7gn4' ] disabled: true } @@ -3561,10 +3124,8 @@ Dashboard squad_command_center { to: [ CustomMapping { block: [ - 'v_x8r0', 'v_997c', 'v_gt75', - 'v_uhk0', 'v_sffe', 'v_jdaq', 'v_3qu5', @@ -3576,8 +3137,8 @@ Dashboard squad_command_center { 'v_n6j9', 'v_hl2j', 'v_7fkd', - 'v_yhu3', - 'v_45a6' + 'v_45a6', + 'v_7gn4' ] disabled: true } @@ -3588,10 +3149,8 @@ Dashboard squad_command_center { to: [ CustomMapping { block: [ - 'v_x8r0', 'v_997c', 'v_gt75', - 'v_uhk0', 'v_sffe', 'v_jdaq', 'v_3qu5', @@ -3603,8 +3162,8 @@ Dashboard squad_command_center { 'v_n6j9', 'v_hl2j', 'v_7fkd', - 'v_yhu3', - 'v_45a6' + 'v_45a6', + 'v_7gn4' ] disabled: true } @@ -3615,10 +3174,8 @@ Dashboard squad_command_center { to: [ CustomMapping { block: [ - 'v_x8r0', 'v_997c', 'v_gt75', - 'v_uhk0', 'v_sffe', 'v_jdaq', 'v_3qu5', @@ -3630,8 +3187,31 @@ Dashboard squad_command_center { 'v_n6j9', 'v_hl2j', 'v_7fkd', - 'v_yhu3', - 'v_45a6' + 'v_45a6', + 'v_7gn4' + ] + disabled: true + } + ] + }, + FilterInteraction { + from: 'v_7gn4' + to: [ + CustomMapping { + block: [ + 'v_lvp5', + 'v_d3sa', + 'v_22mj', + 'v_y7bo', + 'v_x2gw', + 'v_baqx', + 'v_n6j9', + 'v_hl2j', + 'v_7fkd', + 'v_45a6', + 'v_ipdo', + 'v_7dso', + 'v_r2ma' ] disabled: true } From f67a0b38ba215e5cab457f94134ba2accfbd49d9 Mon Sep 17 00:00:00 2001 From: Vy Huynh Date: Sun, 29 Mar 2026 14:09:00 +0000 Subject: [PATCH 162/168] Update 'reporting_project_management' page to add priority colors, duration bars, sorting, and style tweaks --- .../reporting_project_management.page.aml | 177 +++++++++++++++--- 1 file changed, 149 insertions(+), 28 deletions(-) diff --git a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml index ac8c2c4..4b1de7e 100644 --- a/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml +++ b/team-folders/VyHuynh/Squad Reporting - Project Management/reporting_project_management.page.aml @@ -197,7 +197,7 @@ Dashboard squad_command_center { } tab quality_tab: CanvasLayout { label: '🎯 Quality & Bottlenecks' - height: 1900 + height: 2000 grid_size: 20 block t_87la { position: pos(40, 20, 740, 80) @@ -243,6 +243,19 @@ Dashboard squad_command_center { block v_45a6 { position: pos(40, 1300, 1140, 560) } + block t_aax1 { + position: pos(40, 1880, 1140, 40) + } + block t_my4d { + position: pos(40, 1920, 200, 60) + } + block t_677a { + position: pos(1040, 1940, 60, 40) + } + block t_z5ve { + position: pos(1100, 1940, 60, 40) + } + width: 1220 } tab workload_tab: CanvasLayout { label: '👥 Workload' @@ -2013,7 +2026,7 @@ Dashboard squad_command_center { } } block v_45a6: VizBlock { - label: 'Identifier, Title and 5 more' + label: 'Identifier, Title and 9 more' viz: MarkdownViz { dataset: reporting_project_management calculation stage_color { @@ -2035,6 +2048,76 @@ Dashboard squad_command_center { data_type: 'text' model: reporting_stage_duration } + calculation priority_color { + label: 'Priority Color' + formula: @aql case( + when: reporting_issues.priority == "high", + then: "#E27712", + when: reporting_issues.priority == "urgent", + then: "#982021", + when: reporting_issues.priority == "medium", + then: "#60A5FA", + when: reporting_issues.priority == "low", + then: "#87A6C7", + when: reporting_issues.priority == "none", + then: "#D5DCE4", + else: "others" +);; + calc_type: 'dimension' + data_type: 'text' + model: reporting_stage_duration + } + calculation duration_color { + label: 'Duration Color' + formula: @aql case( + when: reporting_stage_duration.duration_hours >= 60, + then: "#ef4444", + else: "#eab308" + );; + calc_type: 'dimension' + data_type: 'text' + model: reporting_stage_duration + } + calculation duration_bar_width { + label: 'Duration Bar Width' + formula: @aql case( + when: reporting_stage_duration.duration_hours >= 120, + then: 120, + when: reporting_stage_duration.duration_hours >= 100, + then: 100, + when: reporting_stage_duration.duration_hours >= 80, + then: 80, + when: reporting_stage_duration.duration_hours >= 60, + then: 60, + when: reporting_stage_duration.duration_hours >= 40, + then: 40, + when: reporting_stage_duration.duration_hours >= 20, + then: 20, + else: 12 + );; + calc_type: 'dimension' + data_type: 'number' + model: reporting_stage_duration + } + calculation priority_ranking { + label: 'Priority Ranking' + formula: @aql case( + when: reporting_issues.priority == "urgent", + then: 1, + when: reporting_issues.priority == "high", + then: 2, + when: reporting_issues.priority == "medium", + then: 3, + when: reporting_issues.priority == "low", + then: 4, + when: reporting_issues.priority == "none", + then: 5, + else: 99 + );; + calc_type: 'dimension' + data_type: 'number' + model: reporting_issues + } rows: [ VizFieldFull { ref: r(reporting_issues.identifier) @@ -2049,23 +2132,45 @@ Dashboard squad_command_center { } }, VizFieldFull { - ref: r(reporting_stage_duration.stage) + ref: r(reporting_stage_duration.duration_hours) format { - type: 'text' + type: 'number' + pattern: 'inherited' } + uname: 'reporting_stage_duration_duration_hours' }, VizFieldFull { - ref: ref('reporting_stage_duration', 'stage_color') + ref: ref('reporting_stage_duration', 'duration_color') format { type: 'text' } }, VizFieldFull { - ref: r(reporting_stage_duration.duration_hours) + ref: ref('reporting_stage_duration', 'duration_bar_width') + format { + type: 'number' + pattern: 'inherited' + } + }, + VizFieldFull { + ref: ref('reporting_issues', 'priority_ranking') format { type: 'number' pattern: 'inherited' } + uname: 'reporting_issues_priority_ranking' + }, + VizFieldFull { + ref: r(reporting_stage_duration.stage) + format { + type: 'text' + } + }, + VizFieldFull { + ref: ref('reporting_stage_duration', 'stage_color') + format { + type: 'text' + } }, VizFieldFull { ref: r(reporting_issues.assignee_id) @@ -2079,25 +2184,30 @@ Dashboard squad_command_center { format { type: 'text' } + }, + VizFieldFull { + ref: ref('reporting_stage_duration', 'priority_color') + format { + type: 'text' + } } ] content: @md