Salesforce Wave 101 – Dataflow JSON for Idiots

This is the JSON 101 version of working with Dataflow JSON. I’m going to skip anything that isn’t the straight up basics.

So there you go… downloading the JSON file because you:

  • Need to bring in additional fields
  • Want to bring in new objects
  • Just curious about what is happening

I Read This How?

To begin with the downloaded JSON file is ugly. Like “barely human readable” ugly. You need to format it. Fortunately this site does a nice job of both formatting and validating JSON.

What’s Happening Here?

There are basically 3 actions occuring within this JSON file:

  • sfdcDigest – This is where you pull data from an object
  • Augment – If you need to connect two object’s data together, you need a join. Account to Contact for example
  • sfdcRegister – The creation of the dataset and assignment of security

How about some examples? Sure….



I’m pulling fields from the Opportunity object here. Notice that I identify via the field name (NOT label) all the fields I want to pull. This is obviously a snippet of all the fields that I would really want from the Opportunity record but it does work.

Now if I just registered this I’d basically create an island of data. I can’t connect it with an account or the owner. In fact all I would see is the Account Record ID’s. That’s no good. We need to join it up.

Augment but we call it a Join


In a SQL world we would call this a JOIN. I have two sides of the Join:

  • Left – it is being stated as the Extract_Opportunity that I defined above as “left”:”Extract_Opportunity” (hey that looks familiar)
  • Right – Its being stated towards the bottom as being the Account: “relationship”:”Account”.

