<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Datacooper</title>
    <description>The latest articles on DEV Community by Datacooper (@datacooper).</description>
    <link>https://dev.to/datacooper</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4161179%2F09ffa541-1033-4a59-807a-eb0755fc6a49.png</url>
      <title>DEV Community: Datacooper</title>
      <link>https://dev.to/datacooper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datacooper"/>
    <language>en</language>
    <item>
      <title>Clone a Tableau KPI from the browser: inputs and checks for Datacooper's web tool</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Mon, 12 Oct 2026 01:07:24 +0000</pubDate>
      <link>https://dev.to/datacooper/clone-a-tableau-kpi-from-the-browser-inputs-and-checks-for-datacoopers-web-tool-26bo</link>
      <guid>https://dev.to/datacooper/clone-a-tableau-kpi-from-the-browser-inputs-and-checks-for-datacoopers-web-tool-26bo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv6b5mw7mr7h0ch5dkaiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv6b5mw7mr7h0ch5dkaiu.png" alt="Original Datacooper brand logo" width="800" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A request such as “make a Quantity version of this Sales KPI” needs more than a new label. The copied worksheet needs the right field references, calculations and formatting, and the original worksheet still needs to work.&lt;/p&gt;

&lt;p&gt;Datacooper's Tableau KPI Cloner offers a browser form for this focused task. This article documents the current interface and a practical review checklist. The image is the original Datacooper brand logo.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to prepare
&lt;/h2&gt;

&lt;p&gt;The current form accepts a TWB or TWBX workbook and asks for a source worksheet, a target worksheet, the metric to replace, its replacement and an output filename.&lt;/p&gt;

&lt;p&gt;For example, you might specify an existing Sales KPI worksheet, a new Quantity KPI worksheet, Sales as the source metric and Quantity as the replacement. These are illustrative inputs: use the exact names in your own workbook and confirm that the destination field exists.&lt;/p&gt;

&lt;p&gt;Upload only a workbook you are authorized to process. The page states that the form uses a server-side executor. Treat file submission as a separate decision from reading the page; this article makes no data-retention guarantee.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the tool is intended to return
&lt;/h2&gt;

&lt;p&gt;The page describes a downloadable workbook containing a copied KPI worksheet with the requested core metric replacement. This puts a focused workbook-editing operation behind a web form, so the analyst does not have to begin by writing a Python script.&lt;/p&gt;

&lt;p&gt;The form's source component submits a &lt;code&gt;clone_kpi_card&lt;/code&gt; job with the workbook and field names. I inspected that component and the live page for this article. I did not submit a workbook or execute a new cloning or Tableau rendering test, so this update establishes the interface, not successful processing of an arbitrary file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the workbook before using it
&lt;/h2&gt;

&lt;p&gt;Open the returned workbook in Tableau Desktop and check the copied worksheet against your intended metric. In particular:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirm the new sheet and its field references.&lt;/li&gt;
&lt;li&gt;Inspect dependent calculations, filters and table calculations.&lt;/li&gt;
&lt;li&gt;Check number formats: a quantity should not inherit currency formatting unnoticed.&lt;/li&gt;
&lt;li&gt;Compare the original worksheet and other affected views with the input workbook.&lt;/li&gt;
&lt;li&gt;Confirm whether a dashboard needs an explicit change to display the new sheet; copying a worksheet is not the same as migrating a dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current tool page explicitly limits the task to KPI worksheet copying. It does not promise arbitrary dashboard migration or automatic correction of every dependency. A plausible-looking result still needs a check of the business values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this fits in Datacooper
&lt;/h2&gt;

&lt;p&gt;The original post introduced the web tool as a way to lower the barrier between programmatic workbook editing and everyday analyst work. The current interface preserves that focused input-and-output approach.&lt;/p&gt;

&lt;p&gt;cwtwb is the open-source workbook engineering foundation. Datacooper is the website entry point for tools and project context. The planned paid MCP is a future service direction; this article does not describe it as an available paid product or promise a processing time or success rate.&lt;/p&gt;

