diff --git a/agent_genie/README.md b/agent_genie/README.md new file mode 100644 index 00000000..882017cf --- /dev/null +++ b/agent_genie/README.md @@ -0,0 +1,495 @@ +To use the App, click the URL, which will take you to the Home Page + +![](./images/media/image3.png) + +1. Chat with PDF + +![](./images/media/image6.png) + +2. Explain the Dataset + +![](./images/media/image8.png) + +3. Classification + +![](./images/media/image9.png) + +4. Language Translation + +![](./images/media/image7.png) + +5. Next Best Action + +![](./images/media/image4.png) + +6. Forecasting + +![](./images/media/image5.png) + +7. Universal + +![](./images/media/image12.png) + +# Claims Analytics with Genie++ + +Claims Analytics with Genie++ is a conversational analytics application +built on Databricks that enables healthcare teams to analyze insurance +claims using natural language and an analytics-first multi-agent +architecture. + +The application extends the Databricks conversational agent framework +and adapts it for healthcare claims analytics using Genie++. + +# Overview + +Claims Analytics with Genie++ allows analysts, clinicians, and +operations teams to explore healthcare claims data conversationally +while delivering descriptive, predictive, and prescriptive insights. + +Key capabilities include: + +- Large-scale claims analysis + +- Fraud detection and risk forecasting + +- Next-best-action recommendations + +- Regulatory and compliance support + +The application runs natively on Databricks Apps, enabling secure +deployment directly within the Databricks workspace with no +infrastructure management. + +# Key Features + +- Conversational Analytics -- Query claims datasets using natural + language + +- Stateful Conversations -- Context-aware multi-turn analysis + +- Workspace Integration -- Direct access to Genie Spaces, data assets, + and models + +- Document Intelligence -- Upload and analyze claims PDFs + +- On-Behalf-Of Authentication -- Secure identity passthrough and + fine-grained access control + +- Serverless Deployment -- Managed hosting, scaling, and security + through Databricks Apps + +## Architecture + +### Agentic Analytics Model + +The system operates on curated Genie Spaces containing healthcare claims +data and uses an agentic orchestration layer to route queries to +specialized analytics agents. + +### Core Components + +Genie Space -- Data Foundation + +Preprocessed claims data optimized for analytics. + +Supervisor Agent + +Interprets user intent and routes requests to the appropriate analytics +workflow. + +Specialized Analytics Agents + +- Descriptive Analytics Agent + +- Predictive Analytics Agent + +- Prescriptive Recommendation Agent + +AI Functions + +Forecasting, classification, NLP, and reasoning functions. + +Conversational UI + +Web interface supporting natural language queries and document analysis. + +### Analytics Capabilities + +The application delivers a three-tier analytics model. + +## Descriptive Analytics + +Provides operational visibility into historical claims data. + +Examples: + +- Claims volume and cost analysis + +- Utilization patterns + +- Provider performance metrics + +- Patient demographic insights + +## Predictive Analytics + +Applies AI models to forecast risk and outcomes. + +Examples: + +- Risk stratification + +- Healthcare cost forecasting (ai_forecast) + +- Readmission prediction + +- Fraud probability scoring + +## Prescriptive Analytics + +Generates actionable recommendations for analysts and care teams. + +Examples: + +- Optimal treatment pathway suggestions + +- Cost reduction strategies + +- Care quality improvement recommendations + +- Next-best-action guidance + +## Workflow + +1. User Query + A user asks a question or uploads a claims document. + +2. Intent Detection + The Supervisor Agent classifies the request. + +3. Agent Execution + Specialized analytics agents perform descriptive, predictive, or + prescriptive analysis. + +4. AI Processing + Forecasting, classification, NLP, or reasoning functions are + executed. + +5. Insight Delivery + Results are returned with clinical and operational context. + +# Additional Capabilities + +- Claims Classification -- Risk-based claim categorization + +- Language Translation -- Multilingual summarization + +- Forecasting -- Monthly claims cost projections with confidence + intervals + +- Next Best Action -- Recommended investigative or operational actions + +- Universal Knowledge Mode -- General Q&A using Genie and LLM reasoning + +# Benefits + +## Unified Analytics Experience + +Combine descriptive, predictive, and prescriptive analytics within a +single conversational interface. + +## Trusted Data Foundation + +Built on curated Genie Spaces to ensure consistent and high-quality +data. + +## Operational Efficiency + +Real-time insights delivered through scalable cloud-native architecture. + +## Clinical and Financial Impact + +Improved care decisions, reduced fraud exposure, and stronger regulatory +compliance. + +# Deploying the Agent Genie++ App to Databricks Apps + +The Agent Genie++ App can be installed through Databricks Marketplace. + +1. Login to your Databricks workspace, Click on Marketplace on the + left, search for 'agent-genie++' + +![](./images/media/image2.png) + +2. Click Install + +![](./images/media/image10.png) + +3. Accept the terms and conditions. Click Continue. + +![](./images/media/image1.png) + +4. Choose your preferred Serving endpoint, Genie Space, and the App + Compute Size. Click Next + +![](./images/media/image13.png) + +5. Review the App and User Authorization details. Click Next + +![](./images/media/image15.png) + +6. Click Install + +![](./images/media/image14.png) + +7. Wait for App Installation to be successful. + +![](./images/media/image11.png) + +If you prefer to clone and deploy it manually, follow the instructions +below. + +# 1. Clone the Agent Genie++ Repository + +Clone the repository to your Databricks workspace using Git Folder. + +1. Navigate to the Workspace section in the sidebar. + +2. Click Create. + +3. Select Git Folder. + +4. Enter the Agent Genie++ repository URL and follow the prompts to + clone it. + +This will create a folder in your workspace containing the Agent Genie++ +application code and configuration files. + +# 2. Create the Agent Genie++ App + +1. Navigate to Compute in the sidebar. + +2. Open the Apps tab. + +3. Click Create App. + +4. Enter the required fields. + +Click Next: Configuration. + +If you want to reuse an existing Agent Genie++ app: + +1. Click the app name in the Name column. + +2. Open the app details page. + +3. Click Edit. + +# 3. Configure App Resources + +Inside App Resources, add the required dependencies used by Agent +Genie++. + +Click + Add Resource and configure the following: + +## Model Serving Endpoint + +Add a serving endpoint that hosts the Agent Genie++ orchestration or LLM +model. + +- Resource type: Serving Endpoint + +- Select your GenAI serving endpoint + +- Grant permission: `CAN_QUERY` + +- Resource name: `serving_endpoint` + +## Genie Space + +Add the Genie Space used by Agent Genie++ for enterprise data reasoning. + +- Resource type: Genie Space + +- Select the relevant Genie space + +- Grant permission: `CAN_RUN` + +- Resource name: `genie_space` + +For detailed instructions on configuring resources, refer to the +Databricks Apps documentation. + +# 4. Deploy the Agent Genie++ App + +Deploy the application using the Databricks Apps interface. + +1. Go to the app detail page + +2. Click Deploy + +3. Select the Agent Genie++ Git folder + +4. Choose the folder: `agent-genieplusplus-app` + +5. Click Select + +6. Click Deploy + +Review the configuration and confirm the deployment. + +# 5. Troubleshooting Authorization + +After installing the Agent Genie++ App, verify that the correct OAuth +scopes are configured. + +Navigate to the Authorization page and confirm the following scopes +exist: + +- serving.serving-endpoints + +- dashboards.genie + +- files.files + +- sql + +When opening the app for the first time, you should see the OBO +authorization page requesting these scopes. + +# Issue: Missing serving.serving-endpoints Scope + +If you clone the Git repository directly, you may notice that the scope `serving.serving-endpoints` does not appear in the UI yet. + +This is a known UI limitation and will be added later. + +# Solution: Manually Add the Scope via CLI + +You can manually update the OAuth scopes using the Databricks CLI, API, +or SDK as an Account Admin. + +## Step 1: Retrieve OAuth App Client ID + +Example client ID: `12345667-1234-5678-a85d-eac774235aea` + +Run: + +```bash +databricks account custom-app-integration get '12345667-1234-5678-a85d-eac774235aea' +``` + +Example output: + +```json +{ + "client_id": "12345667-1234-5678-a85d-eac774235aea", + "confidential": true, + "create_time": "2025-02-18T09:59:07.876Z", + "integration_id": "abcdefgg-1234-5678-a85d-eac774235aea", + "name": "agent-genieplusplus-app", + "redirect_urls": [ + "http://localhost:7070", + "https://agent-genieplusplus-app.databricksapps.com/.auth/callback" + ], + "scopes": [ + "openid", + "profile", + "email", + "all-apis", + "offline_access" + ] +} +``` + +## Step 2: Add the Required Scope + +Update the scopes and append `serving.serving-endpoints`. + +Example CLI command: + +```bash +databricks account custom-app-integration update '65d90ec2-54ba-4fcb-a85d-eac774235aea' \ + --json '{"scopes": ["openid", "profile", "email", "all-apis", "offline_access", "serving.serving-endpoints"]}' +``` + +## Step 3: Refresh Authentication + +If the scope does not immediately reflect in the app: + +- Clear browser cookies + +- Restart the app + +- Reinstall the app + +- Or open the URL in incognito mode + +# 6. Verify User Permissions + +Ensure users have access to all underlying resources used by Agent +Genie++. + +## Unity Catalog Permissions + +Users must have: + +- `USE CATALOG` +- `USE SCHEMA` +- `SELECT` on tables + +## Genie Space + +Users must have: + +- `CAN RUN` permission + +## SQL Warehouse + +Users must have: + +- `CAN USE` + +## Model Serving Endpoint + +Users must have: + +- `CAN QUERY` + +# 7. Sharing the Agent Genie++ App + +When the app owner shares the application, users will see: + +- App Owner + +- Sign-in User + +These may differ. + +This means the app owner is authorizing other users to run the +application. + +The owner must grant: + +- `CAN USE` permission on the app + +- Access to all underlying Databricks resources + +# 8. Monitoring Queries + +If the Agent Genie++ app is not returning results: + +1. Navigate to the Genie Space + +2. Open the Monitoring page + +3. Verify whether the query was sent to the Genie Room API + +Open the query details to inspect: + +- execution errors + +- permission issues + +- API failures + +✅ At this point the Agent Genie++ App should be fully operational. diff --git a/agent_genie/app.py b/agent_genie/app.py index 01157e70..3ec06f52 100644 --- a/agent_genie/app.py +++ b/agent_genie/app.py @@ -975,14 +975,14 @@ async def query(request: Request): table_schema = {} if catalog_name and schema_name: try: - tables_result = get_tables(catalog_name, schema_name, fallback_workspace_url, None) + tables_result = get_tables(catalog_name, schema_name, fallback_workspace_url, fallback_access_token) if tables_result["success"]: table_schema = {} for table in tables_result["tables"]: table_name = table["name"] try: - columns_result = get_table_columns(catalog_name, schema_name, table_name, fallback_workspace_url, None) - + columns_result = get_table_columns(catalog_name, schema_name, table_name, fallback_workspace_url, fallback_access_token) + if columns_result["success"]: columns = columns_result["columns"] table_schema[table_name] = columns diff --git a/agent_genie/databricks.yml b/agent_genie/databricks.yml index cff7fcf8..1713dfe4 100644 --- a/agent_genie/databricks.yml +++ b/agent_genie/databricks.yml @@ -72,24 +72,17 @@ resources: - "vectorsearch.vector-search-indexes" - "catalog.connections" - # --- Installer job to persist Tavily key into a secret and write optional config --- - jobs: - install_app: - name: "${var.project_name} - Install/Configure" - tasks: - - task_key: configure_app - notebook_task: - notebook_path: "./notebooks/setup_app" # create this notebook - base_parameters: - TAVILY_API_KEY: "${var.tavily_api_key}" - SECRET_SCOPE: "${var.secret_scope}" - SECRET_KEY: "${var.secret_key}" - # Add compute for your workspace (example placeholders): - # existing_cluster_id: "" - # OR: - # job_clusters: - # - job_cluster_key: "install_cluster" - # new_cluster: - # spark_version: "14.3.x-scala2.12" - # node_type_id: "i3.xlarge" - # num_workers: 0 + # --- Installer job disabled until ./notebooks/setup_app exists; uncomment when ready --- + # jobs: + # install_app: + # name: "${var.project_name} - Install/Configure" + # tasks: + # - task_key: configure_app + # notebook_task: + # notebook_path: "./notebooks/setup_app" + # base_parameters: + # TAVILY_API_KEY: "${var.tavily_api_key}" + # SECRET_SCOPE: "${var.secret_scope}" + # SECRET_KEY: "${var.secret_key}" + # # existing_cluster_id: "" + # # OR job_clusters with new_cluster (spark_version, node_type_id, num_workers: 0) diff --git a/agent_genie/images/media/image1.png b/agent_genie/images/media/image1.png new file mode 100644 index 00000000..8cf8d16a Binary files /dev/null and b/agent_genie/images/media/image1.png differ diff --git a/agent_genie/images/media/image10.png b/agent_genie/images/media/image10.png new file mode 100644 index 00000000..a406b094 Binary files /dev/null and b/agent_genie/images/media/image10.png differ diff --git a/agent_genie/images/media/image11.png b/agent_genie/images/media/image11.png new file mode 100644 index 00000000..e057b36e Binary files /dev/null and b/agent_genie/images/media/image11.png differ diff --git a/agent_genie/images/media/image12.png b/agent_genie/images/media/image12.png new file mode 100644 index 00000000..d761a805 Binary files /dev/null and b/agent_genie/images/media/image12.png differ diff --git a/agent_genie/images/media/image13.png b/agent_genie/images/media/image13.png new file mode 100644 index 00000000..1ef401f3 Binary files /dev/null and b/agent_genie/images/media/image13.png differ diff --git a/agent_genie/images/media/image14.png b/agent_genie/images/media/image14.png new file mode 100644 index 00000000..e0ceec64 Binary files /dev/null and b/agent_genie/images/media/image14.png differ diff --git a/agent_genie/images/media/image15.png b/agent_genie/images/media/image15.png new file mode 100644 index 00000000..83275988 Binary files /dev/null and b/agent_genie/images/media/image15.png differ diff --git a/agent_genie/images/media/image2.png b/agent_genie/images/media/image2.png new file mode 100644 index 00000000..7a14109a Binary files /dev/null and b/agent_genie/images/media/image2.png differ diff --git a/agent_genie/images/media/image3.png b/agent_genie/images/media/image3.png new file mode 100644 index 00000000..501c8344 Binary files /dev/null and b/agent_genie/images/media/image3.png differ diff --git a/agent_genie/images/media/image4.png b/agent_genie/images/media/image4.png new file mode 100644 index 00000000..41bd0130 Binary files /dev/null and b/agent_genie/images/media/image4.png differ diff --git a/agent_genie/images/media/image5.png b/agent_genie/images/media/image5.png new file mode 100644 index 00000000..a299275c Binary files /dev/null and b/agent_genie/images/media/image5.png differ diff --git a/agent_genie/images/media/image6.png b/agent_genie/images/media/image6.png new file mode 100644 index 00000000..8b9de770 Binary files /dev/null and b/agent_genie/images/media/image6.png differ diff --git a/agent_genie/images/media/image7.png b/agent_genie/images/media/image7.png new file mode 100644 index 00000000..13036edb Binary files /dev/null and b/agent_genie/images/media/image7.png differ diff --git a/agent_genie/images/media/image8.png b/agent_genie/images/media/image8.png new file mode 100644 index 00000000..b85c6de2 Binary files /dev/null and b/agent_genie/images/media/image8.png differ diff --git a/agent_genie/images/media/image9.png b/agent_genie/images/media/image9.png new file mode 100644 index 00000000..83862038 Binary files /dev/null and b/agent_genie/images/media/image9.png differ diff --git a/agent_genie/templates/index.html b/agent_genie/templates/index.html index 6ef5e665..cabf42e5 100644 --- a/agent_genie/templates/index.html +++ b/agent_genie/templates/index.html @@ -2304,9 +2304,11 @@

