00:00:06.240 --> 00:00:08.240
Welcome to the Dashboard Effect Podcast.
00:00:08.320 --> 00:00:09.039
I'm Brick Thompson.
00:00:09.279 --> 00:00:10.080
And I'm Landon Oaks.
00:00:10.400 --> 00:00:14.880
Landon, today I thought we'd talk about a little more technical topic.
00:00:15.359 --> 00:00:30.399
In the past, we've been talking about adding a semantic layer on top of a data lake house so that you can do conversational analytics, say, with Claude or ChatGPT to connect into the data that's in your lake house and be able to do exploratory things.
00:00:30.559 --> 00:00:32.399
Now you can build Claude dashboards.
00:00:32.479 --> 00:00:33.920
There's all kinds of cool stuff.
00:00:34.240 --> 00:00:38.399
There's quite a bit to making that work well, though, and making it work efficiently.
00:00:38.560 --> 00:00:40.240
So I thought we'd talk through that.
00:00:40.320 --> 00:00:42.799
We'll put some diagrams up on the screen as we go through it.
00:00:42.880 --> 00:00:51.759
And hopefully that'll be helpful for people understanding how to approach it, if they're approaching it themselves, at least seeing how we're doing it and having good success with a lot of our clients.
00:00:52.640 --> 00:00:56.640
And see if we can answer questions people might have.
00:00:56.960 --> 00:01:00.799
I thought maybe for the first thing we do is just talk about what people can do with it.
00:01:01.280 --> 00:01:06.079
So I mentioned, you know, just conversational analytics, being able to ask questions and so on.
00:01:06.480 --> 00:01:09.439
What are the things that you think people will use this most for?
00:01:09.920 --> 00:01:10.480
Yeah, yeah.
00:01:10.640 --> 00:01:16.079
I think the big pivot has been like, okay, I can ask what happened yesterday, right?
00:01:16.319 --> 00:01:17.519
Which is cool and all.
00:01:17.760 --> 00:01:27.280
But what really it's surprising how much it unlocks when you actually have your data with valid numbers in AI's hands.
00:01:27.439 --> 00:01:35.599
Um and like some you know, really cool examples that we've been playing around with is like one being um board decks or just decks to present to people, et cetera, right?
00:01:35.680 --> 00:01:42.799
You can just have it populate your numbers with your company branding that you maybe put in a skill, right?
00:01:42.879 --> 00:01:49.359
So it knows exactly like your logo, how you like your decks um formatted, colors, et cetera.
00:01:49.519 --> 00:01:53.519
And it'll populate charts, trends, et cetera, from your data.
00:01:53.760 --> 00:02:00.640
So actual results, and especially if you work to uh make that foundation good, they're gonna be good results at the same time.
00:02:00.799 --> 00:02:06.000
Um the other thing too is like with AI, it has access to information outside as well, right?
00:02:06.079 --> 00:02:09.039
So the big thing that AI won't be able to get is your data.
00:02:09.199 --> 00:02:10.159
This enables that.
00:02:10.400 --> 00:02:15.199
Once you have your data, you can actually like play with uh for like what if scenarios, right?
00:02:15.280 --> 00:02:23.759
You can have it extrapolate if I changed my demand by you know, this much or my raise my prices this much, what do you think would happen?
00:02:23.919 --> 00:02:26.400
Um, you can have it go check weather on certain days.
00:02:26.560 --> 00:02:32.319
If you notice a dip in your sales, you can say, hey, what was the weather at like in Honolulu at this time?
00:02:32.560 --> 00:02:32.800
Right.
00:02:33.039 --> 00:02:34.479
And it'll actually go find that.
00:02:34.639 --> 00:02:34.800
Yeah.
00:02:34.960 --> 00:02:40.080
Um and we just keep finding more and more useful, just awesome cases with it.
00:02:40.400 --> 00:02:40.719
Yeah.
00:02:40.879 --> 00:02:45.919
So so freeing up your data for that, the that type of analysis is super useful.
00:02:46.159 --> 00:02:51.520
Obviously, people can connect using MCP servers to their transactional systems and do some of that.
00:02:51.759 --> 00:02:55.680
And in smaller, simpler organizations, that may be enough.
00:02:56.000 --> 00:03:05.360
But in mid-size, true mid-sized companies, you know, sort of 100 million plus companies, often the data environment is a lot more complicated.
00:03:05.520 --> 00:03:07.360
Governance is more complicated.
00:03:07.520 --> 00:03:12.800
You don't necessarily want to give broad MCP access into transactional systems.
00:03:13.039 --> 00:03:16.000
It can be expensive if that's how people are doing their reporting.
00:03:16.240 --> 00:03:23.199
We've done other podcasts around where do you want to use traditional BI versus um AI-driven analytics, that type of thing.
00:03:23.439 --> 00:03:30.080
But um there there are cases, there's a lot of reasons why you might want to consolidate your data into a data lake house.
00:03:30.159 --> 00:03:38.479
Let's say you've done acquisitions or you've got different business units, though that type of thing, and you want to have a uh a unified view across those.
00:03:38.560 --> 00:03:40.719
And that's where this really comes in.
00:03:41.280 --> 00:03:48.400
So um we thought we'd take just a few minutes, maybe uh 10 minutes, no more, uh talking about all right, what is that architecture?
00:03:48.560 --> 00:03:58.800
And uh I know you've got the diagram on your screen there, so you can be talking through it, uh, but we're gonna talk about what our generic architecture is when we're building on Microsoft Azure.
00:03:59.039 --> 00:04:06.400
And obviously we will build on top of Snowflake and and um all of the different main um data lake uh platforms.
00:04:06.479 --> 00:04:11.360
Uh but in this case, we'll just talk about Azure, just as the example, and what are the pieces that we put into it?
00:04:11.520 --> 00:04:12.560
This will be at a high level.
00:04:12.639 --> 00:04:16.800
There's a lot of details that goes into this besides what we'll show in this diagram.
00:04:16.879 --> 00:04:24.959
But why don't you walk us through the main pieces there, and uh I'll try to stop you here and there and make sure I'm asking questions and clarifying.
00:04:25.519 --> 00:04:26.560
Yeah, definitely.
00:04:26.959 --> 00:04:36.480
So yeah, I mean, if if we look up this kind of look at this this diagram here, there is uh you know, a couple different ways to look at it.
00:04:36.560 --> 00:04:42.079
But I think a good way to think about it is with these numbered arrows here, which kind of shows you how it the flow works.
00:04:42.160 --> 00:04:45.120
And then I can give just a quick high level about what's happening in each box.
00:04:45.519 --> 00:04:46.240
Yeah, let's do that.
00:04:46.639 --> 00:04:48.480
But on the left, you know, you have the AI assistant.
00:04:48.639 --> 00:04:54.560
So the big thing that's nice about these MCP servers, when they're custom, is they can work with almost any AI.
00:04:54.720 --> 00:05:02.319
Um so you know, we have Cloud, ChatGPT, and Copilot listed, but there's more out there that you could hook this up to if you if you wanted to.
00:05:02.560 --> 00:05:07.920
Um so from there, you know, the user when they first configure this, they're gonna get asked to sign in.
00:05:08.079 --> 00:05:11.279
Um so this is how we keep it secure, keep it governed, et cetera.
00:05:11.519 --> 00:05:14.720
So when they sign in, that actually goes through intra.
00:05:15.279 --> 00:05:18.560
Um, or if you know we're on Google or AWS, that'll be different.
00:05:18.639 --> 00:05:20.639
But we're gonna use user focus.
00:05:22.399 --> 00:05:30.639
So this is a uh Microsoft 365 customer, presumably, and they're running their um their IDs and their uh security through intra.
00:05:30.879 --> 00:05:31.600
Aaron Powell Exactly.
00:05:31.759 --> 00:05:32.079
Yeah.
00:05:32.319 --> 00:05:37.120
So when it goes through intra, it's going to first check, hey, are you permissioned to use this?
00:05:37.279 --> 00:05:38.879
We use an app registration.
00:05:39.120 --> 00:05:43.920
Um if you are, okay, then it's going to say, hey, what role in this app do you have?
00:05:44.160 --> 00:05:48.800
So we're starting to introduce roles for different levels of access that I'll get into.
00:05:49.040 --> 00:05:50.959
So it'll check, can you use it?
00:05:51.199 --> 00:05:53.759
You know, what permissions do you have to use inside of it?
00:05:54.319 --> 00:05:58.319
So that'll make sure people don't get a view into data that they shouldn't.
00:05:58.480 --> 00:05:59.120
Aaron Powell Exactly.
00:05:59.360 --> 00:05:59.519
Yeah.
00:05:59.759 --> 00:06:06.319
Maybe it's a tool that does something beyond just querying the data, but we built it specifically for a group of five people, right?
00:06:06.399 --> 00:06:10.800
Like the the kind of sky's a limit there, really, on how you how we can permission that out.
00:06:11.040 --> 00:06:11.360
Yep.
00:06:11.680 --> 00:06:13.839
Um but that's all assigned by security groups.
00:06:13.920 --> 00:06:18.879
So you know, you can just go in and go to my groups and add people and they have it.
00:06:19.360 --> 00:06:32.800
Um so from there, once that's done, then it will take that token, it'll actually go through to the um actual MCP server, which for Azure right now we host them just on a basic container app.
00:06:32.879 --> 00:06:37.040
Um obviously multiple ways to skin the fish there, but that's what we're using here.
00:06:37.199 --> 00:06:44.000
Um so from there you'll have uh in that MCP server, this is where the groups come into play, you'll have separate tools.
00:06:44.160 --> 00:06:55.040
So just to be clear, we're we're building that MCP server custom for each of our clients based on a framework that we've worked out and have used with a number of clients successfully.
00:06:55.279 --> 00:06:57.920
Um so but it's customized to each client's needs.
00:06:58.399 --> 00:06:58.720
Exactly.
00:06:58.879 --> 00:07:04.000
Yeah, we have like our cookie cutter ones, which are in this diagram, which is just query data and query database.
00:07:04.160 --> 00:07:05.759
Um I'll explain those in a second.
00:07:05.920 --> 00:07:08.879
But you know, we can add more, like maybe it's search documents.
00:07:09.040 --> 00:07:14.079
We have a bunch of unstructured documents that we want to make sure people can go actually talk with AI to.
00:07:14.240 --> 00:07:16.399
Um maybe it's get emails, right?
00:07:16.480 --> 00:07:20.160
So it's really extensible based on what you want it to do.
00:07:20.399 --> 00:07:22.720
Um so when you when it checks your role, right?
00:07:22.800 --> 00:07:25.839
We have two kind of cookie-cutter roles, I'd call them.
00:07:25.920 --> 00:07:29.759
Um, one is gonna be like platinum users or business users.
00:07:30.000 --> 00:07:34.000
This is what we've talked about in the past, where you really prepare your data for AI.
00:07:34.079 --> 00:07:39.279
You give it the context, you validate it, um, you pre-massage it, so you're gonna get the right answer back every time.
00:07:39.439 --> 00:07:40.639
Aaron Ross Powell And you'll get it quickly.
00:07:40.879 --> 00:07:40.959
Yeah.
00:07:41.279 --> 00:07:43.759
And we've sort of already calculated what we can.
00:07:43.920 --> 00:08:00.000
We we know how the company refers to different metrics and KPIs and measures, and that's all built into either the context, well, the context uh that the MCP server uses, so that you're more likely to give a business user the right result based on whatever they're asking.
00:08:00.079 --> 00:08:00.800
Aaron Ross Powell Exactly.
00:08:00.959 --> 00:08:01.120
Yeah.
00:08:01.199 --> 00:08:17.360
And I mean a good example too is like, you know, if you ask, hey, show me sales, and maybe you have three different sales views in your normal database, um, some of you might have seen have mess, like ran into this before where you have to you have to specify, I want you to use this specific table, or else it might not use it, right?
00:08:17.519 --> 00:08:19.839
So we take all of that away in this this layer.
00:08:19.920 --> 00:08:20.319
Aaron Powell Yeah.
00:08:20.879 --> 00:08:27.439
And you can actually, we we actually can do if someone says show me sales, that might mean a different thing to different users.
00:08:27.759 --> 00:08:31.279
And we can know based on what group they're in, which view of that we're giving them.
00:08:31.519 --> 00:08:31.680
Exactly.
00:08:32.879 --> 00:08:34.000
Yep, that's a good point.
00:08:34.320 --> 00:08:38.399
So yeah, that's the uh kind of business user area, what we like to call it.
00:08:38.480 --> 00:08:42.639
Um the other area we've seen huge success with analysts and developers.
00:08:42.799 --> 00:08:45.759
Um, maybe even more, but those are the two that come to mind for me.
00:08:46.000 --> 00:08:54.559
This area, which is gonna be the database dot read or query database all, is they have almost unlimited access to the database.
00:08:54.720 --> 00:08:55.919
It's only read-only.
00:08:56.000 --> 00:08:59.679
Um we don't want, you know, we don't want any changes to happen in there.
00:08:59.840 --> 00:09:00.000
Yeah.
00:09:00.399 --> 00:09:04.960
But you can read your bronze, silver, gold, platinum layers.
00:09:05.120 --> 00:09:08.559
Um you can read the definitions of views that are in it.
00:09:08.720 --> 00:09:13.120
You can read just all kinds of different things that the AI can just get immediately.
00:09:13.440 --> 00:09:13.600
Yeah.
00:09:13.919 --> 00:09:22.960
The caveat there is that, you know, because we don't have that highly curated view, and you might have column names that are complete junk.
00:09:23.679 --> 00:09:25.360
So Cryptic at least.
00:09:25.600 --> 00:09:26.080
Yes, yeah.
00:09:26.879 --> 00:09:28.960
A series of letters and numbers that don't mean anything.
00:09:29.279 --> 00:09:30.639
Yeah, or even a human can't understand.
00:09:31.039 --> 00:09:31.919
So how can AI?
00:09:32.159 --> 00:09:34.720
Um so you do have to take the results with a bit of a grain of salt.
00:09:34.960 --> 00:09:39.440
That's why we recommend this for analysts and devs, people who are not just gonna ask and be like, that's my number.
00:09:39.679 --> 00:09:39.840
Yeah.
00:09:40.080 --> 00:09:44.240
You know, they'll they'll maybe use it to accelerate their development.
00:09:44.399 --> 00:09:49.200
If you're building Power BI dashboards, you can have it create first iterations of views, then you've got to go.
00:09:49.440 --> 00:09:52.000
That's where the human touch comes in to make sure it's right.
00:09:52.240 --> 00:10:02.879
Um analysts, you you know, you can have it create you a nice Excel pivot table with all the data loaded in there and give you the first iteration of charts that you can go tweak, flip around however you want.
00:10:03.120 --> 00:10:06.399
So really, really cool kind of use cases for that piece.
00:10:06.960 --> 00:10:18.799
And we have clients obviously that have lots of uh data folks working for them already, but this enables them to more quickly be able to extend um the semantic layer and and the models that uh that they're connecting to.
00:10:19.200 --> 00:10:19.519
Exactly.
00:10:19.840 --> 00:10:20.480
Yeah, cool.
00:10:20.799 --> 00:10:21.360
Yeah.
00:10:21.759 --> 00:10:31.679
So um after all that, yeah, you know, the uh basic pieces here that we'll go through, which I kind of jumped ahead a little bit, but um right now this is on fabric, you know.
00:10:31.759 --> 00:10:37.279
As Brick mentioned, we can point this to Azure Data Lake, Snowflake, BigQuery, what have you.
00:10:37.519 --> 00:10:43.279
Um but it will come down here, and what happens when somebody actually runs a query, it uses their identity.
00:10:43.600 --> 00:10:49.759
So it's not running as some unfettered access service principle, which obviously is going to be an issue.
00:10:49.919 --> 00:10:50.159
Yeah.
00:10:50.320 --> 00:10:51.919
Um it's running as you.
00:10:52.320 --> 00:11:00.879
So if I have what that means is like if I have RLS applied where my sales reps can only see their assigned region, that just comes with it.
00:11:01.039 --> 00:11:01.120
Yeah.
00:11:01.360 --> 00:11:01.519
Right?
00:11:01.600 --> 00:11:06.639
You do have to build it in your reporting tool, but it now your AI gets the same thing.
00:11:07.039 --> 00:11:21.840
So when that person authenticates through Entra and then asks a question through their AI assistants going through the MCP server, the SQL goes into the data lake house and only returns the stuff that they're allowed to see.
00:11:22.159 --> 00:11:22.320
Yeah.
00:11:22.559 --> 00:11:22.720
Okay.
00:11:23.279 --> 00:11:23.679
Exactly.
00:11:23.919 --> 00:11:28.799
And when you go, if you go like look at the logs and see who wrote the who ran a query, it says the person's name.
00:11:30.080 --> 00:11:31.600
Even though Claude was doing it, yes.
00:11:31.919 --> 00:11:32.159
Exactly.
00:11:32.480 --> 00:11:33.840
It shows the user that initiated it.
00:11:34.000 --> 00:11:34.080
Yeah.
00:11:34.399 --> 00:11:35.919
So it leaves a nice audit trail, too.
00:11:37.679 --> 00:11:41.519
So and then again, this is kind of right here where you have platinum.
00:11:41.600 --> 00:11:43.679
You can that's for the business through users.
00:11:43.759 --> 00:11:47.440
Um, and then those analysts and devs, any of these different layers.
00:11:48.559 --> 00:11:51.440
So do you find analysts and devs are going below gold?
00:11:51.600 --> 00:11:52.320
I guess they might.
00:11:52.639 --> 00:11:54.159
Maybe they're troubleshooting something.
00:11:55.759 --> 00:11:56.159
100%.
00:11:56.559 --> 00:11:56.799
Yeah, yeah.
00:11:57.120 --> 00:11:59.200
Analysts, yeah, even I I could see that too.
00:11:59.279 --> 00:12:04.240
You know, you have, you know, I've definitely worked with some analysts who know their source systems really well.
00:12:04.480 --> 00:12:04.639
Yeah.
00:12:04.960 --> 00:12:14.320
While they enjoy having kind of a pre-modeled gold area, you know, sometimes there's just tables that they're like, I don't want to wait for a developer to go add this to the gold model.
00:12:15.120 --> 00:12:16.879
But I know 100% how this table works.
00:12:17.200 --> 00:12:18.720
I've used it a million times.
00:12:18.960 --> 00:12:20.480
Um so it's a great use case there.
00:12:20.879 --> 00:12:21.840
You're just quite right at that.
00:12:22.080 --> 00:12:22.240
Yeah.
00:12:22.399 --> 00:12:22.559
Yeah.
00:12:22.720 --> 00:12:26.879
They might they just need to uh you know guide Claude a little a little bit more for sure.
00:12:27.279 --> 00:12:27.759
Yeah, sure.
00:12:28.080 --> 00:12:29.840
Specify what table to go to, what columns.
00:12:30.000 --> 00:12:30.639
Yeah, that's right.
00:12:30.879 --> 00:12:32.320
And what you know, some gotcha's in there.
00:12:32.399 --> 00:12:34.720
But if you know the table, you know that off the top of your head.
00:12:35.039 --> 00:12:35.279
Yeah.
00:12:35.440 --> 00:12:35.840
Yeah.
00:12:36.320 --> 00:12:43.200
And so the data lake, we're basically loading any data source that the client might want to use this way.
00:12:43.440 --> 00:12:45.919
So you might have multiple ERPs for some of our clients.
00:12:46.080 --> 00:12:54.000
And we have clients that have done tens of acquisitions in the last, you know, two or three years and and need to be able to pull lots of different systems in there.
00:12:54.240 --> 00:13:00.320
But then when we model it to that semantic layer, that's where you get your unified reporting, um, where you can, obviously.
00:13:00.559 --> 00:13:00.720
Yeah.
00:13:01.039 --> 00:13:04.480
You can also uh query um unstructured data as well.
00:13:04.559 --> 00:13:04.879
Yes.
00:13:05.440 --> 00:13:05.600
Yeah.
00:13:06.000 --> 00:13:12.399
So for example, um you know we use Gong for our our sales team to uh record and transcribe calls.
00:13:12.480 --> 00:13:18.000
Um and so we pull all of that into the data lake so that we can do good analysis on that and that type of thing.
00:13:18.320 --> 00:13:18.639
Yeah.
00:13:18.879 --> 00:13:23.039
Yeah, like uh, you know, with Gong, a bunch of.txt files, text files.
00:13:23.279 --> 00:13:23.360
Yeah.
00:13:23.679 --> 00:13:25.600
Um, you know, PDFs, right?
00:13:25.919 --> 00:13:31.279
You can do um.msg for messages, all kinds of different things, Word docs.
00:13:31.840 --> 00:13:39.200
Um and essentially what you can do is just add, and this is kind of that expanding tools as you need it functionality.
00:13:39.440 --> 00:13:45.600
You can add a separate tool that's like maybe search documents or could be a little more more specific than that.
00:13:45.759 --> 00:13:52.240
But um and what that does is it goes out and it searches a RAG database through um Azure AI search.
00:13:52.559 --> 00:13:55.440
And we've seen just awesome results with it.
00:13:55.519 --> 00:13:59.120
It's really good at finding the right information um really quick.
00:13:59.519 --> 00:13:59.840
Yeah.
00:14:00.080 --> 00:14:00.399
Yeah.
00:14:00.720 --> 00:14:19.200
So when companies are thinking about how do I get ROI out of my AI, the best way to do it, at least at this point uh from what we've been watching, um there there are special use cases where there are just obvious places to get huge efficiencies, but connect it to your data in a in a good way, not just through an MCP server that connects to your Salesforce.
00:14:19.360 --> 00:14:26.159
Yes, you can get answers that way, but likely there's more complexity there that really needs you to organize the way we're talking about here.
00:14:26.879 --> 00:14:31.519
Yeah, and I think I mean just a couple of big benefits of doing it custom, or at least right now.
00:14:31.840 --> 00:14:36.960
Um one is you know, you can put all of that context in your MCP server.
00:14:37.200 --> 00:14:49.679
So it knows, you know, if I'm looking at a dip in or, you know, a client who's not spending quite as much with me, you know, a good place to go look is go look at the emails with your sales rep assigned to that client.
00:14:49.840 --> 00:14:58.799
Um it knows how your business functions, it knows the gotchas, the uh common terms, and that just comes as soon as you connect to it.
00:14:58.960 --> 00:15:03.279
You don't have to train it, you don't have to tell it, you don't have to update your system prompt, et cetera.
00:15:03.600 --> 00:15:04.320
It's all built in.
00:15:04.720 --> 00:15:05.279
It's just there.
00:15:05.440 --> 00:15:07.840
Um and that that goes for any tool you connect to it as well.
00:15:08.000 --> 00:15:11.360
If you want, this can be a data source for an agent, for instance, a custom agent.
00:15:11.519 --> 00:15:14.720
It gets that context just because it's connecting to the MCP server.
00:15:14.960 --> 00:15:15.360
Yeah.
00:15:15.679 --> 00:15:19.120
Um and then the second one that I like right now is vendor lock.
00:15:19.360 --> 00:15:25.360
You know, the uh fabric has their fabric data agent, Snowflake has I think it's Coco or something similar.
00:15:25.600 --> 00:15:31.679
They all have these ways to do it built in, but they all have their own flavor, different ways of setting it up, et cetera.
00:15:32.000 --> 00:15:39.840
This is just a simple repoint at your other data storage tool, whether that be Snowflake, Fabric, BigQuery, Redshift, what have you.
00:15:40.159 --> 00:15:44.960
Yeah, so you're not locked, let's say you build it on Snowflake, you're not locked in if you wanted to move it somewhere else.
00:15:45.200 --> 00:15:46.000
It's easy to do that.
00:15:46.320 --> 00:15:48.799
Yeah, not a complete rebuild, just uh just a repoint.
00:15:49.039 --> 00:15:50.000
Yeah, cool.
00:15:50.240 --> 00:15:50.639
All right.
00:15:50.720 --> 00:15:54.320
Well, uh, we've gone longer than I intended, but uh interesting topic.
00:15:54.399 --> 00:15:56.399
I'm sure we'll have a lot more to say about this.
00:15:56.559 --> 00:15:58.080
Anything you want to close with there?
00:15:58.720 --> 00:15:59.519
I don't think so.
00:15:59.679 --> 00:15:59.840
No.
00:16:00.080 --> 00:16:00.399
All right.
00:16:00.480 --> 00:16:04.240
Well, I appreciate you walking us through that, and we'll talk again soon.
00:16:04.480 --> 00:16:04.960
Awesome.
00:16:05.039 --> 00:16:05.600
Thank you.