&lt;p&gt;Explore the &lt;a href="https://datacooper.com/en/tools/tableau-kpi-cloner" rel="noopener noreferrer"&gt;Tableau KPI Cloner&lt;/a&gt; and review its limits before processing your own workbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and project links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7455508579362676736/" rel="noopener noreferrer"&gt;Original Datacooper post&lt;/a&gt;, retained as historical source attribution.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://youtu.be/nOu461-MNQg" rel="noopener noreferrer"&gt;Published demo video&lt;/a&gt;, referenced by the existing source article; not replayed or validated for this update.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;Case reconstruction repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacooper.com/en/mcp" rel="noopener noreferrer"&gt;MCP early access: in preparation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Reuse the Tableau layout, then rebuild the analysis: a Datacooper workflow</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sun, 11 Oct 2026 01:04:58 +0000</pubDate>
      <link>https://dev.to/datacooper/reuse-the-tableau-layout-then-rebuild-the-analysis-a-datacooper-workflow-22ik</link>
      <guid>https://dev.to/datacooper/reuse-the-tableau-layout-then-rebuild-the-analysis-a-datacooper-workflow-22ik</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz18h5gstnzrxjllr49hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz18h5gstnzrxjllr49hk.png" alt="Real Datacooper Layout Extractor page, October 11 2026" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A dashboard's arrangement can be worth keeping even when its data and business question change. Rebuilding nested containers, spacing and text from scratch adds work before you have begun the new analysis.&lt;/p&gt;

&lt;p&gt;Datacooper's Tableau Layout Extractor is designed for that narrower task: take a workbook and produce a reusable structural starting point. The image above is a real screenshot of the current tool page, captured on October 11, 2026. It shows the input, output and limits; it is not a screenshot of a completed extraction or a validated Tableau rendering.&lt;/p&gt;

&lt;h2&gt;
  
  
  What goes in and what comes out
&lt;/h2&gt;

&lt;p&gt;The current form accepts a TWB or TWBX workbook. You can optionally specify dashboard names and choose filenames for the layout JSON and layout-only TWB output.&lt;/p&gt;

&lt;p&gt;The intended output contains containers, blank objects and text objects. Charts, data sources and worksheet content are outside that layout-only output. This distinction is useful when you want to keep the arrangement while replacing the analysis.&lt;/p&gt;

&lt;p&gt;For example, suppose a team likes the hierarchy of an existing executive dashboard: a title, a KPI row and two detail panels. A layout skeleton gives the next project a place to start. The new project still needs its own data connections, worksheet definitions, calculations and interactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep structure separate from meaning
&lt;/h2&gt;

&lt;p&gt;A layout JSON file makes the arrangement inspectable. A layout-only workbook gives a Tableau developer an artifact to review and extend. Neither establishes that the new dashboard answers the right question.&lt;/p&gt;

&lt;p&gt;Before treating the output as a reusable template, review it in Tableau Desktop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check container nesting, dimensions, spacing and retained text.&lt;/li&gt;
&lt;li&gt;Replace text that belongs to the old business context.&lt;/li&gt;
&lt;li&gt;Bind new worksheets to the appropriate data and metric definitions.&lt;/li&gt;
&lt;li&gt;Check filters, actions and relevant dashboard states after adding the analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are recommended checks, not a claim that I ran a new extraction or completed those checks for this article. Today's verification covers the live tool page and its form implementation. The frontend sends the &lt;code&gt;tableau_file_to_layout&lt;/code&gt; action with &lt;code&gt;objects_only&lt;/code&gt; restoration mode to the existing server-side executor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the historical post does not establish today
&lt;/h2&gt;

&lt;p&gt;My original post described this layout-reuse direction and mentioned tiled layouts. I am not extending that historical note into a current floating-layout compatibility promise. Review the particular workbook you intend to reuse.&lt;/p&gt;

&lt;p&gt;I am also not repeating the old blanket claim that no uploaded data is stored. The current page identifies a server-side executor. Submit only files you are authorized to process and establish suitable handling requirements before using sensitive workbooks.&lt;/p&gt;

&lt;p&gt;The open-source &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb repository&lt;/a&gt; is the broader workbook engineering context. Datacooper's planned paid MCP is a separate product direction: help carry a BI task through clearer inputs, construction and review. Access is not open yet; this article does not announce a paid service launch.&lt;/p&gt;