Databricks Genie++ Omni-Analytics Platform

// Highlight JSON-like structures if (formatted.includes('{') && formatted.includes('}')) { try { - // Try to parse and pretty-print JSON + // Try to parse and pretty-print JSON (escape to prevent XSS when assigning via innerHTML) const parsed = JSON.parse(content); - formatted = '
' + JSON.stringify(parsed, null, 2) + '
'; + const jsonString = JSON.stringify(parsed, null, 2); + const escapedJson = escapeHtml(jsonString); + formatted = '
' + escapedJson + '
'; } catch (e) { // Not valid JSON, keep original formatting } diff --git a/dbsql/cost_per_query/PrPr/DBSQL Cost Dashboard (PrPr).lvdash.json b/dbsql/cost_per_query/PrPr/DBSQL Cost Dashboard (PrPr).lvdash.json deleted file mode 100644 index d6542261..00000000 --- a/dbsql/cost_per_query/PrPr/DBSQL Cost Dashboard (PrPr).lvdash.json +++ /dev/null @@ -1 +0,0 @@ -{"datasets":[{"name":"8d75d358","displayName":"binary_options","query":"SELECT option\nFROM (VALUES ('Yes'), ('No')) AS options(option)"},{"name":"3e6fd95c","displayName":"statement_level_allocation","query":"WITH warehouse_snapshot AS (\n SELECT warehouse_id,\n warehouse_name,\n workspace_id,\n account_id,\n change_time,\n delete_time,\n CASE WHEN delete_time IS NOT NULL THEN 'Deleted' ELSE 'Active' END AS is_deleted\n FROM system.compute.warehouses w\n WHERE\n -- workspace filter\n (array_contains(:workspace_id,w.workspace_id) OR array_contains(:workspace_id,'all'))\n -- warehouse filter\n AND (array_contains(:warehouse_name, CONCAT(w.warehouse_name, ' (id:', w.warehouse_id, ')')) OR array_contains(:warehouse_name,'all'))\n QUALIFY ROW_NUMBER() OVER (PARTITION BY workspace_id, warehouse_id ORDER BY change_time DESC) == 1 -- Get more recent snapshot\n),\n\nroot_table AS (\n SELECT * \n FROM main.default.dbsql_cost_per_query AS qq\n WHERE\n query_attributed_dollars_estimation IS NOT NULL\n -- workspace filter\n AND (array_contains(:workspace_id,qq.workspace_id) OR array_contains(:workspace_id,'all'))\n -- warehouse filter\n AND (array_contains(:warehouse_id,qq.warehouse_id) OR array_contains(:warehouse_id,'all'))\n -- time filter (based on query start time)\n AND query_start_hour BETWEEN CAST(:time_range.min AS TIMESTAMP) AND CAST(:time_range.max AS TIMESTAMP) -- for good pruning\n -- statement_id filter - optional\n AND (array_contains(:statement_id,qq.statement_id) OR array_contains(:statement_id,'all')) -- optional statement id filter\n),\n\ntop_n_filter AS (\n SELECT \n IDENTIFIER(CASE \n WHEN :top_n_dimension = 'Executed By' THEN 'executed_by'\n WHEN :top_n_dimension = 'Source Type' THEN 'query_source_type'\n WHEN :top_n_dimension = 'Object Id' THEN 'query_source_id'\n WHEN :top_n_dimension = 'Statement Id' THEN 'statement_id'\n ELSE 'statement_id'\n END) AS rank_key,\n ROW_NUMBER() OVER (ORDER BY SUM(query_attributed_dollars_estimation) DESC) AS cost_rank\n FROM root_table AS qq\n GROUP BY\n IDENTIFIER(CASE \n WHEN :top_n_dimension = 'Executed By' THEN 'executed_by'\n WHEN :top_n_dimension = 'Source Type' THEN 'query_source_type'\n WHEN :top_n_dimension = 'Object Id' THEN 'query_source_id'\n WHEN :top_n_dimension = 'Statement Id' THEN 'statement_id'\n ELSE 'statement_id'\n END)\n),\n\nmv_model AS (\n\n SELECT qq.*,\n CONCAT(w.warehouse_name, ' (id:', w.warehouse_id, ')') AS warehouse_name ,\n w.is_deleted AS is_warehouse_deleted,\n query_attributed_dollars_estimation * (1 - CAST(:dbsql_discount AS FLOAT)) AS query_attributed_dollars_with_discount,\n --ROW_NUMBER() OVER (PARTITION BY CASE WHEN :ORDER BY QueryAllocationDollars DESC) AS CostRank\n tn.cost_rank\n FROM root_table AS qq\n INNER JOIN warehouse_snapshot w ON qq.workspace_id = w.workspace_id AND qq.warehouse_id = w.warehouse_id\n LEFT JOIN top_n_filter AS tn ON IDENTIFIER(CASE \n WHEN :top_n_dimension = 'Executed By' THEN 'qq.executed_by'\n WHEN :top_n_dimension = 'Source Type' THEN 'qq.query_source_type'\n WHEN :top_n_dimension = 'Object Id' THEN 'qq.query_source_id'\n WHEN :top_n_dimension = 'Statement Id' THEN 'qq.statement_id'\n ELSE 'statement_id'\n END) = tn.rank_key\n)\n\nSELECT\n mv.*,\n CASE WHEN :group_key = 'Warehouse Id' THEN mv.warehouse_id\n WHEN :group_key = 'Warehouse Name' THEN mv.warehouse_name\n WHEN :group_key = 'User' THEN mv.executed_by\n WHEN :group_key = 'Source Type' THEN mv.query_source_type\n WHEN :group_key = 'Obect Id' THEN mv.query_source_id\n WHEN :group_key = 'Client' THEN mv.client_application\n WHEN :group_key = 'Workspace Id' THEN mv.workspace_id\n END AS group_key,\n CASE WHEN :date_agg_level = 'HOUR' THEN \n date_trunc(:date_agg_level, mv.start_time)::timestamp::string\n ELSE date_trunc(:date_agg_level, mv.start_time)::date::string\n END AS time_agg_key,\n -- Data formatting for visuals\n MAX(query_attributed_dollars_with_discount) OVER() AS fully_loaded_max_usage,\n MIN(query_attributed_dollars_with_discount) OVER() AS fully_loaded_min_usage,\n COALESCE(CONCAT(\n '
',\n '
',\n '$',\n FORMAT_NUMBER(query_attributed_dollars_with_discount, 2), \n '
'\n ), '--') AS allocated_dollars_usage_bar_html,\n-- Data formatting for visuals\n MAX(query_attributed_dbus_estimation) OVER() AS fully_loaded_max_usage_dbus,\n MIN(query_attributed_dbus_estimation) OVER() AS fully_loaded_min_usage_dbus,\n COALESCE(CONCAT(\n '
',\n '
',\n '$',\n FORMAT_NUMBER(query_attributed_dbus_estimation, 2), \n '
'\n ), '--') AS allocated_dbus_usage_bar_html\nFROM mv_model AS mv\nWHERE\n(lower(:top_n)::string = 'all' OR cost_rank <= try_cast(:top_n AS int)) -- There can be ties, so we will also do a limit\nORDER BY cost_rank, query_attributed_dollars_with_discount DESC","parameters":[{"displayName":"statement_id","keyword":"statement_id","dataType":"STRING","complexType":"MULTI","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"all"}]}}},{"displayName":"workspace_id","keyword":"workspace_id","dataType":"STRING","complexType":"MULTI","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"all"}]}}},{"displayName":"warehouse_id","keyword":"warehouse_id","dataType":"STRING","complexType":"MULTI","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"all"}]}}},{"displayName":"warehouse_name","keyword":"warehouse_name","dataType":"STRING","complexType":"MULTI","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"all"}]}}},{"displayName":"top_n_dimension","keyword":"top_n_dimension","dataType":"STRING","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"Executed By"}]}}},{"displayName":"dbsql_discount","keyword":"dbsql_discount","dataType":"STRING","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"0.0"}]}}},{"displayName":"group_key","keyword":"group_key","dataType":"STRING","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"User"}]}}},{"displayName":"date_agg_level","keyword":"date_agg_level","dataType":"STRING","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"DAY"}]}}},{"displayName":"top_n","keyword":"top_n","dataType":"STRING","defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"all"}]}}},{"displayName":"time_range","keyword":"time_range","dataType":"DATETIME","complexType":"RANGE","defaultSelection":{"range":{"dataType":"DATETIME","min":{"value":"now-7d/d"},"max":{"value":"now-1d/d"}}}}]},{"name":"b6c55fed","displayName":"workspace_with_all","query":" WITH billing AS (\n SELECT workspace_id, usage_metadata.warehouse_id AS warehouse_id\n FROM system.billing.usage u\n WHERE usage_start_time BETWEEN date_trunc('hour', :start_time) AND :end_time\n AND usage_metadata.warehouse_id IS NOT NULL\n GROUP BY 1,2\n )\n -- Get warehouse names (most recent change record) for warehouses with usage in selected period\n SELECT w.workspace_id, w.warehouse_id, CONCAT(w.warehouse_name, ' (id:', w.warehouse_id, ')') AS warehouse_name\n FROM billing AS b\n JOIN system.compute.warehouses w ON b.workspace_id = w.workspace_id AND w.warehouse_id = b.warehouse_id\n QUALIFY ROW_NUMBER() OVER(PARTITION BY w.workspace_id, w.warehouse_id ORDER BY w.change_time DESC) == 1","parameters":[{"displayName":"start_time","keyword":"start_time","dataType":"DATETIME","defaultSelection":{"values":{"dataType":"DATETIME","values":[{"value":"2024-12-04T15:45:12.000"}]}}},{"displayName":"end_time","keyword":"end_time","dataType":"DATETIME","defaultSelection":{"values":{"dataType":"DATETIME","values":[{"value":"now-1m/m"}]}}}]},{"name":"773aca07","displayName":"select_time_agg","query":"SELECT explode(array('YEAR', 'QUARTER', 'MONTH', 'WEEK', 'DAY', 'HOUR')) AS time_agg_toggle"},{"name":"706e050f","displayName":"select_dynamic_group_key_toggle","query":"SELECT explode(array('User', 'Warehouse Id', 'Warehouse Name', 'Object Id', 'Source Type', 'Workspace Id')) AS group_key\n"},{"name":"9dda0ef1","displayName":"select_top_n_dim","query":"SELECT explode(array('Executed By', 'Source Type', 'Object Id', 'Statement Id')) AS object_top_n_toggle"}],"pages":[{"name":"3972306b","displayName":"Query Cost Overview","layout":[{"widget":{"name":"1274573c","queries":[{"name":"parameter_dashboards/01efe31383761e08922514c212352d5f/datasets/01efe313837718f795a9ec18ab63ad3c_time_range","query":{"datasetName":"3e6fd95c","parameters":[{"name":"time_range","keyword":"time_range"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-date-range-picker","encodings":{"fields":[{"parameterName":"time_range","queryName":"parameter_dashboards/01efe31383761e08922514c212352d5f/datasets/01efe313837718f795a9ec18ab63ad3c_time_range"}]},"frame":{"showTitle":true,"title":"Time Range"}}},"position":{"x":0,"y":6,"width":2,"height":2}},{"widget":{"name":"029aeeb6","queries":[{"name":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef015641455b4942decd4151ed3_workspace_id","query":{"datasetName":"b6c55fed","fields":[{"name":"workspace_id","expression":"`workspace_id`"},{"name":"workspace_id_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_workspace_id","query":{"datasetName":"3e6fd95c","parameters":[{"name":"workspace_id","keyword":"workspace_id"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"parameterName":"workspace_id","queryName":"parameter_dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_workspace_id"},{"fieldName":"workspace_id","displayName":"workspace_id","queryName":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef015641455b4942decd4151ed3_workspace_id"}]},"frame":{"showTitle":true,"title":"Workspace Id"}}},"position":{"x":2,"y":6,"width":1,"height":2}},{"widget":{"name":"8ad3de2b","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"sum(query_attributed_dollars_with_discount)","expression":"SUM(`query_attributed_dollars_with_discount`)"},{"name":"sum(query_attributed_dbus_estimation)","expression":"SUM(`query_attributed_dbus_estimation`)"},{"name":"countdistinct(statement_id)","expression":"COUNT(DISTINCT `statement_id`)"},{"name":"executed_by","expression":"`executed_by`"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"bar","encodings":{"x":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative","reverse":false},"format":{"type":"number-currency","currencyCode":"USD","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage ($)"},"y":{"fieldName":"executed_by","scale":{"type":"categorical","sort":{"by":"x-reversed"}},"axis":{"title":"User"},"displayName":"Group Key"},"color":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative","colorRamp":{"mode":"scheme","scheme":"greenblue"}},"legend":{"hide":true},"displayName":"Attributed Usage ($)"},"label":{"show":true},"extra":[{"fieldName":"sum(query_attributed_dbus_estimation)","format":{"type":"number-plain","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage (DBUs)"},{"fieldName":"countdistinct(statement_id)","displayName":"Query Count"}]},"frame":{"showTitle":true,"title":"Cost By User"},"mark":{"colors":["#00A972","#FFAB00","#00A972","#FF3621","#8BCAE7","#AB4057","#99DDB4","#FCA4A1","#919191","#BF7080"]}}},"position":{"x":0,"y":13,"width":2,"height":8}},{"widget":{"name":"b034a298","queries":[{"name":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_executed_by","query":{"datasetName":"3e6fd95c","fields":[{"name":"executed_by","expression":"`executed_by`"},{"name":"executed_by_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"executed_by","displayName":"executed_by","queryName":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_executed_by"}]},"frame":{"showTitle":true,"title":"User","showDescription":true,"description":"User or service principal running the statement"}}},"position":{"x":0,"y":8,"width":2,"height":2}},{"widget":{"name":"09a2a1f3","queries":[{"name":"dashboards/01efdcd2775e1c1a8a1866858634977b/datasets/01efdcd2775e1ed4903a87d29a6a6697_query_source_type","query":{"datasetName":"3e6fd95c","fields":[{"name":"query_source_type","expression":"`query_source_type`"},{"name":"query_source_type_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"query_source_type","displayName":"query_source_type","queryName":"dashboards/01efdcd2775e1c1a8a1866858634977b/datasets/01efdcd2775e1ed4903a87d29a6a6697_query_source_type"}]},"frame":{"showTitle":true,"title":"Query Source Type","showDescription":true,"description":"Type of Object (i.e dashboard, SQL Query, JOB, notebook)"}}},"position":{"x":2,"y":8,"width":1,"height":2}},{"widget":{"name":"f80f81da","queries":[{"name":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_query_source_id","query":{"datasetName":"3e6fd95c","fields":[{"name":"query_source_id","expression":"`query_source_id`"},{"name":"query_source_id_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"query_source_id","displayName":"query_source_id","queryName":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_query_source_id"}]},"frame":{"showTitle":true,"title":"Query Source Id","showDescription":true,"description":"Id of object such as a dashboard, SQL query, job, etc."}}},"position":{"x":3,"y":8,"width":2,"height":2}},{"widget":{"name":"8925bd62","textbox_spec":"## Charts\n----"},"position":{"x":0,"y":10,"width":6,"height":1}},{"widget":{"name":"af6d1285","textbox_spec":"## Statement Level Detail\n----"},"position":{"x":0,"y":29,"width":6,"height":1}},{"widget":{"name":"f1e3bb79","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"statement_id","expression":"`statement_id`"},{"name":"statement_text","expression":"`statement_text`"},{"name":"allocated_dollars_usage_bar_html","expression":"`allocated_dollars_usage_bar_html`"},{"name":"executed_by","expression":"`executed_by`"},{"name":"warehouse_name","expression":"`warehouse_name`"},{"name":"duration_seconds","expression":"`duration_seconds`"},{"name":"query_work_duration_seconds","expression":"`query_work_duration_seconds`"},{"name":"start_time","expression":"`start_time`"},{"name":"end_time","expression":"`end_time`"},{"name":"query_work_start_time","expression":"`query_work_start_time`"},{"name":"query_work_end_time","expression":"`query_work_end_time`"},{"name":"query_source_type","expression":"`query_source_type`"},{"name":"query_source_id","expression":"`query_source_id`"},{"name":"client_application","expression":"`client_application`"},{"name":"workspace_id","expression":"`workspace_id`"},{"name":"query_attributed_dollars_with_discount","expression":"`query_attributed_dollars_with_discount`"},{"name":"query_attributed_dbus_estimation","expression":"`query_attributed_dbus_estimation`"},{"name":"query_attributed_dollars_estimation","expression":"`query_attributed_dollars_estimation`"},{"name":"statement_hour_bucket_costs","expression":"`statement_hour_bucket_costs`"},{"name":"query_profile_url","expression":"`query_profile_url`"},{"name":"url_helper","expression":"`url_helper`"}],"disaggregated":true}}],"spec":{"version":1,"widgetType":"table","encodings":{"columns":[{"fieldName":"statement_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ query_profile_url }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"link","visible":true,"order":0,"title":"Statement Id (link to query profile)","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":"#077A9D"},"rules":[]},"displayName":"statement_id"},{"fieldName":"statement_text","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":1,"title":"Query Text","allowSearch":false,"alignContent":"left","allowHTML":true,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"defaultColumnWidth":300,"description":"Raw text of the statement query that was executed","displayName":"statement_text"},{"fieldName":"allocated_dollars_usage_bar_html","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":2,"title":"Attributed Usage ($)","allowSearch":false,"alignContent":"left","allowHTML":true,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"defaultColumnWidth":200,"description":"Allocated dollars for attributed query (this is an estimate based on query work)","displayName":"allocated_dollars_usage_bar_html"},{"fieldName":"executed_by","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":4,"title":"Executed by","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"displayName":"executed_by"},{"fieldName":"warehouse_name","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":6,"title":"Warehouse","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Current name of the warehouse it was run on (warehouse ids are permanent but names are not)","displayName":"warehouse_name"},{"fieldName":"duration_seconds","numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"float","displayAs":"number","visible":true,"order":7,"title":"Query Duration (s)","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Runtime of the query in seconds","cellFormat":{"default":{"foregroundColor":"#077A9D"},"rules":[]},"displayName":"duration_seconds"},{"fieldName":"query_work_duration_seconds","numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"float","displayAs":"number","visible":true,"order":8,"title":"Work Duration (s)","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Amount of seconds query spent doing work (execution + result fetch)","displayName":"query_work_duration_seconds"},{"fieldName":"start_time","dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"datetime","displayAs":"datetime","visible":true,"order":10,"title":"Start Time","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"displayName":"start_time"},{"fieldName":"end_time","dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"datetime","displayAs":"datetime","visible":true,"order":11,"title":"End Time","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"displayName":"end_time"},{"fieldName":"query_work_start_time","dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"datetime","displayAs":"datetime","visible":true,"order":12,"title":"Work Start Time","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Start time query began doing work (executing) - can be greater than start_time if it waits in the queue","displayName":"query_work_start_time"},{"fieldName":"query_work_end_time","dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"datetime","displayAs":"datetime","visible":true,"order":13,"title":"Work End Time","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Time when query finishes work. This can be greater than end_time because it includes time spent returning results. ","displayName":"query_work_end_time"},{"fieldName":"query_source_type","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":14,"title":"Query Source Type","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Databricks internal asset source type (i.e. dashboard, notebook, job, etc.)","displayName":"query_source_type"},{"fieldName":"query_source_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ url_helper }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"link","visible":true,"order":15,"title":"Query Source Id","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Id of the asset type (i.e. if source type = 'JOB' then this will be the job id that ran the query)","displayName":"query_source_id"},{"fieldName":"client_application","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":16,"title":"Client App","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"External registered client name (like DBSQL Dashboards, Power BI, Fivetran, etc.)","displayName":"client_application"},{"fieldName":"workspace_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":17,"title":"Workspace Id","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"displayName":"workspace_id"},{"fieldName":"query_attributed_dollars_with_discount","numberFormat":"$ 0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"float","displayAs":"number","visible":true,"order":18,"title":"Attributed Usage ($) - Discount","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Estimated query attributed costs with discount param included","cellFormat":{"default":{"foregroundColor":"#00A972"},"rules":[]},"displayName":"query_attributed_dollars_with_discount"},{"fieldName":"query_attributed_dbus_estimation","numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"float","displayAs":"number","visible":true,"order":19,"title":"Attributed Usage (DBUs)","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Estimated query attributed dbu usage","cellFormat":{"default":{"foregroundColor":"#077A9D"},"rules":[]},"displayName":"query_attributed_dbus_estimation"},{"fieldName":"query_attributed_dollars_estimation","numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"float","displayAs":"number","visible":true,"order":20,"title":"Attributed Usage ($) - List","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Estimated query attributed cost at list rate","displayName":"query_attributed_dollars_estimation"},{"fieldName":"statement_hour_bucket_costs","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"complex","displayAs":"json","visible":true,"order":31,"title":"Query Cost Hourly Breakdown","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"If queries span multiple hours, the costs are allocated on an hourly basis, so a total query costs can span multiple hours. This shows what % of the cost is allocated to which hour for that warehouse","displayName":"statement_hour_bucket_costs"}]},"invisibleColumns":[{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"allocated_dbus_usage_bar_html","type":"string","displayAs":"string","order":3,"title":"Allocated DBUs","allowSearch":false,"alignContent":"left","allowHTML":true,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"defaultColumnWidth":200},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"warehouse_id","type":"string","displayAs":"string","order":5,"title":"Warehouse Id","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"query_work_task_time_seconds","type":"float","displayAs":"number","order":9,"title":"Query Task Time (s)","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"The total executor task time used by the query","cellFormat":{"default":{"foregroundColor":"#077A9D"},"rules":[]}},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"url_helper","type":"string","displayAs":"string","order":21,"title":"url_helper","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"query_profile_url","type":"string","displayAs":"string","order":22,"title":"query_profile_url","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"most_recent_billing_hour","type":"datetime","displayAs":"datetime","order":23,"title":"most_recent_billing_hour","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"billing_record_check","type":"string","displayAs":"string","order":24,"title":"billing_record_check","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"fully_loaded_max_usage","type":"float","displayAs":"number","order":25,"title":"fully_loaded_max_usage","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"fully_loaded_min_usage","type":"float","displayAs":"number","order":26,"title":"fully_loaded_min_usage","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"fully_loaded_max_usage_dbus","type":"float","displayAs":"number","order":27,"title":"fully_loaded_max_usage_dbus","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"fully_loaded_min_usage_dbus","type":"float","displayAs":"number","order":28,"title":"fully_loaded_min_usage_dbus","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"group_key","type":"string","displayAs":"string","order":29,"title":"group_key","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"time_agg_key","type":"string","displayAs":"datetime","order":30,"title":"time_agg_key","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"dateTimeFormat":"YYYY-MM-DD HH:mm:ss.SSS","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"query_start_hour","type":"datetime","displayAs":"datetime","order":32,"title":"query_start_hour","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_warehouse_deleted","type":"string","displayAs":"string","order":33,"title":"is_warehouse_deleted","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"numberFormat":"0","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"cost_rank","type":"integer","displayAs":"number","order":34,"title":"cost_rank","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false}],"allowHTMLByDefault":false,"itemsPerPage":25,"paginationSize":"default","condensed":true,"withRowNumber":true,"frame":{"showTitle":true,"title":"Query Statement Detail"}}},"position":{"x":0,"y":30,"width":6,"height":16}},{"widget":{"name":"3fd47cc4","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"countdistinct(statement_id)","expression":"COUNT(DISTINCT `statement_id`)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"countdistinct(statement_id)","format":{"type":"number-plain","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Count of Unique statement_id"}},"frame":{"showTitle":true,"title":"Query Statement Count"}}},"position":{"x":0,"y":11,"width":2,"height":2}},{"widget":{"name":"37fa2ea4","queries":[{"name":"parameter_dashboards/01efde5dd4c51fc89e1caf2a86c344d7/datasets/01efde5dd4c615cd98f5bc2e8fab18b5_top_n","query":{"datasetName":"3e6fd95c","parameters":[{"name":"top_n","keyword":"top_n"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-single-select","encodings":{"fields":[{"parameterName":"top_n","queryName":"parameter_dashboards/01efde5dd4c51fc89e1caf2a86c344d7/datasets/01efde5dd4c615cd98f5bc2e8fab18b5_top_n"}]},"selection":{"defaultSelection":{"values":{"dataType":"STRING","values":[{"value":"all"}]}}},"frame":{"showTitle":true,"title":"Top N Number","showDescription":true,"description":"Optional filter ('all' or #)"}}},"position":{"x":5,"y":6,"width":1,"height":2}},{"widget":{"name":"5b94dd8d","queries":[{"name":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef015641455b4942decd4151ed3_warehouse_name","query":{"datasetName":"b6c55fed","fields":[{"name":"warehouse_name","expression":"`warehouse_name`"},{"name":"warehouse_name_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_warehouse_name","query":{"datasetName":"3e6fd95c","parameters":[{"name":"warehouse_name","keyword":"warehouse_name"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"warehouse_name","displayName":"warehouse_name","queryName":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef015641455b4942decd4151ed3_warehouse_name"},{"parameterName":"warehouse_name","queryName":"parameter_dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_warehouse_name"}]},"frame":{"showTitle":true,"title":"Warehouse Name"}}},"position":{"x":3,"y":6,"width":1,"height":2}},{"widget":{"name":"e6de4fe7","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"sum(query_attributed_dollars_with_discount)","expression":"SUM(`query_attributed_dollars_with_discount`)"},{"name":"countdistinct(statement_id)","expression":"COUNT(DISTINCT `statement_id`)"},{"name":"sum(query_attributed_dbus_estimation)","expression":"SUM(`query_attributed_dbus_estimation`)"},{"name":"query_source_type","expression":"`query_source_type`"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"bar","encodings":{"x":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative","reverse":false},"format":{"type":"number-currency","currencyCode":"USD","abbreviation":"compact","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage ($)"},"y":{"fieldName":"query_source_type","scale":{"type":"categorical","sort":{"by":"x-reversed"}},"displayName":"Source Type"},"color":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative","colorRamp":{"mode":"scheme","scheme":"greenblue"}},"legend":{"hide":true},"displayName":"Attributed Usage ($)"},"label":{"show":true},"extra":[{"fieldName":"countdistinct(statement_id)","displayName":"Query Count"},{"fieldName":"sum(query_attributed_dbus_estimation)","format":{"type":"number-plain","abbreviation":"compact","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage (DBUs)"}]},"frame":{"showTitle":true,"title":"Cost By Source Type"},"mark":{"colors":["#00A972","#FFAB00","#00A972","#FF3621","#8BCAE7","#AB4057","#99DDB4","#FCA4A1","#919191","#BF7080"]}}},"position":{"x":2,"y":13,"width":2,"height":8}},{"widget":{"name":"e43bcbfd","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"sum(query_attributed_dollars_with_discount)","expression":"SUM(`query_attributed_dollars_with_discount`)"},{"name":"sum(query_attributed_dbus_estimation)","expression":"SUM(`query_attributed_dbus_estimation`)"},{"name":"count(statement_id)","expression":"COUNT(`statement_id`)"},{"name":"query_source_id","expression":"`query_source_id`"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"bar","encodings":{"x":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative","reverse":false},"format":{"type":"number-currency","currencyCode":"USD","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage ($)"},"y":{"fieldName":"query_source_id","scale":{"type":"categorical","sort":{"by":"x-reversed"}},"axis":{"title":"Object Id"},"displayName":"Source Object Id"},"color":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative","colorRamp":{"mode":"scheme","scheme":"greenblue"}},"legend":{"hide":true},"displayName":"Source Object Id"},"label":{"show":true},"extra":[{"fieldName":"sum(query_attributed_dbus_estimation)","format":{"type":"number-plain","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage (DBUs)"},{"fieldName":"count(statement_id)","displayName":"Query Count"}]},"frame":{"showTitle":true,"title":"Cost By Source Object Id"},"mark":{"colors":["#00A972","#FFAB00","#00A972","#FF3621","#8BCAE7","#AB4057","#99DDB4","#FCA4A1","#919191","#BF7080"]}}},"position":{"x":4,"y":13,"width":2,"height":8}},{"widget":{"name":"03009168","queries":[{"name":"dashboards/01efdcd2775e1c1a8a1866858634977b/datasets/01efdcd2775e1f47ba886d022f892e0b_object_top_n_toggle","query":{"datasetName":"9dda0ef1","fields":[{"name":"object_top_n_toggle","expression":"`object_top_n_toggle`"},{"name":"object_top_n_toggle_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01efdcd2775e1c1a8a1866858634977b/datasets/01efdcd2775e1ed4903a87d29a6a6697_top_n_dimension","query":{"datasetName":"3e6fd95c","parameters":[{"name":"top_n_dimension","keyword":"top_n_dimension"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-single-select","encodings":{"fields":[{"parameterName":"top_n_dimension","queryName":"parameter_dashboards/01efdcd2775e1c1a8a1866858634977b/datasets/01efdcd2775e1ed4903a87d29a6a6697_top_n_dimension"},{"fieldName":"object_top_n_toggle","displayName":"object_top_n_toggle","queryName":"dashboards/01efdcd2775e1c1a8a1866858634977b/datasets/01efdcd2775e1f47ba886d022f892e0b_object_top_n_toggle"}]},"frame":{"showTitle":true,"title":"Top N Dimension","showDescription":true,"description":"i.e. (top 10 users, queries, objects)"}}},"position":{"x":4,"y":6,"width":1,"height":2}},{"widget":{"name":"8d88ad2d","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"countdistinct(executed_by)","expression":"COUNT(DISTINCT `executed_by`)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"countdistinct(executed_by)","format":{"type":"number-plain","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Count of Unique executed_by"}},"frame":{"showTitle":true,"title":"User Count\n"}}},"position":{"x":2,"y":11,"width":2,"height":2}},{"widget":{"name":"f11a0fd2","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"countdistinct(query_source_id)","expression":"COUNT(DISTINCT `query_source_id`)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"countdistinct(query_source_id)","format":{"type":"number-plain","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Count of Unique query_source_id"}},"frame":{"showTitle":true,"title":"Object Id Count"}}},"position":{"x":4,"y":11,"width":2,"height":2}},{"widget":{"name":"b62fe468","queries":[{"name":"main_query","query":{"datasetName":"3e6fd95c","fields":[{"name":"sum(query_attributed_dbus_estimation)","expression":"SUM(`query_attributed_dbus_estimation`)"},{"name":"count(statement_id)","expression":"COUNT(`statement_id`)"},{"name":"time_agg_key","expression":"`time_agg_key`"},{"name":"sum(query_attributed_dollars_with_discount)","expression":"SUM(`query_attributed_dollars_with_discount`)"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"bar","encodings":{"x":{"fieldName":"time_agg_key","scale":{"type":"categorical"},"displayName":"Attributed Usage ($)"},"y":{"fieldName":"sum(query_attributed_dollars_with_discount)","scale":{"type":"quantitative"},"format":{"type":"number-currency","currencyCode":"USD","abbreviation":"none","decimalPlaces":{"type":"max","places":0}},"displayName":"Attributed Usage ($)"},"label":{"show":true},"extra":[{"fieldName":"sum(query_attributed_dbus_estimation)","format":{"type":"number-plain","abbreviation":"none","decimalPlaces":{"type":"max","places":2}},"displayName":"Attributed Usage (DBUs)"},{"fieldName":"count(statement_id)","displayName":"Query Count"}]},"frame":{"showTitle":true,"title":"Attributed Usage Cost Over Time"},"mark":{"colors":["#077A9D","#FFAB00","#00A972","#FF3621","#8BCAE7","#AB4057","#99DDB4","#FCA4A1","#919191","#BF7080"]}}},"position":{"x":0,"y":23,"width":6,"height":6}},{"widget":{"name":"e88b2e4a","queries":[{"name":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564146dbc0703226f411071_time_agg_toggle","query":{"datasetName":"773aca07","fields":[{"name":"time_agg_toggle","expression":"`time_agg_toggle`"},{"name":"time_agg_toggle_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_date_agg_level","query":{"datasetName":"3e6fd95c","parameters":[{"name":"date_agg_level","keyword":"date_agg_level"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-single-select","encodings":{"fields":[{"parameterName":"date_agg_level","queryName":"parameter_dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564141b910a89950bda083e_date_agg_level"},{"fieldName":"time_agg_toggle","displayName":"time_agg_toggle","queryName":"dashboards/01efcef015641095b3b32a6af3499355/datasets/01efcef01564146dbc0703226f411071_time_agg_toggle"}]},"frame":{"showTitle":true,"title":"Time Series Unit"}}},"position":{"x":3,"y":21,"width":3,"height":2}},{"widget":{"name":"31832403","textbox_spec":"##### Time series of Attributed Usage of filtered data. Use the dropdown on the right to change time series unit. \n(Time series unit selection will only affect this chart)"},"position":{"x":0,"y":21,"width":3,"height":2}},{"widget":{"name":"8556eee0","textbox_spec":"###### Dashboard v1 2025.01.31\nReachout to jooho.yeo@databricks.com for any questions"},"position":{"x":0,"y":46,"width":2,"height":1}},{"widget":{"name":"7d70446e","textbox_spec":"# DBSQL Cost Dashboard\n-----\n\n### Sections\n- **Inputs** - (Mandatory) Choose Start Time and End Time. (Optional) - Can select specific workspaces, warehouses, users, query source types, or object ids (supported for DBX objects). \n 1. If you want to limit the results of the dashboard to top 10 users, you can specify using the \"Top N Dimension\" and \"Top N Number\" filters.\n 2. Top level counts are shown for reference as you apply different filters. \n- **Charts** - Attributed costs by 1) user 2) source type 3) object ids. If the chart is crowded, click and zoom into the chart, or use the \"Top N\" filters. Click on a bar to cross-filter across the dashboard (to select multiple filters or options, you will need to back to the inputs at the top) 4) is a time series of attributed usage ($) for the filtered down dataset. Time unit is configurable (daily, weekly, etc). \n 1. Charts can also be downloaded into a CSV file by clicking on the option on the top right corner).\n- **Statement Level Detail** - Attributed usage ($) at the individual SQL run level. \n 1. You can click on the statement id or query source id (\"object id\") links to manage \n-----"},"position":{"x":0,"y":0,"width":6,"height":5}},{"widget":{"name":"8ab66f09","textbox_spec":"## Inputs\n----"},"position":{"x":0,"y":5,"width":6,"height":1}},{"widget":{"name":"867434c1","queries":[{"name":"parameter_dashboards/01efde5dd4c51fc89e1caf2a86c344d7/datasets/01efde5dd4c615cd98f5bc2e8fab18b5_dbsql_discount","query":{"datasetName":"3e6fd95c","parameters":[{"name":"dbsql_discount","keyword":"dbsql_discount"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-single-select","encodings":{"fields":[{"parameterName":"dbsql_discount","queryName":"parameter_dashboards/01efde5dd4c51fc89e1caf2a86c344d7/datasets/01efde5dd4c615cd98f5bc2e8fab18b5_dbsql_discount"}]},"frame":{"showTitle":true,"title":"DBSQL Discount (%)","showDescription":true,"description":"(i.e. 0.1 == 10% discount)"}}},"position":{"x":5,"y":8,"width":1,"height":2}}]}]} \ No newline at end of file diff --git a/dbsql/cost_per_query/PrPr/DBSQL Cost Per Query MV (PrPr).sql b/dbsql/cost_per_query/PrPr/DBSQL Cost Per Query MV (PrPr).sql deleted file mode 100644 index 45363f23..00000000 --- a/dbsql/cost_per_query/PrPr/DBSQL Cost Per Query MV (PrPr).sql +++ /dev/null @@ -1,472 +0,0 @@ -CREATE OR REPLACE MATERIALIZED VIEW main.default.dbsql_cost_per_query -(statement_id string, -query_source_id string, -query_source_type string, -client_application string, -executed_by string, -warehouse_id string, -statement_text string, -workspace_id string, -statement_hour_bucket_costs array>, -start_time timestamp, -end_time timestamp, -query_work_start_time timestamp, -query_work_end_time timestamp, -duration_seconds double, -query_work_duration_seconds double, -query_work_task_time_seconds double, -query_attributed_dollars_estimation double, -query_attributed_dbus_estimation double, -url_helper string, -query_profile_url string, -most_recent_billing_hour timestamp, -billing_record_check string, -query_start_hour timestamp -) -SCHEDULE EVERY 1 HOUR -PARTITIONED BY (query_start_hour, workspace_id) -TBLPROPERTIES ('pipelines.autoOptimize.zOrderCols' = 'warehouse_id') -AS -( -WITH --- Must make sure the time window the MV is built on has enough data from ALL 3 tables to generate accurate results (both starts and end time ranges) -table_boundaries AS ( -SELECT -(SELECT MAX(event_time) FROM system.compute.warehouse_events) AS max_events_ts, -(SELECT MAX(end_time) FROM system.query.history) AS max_query_end_ts, -(SELECT MAX(usage_end_time) FROM system.billing.usage) AS max_billing_ts, -(SELECT MIN(event_time) FROM system.compute.warehouse_events) AS min_event_ts, -(SELECT MIN(start_time) FROM system.query.history) AS min_query_start_ts, -(SELECT MIN(usage_end_time) FROM system.billing.usage) AS min_billing_ts, -date_trunc('HOUR', LEAST(max_events_ts, max_query_end_ts, max_billing_ts)) AS selected_end_time, -(date_trunc('HOUR', GREATEST(min_event_ts, min_query_start_ts, min_billing_ts)) + INTERVAL 1 HOUR)::timestamp AS selected_start_time -), - -----===== Warehouse Level Calculations =====----- -cpq_warehouse_usage AS ( - SELECT - usage_metadata.warehouse_id AS warehouse_id, - * - FROM - system.billing.usage AS u - WHERE - usage_metadata.warehouse_id IS NOT NULL - AND usage_start_time >= (SELECT MIN(selected_start_time) FROM table_boundaries) - AND usage_end_time <= (SELECT MAX(selected_end_time) FROM table_boundaries) -), - -prices AS ( - select coalesce(price_end_time, date_add(current_date, 1)) as coalesced_price_end_time, * - from system.billing.list_prices - where currency_code = 'USD' -), - -filtered_warehouse_usage AS ( - -- Warehouse usage is aggregated hourly, that will be the base assumption and grain of allocation moving forward. - -- Assume no duplicate records - SELECT - u.warehouse_id warehouse_id, - date_trunc('HOUR',u.usage_start_time) AS usage_start_hour, - date_trunc('HOUR',u.usage_end_time) AS usage_end_hour, - u.usage_quantity AS dbus, - ( - CAST(p.pricing.effective_list.default AS FLOAT) * dbus - ) AS usage_dollars - FROM - cpq_warehouse_usage AS u - left join prices as p - on u.sku_name=p.sku_name - and u.usage_unit=p.usage_unit - and (u.usage_end_time between p.price_start_time and p.coalesced_price_end_time) -), - -table_bound_expld AS -( -select timestampadd(hour, h, selected_start_time) as selected_hours - from table_boundaries - join lateral explode(sequence(0, timestampdiff(hour, selected_start_time, selected_end_time), 1)) as t (h) -), - -----===== Query Level Calculations =====----- -cpq_warehouse_query_history AS ( - SELECT - account_id, - workspace_id, - statement_id, - executed_by, - statement_text, - compute.warehouse_id AS warehouse_id, - execution_status, - COALESCE(client_application, 'Unknown') AS client_application, - (COALESCE(CAST(total_task_duration_ms AS FLOAT) / 1000, 0) + - COALESCE(CAST(result_fetch_duration_ms AS FLOAT) / 1000, 0) + - COALESCE(CAST(compilation_duration_ms AS FLOAT) / 1000, 0) - ) AS query_work_task_time, - start_time, - end_time, - timestampadd(MILLISECOND , coalesce(waiting_at_capacity_duration_ms, 0) + coalesce(waiting_for_compute_duration_ms, 0) + coalesce(compilation_duration_ms, 0), start_time) AS query_work_start_time, - timestampadd(MILLISECOND, coalesce(result_fetch_duration_ms, 0), end_time) AS query_work_end_time, - -- NEW - Query source - CASE - WHEN query_source.job_info.job_id IS NOT NULL THEN 'JOB' - WHEN query_source.legacy_dashboard_id IS NOT NULL THEN 'LEGACY DASHBOARD' - WHEN query_source.dashboard_id IS NOT NULL THEN 'AI/BI DASHBOARD' - WHEN query_source.alert_id IS NOT NULL THEN 'ALERT' - WHEN query_source.notebook_id IS NOT NULL THEN 'NOTEBOOK' - WHEN query_source.sql_query_id IS NOT NULL THEN 'SQL QUERY' - WHEN query_source.genie_space_id IS NOT NULL THEN 'GENIE SPACE' - WHEN client_application IS NOT NULL THEN client_application - ELSE 'UNKNOWN' - END AS query_source_type, - COALESCE( - query_source.job_info.job_id, - query_source.legacy_dashboard_id, - query_source.dashboard_id, - query_source.alert_id, - query_source.notebook_id, - query_source.sql_query_id, - query_source.genie_space_id, - 'UNKNOWN' - ) AS query_source_id - FROM - system.query.history AS h - WHERE - statement_type IS NOT NULL - -- If query touches the boundaries at all, we will divy it up - AND start_time < (SELECT selected_end_time FROM table_boundaries) - AND end_time > (SELECT selected_start_time FROM table_boundaries) - AND total_task_duration_ms > 0 --exclude metadata operations - and compute.warehouse_id is not null -- = 'd13162f928a069c7' -) - , cte_warehouse as -( - select warehouse_id, min(query_work_start_time) as min_start_time - from cpq_warehouse_query_history -group by warehouse_id -) -, ---- Warehouse + Query Level level allocation -window_events AS ( - SELECT - warehouse_id, - event_type, - event_time, - cluster_count AS cluster_count, - CASE - WHEN cluster_count = 0 THEN 'OFF' - WHEN cluster_count > 0 THEN 'ON' - END AS warehouse_state - FROM system.compute.warehouse_events AS we - -- Only get window events for when we have query history, otherwise, not usable - WHERE warehouse_id in (SELECT warehouse_id FROM cte_warehouse) - AND event_time >= (SELECT timestampadd(day, -1, selected_start_time) FROM table_boundaries) - AND event_time <= (SELECT selected_end_time FROM table_boundaries) -) - , cte_agg_events_prep as -( -select warehouse_id - , warehouse_state - , event_time - , row_number() over W1 - - row_number() over W2 as grp - from window_events -window W1 as (partition by warehouse_id order by event_time asc) - , W2 as (partition by warehouse_id, warehouse_state order by event_time asc) -) - , cte_agg_events as -( - select warehouse_id - , warehouse_state as window_state - , min(event_time) as event_window_start - , lead(min(event_time), 1, selected_end_time) over W as event_window_end - from cte_agg_events_prep - join table_boundaries -group by warehouse_id - , warehouse_state - , grp - , selected_end_time - window W as (partition by warehouse_id order by min(event_time) asc) -) - , cte_all_events as -( -select warehouse_id - , window_state - , date_trunc('second', event_window_start) as event_window_start - , date_trunc('second', event_window_end ) as event_window_end - from cte_agg_events - where date_trunc('second', event_window_start) < date_trunc('second', event_window_end) - --and date_trunc('second', event_window_start) >= timestamp '2024-11-14 09:00:00' -) - , cte_queries_event_cnt as -( - select warehouse_id - , case num - when 1 - then date_trunc('second', query_work_start_time) - else timestampadd(second, case when date_trunc('second', query_work_start_time) = date_trunc('second', query_work_end_time) then 1 else 0 end, date_trunc('second', query_work_end_time)) - end as query_event_time - , sum(num) as num_queries - from cpq_warehouse_query_history - join lateral explode(array(1, -1)) as t (num) -group by 1, 2 -) - , cte_raw_history as -( -select warehouse_id - , query_event_time as query_start - , lead(query_event_time, 1, selected_end_time) over W as query_end - , sum(num_queries) over W as queries_active - from cte_queries_event_cnt - join table_boundaries -window W as (partition by warehouse_id order by query_event_time asc) -) - , cte_raw_history_byday as -( - select /*+ repartition(64, warehouse_id, query_start_dt) */ - warehouse_id - , case num - when 0 - then query_start - else timestampadd(day, num, query_start::date) - end::date as query_start_dt - , case num - when 0 - then query_start - else timestampadd(day, num, query_start::date) - end as query_start - , case num - when timestampdiff(day, query_start::date, query_end::date) - then query_end - else timestampadd(day, num + 1, query_start::date) - end as query_end - , queries_active - from cte_raw_history - join lateral explode(sequence(0, timestampdiff(day, query_start::date, query_end::date), 1)) as t (num) -) - , cte_all_time_union as -( -select warehouse_id - , case num when 1 then event_window_start else event_window_end end ts_start - from cte_all_events - join lateral explode(array(1, -1)) as t (num) - union -select warehouse_id - , case num when 1 then query_start else query_end end - from cte_raw_history_byday - join lateral explode(array(1, -1)) as t (num) - union -select warehouse_id, selected_hours - from cte_warehouse - join table_bound_expld on true --- where selected_hours >= timestampadd(day, -1, min_start_time) -) - , cte_periods as -( -select /*+ repartition(64, warehouse_id, dt_start) */ - warehouse_id - , ts_start::date as dt_start - , ts_start - , lead(ts_start, 1, selected_end_time) over W as ts_end - from cte_all_time_union - join table_boundaries -window W as (partition by warehouse_id order by ts_start asc) -) - , cte_merge_periods as -( - select /*+ broadcast(r) */ - p.warehouse_id - , date_trunc('hour', p.ts_start) as ts_hour - , sum(timestampdiff(second, p.ts_start, p.ts_end)) as duration - , case - when e.window_state = 'OFF' - or e.window_state is null - then 'OFF' - when r.queries_active > 0 - then 'UTILIZED' - else 'ON_IDLE' - end as utilization_flag - from cte_periods as p - left join cte_all_events as e on e.warehouse_id = p.warehouse_id - and e.event_window_start < p.ts_end - and e.event_window_end > p.ts_start - left join cte_raw_history_byday as r on r.warehouse_id = p.warehouse_id - and r.query_start_dt = p.dt_start - and r.query_start < p.ts_end - and r.query_end > p.ts_start - and r.queries_active > 0 - and e.window_state <> 'OFF' - where p.ts_start < p.ts_end - group by all -), - -utilization_by_warehouse AS ( - select warehouse_id - , ts_hour as warehouse_hour - , coalesce(sum(duration) filter(where utilization_flag = 'UTILIZED'), 0) as utilized_seconds - , coalesce(sum(duration) filter(where utilization_flag = 'ON_IDLE' ), 0) as idle_seconds - , coalesce(sum(duration) filter(where utilization_flag = 'OFF' ), 0) as off_seconds - , coalesce(sum(duration), 0) as total_seconds - , try_divide(utilized_seconds, utilized_seconds + idle_seconds)::decimal(3,2) as utilization_proportion - from cte_merge_periods -group by warehouse_id - , ts_hour -), - -cleaned_warehouse_info AS ( - SELECT - wu.warehouse_id, - wu.usage_start_hour AS hour_bucket, - wu.dbus, - wu.usage_dollars, - ut.utilized_seconds, - ut.idle_seconds, - ut.total_seconds, - ut.utilization_proportion - FROM filtered_warehouse_usage wu - LEFT JOIN utilization_by_warehouse AS ut ON wu.warehouse_id = ut.warehouse_id -- Join on calculation grain - warehouse/hour - AND wu.usage_start_hour = ut.warehouse_hour -), - -hour_intervals AS ( - -- Generate valid hourly buckets for each query - SELECT - statement_id, - warehouse_id, - query_work_start_time, - query_work_end_time, - query_work_task_time, - explode( - sequence( - 0, - floor((UNIX_TIMESTAMP(query_work_end_time) - UNIX_TIMESTAMP(date_trunc('hour', query_work_start_time))) / 3600) - ) - ) AS hours_interval, - timestampadd(hour, hours_interval, date_trunc('hour', query_work_start_time)) AS hour_bucket - FROM - cpq_warehouse_query_history -), - -statement_proportioned_work AS ( - SELECT * , - GREATEST(0, - UNIX_TIMESTAMP(LEAST(query_work_end_time, timestampadd(hour, 1, hour_bucket))) - - UNIX_TIMESTAMP(GREATEST(query_work_start_time, hour_bucket)) - ) AS overlap_duration, - CASE WHEN CAST(query_work_end_time AS DOUBLE) - CAST(query_work_start_time AS DOUBLE) = 0 - THEN 0 - ELSE query_work_task_time * (overlap_duration / (CAST(query_work_end_time AS DOUBLE) - CAST(query_work_start_time AS DOUBLE))) - END AS proportional_query_work - FROM hour_intervals -), - - -attributed_query_work_all AS ( - SELECT - statement_id, - hour_bucket, - warehouse_id, - SUM(proportional_query_work) AS attributed_query_work - FROM - statement_proportioned_work - GROUP BY - statement_id, - warehouse_id, - hour_bucket -), - ---- Cost Attribution -warehouse_time as ( - select - warehouse_id, - hour_bucket, - SUM(attributed_query_work) as total_work_done_on_warehouse - from - attributed_query_work_all - group by - warehouse_id, hour_bucket -), - --- Create statement_id / hour bucket allocated combinations -history AS ( - SELECT - a.*, - b.total_work_done_on_warehouse, - CASE - WHEN attributed_query_work = 0 THEN NULL - ELSE attributed_query_work / total_work_done_on_warehouse - END AS proportion_of_warehouse_time_used_by_query - FROM attributed_query_work_all a - inner join warehouse_time b on a.warehouse_id = b.warehouse_id - AND a.hour_bucket = b.hour_bucket -- Will only run for completed hours from warehouse usage - nice clean boundary -), - -history_with_pricing AS ( - SELECT - h1.*, - wh.dbus AS total_warehouse_period_dbus, - wh.usage_dollars AS total_warehouse_period_dollars, - wh.utilization_proportion AS warehouse_utilization_proportion, - wh.hour_bucket AS warehouse_hour_bucket, - MAX(wh.hour_bucket) OVER() AS warehouse_max_hour_bucket - FROM - history AS h1 - LEFT JOIN cleaned_warehouse_info AS wh ON h1.warehouse_id = wh.warehouse_id AND h1.hour_bucket = wh.hour_bucket -), - --- This is at the statement_id / hour grain (there will be duplicates for each statement for each hour bucket the query spans) - -query_attribution AS ( - SELECT - a.*, - warehouse_max_hour_bucket AS most_recent_billing_hour, - CASE WHEN warehouse_hour_bucket IS NOT NULL THEN 'Has Billing Record' ELSE 'No Billing Record for this hour and warehouse yet available' END AS billing_record_check, - CASE - WHEN total_work_done_on_warehouse = 0 THEN NULL - ELSE attributed_query_work / total_work_done_on_warehouse - END AS query_task_time_proportion, - - (warehouse_utilization_proportion * total_warehouse_period_dollars) * query_task_time_proportion AS query_attributed_dollars_estimation, - (warehouse_utilization_proportion * total_warehouse_period_dbus) * query_task_time_proportion AS query_attributed_dbus_estimation - FROM - history_with_pricing a -) - --- Final Output -select - qq.statement_id, - FIRST(qq.query_source_id) AS query_source_id, - FIRST(qq.query_source_type) AS query_source_type, - FIRST(qq.client_application) AS client_application, - FIRST(qq.executed_by) AS executed_by, - FIRST(qq.warehouse_id) AS warehouse_id, - FIRST(qq.statement_text) AS statement_text, - FIRST(qq.workspace_id) AS workspace_id, - COLLECT_LIST(NAMED_STRUCT('hour_bucket', qa.hour_bucket, 'hour_attributed_cost', query_attributed_dollars_estimation, 'hour_attributed_dbus', query_attributed_dbus_estimation)) AS statement_hour_bucket_costs, - FIRST(qq.start_time) AS start_time, - FIRST(qq.end_time) AS end_time, - FIRST(qq.query_work_start_time) AS query_work_start_time, - FIRST(qq.query_work_end_time) AS query_work_end_time, - COALESCE(timestampdiff(MILLISECOND, FIRST(qq.start_time), FIRST(qq.end_time))/1000, 0) AS duration_seconds, - COALESCE(timestampdiff(MILLISECOND, FIRST(qq.query_work_start_time), FIRST(qq.query_work_end_time))/1000, 0) AS query_work_duration_seconds, - FIRST(query_work_task_time) AS query_work_task_time_seconds, - SUM(query_attributed_dollars_estimation) AS query_attributed_dollars_estimation, - SUM(query_attributed_dbus_estimation) AS query_attributed_dbus_estimation, - FIRST(CASE - WHEN query_source_type = 'JOB' THEN CONCAT('/jobs/', query_source_id) - WHEN query_source_type = 'SQL QUERY' THEN CONCAT('/sql/queries/', query_source_id) - WHEN query_source_type = 'AI/BI DASHBOARD' THEN CONCAT('/sql/dashboardsv3/', query_source_id) - WHEN query_source_type = 'LEGACY DASHBOARD' THEN CONCAT('/sql/dashboards/', query_source_id) - WHEN query_source_type = 'ALERTS' THEN CONCAT('/sql/alerts/', query_source_id) - WHEN query_source_type = 'GENIE SPACE' THEN CONCAT('/genie/rooms/', query_source_id) - WHEN query_source_type = 'NOTEBOOK' THEN CONCAT('/editor/notebooks/', query_source_id) - ELSE '' - END) as url_helper, - FIRST(CONCAT('/sql/history?uiQueryProfileVisible=true&queryId=', qq.statement_id)) AS query_profile_url, - FIRST(most_recent_billing_hour) AS most_recent_billing_hour, - FIRST(billing_record_check) AS billing_record_check, - date_trunc('HOUR', FIRST(qq.start_time)) AS query_start_hour - from query_attribution qa - LEFT JOIN cpq_warehouse_query_history AS qq ON qa.statement_id = qq.statement_id -- creating dups of the objects but just re-aggregating - AND qa.warehouse_id = qq.warehouse_id - GROUP BY qq.statement_id -) \ No newline at end of file diff --git a/dbsql/dbr_migration_dash/Databricks Runtime Deprecation Impact Dashboard.lvdash.json b/dbsql/dbr_migration_dash/Databricks Runtime Deprecation Impact Dashboard.lvdash.json deleted file mode 100644 index 4be8a588..00000000 --- a/dbsql/dbr_migration_dash/Databricks Runtime Deprecation Impact Dashboard.lvdash.json +++ /dev/null @@ -1 +0,0 @@ -{"datasets":[{"name":"3de9e092","displayName":"DBR_Support_Matrix","query":"SELECT \n dbr_version, \n support_until, \n CASE \n WHEN support_until >= CURRENT_DATE THEN TRUE \n ELSE FALSE \n END AS is_supported\nFROM VALUES\n (15.4, DATE('2027-08-19')),\n (14.3, DATE('2027-02-01')),\n (13.3, DATE('2026-08-22')),\n (12.2, DATE('2026-03-01')),\n (11.3, DATE('2025-10-19')),\n (10.4, DATE('2025-03-18')),\n (9.1, DATE('2024-12-19'))\nAS dbr(dbr_version, support_until);"},{"name":"196e0923","displayName":"DBR_Version_Param","query":"SELECT\n DISTINCT regexp_extract(dbr_version, '(?= CURRENT_DATE - INTERVAL 30 DAYS;"},{"name":"f3d492f2","displayName":"Job_DBR_Version_Spend_Annualized","query":"-- Define supported DBRs and their support expiration\nWITH dbr_support_matrix AS (\n SELECT * FROM VALUES\n ('15.4', TRUE, DATE('2027-08-19')),\n ('14.3', TRUE, DATE('2027-02-01')),\n ('13.3', TRUE, DATE('2026-08-22')),\n ('12.2', TRUE, DATE('2026-03-01')),\n ('11.3', TRUE, DATE('2025-10-19')),\n ('10.4', TRUE, DATE('2025-03-18')),\n ('9.1', TRUE, DATE('2024-12-19'))\n AS dbr(dbr_version, is_lts, support_until)\n),\n\n-- Filter usage early\nfiltered_usage AS (\n SELECT\n u.workspace_id,\n u.usage_metadata.cluster_id,\n u.usage_metadata.job_id,\n u.usage_quantity,\n u.sku_name\n FROM\n system.billing.usage u\n WHERE\n u.billing_origin_product = 'JOBS'\n AND u.usage_metadata.node_type != 'SERVERLESS'\n AND u.usage_metadata.job_id IS NOT NULL\n AND u.usage_date BETWEEN :date_range.min AND :date_range.max\n AND (\n :workspace_ids = ARRAY('All') OR array_contains(:workspace_ids, u.workspace_id)\n )\n),\n\n-- Price lookup\nprice_lookup AS (\n SELECT \n sku_name,\n pricing.effective_list.default AS price_per_dbu\n FROM \n system.billing.list_prices\n WHERE price_end_time IS NULL\n),\n\n-- Join with clusters and extract DBR version\nusage_with_dbr AS (\n SELECT\n fu.workspace_id,\n fu.cluster_id,\n fu.job_id,\n fu.usage_quantity,\n pl.price_per_dbu,\n regexp_extract(c.dbr_version, '(?="},"color":"#00A972"}]},"displayName":"Sum of job_count"}},"frame":{"showTitle":true,"title":"Jobs Running End-of-Support DBR Versions"}}},"position":{"x":4,"y":6,"width":2,"height":3}},{"widget":{"name":"11201a21","queries":[{"name":"main_query","query":{"datasetName":"f708f193","fields":[{"name":"workspace_id","expression":"`workspace_id`"},{"name":"job_id","expression":"`job_id`"},{"name":"dbr_versions","expression":"`dbr_versions`"},{"name":"total_cost","expression":"`total_cost`"},{"name":"run_identities","expression":"`run_identities`"},{"name":"is_lts","expression":"`is_lts`"},{"name":"is_supported","expression":"`is_supported`"}],"disaggregated":true}}],"spec":{"version":1,"widgetType":"table","encodings":{"columns":[{"fieldName":"workspace_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":0,"title":"workspace_id","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#ff1800"}}]},"displayName":"workspace_id"},{"fieldName":"job_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":1,"title":"job_id","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#ff1800"}}]},"displayName":"job_id"},{"fieldName":"dbr_versions","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"complex","displayAs":"string","visible":true,"order":3,"title":"RuntimeVersions","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#ff1800"}}]},"displayName":"dbr_versions"},{"fieldName":"total_cost","numberFormat":"$0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"decimal","displayAs":"number","visible":true,"order":4,"title":"MonthlyJobCost","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}}]},"description":"Only take into account $DBU spend and are estimates.","displayName":"total_cost"},{"fieldName":"run_identities","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"complex","displayAs":"string","visible":true,"order":5,"title":"RunIdentities","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"description":"Contains run identities across all job runs from the past month.","cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#ff1800"}}]},"displayName":"run_identities"}]},"invisibleColumns":[{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_supported","type":"boolean","displayAs":"boolean","order":2,"title":"is_supported","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_lts","type":"boolean","displayAs":"boolean","order":6,"title":"is_lts","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false}],"allowHTMLByDefault":false,"itemsPerPage":25,"paginationSize":"default","condensed":true,"withRowNumber":true,"frame":{"showTitle":true,"title":"Full Job Breakdown","showDescription":true,"description":"Colors indicate version status: Yellow for minor releases, Green for supported LTS versions, Red for LTS versions past end-of-support."}}},"position":{"x":0,"y":19,"width":6,"height":7}},{"widget":{"name":"7e03fa1a","queries":[{"name":"dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc115d48eeb195ae0766580_dbr_version","query":{"datasetName":"196e0923","fields":[{"name":"dbr_version","expression":"`dbr_version`"},{"name":"dbr_version_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc1167a8868c436d6d7e06d_dbr_versions","query":{"datasetName":"f3d492f2","parameters":[{"name":"dbr_versions","keyword":"dbr_versions"}],"disaggregated":false}},{"name":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc1169abfa8dcdd1908384e_dbr_versions","query":{"datasetName":"f708f193","parameters":[{"name":"dbr_versions","keyword":"dbr_versions"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"dbr_version","displayName":"dbr_version","queryName":"dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc115d48eeb195ae0766580_dbr_version"},{"parameterName":"dbr_versions","queryName":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc1167a8868c436d6d7e06d_dbr_versions"},{"parameterName":"dbr_versions","queryName":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc1169abfa8dcdd1908384e_dbr_versions"}]},"frame":{"showTitle":true,"title":"DBR Version"}}},"position":{"x":2,"y":5,"width":2,"height":1}},{"widget":{"name":"4f24af61","textbox_spec":"# Databricks Runtime Deprecation Impact — Jobs\n\nThis view focuses on **scheduled and production Jobs**, analyzing the past 30 days of compute usage to surface DBR versions approaching **end-of-support** or **deprecated status**.\n\nData is sourced from:\n- `system.compute.clusters`\n- `system.billing.usage`\n- `system.billing.list_prices`\n\nYou can explore the DBR landscape across **automated jobs**, their associated users (`run_as` identities), and cost profiles to prioritize necessary upgrades.\n\n"},"position":{"x":0,"y":0,"width":6,"height":5}},{"widget":{"name":"8abf2c75","queries":[{"name":"main_query","query":{"datasetName":"f3d492f2","fields":[{"name":"avg(percentage_spend)","expression":"AVG(`percentage_spend`)"}],"filters":[{"expression":"`is_supported` IN (FALSE)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"avg(percentage_spend)","format":{"type":"number-percent","decimalPlaces":{"type":"max","places":2}},"style":{"color":"#FF3621","bold":true,"rules":[{"condition":{"operator":"<=","operand":{"type":"data-value","value":"0.05"}},"color":"#00A972","bold":true},{"condition":{"operator":"<=","operand":{"type":"data-value","value":"0.10"}},"color":"#99DDB4","bold":true},{"condition":{"operator":">","operand":{"type":"data-value","value":"0.10"}},"color":"#FF3621","bold":true}]},"displayName":"Average percentage_spend"}},"frame":{"showTitle":true,"title":"Percentage of Legacy Jobs","showDescription":true,"description":"Approximated from system.billing.list_prices"}}},"position":{"x":2,"y":6,"width":2,"height":3}},{"widget":{"name":"b80ea92d","queries":[{"name":"main_query","query":{"datasetName":"f3d492f2","fields":[{"name":"sum(annualized_cost)","expression":"SUM(`annualized_cost`)"}],"filters":[{"expression":"`is_supported` IN (FALSE)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"sum(annualized_cost)","format":{"type":"number-currency","currencyCode":"USD","abbreviation":"compact","decimalPlaces":{"type":"max","places":2}},"style":{"color":"#FF3621","bold":true},"displayName":"Sum of annualized_cost"}},"frame":{"showTitle":true,"title":"Annualized Legacy Jobs Cost","showDescription":true,"description":"Approximated from system.billing.list_prices"}}},"position":{"x":0,"y":6,"width":2,"height":3}},{"widget":{"name":"2c157daa","queries":[{"name":"main_query","query":{"datasetName":"f3d492f2","fields":[{"name":"dbr_version","expression":"`dbr_version`"},{"name":"sum(job_count)","expression":"SUM(`job_count`)"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"bar","encodings":{"x":{"fieldName":"dbr_version","scale":{"type":"categorical"},"displayName":"DBR Version"},"y":{"fieldName":"sum(job_count)","scale":{"type":"quantitative"},"axis":{"hideTitle":true},"displayName":"Sum of job_count"},"color":{"fieldName":"dbr_version","scale":{"type":"quantitative","colorRamp":{"mode":"scheme","scheme":"redyellowblue"}},"legend":{"hide":true},"displayName":"dbr_version"}},"frame":{"showTitle":true,"title":"Job Count Per DBR Version"}}},"position":{"x":3,"y":9,"width":3,"height":10}},{"widget":{"name":"16eba52d","textbox_spec":"> **Note:** Requires system tables to be enabled and a Unity Catalog-enabled workspace. \n> Financial values shown are **estimates** and may not reflect actual billing. This dashboard is not officially supported by Databricks.\n"},"position":{"x":0,"y":26,"width":6,"height":2}},{"widget":{"name":"f17caca3","queries":[{"name":"parameter_dashboards/01f0213ccf881cdf866d55c55a7ab45b/datasets/01f0213ccf89185dac170c9307fa62d7_parameter","query":{"datasetName":"f3d492f2","parameters":[{"name":"parameter","keyword":"parameter"}],"disaggregated":false}},{"name":"parameter_dashboards/01f0213ccf881cdf866d55c55a7ab45b/datasets/01f0213ccf891885bf1503acd55be869_date_range","query":{"datasetName":"f708f193","parameters":[{"name":"date_range","keyword":"date_range"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-date-range-picker","encodings":{"fields":[{"parameterName":"parameter","queryName":"parameter_dashboards/01f0213ccf881cdf866d55c55a7ab45b/datasets/01f0213ccf89185dac170c9307fa62d7_parameter"},{"parameterName":"date_range","queryName":"parameter_dashboards/01f0213ccf881cdf866d55c55a7ab45b/datasets/01f0213ccf891885bf1503acd55be869_date_range"}]},"selection":{"defaultSelection":{"range":{"dataType":"DATE","min":{"value":"now-30d/d"},"max":{"value":"now/d"}}}},"frame":{"showTitle":true,"title":"Date Range"}}},"position":{"x":4,"y":5,"width":2,"height":1}},{"widget":{"name":"8c87e684","queries":[{"name":"main_query","query":{"datasetName":"3de9e092","fields":[{"name":"dbr_version","expression":"`dbr_version`"},{"name":"support_until","expression":"`support_until`"},{"name":"is_supported","expression":"`is_supported`"}],"disaggregated":true}}],"spec":{"version":1,"widgetType":"table","encodings":{"columns":[{"fieldName":"dbr_version","numberFormat":"","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"decimal","displayAs":"number","visible":true,"order":100000,"title":"DBR Version","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}}]},"displayName":"dbr_version"},{"fieldName":"support_until","dateTimeFormat":"YYYY-MM-DD","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"date","displayAs":"datetime","visible":true,"order":100001,"title":"End of Support Date","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}}]},"displayName":"support_until"}]},"invisibleColumns":[{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_supported","type":"boolean","displayAs":"boolean","order":100002,"title":"is_supported","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false}],"allowHTMLByDefault":false,"itemsPerPage":25,"paginationSize":"default","condensed":true,"withRowNumber":false,"frame":{"showTitle":true,"title":"DBR LTS Support Dates"}}},"position":{"x":0,"y":9,"width":3,"height":4}}],"pageType":"PAGE_TYPE_UNSPECIFIED"},{"name":"b07e7319","displayName":"All-Purpose Clusters","layout":[{"widget":{"name":"fcaba801","textbox_spec":"# Databricks Runtime Deprecation Impact — All-Purpose Clusters\n\nThis view analyzes **All-Purpose compute usage** over the past 30 days to identify clusters impacted by Databricks Runtime (DBR) **deprecations or end-of-support timelines**.\n\nData is sourced from:\n- `system.compute.clusters`\n- `system.billing.usage`\n- `system.billing.list_prices`\n\nThe focus is on clusters that are **interactive or development-oriented**, helping admins and platform teams estimate upgrade urgency and associated cost impacts."},"position":{"x":0,"y":0,"width":6,"height":5}},{"widget":{"name":"88ecdc99","textbox_spec":"> **Note:** Requires system tables to be enabled and a Unity Catalog-enabled workspace. \n> Financial values shown are **estimates** and may not reflect actual billing. This dashboard is not officially supported by Databricks.\n"},"position":{"x":0,"y":26,"width":6,"height":2}},{"widget":{"name":"2a00a8bc","queries":[{"name":"dashboards/01f013d1c2c91a3a9fc6aa48a6813b56/datasets/01f013d1c2ca10999a175b9e2c94c0d7_workspace_id","query":{"datasetName":"965bfd51","fields":[{"name":"workspace_id","expression":"`workspace_id`"},{"name":"workspace_id_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01f013d1c2c91a3a9fc6aa48a6813b56/datasets/01f0156a463f13b0a7f6ae35e112197c_workspace_ids","query":{"datasetName":"012bb193","parameters":[{"name":"workspace_ids","keyword":"workspace_ids"}],"disaggregated":false}},{"name":"parameter_dashboards/01f013d1c2c91a3a9fc6aa48a6813b56/datasets/01f01569cc9b1bd68d8b8595dbd5708b_workspace_ids","query":{"datasetName":"9b35fba1","parameters":[{"name":"workspace_ids","keyword":"workspace_ids"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"workspace_id","displayName":"workspace_id","queryName":"dashboards/01f013d1c2c91a3a9fc6aa48a6813b56/datasets/01f013d1c2ca10999a175b9e2c94c0d7_workspace_id"},{"parameterName":"workspace_ids","queryName":"parameter_dashboards/01f013d1c2c91a3a9fc6aa48a6813b56/datasets/01f0156a463f13b0a7f6ae35e112197c_workspace_ids"},{"parameterName":"workspace_ids","queryName":"parameter_dashboards/01f013d1c2c91a3a9fc6aa48a6813b56/datasets/01f01569cc9b1bd68d8b8595dbd5708b_workspace_ids"}]},"frame":{"showTitle":true,"title":"Workspace","headerAlignment":"left"}}},"position":{"x":0,"y":5,"width":2,"height":1}},{"widget":{"name":"a369d104","queries":[{"name":"dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc115d48eeb195ae0766580_dbr_version","query":{"datasetName":"196e0923","fields":[{"name":"dbr_version","expression":"`dbr_version`"},{"name":"dbr_version_associativity","expression":"COUNT_IF(`associative_filter_predicate_group`)"}],"disaggregated":false}},{"name":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116b6bbdf706c390ff108_dbr_versions","query":{"datasetName":"012bb193","parameters":[{"name":"dbr_versions","keyword":"dbr_versions"}],"disaggregated":false}},{"name":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116d29d5d37f7f41f0c14_dbr_versions","query":{"datasetName":"9b35fba1","parameters":[{"name":"dbr_versions","keyword":"dbr_versions"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-multi-select","encodings":{"fields":[{"fieldName":"dbr_version","displayName":"dbr_version","queryName":"dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc115d48eeb195ae0766580_dbr_version"},{"parameterName":"dbr_versions","queryName":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116b6bbdf706c390ff108_dbr_versions"},{"parameterName":"dbr_versions","queryName":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116d29d5d37f7f41f0c14_dbr_versions"}]},"frame":{"showTitle":true,"title":"DBR Version"}}},"position":{"x":2,"y":5,"width":2,"height":1}},{"widget":{"name":"326cd782","queries":[{"name":"main_query","query":{"datasetName":"012bb193","fields":[{"name":"sum(annualized_cost)","expression":"SUM(`annualized_cost`)"}],"filters":[{"expression":"`is_supported` IN (FALSE)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"sum(annualized_cost)","format":{"type":"number-currency","currencyCode":"USD","abbreviation":"compact","decimalPlaces":{"type":"max","places":2}},"style":{"color":"#FF3621","bold":true},"displayName":"Sum of annualized_cost"}},"frame":{"showTitle":true,"title":"Annualized Legacy Clusters Cost","showDescription":true,"description":"Approximated from system.billing.list_prices"}}},"position":{"x":0,"y":6,"width":2,"height":3}},{"widget":{"name":"e62478d2","queries":[{"name":"main_query","query":{"datasetName":"012bb193","fields":[{"name":"avg(percentage_spend)","expression":"AVG(`percentage_spend`)"}],"filters":[{"expression":"`is_supported` IN (FALSE)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"avg(percentage_spend)","format":{"type":"number-percent","decimalPlaces":{"type":"max","places":2}},"style":{"color":"#FF3621","bold":true,"rules":[{"condition":{"operator":"<=","operand":{"type":"data-value","value":"0.05"}},"color":"#00A972","bold":true},{"condition":{"operator":"<=","operand":{"type":"data-value","value":"0.10"}},"color":"#99DDB4","bold":true},{"condition":{"operator":">","operand":{"type":"data-value","value":"0.10"}},"color":"#FF3621","bold":true}]},"displayName":"Average percentage_spend"}},"frame":{"showTitle":true,"title":"Percentage of Legacy Clusters","showDescription":true,"description":"Approximated from system.billing.list_prices"}}},"position":{"x":2,"y":6,"width":2,"height":3}},{"widget":{"name":"557b45fb","queries":[{"name":"main_query","query":{"datasetName":"012bb193","fields":[{"name":"sum(cluster_count)","expression":"SUM(`cluster_count`)"}],"filters":[{"expression":"`is_supported` IN (FALSE)"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"counter","encodings":{"value":{"fieldName":"sum(cluster_count)","style":{"bold":true,"color":"#f50000","rules":[{"condition":{"operator":">="},"color":"#00A972"}]},"displayName":"Sum of cluster_count"}},"frame":{"showTitle":true,"title":"Clusters Running End-of-Support DBR Versions"}}},"position":{"x":4,"y":6,"width":2,"height":3}},{"widget":{"name":"42bdeb1e","queries":[{"name":"main_query","query":{"datasetName":"012bb193","fields":[{"name":"sum(annualized_cost)","expression":"SUM(`annualized_cost`)"},{"name":"is_supported","expression":"`is_supported`"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"pie","encodings":{"angle":{"fieldName":"sum(annualized_cost)","scale":{"type":"quantitative"},"format":{"type":"number-currency","currencyCode":"USD","abbreviation":"compact","decimalPlaces":{"type":"max","places":2}},"displayName":"Annualized Cost"},"color":{"fieldName":"is_supported","scale":{"type":"categorical","mappings":[{"value":true,"color":"#00A972"},{"value":false,"color":"#ff1c04"}]},"legend":{"hideTitle":true,"hide":true,"title":"Supported"},"displayName":"Supported"}},"frame":{"showTitle":true,"showDescription":false,"title":"Annualized Spend by Support Status"}}},"position":{"x":0,"y":13,"width":3,"height":6}},{"widget":{"name":"7809a4b6","queries":[{"name":"main_query","query":{"datasetName":"012bb193","fields":[{"name":"dbr_version","expression":"`dbr_version`"},{"name":"sum(cluster_count)","expression":"SUM(`cluster_count`)"}],"disaggregated":false}}],"spec":{"version":3,"widgetType":"bar","encodings":{"x":{"fieldName":"dbr_version","scale":{"type":"categorical"},"displayName":"DBR Version"},"y":{"fieldName":"sum(cluster_count)","scale":{"type":"quantitative"},"axis":{"hideTitle":true},"displayName":"Sum of cluster_count"},"color":{"fieldName":"dbr_version","scale":{"type":"quantitative","colorRamp":{"mode":"scheme","scheme":"redyellowblue"}},"legend":{"hide":true},"displayName":"dbr_version"}},"frame":{"showTitle":true,"title":"Cluster Count Per DBR Version"}}},"position":{"x":3,"y":9,"width":3,"height":10}},{"widget":{"name":"422ef59b","queries":[{"name":"main_query","query":{"datasetName":"9b35fba1","fields":[{"name":"workspace_id","expression":"`workspace_id`"},{"name":"cluster_id","expression":"`cluster_id`"},{"name":"cluster_name","expression":"`cluster_name`"},{"name":"dbr_version","expression":"`dbr_version`"},{"name":"total_cost","expression":"`total_cost`"},{"name":"owned_by","expression":"`owned_by`"},{"name":"is_lts","expression":"`is_lts`"},{"name":"is_supported","expression":"`is_supported`"}],"disaggregated":true}}],"spec":{"version":1,"widgetType":"table","encodings":{"columns":[{"fieldName":"workspace_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":1,"title":"workspace_id","allowSearch":true,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#ff1800"}}]},"displayName":"workspace_id"},{"fieldName":"cluster_id","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":2,"title":"cluster_id","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}}]},"displayName":"cluster_id"},{"fieldName":"cluster_name","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":3,"title":"cluster_name","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}}]},"displayName":"cluster_name"},{"fieldName":"dbr_version","numberFormat":"0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"float","displayAs":"string","visible":true,"order":4,"title":"RuntimeVersion","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}}]},"displayName":"dbr_version"},{"fieldName":"total_cost","numberFormat":"$0.00","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"decimal","displayAs":"number","visible":true,"order":5,"title":"MonthlyJobCost","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}}]},"description":"Only take into account $DBU spend and are estimates.","displayName":"total_cost"},{"fieldName":"owned_by","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"string","displayAs":"string","visible":true,"order":6,"title":"OwnedBy","allowSearch":false,"alignContent":"left","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_lts","fn":"=","literal":"false"},"value":{"foregroundColor":"#FFAB00"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}},{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}}]},"displayName":"owned_by"}]},"invisibleColumns":[{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_supported","type":"boolean","displayAs":"boolean","order":0,"title":"is_supported","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false},{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_lts","type":"boolean","displayAs":"boolean","order":7,"title":"is_lts","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false}],"allowHTMLByDefault":false,"itemsPerPage":25,"paginationSize":"default","condensed":true,"withRowNumber":true,"frame":{"showTitle":true,"title":"Full All-Purpose Cluster Breakdown","showDescription":true,"description":"Colors indicate version status: Yellow for minor releases, Green for supported LTS versions, Red for LTS versions past end-of-support."}}},"position":{"x":0,"y":19,"width":6,"height":7}},{"widget":{"name":"a145e174","queries":[{"name":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116b6bbdf706c390ff108_date_range","query":{"datasetName":"012bb193","parameters":[{"name":"date_range","keyword":"date_range"}],"disaggregated":false}},{"name":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116d29d5d37f7f41f0c14_date_range","query":{"datasetName":"9b35fba1","parameters":[{"name":"date_range","keyword":"date_range"}],"disaggregated":false}}],"spec":{"version":2,"widgetType":"filter-date-range-picker","encodings":{"fields":[{"parameterName":"date_range","queryName":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116b6bbdf706c390ff108_date_range"},{"parameterName":"date_range","queryName":"parameter_dashboards/01f0196b3bc01e46878116b346a3700b/datasets/01f0196b3bc116d29d5d37f7f41f0c14_date_range"}]},"frame":{"showTitle":true,"title":"Date Range"},"selection":{"defaultSelection":{"range":{"dataType":"DATE","min":{"value":"now-30d/d"},"max":{"value":"now/d"}}}}}},"position":{"x":4,"y":5,"width":2,"height":1}},{"widget":{"name":"b98d383b","queries":[{"name":"main_query","query":{"datasetName":"3de9e092","fields":[{"name":"dbr_version","expression":"`dbr_version`"},{"name":"support_until","expression":"`support_until`"},{"name":"is_supported","expression":"`is_supported`"}],"disaggregated":true}}],"spec":{"version":1,"widgetType":"table","encodings":{"columns":[{"fieldName":"dbr_version","numberFormat":"","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"decimal","displayAs":"number","visible":true,"order":100000,"title":"DBR Version","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}}]},"displayName":"dbr_version"},{"fieldName":"support_until","dateTimeFormat":"YYYY-MM-DD","booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"type":"date","displayAs":"datetime","visible":true,"order":100001,"title":"End of Support Date","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false,"cellFormat":{"default":{"foregroundColor":null},"rules":[{"if":{"column":"is_supported","fn":"=","literal":"true"},"value":{"foregroundColor":"#00A972"}},{"if":{"column":"is_supported","fn":"=","literal":"false"},"value":{"foregroundColor":"#FF3621"}}]},"displayName":"support_until"}]},"invisibleColumns":[{"booleanValues":["false","true"],"imageUrlTemplate":"{{ @ }}","imageTitleTemplate":"{{ @ }}","imageWidth":"","imageHeight":"","linkUrlTemplate":"{{ @ }}","linkTextTemplate":"{{ @ }}","linkTitleTemplate":"{{ @ }}","linkOpenInNewTab":true,"name":"is_supported","type":"boolean","displayAs":"boolean","order":100002,"title":"is_supported","allowSearch":false,"alignContent":"right","allowHTML":false,"highlightLinks":false,"useMonospaceFont":false,"preserveWhitespace":false}],"allowHTMLByDefault":false,"itemsPerPage":25,"paginationSize":"default","condensed":true,"withRowNumber":false,"frame":{"showTitle":true,"title":"DBR LTS Support Dates"}}},"position":{"x":0,"y":9,"width":3,"height":4}}],"pageType":"PAGE_TYPE_UNSPECIFIED"}]} diff --git a/manifest (1).mf b/manifest (1).mf deleted file mode 100644 index 14e9f166..00000000 --- a/manifest (1).mf +++ /dev/null @@ -1 +0,0 @@ -{"version":"Manifest","guid":"3d650c1c-0fcb-496d-a568-d4d8bc010b26","origId":-1,"name":"manifest.mf"} \ No newline at end of file