This in-depth talk and live demo focuses on starting a new Einstein Analytics developer org, teaching users how to load an external CSV into the app, so that they can transform the data. That data can then be tied to actionable widgets within the end user’s dashboard. Led by Zachary Bank, Salesforce Technical Consultant at Appirio, he dives deep into the visual capabilities that exist when using the activity in your Salesforce environment.
Showing you how to import a CSV file into the developer org, followed by the ins and outs of dataflow navigation and the operation of edgemarting, Zachary then goes live. This session and demo are perfect for any business or individual who wants to better understand (and manipulate) the vast amount of data available to them. In turn, you’ll dramatically change how you approach analytics and business intelligence — particularly among sales teams.
Keep this demo on-hand when you want to bring your data to life. Whether your goal is to identify new markets or enhance predictive analytics so that you can better prepare your next product, Einstein Analytics, and this demo in general, will be highly beneficial.
What You Will Learn
- What is Einstein Analytics? [00:03:19]
- The CSV File & Dev Org (downloadable link) [00:04:52]
- Importing the CSV File [00:07:20]
- Create a dataset [00:09:16]
- DataFlow & Edgemarting the CSV File [00:13:23]
- ComputeExpression & SAQL Code [00:14:37]
- Lenses, Steps, Dashboards [00:22:20]
- GeoJSON map [00:26:07]
- Bindings [00:28:37]
- Resources [00:41:46]
- Questions and discussion [00:42:36]
[00:00:00] Thanks for joining today. We're with Zach Banks — he’s a technical consultant at Appirio, which is a Salesforce platinum partner. Zach's going to tell us about Einstein Analytics and specifically, he's going to show us a nice example of how to take a CSV file and load it into Einstein analytics. So, without further ado, here's that.
[00:00:38] Thank you, Leonardo. Yes. Thank you for joining my presentation today from CSV to custom bindings and Einstein Analytics, as he said, my name is Zachary Banks. I'm a Technical Consultant at Appirio and this is our little logo here on these awesome Xplenty slides.
[00:00:56] Okay. A little bit about me. So first off, I always have to say I'm a dog lover. I have two dogs, a Chihuahua and a German shepherd, a big, and a small. I’m a video game enthusiast. I'm here in Austin, Texas. I run the Austin, Texas admin user group leader, along with some couple other amazing people. Again, I work at Appirio as a Technical Consultant/Salesforce Developer.
[00:01:25] I'm a Dreamforce speaker this past 2019, I spoke at Cactus Forest giving this presentation. It's been modified a little bit. I'm five times certified, including in Einstein Analytics and Discovery, I've been using Salesforce since 2015. And I've been working on Einstein Analytics since it was known as Wave Analytics.
[00:01:47] Since 2017, you can find me @AdminZack on Twitter and LinkedIn. And I'm also an analytics champion. Okay. So we're going to be doing most of this presentation in a live instance. So I'm going to keep slides down to a minimum. I feel a bit of context is needed here. So this is slightly different than my Cactus Sports presentation.
[00:02:12] I didn't previously have “what is Einstein Analytics,” but we're going to talk about what is Einstein Analytics just a little bit, after that I'm going to be explaining a CSV file and how Einstein Analytics will interpret that — and key terms you need to know. Also have a link to a dev org and just show you where you can get a CSV file and a dev org.
[00:02:36] If you want to then go and play with this yourself. We’ll import the CSV file into the developer org. We’ll navigate to the dataflow and we'll do an operation called edgemarting the CSP file to manipulate the data. And I'll explain each of the different little operations relevant there. We'll talk about the computeExpression inside the dataflow.
[00:03:00] And we'll, we'll talk a little bit about the SAQL code and the JSON code, and then we're going to be very much live in a dashboard that's pre-prepared with some lenses, steps, and the bindings. Then lastly, of course, you've got to give credit to the resources that you use. That is the agenda. So, next slide.
[00:03:19] What is Einstein Analytics? So first off, it lives on top of Salesforce and yes, it costs money. No, I don't know how much it costs off the top of my head. That is a very common question. Salesforce acquired a company called Edgespring. I want to say in 2013 or 2014, around the time of the exact target acquisition, it rebranded Edgespring into Analytics Cloud or Wave Analytics, you may have heard.
[00:03:48] And most recently, it's been rebranded into Einstein Analytics. The core of the platform is built around this proprietary software that Edgespring made called edgemart. It's a powerful data storage solution and the lens framework, which is the visualization solution — it's a dynamic visualization engine that Salesforce saw a lot of. And they still do today.
[00:04:14] It runs on a lot of JSON, API connections of proprietary SQL language called Salesforce Analytics Query Language, or SAQL for short. And it connects a lot of external and internal data. I don't know how many connectors there are at this point, but there's a lot more than a few years ago.
[00:04:33] You can connect your AWS, you connect Microsoft Buzzer, you connect Salesforce orgs. And these are some of the logos you may see for Einstein Analytics. There's the little bar, there’s Salesforce Einstein Analytics. And then there's a bit of an older one, but you may still see it adherent there.
[00:04:52] So this slide right here, CSV file and developer org — this is mostly for reference. So I have a couple of CSV files. If you would like to have a CSV file and you don't want to use your company data, which is probably very smart, you can just click this link and it would bring you to a website where you can download the CSV file. And if you click this link, this would allow you to sign up for a developer org really fast.
[00:05:18] And I will show you what those look like right now. So let me pull that up. Okay. So when you click the link for the CSV file, it just gives you a website that has a bunch of different CSV files already listed. You may hear me talk about the company funding records, which is just a history of different companies and their seating rounds, where they're trying to get money.
[00:05:45] And then if you were to sign up for a developer org, it's just a standard web page where you fill out your company information and then once you do it, you will get an email really quickly to start working with Einstein Analytics. You could alternatively do this with a Trailhead. I'm old fashioned, and this wasn't a — this came before Trailhead and Einstein Analytics.
[00:06:10] So I just have this bookmarked. Okay, switching back over. And so before we talk about this screen — so, let's act as if you just logged into your dev org here. So, this is what it looks like in Salesforce Classic. If you click the dropdown in the upper right-hand corner for App Launcher, you will see an option for Analytics Studio.
[00:06:39] Or if you're in Lightning Experience, if you land up here, you can click App Launcher in the upper left-hand corner instead of the upper-right. And you'll see Analytics Studio right here. Whenever you click it from either or, it'll bring you to the same spot — Einstein Analytics. Yay. We're here. Okay. So I have a CSV file before I go any further.
[00:07:03] I want to first cover some baselines before we just start importing the CSV file. So let me unmask my screen here. Yeah, let's pull up a CSV file. So I have this CSV file imported into my Einstein Analytics. This live salary data from 2019 from my Austin, Texas user group. So it's completely anonymous and it's just for reference here.
[00:07:33] So some key terms I'm going to be talking about — I'm going to be talking about rows, columns, and cells — Einstein Analytics, we'll reference those terms a lot in your binding in your JSON, in your steps. It's referenced a lot everywhere. So when I say column, that means like you're column A, column B, column C, etc.
[00:07:54] That means everything in this column. So there's a lot of different individual values in the cells. Now for cells, that just means, for instance, A2, when I select this, I am specifically referencing that one cell — and then the other option is row, where you select, for instance, row 2, and you're selecting all of the details in the row.
[00:08:18] So for Salesforce, this entire Excel sheet would typically be your Salesforce object, maybe your account table, and then the columns would be your fields. And then the rows would be records and then your cells would be the individual values inside the records, in those fields. So it's important to have that baseline understanding when working with the CSV and Einstein Analytics, just so you know how to properly visualize the data.
[00:08:46] So, let's load this into Einstein Analytics. So I have this CSV file and now I have a developer org. So let's pull this back up. Okay. Let's maximize — so, I want to click create, and you'll see a few options immediately. After you click create, you can create an app, you can create a dashboard, you can create a story, or you can create a dataset.
[00:09:14] I want to create a dataset, and look, you have many different options. We're not gonna pay attention to Salesforce data or external data. We're just going to focus on a CSV file — and now you can drag it from your computer or you could go searching for it. I'm just going to drag it from my computer and click next.
[00:09:37] And, where you store it is important and the name’s important for when you want others to start using it. I'm not going to really change the name here or the app. Just know if you store it in your private app, if you're doing this and you're collaborating with others, no one's going to be able to see it.
[00:09:54] But that's the importance of that field. I typically never interact with the field delimiter options and the file properties or the data schema file. So I'm going to just going to breeze through that. When you are uploading your CSV, it shows you what you're importing. So you can do a quick glance over and you make sure everything's correct.
[00:10:16] A key detail here is Einstein views values as either a dimension, a date, or a measure. And so a measure, that's going to be your raw number values. So like, I get paid $50,000 or whatever, the measure would be the 50,000 number. And, it would be this right here, except this is a — being handled as a dimension.
[00:10:44] This was a learning experience I had about a year ago. That's because I have a little, squiggly line in here — so that's making it being treated as a dimension, which makes them a lot of fun when you're manipulating the data. And then the other option is a date field. So, you can just use this to verify that everything's coming in properly, the way that it should be.
[00:11:09] I already have this data set loaded into Einstein Analytics, but if I click upload, you'll get Einstein doing his thing and it shouldn't take that long, but I can continue in the background and check progress in the data monitor. So if I click that. It'll bring me into another part of Einstein Analytics.
[00:11:33] So, how did I get to this part? So I just clicked continue in the background, but if I wanted to view it a different way, I can click the gear in the upper right-hand corner. You see, I have setup, developer console, Analytics Studio, which is this view right here. Then there's data manager, which is where all of your data manipulation happens inside of Einstein Analytics.
[00:12:00] So, monitor is where you can track the progress of the jobs along with dataflows. Dataflows and recipes is where you're doing all of the data manipulation. So when you start manipulating the data that you've imported, you do everything in a dataflow. And then we're not really gonna cover the data tab, but you could, you could see all of your data sets that you have in here.
[00:12:27] So you can see, I have quite a few. This is my personal dev org, and I use it for quite a few things. And if this were production or you would see another option over here in the upper left-hand corner, I believe it’s called connect off the top-of-my-head.
[00:12:42] They change everything every so often, but last I thought, it was connect — but that allows you to essentially do what we did in the Analytic Studio, where, when you do create dataset, there's an option to do external data, that allows you to do that in the data manager. So it's a full sweep for you to do everything.
[00:13:00] Typically you would lock this down from your end-users, so you don't want them to mess up all your hard work. That's never fun. But before I start explaining everything in the dataflow, let me pull up my little presentation again. So I can show you some terms that I'm going to be saying. So pop that back up.
[00:13:23] Okay, so the dataflow, it's built up of many nodes. We're going to be talking about a couple of key nodes here, and nodes are just the individual operations inside of the data manager. And so you were legitimately building everything step-by-step. So you're telling the machine what to do step-by-step. So, starting off with sfdcDigest, that node extracts tables we specify from Salesforce.
[00:13:57] So, if we were extracting something from Salesforce, let's say we had our accounts table and we wanted to join records, we would do sfdcDigest to pull that table from Salesforce. Edgemart — this node lets us utilize the external dataset. We connected to analytics, in this case, that's the CSV file.
[00:14:22] But if you have external connectors maybe to AWS or another Salesforce instance, you would do Edgemart. Augment. This node lets us create — augment, lets us use the primary key to join the records together. So it's similar to SQL where you're doing like left join, right join. It just lets you join the records together from two different data sets.
[00:14:37] computeExpression. This node lets us create new fields using a SAQL and it's case sensitive. So it's a lot of fun when you're doing computeExpression. It can use arithmetic, case, string, and date functions. So if you have experience with that in Salesforce, or if you pull up a formula editor, those are the operations you can use.
[00:15:11] And then sfdcRegister. So once you've done every operation step-by-step and you're manipulating your data into the data flow, you have to say “I'm done” to the machine. And so you do an sfdcRegister just to package up all of your hard work and say I'm done. And then you have a new dataset where you can start manipulating everything.
[00:15:35] Now we'll go back, live into the instance. Now that I gave that context, I'll probably also just continue to explain different nodes that may not be relevant today, but I've been doing this for a while, and so you may see, I have some extra large, well, this isn't the largest — but a lengthy data flow. So they're actually going to be changing this soon.
[00:16:00] I want to say summer 20, but this has been the data flow editor for a couple of years. You can see the name of the data flow. Whenever you set up a dev org, you always get default Salesforce data flow. If you wanted to create a data set, you could do that from this screen. So, test, continue.
[00:16:21] And this is how you could do a sfdcDigest to extract a table. Or you could click this button here and you could have a less friendly UI to do it, if you're a bit more advanced. A digest, that could also be used for the external connections. But down here, I already have my CSV file loaded in my salary data CSV file.
[00:16:47] So I've done an Edgemart node and I've selected my dataset previously, where I just selected my little dataset I've imported. Then I've created a new field using a computeExpression and it is case-sensitive. So that's why I have it prebuilt in here. So I'm not dangling with the little capitals and lower cases, but if I click it, you can see, I have a case statement.
[00:17:14] When this column name contains “Admin” then “Admin” — and then you have to tell it to end. And so what this statement is doing is — I’m essentially creating another column or another field as you would in Salesforce, but we're just doing it all inside of Einstein Analytics. And I'm saying, based off my CSV file, anywhere where someone selected or put in that they have the word “Admin” in their job title, it would then stamp admin.
[00:17:47] The reason I did this is because on my survey, I created a multi-select pick list for job title, which was the worst idea that some, some people pick, they had 20 job titles, which is fine. If you want to pick that — made it fun, connecting all the salary data.
[00:18:03] So that's why I use this example of just getting a clean job title. Plus this isn't really that friendly, “which role does your current role relate to the most?” Anyways, so that is a computeExpression node where I'm just creating another column. I'm cleaning up the mess that I made, and then I have the register and I'm registering all that hard work that I did right there, but for augment nodes.
[00:18:30] So say if I wanted to, let me see here. If I wanted to join two different tables. So right here, I'm doing an sfdcDigest and I'm extracting the account table. Now this name is, you set this name. So make sure you give it a descriptive name. Otherwise, people are going to have to click into it, just to see which table you selected, which is not fun.
[00:18:53] So be descriptive of your work, and the source object I selected is account. And then you see right above it. When you look above it, I have “extract user” and I have some squiggly lines connecting to a couple of other nodes. That's nice because you can see the relationship to the operations you're performing and you can see, I have a node that's performing an augment operation and it's called “join account owner.”
[00:19:23] I hope you know what that is doing, but it is joining the account owner. So the account has an owner field in Salesforce and I am mapping the account owner to the user table so I could pull user fields from that table. And when you drop them into a chart inside of Einstein Analytics, everything will be dynamic and work together. So you're able to pull many tables together. Anyways, after you’re done with all that hard work.
[00:19:54] You would click run, you would click update data flow — if I had actually changed anything right now, then you would click run data flow. And when you run the data flow, actually I should just be able to run it. I don't think I've changed anything lately. That will cause a tear-out. It only takes a couple of minutes when you have some minuscule amount of data.
[00:20:15] And in the monitor section, you can see the jobs and once the load a little bit more. It'll typically tell you the operations of every single node. So you could see like records in, records out. It doesn't want to pop up yet. Let's see if it's there now. Nope, the servers are being picky today. So it would typically say the node name, slightly to the right here.
[00:20:41] I've done this a little bit. So I have it like in my head — it would tell you the status of the node right below that, it would tell you records in. Oh, it loaded. There we go. Okay. Name, it would tell you all of the nodes in the, the data flow, would tell you the status. So if you run into an error, it will give you an error message, which is nice.
[00:21:04] It'll tell you the type of node. So once you start knowing what the different operations do, you can figure out where the data flow is getting hung up. It gives you [timestamps. It gives you duration. So you can see, it's only taken a couple of seconds to perform extracting the entire account table from Salesforce — that took 12 seconds, but I only had a thousand records, so it wasn't really that many — and it put out the same amount of records.
[00:21:32] So all is good there. And it's still performing the operation, but I have already run it, but that field’s to show you, you can monitor everything inside of Einstein Analytics in the data manager, but let's go ahead and switch back to the Analytics Studio.
[00:21:55] Okay. So when you want to begin working with the data set, you can immediately just go to, let's see, where is it? I go to all items. You'll want to have it stored in an app, so you can just have it stored in your, my private app. That's acting like a folder. So that's, like your report folders in Salesforce, you need to store it somewhere, your datasets.
[00:22:20] And so if I click data sets after clicking into my private app, you'll see here, I have a few, couple of different CSV files, but you'll see, I have the datasets that I was working on previously. If I click the dataset, it brings me right into a lens. So going back to my presentation earlier, lenses, the bread and butter of Einstein Analytics.
[00:22:42] It's a dynamic visualization engine. So going back to dimensions and measures, your bar length, that would be your measure field. So your numbers. So the amount of the opportunity or the customer satisfaction score. When I click the plus sign. You can see the fields that I have listed as measures.
[00:23:02] And I think this is the checkbox field. Do you work for Salesforce partner? And it's counting the amount, let me click a different one. You identified, you manage, that's a yes or no. And so, yeah, so 47 people said, yes, they manage employees. I would have to go and fix slides showing negative 47, but that's what we get when we do the slides.
[00:23:28] Just continuing on dimension. So that would show up under bars for your standard bar chart, that allows you to group your measures by different fields or dimensions in Einstein. So I had fields asking, what age group are you in? And so we could see the age group of the people as it corresponds to, do you manage employees?
[00:23:54] And you can get a lot more advanced. We're not going to go into every chart possible because they have a lot of charts and you can even make your own charts and import them. This is not a chart conversation, but that's just the basics of playing with your data inside the lens. So now let's talk about the dashboard that I have put together.
[00:24:15] We've imported the CSV file. It's inside of Einstein Analytics. We've added, job title. So now I have a dashboard put together. I've organized it and a different app called Austin Salary Survey 2019. You'll want to do that just to organize everything and control access better to your end-users.
[00:24:36] So you can control the access based on the different applications. And you'll see here. I just clicked a dashboard called Austin Salary Survey. It's prebuilt, all of these little components on the dashboard. These are either a step. So there's a widget and widgets are the different visualization tools you have.
[00:24:58] And when you drop a widget into a dashboard, it'll just bring you up into the lens editor. So another way to do the same thing in Einstein, just for context and what a widget is. And you'll see here, I already have a dashboard built out pretty nicely. And if I start clicking around, I have fields in here that, whether you're working for a for-profit company or a nonprofit company, and I have, are you a male or female or you prefer not to say, or, and so you could click multiple widgets at once.
[00:25:40] And so I had all my females answering. They worked for, for profit. That was 46. Then if I unselect for profit, I have two females that reported their salary and it's showing the dynamic visualization right there. You'll see here, it says it can't display this widget just because sometimes when you click different combinations, you don't have any reports for that, which is fine — that just shows there’s no data.
[00:26:07] And once I unselect nonprofit, we can see this chart was job search status. So I have a question on the salary survey. What is your job search status? I'm going to unselect female. On the left here, I have a visualization. This is a bit more advanced, we're not going to really talk about this today, but on the resources section, I have a LinkedIn for Salesforceblogger.com, which explains how to create a custom GeoJSON map.
[00:26:38] This is exactly what this is. This is a map of Austin, Texas, that I loaded as an image. And I've been trying to get this aligned. So I crafted this custom GeoJSON area on the map, myself. My artwork is beautiful. It corresponds to North Austin, Central Austin, or Downtown, and then South Austin — and Austin covers a lot when you think of the Metro area.
[00:27:05] But if I click the shape for North, this shape for Central, they'll just filter my data and you can do this with regions for your account executives or where your prospects are. So there's a lot of different use cases for GeoJSON. Then I have a detailed table that's just reporting that entire CSV file.
[00:27:30] So it's just loading everything. So when you start clicking on a chart, it's just dynamic. So it's just showing you everything that's being filtered onto this little detailed table, and what records are relevant. So I'm going to refresh whenever I've made a booboo on my dashboard and I'm getting errors.
[00:27:49] I just click the refresh button that appears in the upper left-hand corner. Let's say I wanted to create a new chart to go on this dashboard. I can do “create query” and you can see, I already have a bunch of queries on here when you click create query and I'm going to click FinalATXSalaryData. It brings up the lens editor.
[00:28:13] So you can create the queries right from the screen, and you can create the charts that you want, or if you don't want to be in chart mode, you can go into a values table, or you could go into a compare table — or if you want to get really fancy and you want to start using that SAQL language, which we're not gonna dive too deep into, you could write everything.
[00:28:37] In SAQL code, which is kind of like SQL code, but not really it's Salesforce’s proprietary version and it focuses on putting data into data streams. And then you do all of the data operations for this lens, step-by-step. Bindings. So bindings allow you to make your dynamic dashboards even more dynamic.
[00:29:02] So you see here, I have this little widget that's showing location, job search status, and job title, job title is that, it's the field where we fixed — if you're an administrator and it contains admin, then it'll spit out admin. But these are all separate columns and I have them all in one little widget.
[00:29:28] How did I do that? You can see when I click that. Let's see where is the chart. Let me move this up. Just so I get this down.
[00:29:41] You can see when, let's make that bigger. Yeah. Delete that for now. Cause I'm not going to save anything I do. Let's move this up, make this prettier. You can see, I'm just expanding everything to make the visualization nicer. And you can see, I have a chart right here. That's reporting base salary in Austin, Texas, and I have a group by where in Austin they’re at.
[00:30:03] But I want to see their job search status. Now I can just click a button and it shows me the salary based on everyone's job search status or job titles. So I have stuff cleaned up a little bit nicer than my giant CSV file. And you can see what the different groups reported for their salary, based on their job title.
[00:30:30] Now I'm going to explain the bindings, but before I do that, let me go back to my little presentation before I just throw some JSON code at you. Okay. Presenter view, and we're not going live right now. Binding syntax. So you see, I have this color-coded. So, Einstein Analytics is case sensitive.
[00:30:58] So everything on this slide is important. You need the open quotes, you need the two open curly brackets, and then you need a data selection function. So going back to column, row, cell, you need to specify what's your data selection function, and this function determines what data is being selected from a stab or your Salesforce table, etc.
[00:31:22] It can either be data from an Excel column or row. Then you have your step name, and so my step name in the dashboard is Step_1. So that is the ID of the steps. So that query where you put together a lens, that is the ID for that step. And then you're doing your binding functions. So this is the type of binding that should be used.
[00:31:50] There are result bindings or there are selection bindings. I'm doing a selection binding because it requires my users to select something. They're selecting one of the values on the widgets so they can see what data they want to have the chart grouped by. Then you specify the details from the reference step, and this is related to the data selection function.
[00:32:18] It defines the field or column in the table to grab, as well as what row should be used. I'm going to go to as object, a data serialization function. This defines how the data is formatted. For example, a string with double quotes, an array of strings, and array of array. I'm just doing as object because I'm selecting my table and I'm selecting my field from that table.
[00:32:49] But if I was using dates or if I was using measures and your data serialization function could be different, which I'm not going to list all of them, but you can find that on the developer guide. Now that I gave just a high-level overview of the binding syntax, let's go back over. I'll just pull this up.
[00:33:14] Okay, so when you press command if you're on a Mac and I believe that’s control E when you're on Windows, that brings you to the JSON of the dashboard. So everything you do in a dashboard in the UI, it creates a whole lot of JSON code for you. So, this little dashboard has created 5,000 lines of JSON code for you.
[00:33:39] That's pretty cool. I want to find where I'm referencing this step where I'm toggling between location, job, search, job title, and this chart. So I'm going to go into edit mode. I'm going to click the step, and I'm going to query, and I have it named as Static_1, not Step_1. Typically it comes in as either Step_1 or Static_1.
[00:34:05] You should be naming your ID fields better than I did here. But for the purposes of this, and then I have this query called Salary_Bar_Chart_by_1. Okay, so I'm going to go in, I'm going to search Static_1. And here we go. Okay, so since I am grouping by a dimension, I would find my salary bar chart.
[00:34:32] And under the query, I would have different lines called measures. And you can see it's doing an average of the compensation, the base salary, and then the groupings. This is where it tells it to do the different groupings. So just — I could have it like above and just have a field and then it would do the groupings, find the field, but I want to make it dynamic for my users.
[00:35:00] So I just have a little bit of a JSON code in here, where I have my, a little quotation mark — my two curly brackets open. Then I have my — the column for my function and I have an open parenthesis for my step name, which is Static_1. I have my function, which is a selection function, so I can get the selection instead of results.
[00:35:26] Then I'm saying my field is dimension two. So, I'll show you where that's referenced in a moment. Then my data serialization is .asobject. And so just going from that right there. So once you get the hang of it, it's really just a lot of copy and paste. You can have a binding code just set aside in the S code or a notepad, and then just take your stuff name.
[00:35:57] So if I edit this. Let's see, is it going to pull up? Yep. Continue. I have a static step created with dimension two and dimension three, and I have it displaying location, job search, job title. And then I'm referencing my dataset, which is the final ATX salary data. And then I'm referencing the columns, which is location.
[00:36:24] Job search status and job title. And then I created another option because on this chart, I'm doing multiple groupings. So I'm grouping by your location and I'm grouping by your salary and I'm grouping by your job title. And so when I click location, I want it to show job search status. And so I just have a few different options in here.
[00:36:45] Just to show based on the chart you're using, you may have to think a little bit. Since this is a group bar chart, I have a couple of different options going on here and then with a job search. So we talked about the chart, how we did the binding, and we talked about the static step, and this one part — how to create a static step.
[00:37:10] So I've showed you multiple times how to create a lens, but what if you want to create something even more from scratch? Well, Einstein gives you that ability. You can create a custom query. And you can create everything from as much of the scratch as you want. You can say what you want the values to look like — testing, testing 2. And if I didn't put anything else on this — testing live.
[00:37:43] You see, I just got a step here, and then if I dropped a little toggle widget, I could drag that static step I made, and look — I have a button here, but it doesn't do anything because I haven't tied it to anything. So, if I go back and continue to edit this, let me add testing — edit cell.
[00:38:04] I could add a column and then back to knowing dimensions and measures. I could click dimension. I could click the dataset that I want and it'll give me the different dimensions I could select. What age group are you in? And then you can see, I can ask like two different options cause I added the two to that.
[00:38:28] And then if I perform the binding I have over here. See if it will want to do it. And if I reference, let me get the name that I just put here. What did I put? I put query testing, TestingLive_1. If I just change this, I'm going to have to get the column name that I put, but let’s try it.
[00:38:54] Mention, what column name did I put? So, I have to grab this really quick. Go into edit — dimension two, I did leave it the same. I was second-guessing myself. So let's go back into this. I want to change this part. So this is where I'm dropping the static steps ID. I'm going to delete this and me or out because my chart might not be compatible.
[00:39:17] I'm just actually — that was dimension two. Let's leave that. So you can see, I'm still doing a column of selection here because I'm selecting that entire column for the fields that I want. I have my step name that I'm selecting — I'm performing a selection finding because my users have to select something. I’m saying where the data lives and then I'm doing an as object serialization.
[00:39:42] Let's see if it airs out — ah. It doesn't like the comment at the end of that, for sure. That's probably — hey, you're an expert. You're a pro
[00:39:58] Let's see here. Not gonna like it though, because this chart is, it has multiple values in here. Oh, let's switch it back. So I've edited it. And now this one is not going to work. Nope. It wasn't that one. Which one was it?
[00:40:16] Let's see query. Oh, that had a two in it, didn't it? That had a two.
[00:40:23 Let me try — here, Static_1. Oh yeah, cause I edited the one that was a little bit below it. This goes back to properly naming your steps. So let's go and change that. So this is Testing_Live_1, and then two, column, and it doesn't like this comma — case-sensitive, everything matters.
[00:41:02] And now, I broke it. So bindings, they're very picky and we just went through a working one. Let me refresh my screen here to get everything. This happened at Dreamforce too, with Peter, that was fun. When you run through it like 50 times it works, but the second you go live, it decides not to. Right, it’s the rule of demos.
[00:41:27] Yeah, it’s the rule of demos. I have the Swan example working here. Where it's just super picky, but I can show you that it is in fact working. I'm going to pull back up my little slideshow here.
[00:41:46] And, center view. And then the resources I use for this — I love Salesforceblogger.com. She has been blogging about Einstein since 2015 or 2016. So very shortly after the acquisition. If you're just getting started with Einstein, I highly recommend checking out Peter Lyons, Let'sPlaySFDC YouTube, and then, the Einstein team, they have all the trainings available for free on YouTube, under Einstein Academy. I have that linked here. And then thank you so much for having me.
[00:42:23] Thank you, Zach. That was a really neat presentation. And you know, something always goes wrong with an online demo, but I think we got the idea of what you were trying to accomplish there.
[00:42:36] So, let me back up for a minute. So, so basically, these days, these connections that you're creating — Einstein Analytics is caching data in there, right? Basically, you know, roughly. So, are there limits on how much you can cache? I mean, can it cache a giant Redshift database into Einstein analytics? Or how does that, how does that work?
[00:42:57] There are limits, the limits vary between connectors and you have to follow many different limits. So you have to follow bulk API limits sometimes — you have to follow each individual one. I think one example — I'm trying to think, the Heroku SQL connector, I think it has a limit of a hundred million rows.
[00:43:23] So it’s not really meant to be like a data storage solution and you do have to consider every single limit when you're trying to connect data. Otherwise, it's not going to scale at an enterprise level.
[00:43:36] Right, so probably you're going to do things like summarize, summarize your data before you push it into Einstein. And you just have to like, like with any other analytics tool, you have to be a little careful about what you're doing — you just can't point it at a data source and say, go.
[00:43:50] Right, because you have to be a good tenant in a multi-tenant landscape. You can't take up all of the cloud's resources. So you have to be mindful of the limits. And you have to, if you have such a large amount of data and you're trying to get like maybe a billion rows, which I think is the limit of Einstein Analytics, you may want to consider while it's there like bias in that data, is all of that data valid before you try and import it. It's not going to be the best solution for just importing all of your data.
[00:44:20] If you have lesser amounts of data, like you saw I only had like a thousand rows or even a few million rows — that's probably fine because you can then manipulate that data in Einstein Analytics. But it's not meant to be a housing solution where you house all your data. It's really meant to be that visualization, so you start to interpret your data for your sales team, or your executive team, or your customer service — visualize how maybe scores are happening in different geographical locations.
[00:44:50] Yeah. So those datasets are, can they, can they be refreshed? Is there a scheduled refresh that you can set up?
[00:45:01] Okay, and as a user, is the user notified of how new or old the data is? It might’ve been that I missed that.
[00:45:08] They aren't notified if the data is old or new — I mean, admins can figure it out, and users typically figure it out when they start getting mad that the data is out of sync.
[00:45:21 So with scheduling in Einstein Analytics, you have to go in and you have to set that schedule and consider, if you have datasets from different data flows and you try to reference it in another data flow, you need that other data flow to finish before you can have the relevant data for that data flow. If you don't, you have data drift — uh, very common.
[00:45:44] And so you have to be very strategic and know there is not a big indicator saying this data is not out of sync — when you’re in the dashboard editor. Of course, if you're an admin, you can go and check that. But our executives, we don't typically just give them admin access
[00:46:01] Right — on the binding stuff that you're showing us. I mean, obviously super configurable. That's interesting. Do you find that when you're building a visualization or a dashboard for a customer that you have to, that you do a lot of that? A little bit? Can you, can you usually put out a nice dashboard without doing a whole heck of a lot of JSON editing for those people who don't want to get into that?
[00:46:24] Yeah, so the salary survey, aside from me going the extra mile and creating a custom GeoJSON map — that one binding that was going on there, all of that was just out-of-the-box in the UI, there was no SAQL code, or me going into the JSON. Besides that, some common use cases are if you have the same chart and you're just switching like one dimension, or one measure, but it's the same exact chart. You’d probably introduce a binding there, but for the most part, you don't need to use bindings — but it can definitely save a lot of dashboard space, it can save your users a lot of time, and it makes your users feel like they're in more control when you have more options for them to interpret their data.
[00:47:11] Sure, sure.
[00:47:12] But you don't need it. It's nice to have.
[00:47:14] Well, I mean, it just shows the power of the tool that you can, you can do that kind of stuff. Speaking of the geo stuff, I mean like some database tools like Tableau, or for example, you can have a US map and paint the map. I believe Tableau even has county — it goes down to the county level.
[00:47:32] Does Einstein Analytics have that kind of capability?
[00:47:36] Yep, so I think I'm still sharing my screen, so I can just, really quick — so let me maximize, if I just go and create a little query, FinalATX, and then if I switched to the charts, maps — you have a few different maps. So you would then have to specify in the formatting.
[00:47:56] But you can do world countries, States, Americas, different regions of the world. It doesn't have counties. That is a common use case for, um, — you can see where I was like importing maps. Yeah, very common use case for you to import like counties of the US and get like a county map — and then when you click state, it shows you the counties of it — or it could show cities in a county. You don’t have that out-of-the-box, but you can make that, yeah.
[00:48:25] Well, it was pretty neat that you could, because obviously, as in your example, you divided Austin up the way that makes sense to you when maybe everybody else looks at it that way too, but still. It was — how much work was that? Putting together that geo-map?
[00:48:39] So creating — so I pulled this image off of, I want to say Apple Maps or Google Maps, not sure. Screenshotted that. Then I went to a website — GeoJSON editor. So I didn't craft all the GeoJSON code from scratch. I like imported — oh, it may have been from this website, actually. I didn't Google it that hard. Wherever Austin, Texas is on the map and then I screenshotted it and this tool allows you to start drawing lines.
[00:49:11] Let me see if they'll let me, and then you could connect the lines. And then it eventually would spit out the code and then you would just copy that code and you would import it into Einstein Analytics. I'm not going to go with the, full —
[00:49:28] Yeah, but it wasn't. So it wasn't hours and hours of travail.
[00:49:33] No, it wasn’t hours and hours. It's just when you import a static — so, this image on the background, it's a static image. And then I have the geo on, which is overlaying the image. I am not a massive design editor, so getting everything to line up and play with the dynamics — I didn't put all that time. This is probably about, I want to say two to three hours of work.
[00:49:58] It's not like the most extensive, it's something you can get rolling with. Now, if you start doing like the county map with all the cities, that's going to take an amount of time.
[00:50:09] Right, yeah. Well, it looks cool and it's functional too — something that looks cool and is functional is always a good thing. Alright, well that — this has really been an interesting intro and I appreciate the deep dive into the bindings. And thank you so much for presenting.
[00:50:27] Yeah. Thank you so much for having me.
The Xforce Data Summit is a virtual event that features companies and experts from around the world sharing their knowledge and best practices surrounding Salesforce data and integrations. Learn more at www.xforcesummit.com.