&lt;p&gt;Try the focused &lt;a href="https://datacooper.com/en/tools/tableau-layout-extractor" rel="noopener noreferrer"&gt;Tableau Layout Extractor&lt;/a&gt;, and review its output before incorporating it into a new dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and project links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7455823450931351552/" rel="noopener noreferrer"&gt;Original historical post&lt;/a&gt; — retained as a source only.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacooper.com/en/tools/tableau-layout-extractor" rel="noopener noreferrer"&gt;Current tool description, inputs and limits&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;Public workbook replication cases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt; and &lt;a href="https://datacooper.com/en/mcp#waitlist" rel="noopener noreferrer"&gt;planned MCP early access&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>data</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Change one Tableau KPI without changing the whole workbook: a cwtwb example</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sat, 10 Oct 2026 01:07:07 +0000</pubDate>
      <link>https://dev.to/datacooper/change-one-tableau-kpi-without-changing-the-whole-workbook-a-cwtwb-example-kf9</link>
      <guid>https://dev.to/datacooper/change-one-tableau-kpi-without-changing-the-whole-workbook-a-cwtwb-example-kf9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F64oa5ugppt5yfu9br32l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F64oa5ugppt5yfu9br32l.png" alt="Actual cwtwb source code: worksheet-level Sales to Profit refactor" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need a Profit version of a Sales KPI. The original Sales view must keep working. That is a small request with a surprisingly important boundary: change the new worksheet's calculation chain, rather than replace a shared measure throughout the workbook.&lt;/p&gt;

&lt;p&gt;This was the problem behind my earlier Datacooper post about local KPI replacement. Here is a concrete example from cwtwb, the open-source Python workbook authoring SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with an existing workbook
&lt;/h2&gt;

&lt;p&gt;The checked-in example opens &lt;code&gt;5 KPI Design Ideas (2).twb&lt;/code&gt;, copies the worksheet &lt;code&gt;1. KPI&lt;/code&gt; to &lt;code&gt;1. KPI Profit&lt;/code&gt;, and applies the mapping &lt;code&gt;Sales -&amp;gt; Profit&lt;/code&gt; to the copy. It then makes the copied worksheet visible and saves a separate output workbook.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;editor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TWBEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open_existing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SOURCE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;TARGET_WORKSHEET&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_worksheets&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone_worksheet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1. KPI&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TARGET_WORKSHEET&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply_worksheet_refactor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TARGET_WORKSHEET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sales&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Profit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_worksheet_hidden&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TARGET_WORKSHEET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an excerpt from the real example script, not a complete standalone program. The image reproduces the same source code; it is not a Tableau rendering or a test-results screenshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why copying the view is only the first step
&lt;/h2&gt;

&lt;p&gt;A KPI can depend on calculated fields, not just the measure visible on a shelf. The local refactor needs to account for that calculation chain. The example documentation also describes normalization of generic &lt;code&gt;Calculation_*&lt;/code&gt; identities to Profit-based names, so the copied view does not retain misleading Sales labels.&lt;/p&gt;

&lt;p&gt;For an agent, the useful sequence is to inspect the source worksheet, clone it, preview the refactor, apply the bounded change and review the saved artifact. cwtwb exposes &lt;code&gt;preview_worksheet_refactor&lt;/code&gt; alongside the apply operation, so the proposed changes can be inspected before committing them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the repository checks, and what you still need to check
&lt;/h2&gt;

&lt;p&gt;The repository's worksheet-refactor test checks that the original worksheet retains Sales formulas while the clone contains Profit formulas. It also checks renamed calculation identities and the saved workbook's worksheet XML. These are assertions in the test source; this article does not claim a new test run or a new Tableau render.&lt;/p&gt;

&lt;p&gt;That scope matters. XML checks alone do not establish correct business definitions, correct rendered labels, or every dashboard interaction. Before using the output in production, open it in Tableau, review the KPI values and labels, exercise relevant filters and dates, and compare the unaffected views with the original workbook. Sales and Profit also have different business meanings: preserving a formula's structure does not establish that its interpretation remains appropriate.&lt;/p&gt;

&lt;p&gt;This example is about a single worksheet. It is not a claim that every multi-sheet KPI module or arbitrary workbook can be migrated without review, and it makes no timing guarantee.&lt;/p&gt;

