<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to programatically extract rendered or computed data from AIBI Lakeview dashboard widget via in Warehousing &amp; Analytics</title>
    <link>https://community.databricks.com/t5/warehousing-analytics/how-to-programatically-extract-rendered-or-computed-data-from/m-p/157259#M2589</link>
    <description>&lt;P&gt;Hi&amp;nbsp;,&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea" data-pm-slice="1 1 []"&gt;My view is that the testing approach should focus on validating the underlying data and query logic, rather than the rendered visual itself.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;AI/BI Dashboards are built from datasets, visualisations, and filters. In other words, the chart or table a user sees is a presentation of a dataset after aggregations, filtering, and formatting have been applied. If the goal is data quality validation, the most stable thing to test is the data contract behind the dashboard which includes source tables, views, metric definitions, dataset SQL, and expected filter behaviour.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;That is usually a better fit than testing "what the widget rendered" for a few reasons:&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Visuals are not the source of truth. The source of truth is the underlying dataset and business logic.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Dashboards can apply visualisation-specific filtering and aggregation differently depending on dataset size and execution path.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Rendering itself has limits and optimisations, so validating the visual can end up mixing data correctness with presentation/runtime behaviour.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Databricks documents this behaviour explicitly. For smaller datasets, the dataset result can be pulled to the client, and visualisation-specific filtering and aggregation are performed in the browser. For larger datasets, visualisation-specific filtering and aggregation are performed on the backend instead. That means there is not always a single simple "widget result" object exposed as a stable public API contract that exactly represents what was rendered.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;So in practice, I would recommend:&lt;/P&gt;
