Retail and Consumer Goods Tableau User Group 25 Sep 2026
48 min 8,069 words transcribed
Summary
Matt Huff and Blake Feiza show the Retail and Consumer Goods TUG how they get AI agents to build real Tableau dashboards by writing the workbook XML directly. A Tableau workbook is just XML — complex and fragile, but code — and if you can edit that code, so can an agent.
Matt starts a live demo, asking a team of agents (run through GitHub Copilot) for an infographic-style Superstore dashboard, then explains the problem it addresses: Tableau has a long learning curve, and most of Matt's team aren't visualization specialists. The aim isn't perfection but a dashboard that is good enough for an ad hoc analysis, 50 to 80% of the way there, built hands-free. Matt's framework is a chain of narrowly focused agents — orchestrator, analytics, design, writer, evaluator and publisher — so no agent grades its own homework. The design agent is trained on business-facing Viz of the Day dashboards pulled from Tableau Public, with matching XML patterns for each chart type. The analytics agent acts as an in-house data scientist, running forecasts, distributions and correlations. LLMs then turn the findings into narrative. Skills files make the system self-healing: when generated XML fails, the agent retries against its corpus, and when it works, it records what it learned in a markdown skills file for next time. The demo finished with an error but produced a decent, fully editable dashboard; because it is native XML rather than a viz extension, it can be reworked like any other workbook.
Blake, whose approach leans toward design rather than analysis, shows dashboards that Blake's VizRight framework built from a single prompt on Makeover Monday data, including a bee swarm chart whose XML it now keeps in a knowledge corpus for reuse. The session closes with three resources — Matt's blog post on the framework, Blake's VizRight starter repository on GitHub, and Ann Jackson's review of four frameworks — and Q&A on one-off retail media reports, Tableau Studio, data cleaning, and how iterating on the design agent can push results well past 60%.
Listen to this TUG
Prefer to listen? This meeting is also an episode of the Tableau TUG recordings podcast.
Key points
- A Tableau workbook is just XML. If you can edit that code, an AI agent can edit it too.
- Aim for good enough — 50 to 80% of the way there — for ad hoc analysis, not enterprise reporting.
- Split the work across narrowly focused agents so no agent grades its own homework.
- Train the design agent on what good looks like, such as business-facing Viz of the Day dashboards and their XML.
- An analytics agent can act as an in-house data scientist, running forecasts, distributions and correlations.
- Skills files let an agent record what worked, so XML generation gets more reliable over time.
- Building from native Tableau XML keeps everything editable, unlike viz extensions that render HTML.
- Once an agent has worked out a chart type's XML, keep it in a knowledge corpus for reuse.
- Agents don't replace visualization specialists; they speed up the first draft.
- Run a research question through the agent first; it helps shape the analysis as much as the final output.
Jump to a chapter (27)
- 0:00 Welcome: AI-generated Tableau dashboards
- 1:09 Kicking off a live agent demo
- 3:24 The problem: a skills gap and a time gap
- 6:25 Framing a solution: good enough
- 7:57 What makes a good dashboard
- 9:08 Q&A: is 50 to 60% enough?
- 10:53 Mapping the process: a multi-agent framework
- 13:12 The live demo finishes
- 14:45 Each agent has a narrow focus
- 15:53 Why multi-agent frameworks work
- 17:07 Structure of a dashboard: it's just XML
- 18:50 Design: training on Viz of the Day
- 21:37 Analytics: an in-house data scientist
- 24:20 Storytelling with LLMs
- 26:04 Skills files
- 27:33 Self-healing XML
- 29:57 The demo dashboard
- 33:36 Viz extensions vs native XML
- 34:23 Built for one-off reports
- 35:40 Floating vs tiled layouts
- 36:30 VizRight demo: college football budgets
- 39:00 Teaching an agent to build bee swarms
- 39:55 Resources to get started
- 41:42 Q&A: why so many one-off reports?
- 43:52 Q&A: Tableau Studio and data cleaning
- 45:33 Q&A: getting past 60%
- 46:26 Contributing to VizRight and wrap-up
Transcript
0:00 Blake Feiza: Welcome to everybody here live, and hello to everyone watching, uh, the VOD after the fact, uh, to Matt and my presentation today on AI-generated Tableau dashboards. So the two of us have spent a little bit of time conversationally together, and then also developing kind of in our own little closets, uh, as far as how we can go about, uh, creating Tableau dashboards, so that true raw XML Tableau dashboard, uh, using AI.
0:29 So if you've looked under the hood at what that XML code looks like in Tableau, it's not super pretty. Uh, it's not something that you definitely want to be coding and tinkering with by hand. Uh, but AI presents a new opportunity to make some of that challenge much more feasible.
0:46 So, uh, without further ado, I think Matt is going to outline that problem in a little bit more depth, and I think we're actually gonna do a live demo, uh, where we kick off, uh, an, an agent in the background. So while we're talking slides, uh, hopefully we can show off something at the end. You know how live demos go. Uh, I'm sure it'll go perfect, and there will be no issues.
1:07 Uh, Matt, I will hand it to you.
1:09 Matt Huff: Yeah. Um, so that, so that's what, what I'm gonna do right now. So I'm gonna see if we can get an infographic. Yeah, thanks.
1:17 Um, yeah. I, I haven't figured out c- exploding 3D pie charts yet either, so you know, we'll, we'll figure that one out at some point. Um, I'll leave that, I'll leave that exercise to the, the reader. How's that sound?
1:30 Um, so I'm gonna see if we can get an infographic style dashboard. It's not going to be perfect, best thing you've ever seen, but that'll be fine.
1:37 Um, and, uh, let's look at the expected growth and behavioral trends. Um, include rich narrative and, uh, make sure the story flows.
1:58 Don't reuse any prior dashboard, um, work.
2:07 Open the Tableau local file when done.
2:18 Sounds good. Any other questions you guys wanna ask Superstore?
2:21 Probably not.
2:23 Um, I think we've all seen that one once or twice.
2:27 Yeah. So I'm, I'm running, I'm running this through Copilot. Um, it, I, basically I have agents set up in Copilot that I can just, I can just interact with. It's running, it will run on Claude Code.
2:40 Um, it can run however you want it to. You can basically set this up wherever you want, however you want it. This is just the working pattern that I have.
2:48 So, okay. So we're gonna kick that off, and, and then I'm gonna go back to the other screen.
2:57 And what we're gonna do is we're gonna, we're going to look-
2:59 Blake Feiza: Quick, quick note-
3:00 Matt Huff: Yes
3:00 Blake Feiza: … Matt, too. Uh, for everyone watching, uh, the, the code base that Matt's using, uh, that's powering that prompt, we will share a resource at the end, uh, to let you do that same sort of process yourself. Uh, so bear with us, and we will provide that stuff down the road here.
3:16 Matt Huff: Yeah.
3:17 Yeah. So we'll, we'll have all of that. It's… Yeah, you'll, you'll be… Don't worry, you'll be just fine. You'll survive.
3:23 Um, but basically, the, the whole premise behind this, right, is we, as, as I've been working internally here, um, one of the things that, that I've noticed is that when it comes to Tableau and data visualization in particular, this is not something that comes naturally to most people.
3:44 Um, it's, it's really, quite frankly, it's a little bit, it's a bit of a tough skill for, for folks to, to master. And, and so it's, it's relatively simple and straightforward in some respects. It's hard to actually execute in others. And so this is a specialized skill set. It takes time to build that mastery. Um, the other, the other thing that I've noticed, and, and this is not to, not to throw shade or anything, but to get something that makes sense in Tableau requires, and, and hacky, hacky solutions and all of those kinds of things.
4:20 And so the, the, the, the problem really is I've got a skill, I've got a skills gap on, on one side. Um, I've got a knowledge gap, skills gap, and then I also have, like, just the time to develop is, it takes a long time to develop. And so the, the thought here is: What can I do to simplify that and jumpstart that process? The other piece here is, like, I've got folks on my team who are not Tableau wizards, um, that quite frankly, most of my team doesn't spend a ton of time in Tableau at all.
4:52 And so how do I get them to a spot where they can, they can build a report, or they can get, um, a framework out quickly in a way that, um, in a way that doesn't, that kind of conforms to th-their ways of working? Okay?
5:08 So that's a problem. Really, the, the goal here is how do we, how do we look at this, this development time and this learning curve, and how do we, how do we close this skills gap, right? As we think about Tableau and, and your Tableau journey, um, you… Inevitably, people open Tableau, and they think, "Oh, this is really easy," until they actually start doing something.
5:29 And then what they find is there's actually a really long learning curve before you can actually be proficient in, in Tableau. And, and so the, the goal is how do we shift this, this, um, the, the capability? How do we, how do we start tapping into advanced capabilities faster for people who are not experts in Tableau, right? So this doesn't replace, like, what we have doesn't replace the, the need for, um, data visualization specialists.
5:59 It doesn't replace the need for, um, that, that skills kn- that skills and, and that knowledge base. It, it's really just a way to augment and, and expedite the development of, of dashboards on, on your own, right?
6:17 Okay, so th-th-that's what we're trying to figure out. That's how we're trying to, that's how we're trying to figure, solve, solve this problem. Okay?
6:24 So wanna keep in mind as we're looking at this, I'm not l- expecting a perfect solution. Um, I'm looking for something that's good enough so that I could run this quickly on maybe an ad hoc analysis, and I could share this with stakeholders.
6:40 I'm looking for something that doesn't necessarily need to support enterprise-level reporting, but could be a good start to get you, I don't know, 50%, 60%, maybe 80% of the way there.
6:55 Um, the other thing that you're, you're gonna see here is this is hands-free. So I've got my agents churning in the background. They're furiously hacking the, the Tableau back end, trying to figure out how to d- develop a story and, and get this data out there.
7:11 Um, and then the other thing that I've, I've really focused on with, with my solution, and I know Blake's is a little bit, is a little bit different, but the solution that I've got is, is really heavily focused on, on the customer insights piece. So leveraging LLMs to g- to narrate a story, thinking about how do we apply best pract- analytics best practices and, and that kind of stuff.
7:34 And so making sure that the, the, the rationale and the insights that are, are derived are buttoned up and rock solid.
7:43 Um, from there, once you have that, you can, you can effectively, you can effectively visualize that however you want, right?
7:50 And so that's, that's what I'm looking for. I'm not expecting perfection. I am expecting decent, right?
7:57 So if we go back to what makes a good dashboard, this really stems from, from a couple of things. And as we think about this, it, it stems from design, it stems from analysis, and it stems from storytelling.
8:10 Uh, if you think about what this is, th- these are the same criteria that we use for, um, Iron Viz. As we think about how do we, how do we tell the right story in the right way, at the right place, in the right time to drive, to drive impact and decisions. And so as I was looking through this process and, and building this framework out, this is one of the…
8:35 These three fundamentals were really key to how I was thinking about building out this, this agentic structure that, that I'll introduce here in a, in a minute.
8:46 Um, and, and then any qu- before, before I move on, any questions on, on kind of the buildup, anything that we're, we've been talking about so far?
8:58 I've got the, I've got the chat on the, on a separate screen, so I can't see it. Um, Blake, anything, anything that came up?
9:08 Blake Feiza: No questions as of now. Um-
9:10 Matt Huff: Okay
9:10 Blake Feiza: … Cooley did put an interesting point out there, uh, as far as, you know, whether or not that 50 to 60% completion will at one point become enough, and there's no need to continue the process inside of Tableau. But, uh, I think we could, we could probably dive a little bit deeper into that down the road.
9:26 Matt Huff: Yeah.
9:26 Blake Feiza: Um, unless you wanna talk now.
9:29 Matt Huff: Yeah, we can definitely… We can de- I'll, I'll talk to it right now, but we can, we can definitely dive deeper as, as you guys want. Like, I'm fair- I'm viewing this as very, um, conversational, so if you guys have questions, like, let, let us know, and I am happy to pivot.
9:43 Um, but as, as I'm thinking about this, there, there are dashboards where I've come up, and I haven't really had to make any changes. Um, some, some are good enough for stakeholders that I'd, I'd be fine sending it to them. They're not, again, they're not perfect, but visually they're good enough. They, they have the right zone structure. They have the, you know, they've got bands, and they've got, you've, they've got narrative as they're going through.
10:11 And so they, they work, um, they may not be as polished as y- as you want them to be.
10:18 Right?
10:19 Um, yeah.
10:21 Blake Feiza: Yeah.
10:21 Matt Huff: The, the other, the other piece is I, I am using the LLMs to, to help craft that data story as well, um, which is one of the things they're really good at. So.
10:33 Cool.
10:38 Yeah, it's because I'm running it in command line, 'cause I'm very geeky. So, um, that… It's hearkening back to my old, old life, so.
10:48 But cool. I'm gonna, I'm gonna pivot back to my screen so I won't be able to see anything in chat. Um, so the way that I structured this was, and, and Blake's agent does something similar. Uh, basically I wanted to take, and I wanted to take all of the different components of an analytics project, and I wanted to break that down, and so that's, that's where I started.
11:10 And so thinking about the problem, as I think about an analytics solution, I, I typically will think about, "Hey, let's go review the data. Let's think about what's happening there. What are the key insights that I need to take away from it?" And that's where I start.
11:27 From there, what I'll do is I'll then, I'll then figure out, okay, how do I want to present this data? So if I'm thinking about a PowerPoint deck, for example, right? I'll, I'll start with, I'll start with, um, you know, kind of an executive summary, then I'll go into, I'll go into, into the individual insights as I'm presenting them throughout, throughout that report, right?
11:49 Uh, I'm doing something similar here, where I'm starting with, I'm starting my Tableau development with a, with an analytics mindset.
11:57 And so as I think about that, what that means is I'm doing the analysis. I'm running, I've got pre-coded data science models, forecasts, all of those things sitting in that analytics agent, all churning through the data, trying to create the cohesive story that is going to happen throughout the, the dashboard. Okay?
12:18 From there, that analytics agent then passes a, um- It then passes a, a file to a design agent, and then the design agent basically goes out and it says, it says, "Hey, I'm gonna put this data at the top of the page. I'm gonna put it in the right, lower right. I'm gonna use this type of chart. This is, this is the best way to communicate this data." And, and it really starts to structure the, the overall design of that dashboard, and, and how, how we're gonna take that data story and relay it o- and overlay it onto, onto that, that template or that, that dashboard, right?
12:55 That white space that we have.
12:57 And then what's gonna happen is that design agent will, will generate an output, and that output then gets passed off to a, to an author agent or a writer agent. And that author agent is going to…
13:10 Their whole purpose in life… Oh, dashboard's done, and it had an error. So live demo, but, but there it is.
13:20 Um, we'll, we'll talk to it, talk to it in a bit, but it's done. Okay?
13:26 So I've got an author agent out there, and, and what it's doing is it's writing the XML code that Tableau sits on top of. A- and it's tweaking and editing that. Um, that tends to be fairly finicky, and so I've got an evaluation agent that will go and do all of these QA checks, making sure that the data's right. And where it fails, it then passes that back to the writer.
13:47 Um, once, once I get a clean output, then it gets… then it will get published to Tableau Cloud or Tableau Server or wherever I want to publish that, that dashboard.
13:57 Um, and, and then what, what I have happening there is I then have another set of quality checks that happen where, um, the agent reviews the, a screenshot of that dashboard, compares it against the original specs that were designed up here in the analytics and design component, and, and says, "Yes, this met all of the criteria that we had at the start." Um, if that's the case, then, then it's effectively done.
14:22 Otherwise, it will go back and make some, make some additional tweaks and edits. So that's the, that's the overall process. The orchestrator, which I neglected to mention, basically just kicks off that overall process and, and makes sure that when the analytics agent is done, that the design agent picks up the work and, and so on.
14:40 So I'm primarily interacting with that orchestration agent. Um, as we're looking through this, the, the key, the key takeaway here is that each agent has a very narrow focus, um, in terms of what it's, what it's doing. And what that helps do, what that helps to do is that creates the, the boundary, boundary point so that you don't have one agent who's designing the, the output and grading its own homework.
15:10 Uh, by having, by having these separate agents, you've got those checks and balances in place that you can, you can start to use to, um, to make sure that you've got quality outputs at the end. And then the other, the other key point here is these quality checks. I've got lots of, of quality checks, and I've got pretty stringent requirements in terms of, "Hey, this has to be structured well," and, and, and whatnot.
15:35 Um, and so that helps to make sure that what… I don't have as much back and forth on the, the development process overall.
15:46 Okay. Any questions on the, the agent process?
15:53 Blake Feiza: While we're giving a second for questions, I will double down, too, on the, the importance of a multi-agent framework and having each agent with a narrow focus. Uh, if you think about if you have experience in any other traditional software engineering, if you think, like, modular code base, uh, where you can take a piece that you've developed once and apply it to multiple different, uh, projects, uh, it's the same kind of thinking with skills files here or kind of these agents that we're working with.
16:20 Uh, if you can create, you know, one piece that is really, really strong for analytics or really, really strong for design, A, you can reuse that piece over and over again in different projects, and B, it becomes really easy to evaluate the quality of, of that agent, uh, and start to iterate and become, you know, a little bit more targeted on where you're iterating.
16:42 So if I feel like design is a weak point, uh, but my analysis is really good for my workflow, I can drill in there specifically and not worry about messing up the, the analytics component of this whole orchestration, so.
16:56 Matt Huff: Exactly. Good. Thank- thanks for that, Blake.
17:00 Um, cool. Other than Jurassic Park, I'm not seeing, I'm not seeing a whole lot of questions, right? So, um, okay. So the, the structure of a dashboard, and I alluded to this a little bit earlier. Um, Tableau sits, like y- it comes through as a TWB, TWB file.
17:21 Um, really what that, what that is though is that's just a, an XML file.
17:27 That's all it is. That's all a Tableau dashboard and, or Tableau workbook is made up of. And so it's just, it's just simple co- not simple code. It's just code. It's very complex and hard to, hard to navigate, but it is just code. And if it's just code, that means you can edit that code. And if you can edit that code, that also means your agents can edit that code.
17:50 And so that's, that's the approach that we're thinking about here is I'm tr- I want to be able to take a, a base Tableau file, just no, no data connected to it, no, no visualizations, nothing.
18:04 I've got a base clean T- TWB file and, and a clean XML file that sits underneath it, and then I want to add things in over time based on the, the feedback that my agents have. And, and so what I'm going to do then is I'm basically going to have my agents directly edit that XML file to make sure, excuse me, that each of the components line up with where I would expect them to be.
18:31 Okay.
18:32 So that's all, that's all that we're doing here. Um, it's, is, is literally just updating the XML code. There's some other bells and whistles that we've got, but you don't really actually need them to get, uh, agentic Tableau build. Okay?
18:49 So, like, like going back to what we were talking about with the, the design, or the design analytics and storytelling components of, of a dashboard, um, I'm ch- I train my agents. So my agents, agents to start with are stupid, and they need a lot of help. And so what I did was I went out and I… You can, a- anybody can do this. You can, you can set up, uh, a direct connection via API or MCP call to Tableau Public.
19:19 And what I did was I just pulled, um, I pulled Viz of the Day, and I, I basically then, um, cla- clustered each of those visualizations in the Viz of the Day based on whether or not they were inspirational, whether they were, um, a business-facing dashboard, you know, whatever type of dashboard they were. I classified all of those dashboards, and then I, I built a training model on the business-focused dashboards, uh, because I was primarily using this in a business context.
19:51 And so I have, I have a, a list of all of these, all of these that exemplify best-in-class capabilities, and I'm, I'm, I'm identifying where they're sh- serving up bands, what types of charts they're using, how they're using charts, when they're using charts, when they're using narrative, and, and all of that. And I'm using that to train my agent to say, "Okay, this is what good looks like, and as you're going out and building these dashboards, make sure that you're replicating what good looks like." Um, you can also embed a style guide.
20:25 So if you need to have dark backgrounds, or if you need to have a, a stripe along one side of your dashboard with brand colors and what- whatever you want, all of that's possible. Like, you can enforce that within the design component of, of the agent structure that I've got here.
20:43 It also tells you, it also tells the agent how to think about, how do you think about UX design? And thinking about parameters and color use, and how do we think about all of the ways that we want to emphasize the story that we're, we're gonna be telling. Okay?
20:58 So that's, so that's design. It was a lot of work just trying to get those, those pieces. The other interesting piece about this, though, is because I have screenshots from those dashboards on Tableau Public, and the, the TWB files where, where those were available, I also now have pa- direct patterns to say, "Okay, here's a chart type. It's a bar chart.
21:18 This is what a bar chart looks like." But I also have the corresponding XML for that bar chart as well. I've got a pattern, that same XML structure, and I p- and apply it to my, um, to my Tableau XML file, uh, wherever I need that to be.
21:34 Okay?
21:36 So that's design.
21:37 Uh, moving on to analytics. This is where I spent some time. So I've got a lot of, I've got a lot of resources. My background is more data science, decision science by, by, um, just by nature of what I, what I do. And so I have a lot of capabilities built into this analytics agent that looks at clustering data. It will, it will build forecasts if I need it to.
22:02 It will, it will look at distributions, and it will compare, it will compare averages versus, versus medians, and it will start to understand and isolate trends at, at different levels of, of the data. It'll run correlations and do all of the things that you would expect a data scientist to be doing. And so, basically, this analytics agent is, is a in-house data scientist that I don't have to pay, right?
22:28 Other than token use.
22:31 And so this is sitting on my data, and it's… Every time I trigger this workflow, what it's doing is it's going out to the raw data, wherever that is, whether that's in our data lake, whether that's sitting in, uh, an Excel file, and it's going through, and it's churning, and it's running all of these models as it sees fit based on, based on the structure of the data and everything, everything there.
22:52 The other thing that I did was I, I took, and you can, you can go find chart choosers online. I found one that had 46 different chart types, and it had each of them labeled as easy to un- understand, um, difficult to understand, easy to, easy to coach on, or whatever the case may be. Um, and I u- I pass that into my analytics agent to say, "Okay, these are…
23:14 When you're thinking about a visualization, take these concepts or take these charts, and, and these are the types of charts you should use in these, in these circumstances, and make that recommendation for the design agent." So the design agent can basically come back and say, "Okay." To visualize this data, and, and it allows for me to be able to, to move beyond just, "Hey, here's a bar chart," or, "Here's a pie chart." Um, if I, if I need to have something a little bit more advanced, I can do that because I've got an example of what that looks like.
23:48 Um, and then the other piece here, right, is, um, this analytics agent is starting to craft that story, um, but it's also linking that, that data narrative to the design outputs of, of your dashboard. And so it's helping to bridge that gap as we, as we go from raw data to out- output- Basically that, that final output, right?
24:16 And so, so that's what's, that's what's happening with that analytics agent. And then as we move to the des- you know, more of the storytelling aspect of this, this is where I really start to leverage some of the LLM text capabilities. And so I'll, I'll have the analytics agent build, build the story or build the, the insights. And then on top of that, what I'll do is I'll, I'll have the LLM craft stories on top of the insight or on top of the data outputs that I've, I've generated from my, my broader analytics overview.
24:49 So that…
24:50 So the context here is the data scientist effectively goes and does the work, and then I've got a thin layer that basically says, "Okay, here's the output of that data scientist. Now, here's the, the insights that are, are coming from the, that high-level overview." And then as we think about this, other, other things that we need to keep in mind, uh, specific to more of the design is how do we think about, how do we think about developing this story?
25:18 Is this something that we're gonna read top to bottom, left to right, uh, some other structure, you know, center out or, or whatever, whatever that may be. Um, but that is going to be an important concept as we think about, "Hey, when do… where should we be showing bands? When should we be showing bands? How should we be thinking about, um, different chart types and where to show them and, and whatnot." And then, like I mentioned, like I've mentioned before, this really is driven by the data science as well as the analytics components.
25:48 Okay?
25:51 And, and then, and okay, so that's… So as we're thinking about this, we're thinking about design, analytics, and storytelling. Um, this, right, this is an a, a multi-agent framework that I've got set, stood up.
26:04 The other, the other piece to this is I'm le- heavily leveraging skills files.
26:11 Now, I don't know if you've used skills files. If not, spend some time, look at them, uh, build your own. But these are effectively commands that you, when you pull up, when you pull up, uh, an agent or, uh, a se- uh, a, a working session with, with your favorite LLM, this, these skills files, what they effectively do is they are the, the guiding principles for that LLM.
26:41 And so I use these skills, skills files to, to create structure around, "Hey, this is what good analytics looks like, and, and this is what you should do when you encounter this type of problem." Um, it basically gives the LLM guidance as to how to, how to make updates to code or how to structure outputs.
27:05 And so, like this, understanding skills as you're, as you're building out agentic workflows, understanding skills and what those unlock is incredibly powerful. So spend some time there. Think about what it is… Like, what are the common patterns of behavior you want, uh, an agent to, to execute? And, and you'll want to embed some of that within, within skills files that that agent will then access directly.
27:33 So the way that…
27:34 O- One of the ways that this really comes to fruition on my side is the XML hacking is, is tricky. Uh, it's very sensitive to issues with, um, data, data being malformed or, or whatever, right? And so what I, what I do is I have a, I have a agent write a very narrow XML script, and if it works, great. Um, I, I basically then tell my agent, "Hey, um, if this is a net new capability, go update the, the skills file so that the next time you run this, you know what works and what doesn't," okay?
28:14 The other thing is, is if the XML fails, um, it basically gives the, the agent the, the feedback to say, "Hey, this didn't work, so retry it." And so it's gonna keep retrying it and going back to my training corpus from, from the Viz of the Day datasets, um, or dashboards. Sorry.
28:34 It'll go back to those Viz of the Day dashboards, review some of that XML structure, and then it will try something different. And, and once it starts to work, what we end up getting is we end up getting, uh, a capability that effectively self-heals itself. So if we're writing that XML, if it works, it then passes that feedback into my skills file and updates that, that file directly, which is just a markdown file.
28:58 It's just a text file. There's nothing fancy about it.
29:01 Um, but that gives my agent now, moving forward, perspective on how it should be thinking about things the next time I run into that. And so, for example, ways that this is, has come, come to, to fruition in the work that I'm doing is parameters and filters and the way that I'm using color.
29:25 It really struggled with that initially, and it's getting better at that because of the, the capability that I've got here where I'm, I'm updating those skills, um, recursively.
29:37 So all right. So with that, let me stop sharing my screen, and I can answer questions.
29:46 Any questions here real quick?
29:51 Da, da, da, da.
29:53 Blake Feiza: We're looking pretty good in the chat right now.
29:56 Matt Huff: Okay.
29:57 Cool. Let me, let me pull up the Tableau dashboard that I've got, and it, it broke as I would expect it to. But it actually did a pretty decent job.
30:11 And so as you, as you look at this, so right at the start we, we've- Ran through the, we basically ran through a, a simple prompt in, in Copilot where I just passed in, "Hey, I wanna understand trends on, on the data for, for Superstore. I want it to be an infographic style visualization." And so you start to see, hey, I've got a lot of white space.
30:36 I've got clearly defined sections. I've got a trend line. I've got, um, I've got narrative happening.
30:44 I've got a whole bunch of good stuff showing up, right?
30:50 Now, you guys didn't see me writing code in the background, or you didn't see me writing, writing, building this Tableau dashboard or anything. And so it's not like, like I said, it's not perfect, but it's, it's pretty decent. And so, like, I'd wanna go through and I'd wanna change the color scheme, and I'd wanna do, I'd wanna do some of those kinds of things.
31:13 But this was all, this was all built using, using my agent and, um, and the, the structures that, that my agent develops. I've got a couple of dashboards out on Tableau Public where my agent built those start to finish. The only thing that I changed was I said, I noted that it was an agent-developed dashboard.
31:35 Um, I've got, like, two or three of them out there. But, but realistically, that's, that's all that this is, is just a, a process to get started. And so what I can then do, excuse me, um, is I can come out here, and because this is, this is built on the XML, I can just come in here, and I can, I can tweak this however I want, and I gotta remember how to add the, um…
32:02 I gotta remember how to add the shelves on here.
32:07 Uh-
32:09 Blake Feiza: If you have white space to, like-
32:12 Matt Huff: Right
32:12 Blake Feiza: … right click on the side or, like, in the seam, it should let you add it back.
32:19 Matt Huff: Yeah.
32:22 I, I can't remember. I can't remember where-
32:24 Blake Feiza: Might be in the analysis menu too.
32:28 That's the worst.
32:31 Let me look on my end.
32:33 Matt Huff: Yeah, I can't remember, I can't remember where it is. But re- regardless, like, I can, I can add it back in.
32:41 Uh-
32:42 Blake Feiza: Oh, it's under worksheet, show cards.
32:44 Matt Huff: Thank you.
32:46 Blake Feiza: Yep.
32:47 Matt Huff: Um,
32:50 right. So I've got all of this out here. I can, I can then come in here, and I can change this to whatever I want. I can, I can do all of that. And the benefit of this approach, right, is this is all, this is all built on the XML file.
33:05 And so what this means is I can come in here, and I can move this wherever I want it to be, right? This, it looks like some of these should have been, um, other bands that never, that kind of failed to manifest themselves properly.
33:20 But if I wanted to move this up here, I can do that. And if I wanted to move the narrative over here, like, that's, that's totally fine. I can do all of that here.
33:28 Um, I can, I can do whatever other formatting I want because this is all built in XML. Now, there's another way that you could start to build dashboards and, and worksheets using viz extensions. The, the downside to that is you're effectively rendering a- an HTML image in the, the workbook or in the worksheet, and it, you don't get the native Tableau flexibility that you would with building these things from scratch.
33:59 And so because I'm building these from scratch on the Tableau XML, it's going to behave just like a, a normal Tableau dashboard, and I can do, I can do whatever I want to, um, tweak and edit that, that layout, which is, which is one of the, which is one of the big, big features here.
34:17 So.
34:19 And with that, I think that's, that's about all I've got. Yeah. So Matt, a lot of, a lot of what I do is a lot of one-off reports. And so, um, in this case, I specifically asked for a, um, I specifically asked for a dashboard that was focused on, on a one-off report.
34:43 Uh, and so, like, that, that was by design. I can also go out here, and I can, I can see if I can find… I had an, I had another dashboard that I ran recently or this morning, and I can see if I can pull that up. But it, it was basically, it was more of like a, uh, it was more of a, like, business-facing dashboard.
35:10 Right. This, this was one that I ran just to make su- I was making some updates to my agent, and I did want to make sure it wasn't broken before I ran it, and it broke. Um, but this was, this was another dashboard that… Right.
35:23 So it, it can do, it can do whatever, whatever you want. It will change the structure based on the, the prompt and input that, that I'm providing it.
35:37 Cool.
35:40 It tends to, it tends to try to stitch them together, uh, Ethan.
35:45 And,
35:48 and, um,
35:51 yeah, it, it tends, it tends to stitch them together. It, it struggles with the floating a little bit, is what I've seen. At least my agent does. I don't, I don't know if Blake's had much luck with that.
36:04 Blake Feiza: Yeah. As far as I recall, it's almost always a tiled layout. Uh, it's actually on the, the list of things that I want to iterate on, is to try to teach, um, my repo to start with a floating container and build inside of a floating container. Um, so it kind of prevents Tableau from going haywire with the, uh, you know, tiled hell that you kind of get when you drag charts on.
36:28 Um, so yeah, I, I think it's worth noting, and I can actually show an example on my end, um, just off the cuff here.
36:36 Uh, I, I was going to do a demo alongside Matt with the agent orchestration that I have, although I decided to burn my tokens this morning, uh, and to do it on the Makeover Monday data set.
36:48 Uh, but I figure why not show that? So essentially I have a code base, uh, and w- I'll share a link to it. It's on GitHub, so it's kind of a starter point for anyone who wants to explore this.
36:57 Uh, but fundamentally, outside of some initial setup with like a, a personal access token and things like that, this is all that I gave, uh, my, my instance was. Here's a data set in my downloads. It's the college football roster budgets.
37:12 Create me a dashboard conveying a compelling insight or expertly visualizing the data that we have available in VizRight fashion, whatever the heck that means.
37:20 Um, and one thing worth noting is Matt's, uh, orchestration is much more focused on analysis. I think if I were to rank the two, it would be hands down Matt has some more interesting derived metrics and thinking that goes into, uh, the final product. I took a slightly different route and really focused on the design side.
37:43 Uh, and so with legitimately this one prompt-
37:46 Matt Huff: Like-
37:46 Blake Feiza: And then… Oh, yes.
37:48 Matt Huff: We're still seeing, we're still seeing the Retail TUG.
37:51 Blake Feiza: Oh, nice. Love that. Well, here is the, the Claude instance I was speaking of. Uh, this prompt here is all that I started with, outside of the personal access token.
38:01 Super short instructions. I kind of just wanted to see what would happen. Um, and here is the dashboard that we got to.
38:10 So you can see it looks like something that, you know, I would be pretty happy with for Makeover Monday in a given week.
38:17 Uh, as far as the analysis itself goes, um, it– my agent in particular tends to really like P values and-… statistical significance.
38:27 Uh, it's probably something that I could, you know, reinforce one direction or another if I wanted that to be, you know, all the way up in a band, for example, which it used to do, uh, or just not even in the description at all.
38:39 Uh, but you can start to see the idea of between the example that Matt showed, which was more focused on the analysis, and then between mine more focused on design, uh, you can kind of shape this orchestration to be whatever it is that you want it to be. So, uh, just another example, uh, and I've done a handful of these, right? I'll just click to another example.
39:00 Here's a different Makeover Monday data set that I was playing around with, uh, trying to teach my agent how to create bee swarm charts. Uh, and so it's done that, and a lot of the framework that I have, it tries to create a knowledge corpus for each of these charts. So now it's created the XML that lets me create this bee swarm. So now if I want to create another bee swarm in the future, it can refer back to that knowledge base that it has and what XML looks like for this sort of a chart, uh, and just pull from there without as much iterating and breaking XML and things like that.
39:32 So, uh, tons and tons of room to kind of explore and make these sorts of tools your own. I think there will never be a point where the iteration is, is done. Now I'm buried.
39:45 Where are we?
39:46 You are sharing the TUG website.
39:48 Um, shameless plug for the Retail TUG.
39:51 Uh, but yes. So to wrap things up, I promised some resources. I've got some resources. Uh, I have three of them, and here is a link that will provide all of them to you. Drop that in the chat.
40:07 Um, but three different resources, first of which Matt has a blog, uh, that he wrote probably two or three months ago now outlining this exact same framework. So if you want to review this in writing, I would highly recommend checking that out as a resource.
40:22 Uh, the repository that I am using, I've, I've named VizRight. I have a starter repo available on GitHub, so that middle QR code or the link, uh, tied to the link folder's path will take you there.
40:35 Uh, again, it's designed to be a starter, so as we talk about XML being super fragile, uh, this will hopefully help you get over some of the initial hurdles there and teach your agents right out of the gate how to not trip over their own feet a hundred times and burn your tokens.
40:50 Um, but as far as the knowledge corpus goes, it is totally ready to go to throw in your own resources and, you know, style guides or chart types that you want to iterate with yourself, uh, and kind of mold that into whatever you want it to be.
41:05 Uh, and then last but not least, I have a write-up from Ann Jackson, who is another big Tableau name. If you haven't heard of Anne, check her out. Uh, she's got some fantastic resources.
41:16 Um, she actually reviewed four different frameworks. One of them happened to be VizRight just by luck of the draw, and she goes through her written experience using VizRight as well as some other tools. So if you're looking for a guide to maybe follow along with as you set up something like VizRight, uh, that might be a really useful write-up to check out and compare experiences.
41:37 So those are the three resources, uh, that we have handy for you today.
41:42 Matt Huff: Yeah. And so I'm just– I was just gonna– just looking through a couple of things here. So Morgan, one of the… You had called out like, "Hey, why, why am I doing a whole bunch of one-off?" Um, I do a whole bunch of one-off because I support thousands of, of retail media campaigns, and so like one-off reports are, are kind of common.
42:03 Um, I, quite frankly, the way that I have started using this is as I'm doing research, uh, a-and actually, and so like keep this in the back of your mind. As I'm doing research and trying to, trying to figure out a data story that I want to tell, I will run this– I will run that through my agent first, um, as I'm starting to build those hypotheses and, and theories.
42:27 And so I'm, I'm– a lot of times I'm building this because, because I have questions. And so it's one of those things where it has, it has- Been something that I've started to use to help inform my approach to analytics as, as just as much as it is something that I would share out.
42:46 Um, and so that, that's key. The other thing, the other thing here is I have a lot of the tooling that's in place with this workflow, I have embedded into other parts of my workflow. And so there's things like, hey, this analytics agent does really good at this.
43:05 I'm going to use that component for a different project completely. It doesn't even have to be a data visualization project, but I've got like an analytics request that I need. And so what I'm gonna do is I'm gonna go call that agent and, and have that agent run that, that analysis. Or if I need to, if I need to compare two, two images side by side, I will- I'll use my, my evaluator agents that are going out and pulling screenshots and doing those kinds of things.
43:30 And so this has really started to… Like, this framework has really started to power a lot of my work, um, and gives me a really easy way to visualize the data for, for something that, that I may, I may not need to use or democratize.
43:45 So…
43:47 But cool. Any other questions?
43:50 Blake Feiza: Just give me a minute. Is there anything I missed?
43:52 Matt Huff: Tableau Studio? I, I do not.
43:54 So I'm very, very interested in Tableau Studio, as you can probably imagine. So yeah.
44:02 I typically try to work that on, on my side. Like the, like a lot of, a lot of the work that I've got here is specifically, and I'm specifically referring to you, Alex, um, is the data cl- data cleaning. A lot of, at least for my workflows, I have the flexibility to, to do a lot of that data cleaning on my own. And so what I'll do is I will, I will augment some of my ca- some of my workflows to do that data cleaning and prep, and then, then I can pass it to something like this.
44:35 Yeah. The, I mean, the, the, the crazy part here is it doesn't, like Morgan, to your, to your point, like I don't…
44:43 It doesn't have to be very advanced. Um, I think, I think you can, you can use a framework like this, um, you can use a framework like this in whatever, whatever capacity you're, you're in. If it's just for simple exploration, like this is, this is a great way to do some of that simple exploration without having to, without having to spend time, maybe you're writing code, maybe you're not.
45:09 But without having to go into Tableau and do all of the, the, you know, click this, click that, move this over here, move, move all these pieces apart around, build out the parameters, build out the calculated fields. Like, let, let the agents handle as much of that as, as they can, and then, and then kind of work, um, accordingly. So.
45:32 Um, so Cooley, I think the, the answer to your question is, uh, to a large degree, I think, I think it, it comes down to the design agent and making sure that your design agent is, um, is really buttoned up. For me, like that, that's important, but it's not the end of the world. And so I think if you were to, you know, if you were to take the, the code that Blake shared and, and tweak that and iterate on that for your use cases, you can, you can get that 50 to 60% up to as high as you want it to be.
46:06 Um, and, and you can iterate and refine that over time. And that's largely due to the self-healing nature of some of these programs, where you're, you're writing those skills files and you're teaching those skills files recursively how to do, how to do all of the things.
46:22 So,
46:25 um-
46:26 Blake Feiza: And, and worth noting too, if, if you end up picking up the VizRight, uh, repository and building off of it, please feel free to reach out to me on LinkedIn or even just, you know, push, uh, PRs up on Git, and you know, I would love to collaborate. By no means is it a perfect, uh, project today, but I think it's just trying to provide the community somewhere to start.
46:49 So if you have advice or perspective as far as making that starter point better, uh, I would love to hear from you. So don't be shy.
47:00 Matt Huff: Experiment. Test it.
47:02 Um, that's…
47:03 A- as with all things, that's gonna be the biggest, um, that's gonna be the biggest unlock is if you, if you just try it.
47:10 Awesome.
47:12 I think that's, I think that's about it on my side,
47:16 so.
47:16 Blake Feiza: That is all that I've got as well, so.
47:19 Matt Huff: All right.
47:20 Blake Feiza: Can wrap up a little early.
47:22 Matt Huff: Yeah. Appreciate, appreciate everyone coming. Appreciate all the great questions. Uh, you know where to find us, um, so if you've got questions, reach out.
47:30 More than happy to share, so awesome. Thanks everyone.
47:34 Blake Feiza: Thanks all
Shorts for this TUG
- Not perfect, just decent: 80% there 6:28
- Don't let AI grade its own homework 14:45
- A Tableau workbook is just XML 17:22
- Training agents on Viz of the Day 19:02
- A data scientist you don't have to pay 21:59
- Self-healing XML with skills files 28:14
- Viz extensions vs native Tableau XML 33:36
- Teaching an agent to build bee swarms 39:00
- Run it through the agent first 42:14