&lt;p&gt;At Datacooper, I am building toward workflows that make those boundaries visible: clear inputs, inspectable changes, editable workbooks and evidence of the result. A paid MCP remains planned; the public SDK example is available now.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7450852658707345408/" rel="noopener noreferrer"&gt;Original Datacooper post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aidatacooper/cwtwb/blob/876bd222011237edd84b1e2649a4fe213ff263db/examples/worksheet_refactor_kpi_profit/worksheet_refactor.py" rel="noopener noreferrer"&gt;Actual example script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aidatacooper/cwtwb/blob/876bd222011237edd84b1e2649a4fe213ff263db/tests/test_worksheet_refactor.py" rel="noopener noreferrer"&gt;Worksheet-refactor test source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt; and &lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Screenshot to layout JSON to TWB: a cwtwb dashboard skeleton experiment</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:18:50 +0000</pubDate>
      <link>https://dev.to/datacooper/screenshot-to-layout-json-to-twb-a-cwtwb-dashboard-skeleton-experiment-mnc</link>
      <guid>https://dev.to/datacooper/screenshot-to-layout-json-to-twb-a-cwtwb-dashboard-skeleton-experiment-mnc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbu03lru8vabck478xlmv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbu03lru8vabck478xlmv.png" alt="Reference dashboard layout used in the cwtwb experiment" width="480" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nested Tableau containers can consume a surprising amount of dashboard-building time. In this experiment, I asked an AI to infer a layout from a screenshot, save layout JSON and use cwtwb to generate a workbook.&lt;/p&gt;

&lt;p&gt;The output deliberately used text placeholders. I explicitly allowed mocked calculations because this test was about layout construction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt's important boundary
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate the layout JSON and save it locally, then use this JSON
to generate the final dashboard. I don't need you to perfectly
replicate the calculations; you can just mock up a few.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an excerpt from the original prompt, rather than a runnable SDK example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the intermediate JSON helps
&lt;/h2&gt;

&lt;p&gt;The workflow has three inspectable stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reference screenshot -&amp;gt; layout JSON -&amp;gt; Tableau workbook (.twb)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A screenshot communicates arrangement. The layout description makes horizontal and vertical nesting explicit. The workbook turns that description into an artifact that can be opened and edited in Tableau.&lt;/p&gt;

&lt;p&gt;The generated skeleton looked unfinished because its job was to expose structure, not to impersonate a verified production dashboard. The container hierarchy was the focus of the original review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What still needs to happen
&lt;/h2&gt;

&lt;p&gt;This demonstration does not establish pixel-perfect replication or calculation correctness. Real data bindings, calculations, styles and interactions need their own implementation and checks.&lt;/p&gt;

&lt;p&gt;That distinction is central to cwtwb's development: build from public SDK operations, then verify the artifact against a concrete case. Datacooper's planned paid MCP should help carry that workflow further toward finished BI work, with reviewable intermediate results.&lt;/p&gt;

&lt;p&gt;Originally shared in &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7435683330072797184/" rel="noopener noreferrer"&gt;this LinkedIn post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;, &lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;the case replication repository&lt;/a&gt; and &lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tableau</category>
    </item>
    <item>
      <title>From raw data to a dashboard blueprint: testing a Tableau design Skill</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:13:31 +0000</pubDate>
      <link>https://dev.to/datacooper/from-raw-data-to-a-dashboard-blueprint-testing-a-tableau-design-skill-3b4i</link>
      <guid>https://dev.to/datacooper/from-raw-data-to-a-dashboard-blueprint-testing-a-tableau-design-skill-3b4i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fstlk0zz7oam2qec4pp0r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fstlk0zz7oam2qec4pp0r.jpg" alt="Dashboard Blueprint Skill experiment" width="160" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before generating a workbook, an agent needs to decide what the dashboard is for. I tested Adam Mico's open-source Tableau Dashboard Blueprint Skill with the Antigravity CLI to explore that step.&lt;/p&gt;

&lt;p&gt;The experiment produced a technical specification and an interactive HTML prototype. It was a design test, not proof of a completed Tableau workbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Skill helped make explicit
&lt;/h2&gt;

&lt;p&gt;The design identified a sales-manager audience, a short review window, KPI hierarchy and a restrained filter set. It also described the layout and the charts that would answer the intended questions.&lt;/p&gt;

&lt;p&gt;The technical specification included container hierarchy and calculation definitions. The HTML prototype made the proposed arrangement easier to review before implementation. In the original experiment, simulated regional filtering updated the prototype KPIs.&lt;/p&gt;

&lt;p&gt;Those are different outputs with different purposes: the specification tells a builder what to implement; the prototype lets someone inspect the proposed experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where cwtwb fits
&lt;/h2&gt;

&lt;p&gt;My next-step proposal in the original post was to connect the design workflow to cwtwb. That was a plan at the time, and I am preserving that distinction here.&lt;/p&gt;