(now truth time it is actually calling another Augment “Join_AccountOwner. But let’s not get carried away with this.

The main point of above is that you are asking Wave to look at every AccountID in the Opportunity sfdcDigest and link its matching Account data using the two keys specified above. The two keys have to match. Account ID = Account ID. And obviously I recommend that these keys be unique.


Okay so we have some data downloaded and we created a join (or 4 depending on needs) and now its time to create some datasets.

         "rowLevelSecurityFilter":"'Owner.Role.Roles' == \"$User.UserRoleId\" || 'OwnerId' == \"$User.Id\"",

Now what in the world is going on here?

  • The name and alias are what your users are going to see as the dataset name in Wave.
  • The source will be the joins you built above
  • rowLevelSecurityFilter – oh baby that is outside the perview of this discussion but basically the above will force security that you will only see data at your level of the role hierarchy and below. So a Sales User will see a certain sub-set of data while the Sales Manager will probably see more.

What Am I Going to Do With This?

We are fortunate people as more then likely we will be downloading a JSON file from Wave and then adjusting it. But at least you now understand the functions happening here.

  • Need to add a new field? Change the sfdcDigest for that object
  • Need to bring in a new object? Then you need to do all three actions

Salesforce Wave – Dataset JSON Download

Part of the deal with Wave is that you need to edit and mess with routinely the JSON files that power all the functionality. If for example you want to bring in new fields or objects into Wave, you can either:
Attempt to edit the JSON file for a particular dataset (hmmm)
Edit the jSON file for the who Dataflow.

Unless you have some massive datasets, its probably the easiest just to edit the dataflow’s JSON file.

Pretty easy to get there. Its within the gear icon labelled Data Monitor
Switch over to Dataflow View
Scroll down to the Dataflow you want to monkey with and click “Download”
Obviously once you download and edit it, you need to upload the updated file for it to take effect. Fortunately the link to upload is there as well.

IF YOU WANT IT TO TAKE EFFECT IMMEDIATELY – then you need to rerun your dataflow. Otherwise the new settings will take effect on the NEXT run.

Be aware that if there is an existing dataset for an object that your edits here will NOT affect security. For that you need to edit the dataset itself and update there. (Thats true as of March 2016)

Apps We Love Gridbuddy

As a team with our customers, we are continually updating lots of records at once. As much as we love Salesforce, sometimes it needs a little help with this and that’s where Gridbuddy comes into play.

Full Disclosure: This is a continuation of an occasional series of apps that we either use and/or have recommended to clients. Some of these amazing ISV’s allow us free access within our own system so that we can understand its functionality and how it can apply to our clients. Our relationship with Gridbuddy goes back many years and if it were a dog, it would be old enough to order its own beer. To that we say, “Cheers!”

What is this Again?

I could talk about the functionality of Gridbuddy, but I think this video does a great job:

Instead of talking directly about features, let me discuss with some internal examples.

Reporting Tool…

Yes, Salesforce has an excellent reporting and analytic tool. There is no reason why not to continue to use that function. Even if you have Salesforce Analytics (Wave) or Tableau, you will probably still work and use the built-in reporting tool. But that’s another blog post.

A key aspect of Gridbuddy is its inherent ability to show detail of not just the parent, but also the children. While it is not a pivot table or matrix, the reporting tool and its summary abilities are not there, but it does have the ability to show good shares of data in an excel file. And if you need the detail, that is helpful, as well.

Ever try to report on a long text area fields? Go and try it in Salesforce reporting. It truncates it! Gridbuddy? Nope. All those fields in all there wondrous glory, all formatted like you left it. Easy-peasy.

Another feature we like is that the export function also breaks apart the children into separate tabs and includes the salesforce ID’s. This makes mass editing and working with data loading tools easier for an admin.

Notice that for each object in salesforce - there is a separate tab. This makes data quality projects a bit easier
Notice that for each object in salesforce – there is a separate tab. This makes data quality projects a bit easier

Respect the Record Type

It may seem not a large deal but if you have record types you know that its important to protect the fields and field accessibility layered into our app. While salesforce does a decent job of protecting us when using the standard page layouts, its important that other editors also enforce those rules. Gridbuddy will enforce your record type’s field protections and so even if a user attempts to make a mass edit – the system will stop them from saving.

Thinking WAY Outside the Box

Unfortunately we cannot show a screen shot of this but there was a client that wanted to center their salesforce usage on only Gridbuddy screens. Fortunately it is possible with a some ingenuity to allow your users to do almost all of their day-to-day effort using Gridbuddy. For example:

  • Use Visualforce and the Tab function to create a tab for each grid in the sales process.
  • Define your grids so that there is a grid for each stage in your opportunity pipeline.
  • As Opportunity stages change, the records will naturally flow from one grid to another.
  • Consider using workflow actions to record completed call activity records based on information stored as fields on the opportunity.
  • Consider creating a call back date field on the opportunity so that each grid is sorted based on a call schedule.

There are so many options to consider for this tool. Again Gridbuddy does a great job of defining their core components but we wanted to highlight some features that are typically not shown in the standard tool.

Apps We Love – TaskRay

We have gone through several different project management systems both built outside and inside of Salesforce. We have settled on TaskRay as it provides the right amount of complexity along with enough ease so that we don’t have the need for a full-time person managing the software.

This is first of an occasional series in Salesforce apps that we either use internally and/or recommend to clients. Some of these amazing ISV’s allow us access to their apps for free. They do this so that we understand their functionality and help our clients determine if this product is their “best fit”.

I will let BracketLabs describe how the tool works “out of the box”:

We looked and/or used several tools in the past:

  • We tried milestones but it was far more complex and challenging to maintain
  • We then used key aspects of milestones with our own custom build and it was “ok”, but we needed a stronger UI.
  • Trello was next and it was certainly a staff favorite in terms of usability. We also liked the ability to invite our customers in to participate for free. But the time keeping was a challenge and paying for Harvest just didn’t seem necessary.
  • An here we are with TaskRay.

Unlike other systems, we have the ability to make dramatic customizations and adjustments to construct TaskRay to fit our needs. Since we’re a consulting shop our needs are specific. And also the tools sits on Salesforce so the ability to make adjustments is wide.  This post is dedicated to show how we have cut, pasted, folded, and primped this tool to fit our needs instead of showing you the basics. Ultimately that is the hallmark of great software: fantastic features out of the box, but the ability to create it to be your own.

Make it Pseudo-Agile
We’re not a devout supporter of the “Agile Process”. (The Agile devout please forgive us) But we do like the ability to track requirements for each part of the project and how that helps the customer. In our system we achieved that by simply utilizing three fields in each task:

  • What is the description of the task? What are we doing?
  • What are the assumptions before starting this task?
  • What acceptance criteria will be used to demonstrate completion of the task?

To do this we created a few fields on the TaskRay task object and added them to the field set. Now our taskray task screen looks like this

our pseudo-agile screen
our pseudo-agile screen

Note that we are still using the Description field to store details but now we also store our acceptance and assumptions on the task. This makes it easier down the road to check our work.

Making Mass Edits

With that we can use our Gridbuddy integration to make mass edits to our tasks. (hint great product) Now we built all kinds of craziness to combine the two. Fortunately those two companies got together and made the whole process easier.

Hours Tracking and Budgeting
Now for tracking of hours there are budgeted hours vs. actual hours. Both have a place in TaskRay. We just had to perform some creative engineering. But for most experienced salesforce admins, this is simple efforts.

For budgeting, we have a simple number field on each task. These values roll-up to the project automatically.

We store a simple budgetary number on each task
We store a simple budgetary number on each task


We also store values on the project record for billing rates and for different types of work. This allows us to do some calculations on the effort with time entry. Each task is categorized based on these selected work types.

On the project record we store total hours for different types of work and roll-ups of hours spent versus budget
On the project record we store total hours for different types of work and roll-ups of hours spent versus budget


Speaking of time entry, we again use a custom object to track that. Since all time entries are tied to task records, we know the work type and billing rate automatically. This has been good for our team to understand the value of time as those 15 minutes spent on an email cost the client $$. Each of these time entries update values on both the task and the project record, so that we as a management team know hours utilized. And since we use a simple Hyperlink formula field, from task:

Right from the task itself we can create our time entries
Right from the task itself we can create our time entries

When a user sees the time entry screen many of the values are filled in for them:

Fortunately most of the time entry values are entered for the user
Fortunately most of the time entry values are entered for the user

We also developed a visualforce page that is utilized on Salesforce1 for time entry. That can be a huge timesaver, as well.

When we first developed this work, much of the updating was accomplished through APEX coding. With the introduction of the Process Builder – now its done through configuration.


You Too Can Do This
We love companies that understand that customer service is paramount and BracketLabs is no exception. They have been a source of inspiration and a sounding board for ideas as we continue to work with the product.  I know that we are only using about a third of the product’s features and yet we are successful.

Even if you are a single person shop, this tool can help you realize and prioritize without consuming all of your day. In the end, you still have to deliver something. We suggest you take it out for a test drive and decide if it fits your needs.

Performing a Fuzzy Lookup in Excel or Google Sheets

Many of us have to do matches of data in excel to update Sometimes though that data is not exact. Inc. versus Incorporated. Or its John A Smith in one system versus John Smith in another.

Instead of manually searching and fixing it, Excel (for Windows only unfortunately) has an Add-In that does a nice job of fuzzy matching.

Here is the link.

After installing the add-in into excel the steps to use it are pretty basic and the readme file contained within the setup is incredibly comprehensive.

UPDATE: We found an Add-on to allow you to do something similar in Google Sheets:

Google Sheets Add-on

What is Fuzzy Matching?

Lets say I have a data set with the following names:

  • John Smith
  • Jane Doe
  • Ronald P. Moore

And I have another data set with the following names:

  • John R Smith
  • Janealicious Doe
  • Ron Moore

In a standard pattern match, these data sets would never line up if we were using the names to match. Well a fuzzy match tool will break down the names into their basic components and try to match it all together. Is it 100% perfect and reliable? No probably not, but it can save a dramatic quantity of time especially if you know there are other data points that can be used as validators.

Could be a great timesaver for you if you’re playing with data.

Why I am NOT Speaking at Dreamforce

Wait.. What?!

Normally these posts are all about “Come and listen to me speak at xxxxx!” Or “I’m rad and will educate you. My session will rock.”

I’ve been fortunate to speak at quite a number of Dreamforce events. I think I’ve spoken at one session for, at least,  the past 6-7 years and also attended quite a few because of the Salesforce MVP program. Here are the daft realities:
• There will literally be over a 1,500 sessions this year.
• With very few exceptions, ALL will blow your mind.
• With the Agenda Builder now live, most will be sold out quickly. (Hint, hint, get there early)

These are wonderful facts and demonstrate the power of this event. Many first timers, and even us seasoned and jaded veterans, walk away from those days ready to make amazing changes in our organization and how we use the tool.

The MVP crowd is notorious for wanting to help and deliver these sessions. It’s not unusual for an MVP to have 3, 4, or even 6 sessions at a Dreamforce. For many of us, it’s how we are “fed” to provide better help for all. And I’m not complaining about that. Quite the opposite. Like I said above, sessions are typically brilliant.

The Challenge of Dreamforce

But for whatever purpose Dreamforce sessions typically hover on two tracks:
• I’m a new or intermediate admin trying to solve something
• I’m a developer who is working on the platform

I have desired more clearly defined skill sets and levels for session abstracts. As an admin with 15 years of experience, I don’t need a formula session or “this is what the Process Builder can do”. I’m also not going to immediately utilize how to use Angular JS in a Heroku environment.

Let me use an analogy to help with this. I don’t need to take a beginning drivers course every year and I certainly cannot immediately use a course titled “Extreme Off-roading and Water Fording”. While those courses would be a bucket load of fun, I can’t apply them on an everyday basis during my commute.

All of these are awesome sessions but they don’t feed people like me. At some point I hope Salesforce starts to realize the above and helps us out. Ultimately the benefit of Dreamforce is relevancy.

But that’s another soapbox moment.

So Why are You Not Speaking Again?

The real reason I’m not speaking this year is simply that our ecosystem is astounding. Have you ever stopped and considered the vastly different industries and situations Salesforce customers are participating in? These people have experience to share and in the end the purpose of these days is not to show yourself off, but instead to learn from others. Walking away with some new tricks and skills that would have be next to impossible to learn in any other place.

It’s time for some new voices. I challenge fellow MVP’s to find those new voices and promote them, instead of speaking themselves.  It’s time for us to be the leaders and not the creators of everything under the sun.

First Name (required)

Last Name (required)

Your Email (required)


Your Message

Forcelandia Presentation


I was fortunate to be invited to the First Annual Forcelandia Developer User Group event. This was Portland’s first super user group event but on by the Developer User Group team and they rolled out the red carpet. We had a great lineup from the salesforce MVP’s and salesforce staff for approximately 100 participants.

There were two tracks – one for developers and one more for the admins. The devs learned more about Javascript Remoting and Heroku while the admins spent time on Wave, Process Builder, and understanding APEX.

The event was an amazing learning opportunity for all the people attending. Peter Coffee was the headliner and delivered a presentation about the growth of mobile, apps, and internet usage. I took away a few good ideas from that presentation alone.

I want to thank the group for putting on this amazing event, especially Angela Mahoney and Larry Latimer.  This team is already planning for next year (Forcelandia 2016) and I can’t wait to come back. After the event we also spent some time exploring Portland. We posted a few pictures below.


Want us to bring the road show to you? Just let us know.
We bring the entertainment no doubt.

First Name (required)

Last Name (required)

Your Email (required)


Your Message

5 Admin Tasks You’re Probably Not Doing

I know it seems crass and some of these are probably will take some time to implement but when we work with clients we see these five actions coming up as consistently not done. And so you have to ask yourself, “Self, SHOULD I be doing these things?” We think so….

Keeping a backup

If you’re an old school IT person like myself, then you know how important it is to maintain a backup. But you are not typically using the backup to restore the whole database. Nope. You are using it to restore someone’s goof up (typically you’re own), or you need to move data from one system to another. So many great uses of a backup.

The easiest method is to use the Data Export feature in Setup. Please set up a schedule and store it somewhere safe. If you are not storing attachments, the database file will stay relatively small. But you will get .zip files containing one CSV file for each object in Salesforce. Attachments are a bit more exciting (much larger files) but that’s a conversation for another time. Alternatively there are some great ISV partners that sell backup solutions. Spanning is one of those examples, as well as Backupify.

Don’t ask Salesforce to restore your data. It gets pretty pricey.

Cleaning out old reports
So you’re the admin that, like the Fairy Godmother, has created a report for every user needing every kind of situation report imaginable. Congrats! You’re a rock star! You really need to teach you’re people how to create their own reports. Let me ask a question: how often are they being used? You, and probably a good block of your users, are having to sift through all these reports when they are searching for the ones that really matter. There is a report type available that can show you the times that a report is run as well as other statistics. Run these every so often. Move the unused reports to a folder that only Administrators have access to, for a while.  If it’s not missed,  delete it!

And then while you’re doing that – train a few super users to create reports. Honestly. Huge time saver.

Tracking field usage
I gave a talk about the habits of a successful admin. One of my points is the that it’s not necessarily duplicate data I despise but, bad, missing or useless data! Do I really need to store that account ABC Inc. received the 2013 Christmas Card? Go and track down those fields that are routinely blank, are used by one person or have outlived their usefulness. Then get rid of them! (You do have a backup, right?) We find Field Trip particularly easy to work with and full of usefulness.

Listening to your users
We recently performed a one-day workshop for a client talking about their roadmap of work. Now while I discuss roadmaps below, let me discuss something more important than that: are you listening to your customers ie: your users? You may have the whole world figured out but if you’re users are asking for “X” and you build “Y”, it will be similar to building a schooner in the middle of the Sahara. So pretty and utterly useless.

Find a way to regularly discuss what is being built and get feedback from your user base. Build it in. Even Salesforce’s Project Managers are tasked to “retire” a certain amount of IdeaExchange points every release.

Maintaining a roadmap of work
What are you working on this month? What about next month? Have you thought about what will be necessary 6-12 months down the road to match business needs? Even with a small deployment of the tools, planning for the needs in advance can make a difference in the quantity of time necessary to deliver those goals. Some of us admins are part-timers, so we have to be extra careful to deliver the goods while we do other things.

It could be a simple spreadsheet or something way advanced, but in the end you should be able to answer:

  • What are we working on this month with concrete details?
  • What is on the plan for the next 2-3 months?
  • What are looking at for next 6-12 months?

Write it down, share it with your user base, get feedback, then alter accordingly.

Why not chat with us?

We work hard for our clients to deliver something amazing each day. Why not contact us to learn how we can help you?

First Name (required)

Last Name (required)

Your Email (required)


Your Message

Midwest Dreamin’

Ever just wake up one morning and KNOW it was going to be a good day? Yeah, that happened in July in Chicago.

Midwest Dreamin’ is a regional User Group. This is the second year of this extravaganza. Last year Steve Molis and I brought the formula comedy road show, so this year the conversation was “Top Habits of a Highly Successful Admin”.

ask the expert

Before the session though, I caught up with several other Salesforce MVP’s and together we worked the “Ask the Expert” booth, in the expo hall. I’m continuously amazed at the knowledge and experience of what people are accomplishing, with this service. Our band of misfits have been playing deeply in the Marketing Cloud, Service Console, incredibly large deployments, and people trying to deploy as fast as possible.

Dreamin egg

If you are an Admin or Dev of Salesforce, spend some time and talk with your fellow attendees. “Day of Dreamforce” is probably the best description of the day.  In the end these kinds of days are all about what you put into it. I have been doing Salesforce for longer then just about anybody and I am still learning from others. If all you do is sit through sessions and drink the coffee, you’re missing the point of these events.

I was able to sit through some of the sessions. Cory Cowgill talked about how to utilize the Analytics API, an Open Source graphing tool, and JavaScript to create amazing info graphics with Salesforce data.  I then saw a presentation from the Salesforce Foundationwho are building a custom deployment of communities primarily focused on Education. Sounds like the Non-Profit Starter Pack all over again. That may be a good thing!

There are a number of these “Super User Groups” being scheduled. Reach out and find them. Awesome education.

Here are a few pics from the time there:

Want to talk more about Salesforce? Get in touch with us:

First Name (required)

Last Name (required)

Your Email (required)


Your Message

Administrator vs. Analyst – a salesforce discussion

Let me first start by saying I have been honored lately as a few people have asked me for career advice and I gave what I thought was honest and helpful advice. This is way different than my normal action which is to deliver truly horrible advice and see if someone yells “Balderdash!” 

What I learned through the recent exercise is that this “salesforce administrator” has hit the proverbial wall with their current situation and wants to move up in the world. Another recent situation is a manager asking their administrator, “What exactly is it that you do for us?” How does one answer this question without an equally dumbfounded look?

Do You Fit the Model

If you are a large organization with hundreds of users, then this particular post may not fit your model. Those systems typically, there I go throwing the word “typical” like candy, have job descriptions and controls in place to manage usage. Instead let’s talk about the organizations that meet the following criteria:

  • There are 1-5 people who manage the system on a regular basis.
  • has been built to handle more than leads but typically utilizes multiple business processes
  • probably has a few different apps attached that extend or enhance the base product
  • Users are sending in a number of enhancement requests on a regular basis (weekly or monthly depending on the size)
  • There may be an outside firm that handles more complex requirements or programming needs

As a member of the team managing the system it is your responsibility to:

  • Understand those business requirements and determine the correct course of action
  • Document those requests and help place them in order of execution
  • Define whether an internal employee or an external resource will complete the work
  • Either do the change or manage that the change is executed properly
  • Test that the work was done
  • Gather user feedback on completion

In the world we call these people “Admins” or “Administrators”. And if you have a simple system that may actually still hold true; but for larger organizations this term is inaccurate. Instead you are an “Analyst” and we as members of the salesforce community need to create a distinction between these groups.

In my mind a salesforce admin is performing the point-and-click effort and some of that effort can certainly be challenging, engaging, and worthwhile. And for smaller salesforce orgs this term holds up well.  But for larger or more complex systems these individuals are performing tasks far beyond simple point-and-click and that should require a different distinction. These Analysts have to understand business process and be a clearinghouse for that information. The organization relies on those people to not only listen to the business requirements but consider multiple options before making a recommendation and moving forward.

While the term “ Analyst” can hold up well to scrutiny, I would offer that there are Data, Business Process, Sales, and Support Analysts out there already. These are people who have begun to specialize in unique areas and can bring their skills to bear in unique ways. They have gone far beyond the idea of an Admin and are ready for the next step.

Being a Coder is Not Necessarily the End Goal

There are some people who will never be programmers and there is absolutely nothing wrong with that. Being a coder should not be everyone’s end goal in the world. I have a college degree in programming. The biggest fact I learned from that? I am not a good programmer but I am good analyst. Not all programmers are good analysts and not all analysts are good programmers. This is not a crime but an honest opinion of what people are capable of becoming. 

So for those that have hit a ceiling in their salesforce experience or feel trapped by the idea of being called an “Admin”, I say its time for the idea of Analyst to be seriously considered by this industry and give it the seriousness it deserves.


Want to talk more about Salesforce? Get in touch with us:

First Name (required)

Last Name (required)

Your Email (required)


Your Message