&lt;OL&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Validate the source tables/views or metric views.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Validate the dashboard dataset SQL.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Validate expected filter semantics and aggregations.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Use dashboard-level checks only as smoke tests to confirm the dashboard is wired correctly.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;That last point matters. There is still value in lightweight dashboard tests, for example:&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;confirming the right filters affect the right widgets&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;confirming expected aggregations are shown&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;confirming cross-filtering or drill-through behaves as expected&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;But I would treat those as product behaviour checks, not as the primary layer for data quality testing.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;So the short version is.. validating the underlying data is the better and more reliable approach than validating the visuals themselves. The visuals are important for user experience, but the data layer is the right place to anchor automated correctness tests.&lt;/P&gt;
&lt;P class="p1"&gt;&lt;FONT size="2" color="#FF6600"&gt;&lt;STRONG&gt;&lt;I&gt;If this answer resolves your question, could you mark it as “Accept as Solution”? That helps other users quickly find the correct fix.&lt;/I&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 19 May 2026 14:52:25 GMT</pubDate>
    <dc:creator>Ashwin_DSA</dc:creator>
    <dc:date>2026-05-19T14:52:25Z</dc:date>
    <item>
      <title>How to programatically extract rendered or computed data from AIBI Lakeview dashboard widget via API</title>
      <link>https://community.databricks.com/t5/warehousing-analytics/how-to-programatically-extract-rendered-or-computed-data-from/m-p/157244#M2588</link>
      <description>&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;We're building an automated data quality testing framework for AI/BI (Lakeview) dashboards. Our goal is to validate that dashboard widgets display correct data without using UI automation (Selenium/Playwright don't work reliably due to React dynamic DOM and Canvas rendering).&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;U&gt;&lt;STRONG&gt;What we've tried so far:&lt;/STRONG&gt;&lt;/U&gt;&lt;/DIV&gt;&lt;OL&gt;&lt;LI&gt;GET /api/2.0/lakeview/dashboards/{dashboard_id} Returns the dashboard definition (serialized_dashboard JSON with datasets, queries, widgets, measures). This is metadata only — no computed data.&lt;/LI&gt;&lt;LI&gt;GET /api/2.0/workspace/export?path=/path/to/dashboard.lvdash.json Returns the same .lvdash.json definition file. Again, no data.&lt;/LI&gt;&lt;LI&gt;GET /api/2.0/lakeview/dashboards/{dashboard_id}/published Returns published dashboard metadata (warehouse ID, publish time). No computed data.&lt;/LI&gt;&lt;LI&gt;SQL Statement Execution API (POST /api/2.0/sql/statements) We extract queries from the dashboard definition and execute them ourselves. This works, but we're reconstructing what the dashboard does rather than reading what the dashboard actually renders.&lt;/LI&gt;&lt;LI&gt;Jobs API (views_to_export=DASHBOARDS) Requires a job run with a dashboard task. Not applicable to standalone AI/BI dashboards.&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;U&gt;&lt;STRONG&gt;Our current approach:&lt;/STRONG&gt;&lt;/U&gt;&lt;/DIV&gt;&lt;UL&gt;&lt;LI&gt;Extract base queries from datasets[].queryLines[] in the dashboard definition&lt;/LI&gt;&lt;LI&gt;Resolve MEASURE() references from columns[] definitions&lt;/LI&gt;&lt;LI&gt;Apply filters as WHERE clauses (same way Lakeview does internally)&lt;/LI&gt;&lt;LI&gt;Execute via databricks-sql-connector on the same SQL Warehouse&lt;/LI&gt;&lt;LI&gt;Compare results against independently written expected queries&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;U&gt;&lt;STRONG&gt;Our question:&lt;/STRONG&gt;&lt;/U&gt;&lt;/DIV&gt;&lt;DIV&gt;Is there any API endpoint (current or planned) that returns the actual computed/rendered data from a Lakeview dashboard widget — i.e., the exact result set that the dashboard displays to the user after applying filters?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;For example, something like:&lt;/DIV&gt;&lt;DIV&gt;GET /api/2.0/lakeview/dashboards/{id}/widgets/{widget_id}/data?filters=...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Or is extracting the query from the definition and executing it ourselves the recommended approach for programmatic data validation of AI/BI dashboards&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance!&lt;/DIV&gt;</description>
      <pubDate>Tue, 19 May 2026 11:49:18 GMT</pubDate>
      <guid>https://community.databricks.com/t5/warehousing-analytics/how-to-programatically-extract-rendered-or-computed-data-from/m-p/157244#M2588</guid>
      <dc:creator>vinay_ba</dc:creator>
      <dc:date>2026-05-19T11:49:18Z</dc:date>
    </item>
    <item>
      <title>Re: How to programatically extract rendered or computed data from AIBI Lakeview dashboard widget via</title>
      <link>https://community.databricks.com/t5/warehousing-analytics/how-to-programatically-extract-rendered-or-computed-data-from/m-p/157259#M2589</link>
      <description>&lt;P&gt;Hi&amp;nbsp;,&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea" data-pm-slice="1 1 []"&gt;My view is that the testing approach should focus on validating the underlying data and query logic, rather than the rendered visual itself.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;AI/BI Dashboards are built from datasets, visualisations, and filters. In other words, the chart or table a user sees is a presentation of a dataset after aggregations, filtering, and formatting have been applied. If the goal is data quality validation, the most stable thing to test is the data contract behind the dashboard which includes source tables, views, metric definitions, dataset SQL, and expected filter behaviour.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;That is usually a better fit than testing "what the widget rendered" for a few reasons:&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Visuals are not the source of truth. The source of truth is the underlying dataset and business logic.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Dashboards can apply visualisation-specific filtering and aggregation differently depending on dataset size and execution path.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Rendering itself has limits and optimisations, so validating the visual can end up mixing data correctness with presentation/runtime behaviour.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Databricks documents this behaviour explicitly. For smaller datasets, the dataset result can be pulled to the client, and visualisation-specific filtering and aggregation are performed in the browser. For larger datasets, visualisation-specific filtering and aggregation are performed on the backend instead. That means there is not always a single simple "widget result" object exposed as a stable public API contract that exactly represents what was rendered.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;So in practice, I would recommend:&lt;/P&gt;
&lt;OL&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Validate the source tables/views or metric views.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Validate the dashboard dataset SQL.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Validate expected filter semantics and aggregations.&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;Use dashboard-level checks only as smoke tests to confirm the dashboard is wired correctly.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;That last point matters. There is still value in lightweight dashboard tests, for example:&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;confirming the right filters affect the right widgets&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;confirming expected aggregations are shown&lt;/LI&gt;
&lt;LI class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;confirming cross-filtering or drill-through behaves as expected&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;But I would treat those as product behaviour checks, not as the primary layer for data quality testing.&lt;/P&gt;
&lt;P class="wnfdntf _1ibi0s3f5 _1ibi0s3ce _1ibi0s3ea"&gt;So the short version is.. validating the underlying data is the better and more reliable approach than validating the visuals themselves. The visuals are important for user experience, but the data layer is the right place to anchor automated correctness tests.&lt;/P&gt;
&lt;P class="p1"&gt;&lt;FONT size="2" color="#FF6600"&gt;&lt;STRONG&gt;&lt;I&gt;If this answer resolves your question, could you mark it as “Accept as Solution”? That helps other users quickly find the correct fix.&lt;/I&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 19 May 2026 14:52:25 GMT</pubDate>
      <guid>https://community.databricks.com/t5/warehousing-analytics/how-to-programatically-extract-rendered-or-computed-data-from/m-p/157259#M2589</guid>
      <dc:creator>Ashwin_DSA</dc:creator>
      <dc:date>2026-05-19T14:52:25Z</dc:date>
    </item>
  </channel>
</rss>