&lt;p&gt;A useful future workflow would take an agreed specification, construct a Tableau workbook through the SDK and compare the result with the intended design. It would still need to check the real data and calculations separately from the prototype.&lt;/p&gt;

&lt;p&gt;For Datacooper, this suggests a practical product direction: help users move from a business question to an inspectable build specification and an editable artifact. The paid MCP is planned around that broader task.&lt;/p&gt;

&lt;p&gt;Credit and references:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/adammico-lab/Tableau-Dashboard-Blueprint-BETA/blob/main/SKILL.md" rel="noopener noreferrer"&gt;Adam Mico's Blueprint Skill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aidatacooper.github.io/20260714-tableaudesign/" rel="noopener noreferrer"&gt;The experiment's published prototype&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally shared in &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7482620478189314049/" rel="noopener noreferrer"&gt;this LinkedIn post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;, &lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;the case replication repository&lt;/a&gt; and &lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tableau</category>
    </item>
    <item>
      <title>What a Tableau MCP source-code experiment taught me about workbook authoring</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:13:12 +0000</pubDate>
      <link>https://dev.to/datacooper/what-a-tableau-mcp-source-code-experiment-taught-me-about-workbook-authoring-1k7o</link>
      <guid>https://dev.to/datacooper/what-a-tableau-mcp-source-code-experiment-taught-me-about-workbook-authoring-1k7o</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvvvv6xmcj59mobb7s2i4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvvvv6xmcj59mobb7s2i4.jpg" alt="Screenshot from the original Datacooper experiment" width="160" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I explored the official tableau-mcp source in an earlier experiment, one area caught my attention: workbook tools under &lt;code&gt;src/tools/desktop/workbook/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The screenshot and original LinkedIn post record that historical observation. This article describes the design idea I took from it; it does not assert that those tools are currently available to every developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three names that made the workflow interesting
&lt;/h2&gt;

&lt;p&gt;The tool names recorded in my original analysis were:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;get-workbook-xml
batch-create-and-cache-sheets
apply-workbook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read together, they suggest an authoring workflow with separate steps: inspect the existing workbook, prepare new sheets, then apply changes. That is a useful design distinction for an agent: reading, creating and committing changes are different operations.&lt;/p&gt;

&lt;p&gt;This is my interpretation of the names and the historical source observation. It is not proof of public access to a Desktop Agent API, and I am not claiming I successfully executed that internal workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters for cwtwb
&lt;/h2&gt;

&lt;p&gt;There are several ways to approach AI-assisted BI. One works with an active application. Another generates a workbook artifact programmatically. cwtwb focuses on the latter through a Python SDK and MCP-facing capabilities.&lt;/p&gt;

&lt;p&gt;Both approaches raise the same practical questions: what did the agent change, can we inspect the result, and is the calculation correct?&lt;/p&gt;

&lt;p&gt;An official project exploring workbook authoring is relevant technical context. It is not an endorsement of Datacooper or evidence of market leadership.&lt;/p&gt;

&lt;p&gt;My work at Datacooper is to turn that authoring direction into repeatable examples and checked artifacts. A future paid MCP should earn its value by helping users complete BI tasks, not merely by exposing more tool names.&lt;/p&gt;

&lt;p&gt;Project context: &lt;a href="https://github.com/tableau/tableau-mcp" rel="noopener noreferrer"&gt;Tableau MCP repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Originally shared in &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7472231893623746560/" rel="noopener noreferrer"&gt;this LinkedIn post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;, &lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;the case replication repository&lt;/a&gt; and &lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tableau</category>
    </item>
    <item>
      <title>An AI semi-donut experiment: who checks the visualization logic?</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:02:41 +0000</pubDate>
      <link>https://dev.to/datacooper/an-ai-semi-donut-experiment-who-checks-the-visualization-logic-5cjc</link>
      <guid>https://dev.to/datacooper/an-ai-semi-donut-experiment-who-checks-the-visualization-logic-5cjc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3f0ytgqmx1kmjpo504gi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3f0ytgqmx1kmjpo504gi.jpg" alt="Screenshot from the original Datacooper experiment" width="480" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A semi-donut chart looks small on a dashboard. Building it can involve considerably more work than its appearance suggests.&lt;/p&gt;

&lt;p&gt;In this early experiment, I gave an AI reference material and asked it to produce the calculation logic and visualization. The original screenshot shows the output. My role shifted toward specifying the design, reviewing it and iterating, rather than manually writing every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this experiment mattered
&lt;/h2&gt;

&lt;p&gt;The hard part of an unusual chart is not simply choosing a mark type. The calculation and visual construction need to agree. A plausible-looking chart can still misrepresent the underlying value.&lt;/p&gt;

&lt;p&gt;That makes this a useful test of AI-assisted Tableau authoring. Can an agent translate the reference into a workbook? Can a human understand and check what it produced?&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep generation and verification separate
&lt;/h2&gt;

&lt;p&gt;For this kind of chart, I would review the source values, how they map to the visible shape, the labels and any assumptions about the scale. Those are review criteria, not a claim that this historical screenshot includes a complete audit.&lt;/p&gt;

&lt;p&gt;The original post also discussed Tableau Prep automation. Data preparation and workbook authoring are distinct stages; a good-looking final chart cannot establish that its upstream data pipeline is correct.&lt;/p&gt;

&lt;p&gt;At Datacooper, cwtwb is the open-source workbook authoring foundation. The case replication repository provides a place to exercise capabilities against concrete examples and retain validation evidence.&lt;/p&gt;

&lt;p&gt;The commercial opportunity I am exploring is a paid MCP that helps analysts finish actual BI work: specify the question, construct the workbook and review the output. The analyst's judgment remains central.&lt;/p&gt;

&lt;p&gt;Originally shared in &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7432996083385155585/" rel="noopener noreferrer"&gt;this LinkedIn post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;, &lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;the case replication repository&lt;/a&gt; and &lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tableau</category>
    </item>
    <item>
      <title>Building an editable Tableau dashboard with cwtwb and MCP</title>
      <dc:creator>Datacooper</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:02:17 +0000</pubDate>
      <link>https://dev.to/datacooper/building-an-editable-tableau-dashboard-with-cwtwb-and-mcp-2aof</link>
      <guid>https://dev.to/datacooper/building-an-editable-tableau-dashboard-with-cwtwb-and-mcp-2aof</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu8x7j21rayp9lhynnzjp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu8x7j21rayp9lhynnzjp.jpg" alt="Original Tableau dashboard and agent prompt" width="480" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A dashboard generated by AI should leave you with a workbook you can keep working on. That was the question behind this early cwtwb experiment: could an agent assemble a Tableau dashboard without manually dragging sheets onto the canvas?&lt;/p&gt;

&lt;p&gt;The screenshot shows the resulting workbook alongside the prompt. It includes sales by sub-category, sales by category, a monthly profit trend and a regional sales breakdown. The useful output is the Tableau &lt;code&gt;.twb&lt;/code&gt; file, rather than an image of a dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the workflow works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Describe the charts and dashboard you need.&lt;/li&gt;
&lt;li&gt;The agent calls the MCP tools to configure workbook elements.&lt;/li&gt;
&lt;li&gt;The implementation writes the workbook structure, including worksheets and layout containers.&lt;/li&gt;
&lt;li&gt;Open the output in Tableau and review the result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A TWB stores workbook definitions as XML. cwtwb provides a Python SDK so callers can work with higher-level operations instead of assembling that XML manually. MCP gives an agent a way to call those operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this demonstration does and does not prove
&lt;/h2&gt;

&lt;p&gt;This is a retrospective of an early prototype. The screenshot demonstrates workbook authoring; it does not prove every business calculation or interaction is correct. A production workflow also needs input checks, calculation validation, rendered output and tests of relevant parameter or filter states.&lt;/p&gt;

&lt;p&gt;Today, the open-source SDK and the Workout Wednesday replication repository help make that review process concrete: a build script, locked input data, a workbook and recorded checks.&lt;/p&gt;

&lt;p&gt;My planned paid MCP builds on that direction: help complete real BI tasks with clearer inputs, repeatable builds and evidence of the result. It remains a product plan, not a claim that every BI task is already automated.&lt;/p&gt;

&lt;p&gt;Originally shared in &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7433095198680764417/" rel="noopener noreferrer"&gt;this LinkedIn post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/aidatacooper/cwtwb" rel="noopener noreferrer"&gt;cwtwb on GitHub&lt;/a&gt;, &lt;a href="https://github.com/aidatacooper/wow-tableau-problem-solving" rel="noopener noreferrer"&gt;the case replication repository&lt;/a&gt; and &lt;a href="https://datacooper.com/en" rel="noopener noreferrer"&gt;Datacooper&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tableau</category>
    </item>
  </channel>
</rss>
