Salesforce Reporting Workbook Guide
Salesforce Reporting Workbook Guide
Tutorial 7: Building Custom Apps with the Salesforce Reports and Dashboards API
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Step 1: Run a Report Synchronously . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Step 2: Run a Report Asynchronously . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Step 3: Filter Report Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Step 4: Find, Show, and Refresh Dashboards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Final Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
ABOUT THE REPORTING WORKBOOK
This series of tutorials introduces you to dashboards and reports in Salesforce. Salesforce Reports
USER PERMISSIONS
and Dashboards is the term we use to refer to everything dashboards and reports enable you to do
with your data. To create, edit, and delete
A lot of different features come together to make up Salesforce Reports and Dashboards. Don’t get reports:
• “Create and Customize
caught in the trap of thinking of the pieces separately. The reporting and dashboard features work
Reports” OR Editor
together to present the information that’s important to you—from the big picture to the data point. access to the report
The tutorials in this workbook build on one another and are designed to be done in order. We’ll folder.
start by walking you through a few interesting use cases that suggest what reports and dashboards To create, edit, and delete
can do for you. Then we’ll discuss how you can take advantage of built-in tools to share the dashboards:
information with others. Along the way, we’ll highlight some cool features, like custom table • “Create and Customize
components, combination charts, conditional highlighting, cross filters, buckets, and custom Dashboards” OR Editor
summary formulas. access to the dashboard
folder.
If you’re still game, we’ll go into more advanced topics, such as merging multiple reports into joined
To create, edit, and delete
reports and embedding report charts in record detail pages. And we’ll take a look at how you can
public report folders:
interact with your reports from other apps through the Reports and Dashboards REST API.
• “Create Report Folders"
OR Manager access to
the report folder
Conceptual Overview
To create, edit, and delete
public dashboard folders:
A dashboard shows data from source reports as visual components, which can be charts, gauges,
• “Create Dashboard
tables, metrics, or Visualforce pages. The components provide a snapshot of key metrics and Folders" OR Manager
performance indicators for your organization. A report returns a set of records that meets certain access to the dashboard
criteria, and displays it in organized rows and columns. Report data can be filtered, grouped, and folder
displayed graphically as a chart. Reports are stored in folders, which control who has access. A report
type defines the set of records and fields available to a report based on the relationships between
a primary object and its related objects. Reports display only records that meet the criteria defined in the report type. Administrators
control access to reports and dashboards by storing them in folders. Folders can be public, hidden, or shared.
1
About the Reporting Workbook
Workbook Version
This workbook is updated for the Winter ’15 release of Salesforce.com, and was last revised on September 16, 2014. To download the
latest version of this workbook, go to https://developer.salesforce.com/docs
2
TUTORIAL 1: GETTING STARTED WITH A SIMPLE
DASHBOARD AND REPORT
Level: Beginner
Dashboards give you the big picture, letting you see your key metrics at a glance. In this tutorial, we’ll create a dashboard, build a report,
then go back to the dashboard to create a component based on that report. The end result will show closed sales for the current quarter
against projected quota. And we’ll throw in a way for users to zero in on the data that’s most interesting to them.
7. Click OK.
8. Click Save, then close the dashboard.
3
Tutorial 1: Getting Started with a Simple Dashboard and Step 2: Create the Closed Sales This Quarter Report
Report
4. Click Create. This takes you to the report builder, a drag-and-drop visual editor for reports. Notice that a number of fields are already
in the report by default.
5. Apply the following filters:
• Select All Opportunities for Show.
• Select Closed Won for Opportunity Status.
• Select Close Date for Date Field.
• Select Current FQ for Range.
6. Click Tabular Format and change the report format to Summary. This allows us to create groupings.
7. Group the report by Close Month by dragging that field into the grouping drop zone. You can create secondary groupings and
add a chart, but let’s keep it simple for now.
8. Click the menu for the Amount column and select Summarize this Field.
9. Select Sum and click Apply. This adds the amount for each grouping, as well as the grand total.
10. Click Save.
11. Name your report Closed Sales This Quarter and accept the auto-generated unique name.
4
Tutorial 1: Getting Started with a Simple Dashboard and Step 3: Create the Gauge Dashboard Component
Report
12. Enter a description and choose the My Personal Custom Reports folder for now. In a later tutorial, you’ll create a shared
folder.
13. Click Save, then close the report.
6. Add a header, title, and footer by clicking those fields on the component:
• Enter Closed Sales for the header. You can use headers to group components in each column.
• Enter Sales vs. Quota for the title.
• Enter Sales for the Current Fiscal Quarter for the footer.
Note: When you post a dashboard component snapshot to a Chatter feed, titles are shown, but headers and footers aren't.
We’ll try this out in a later tutorial.
5
Tutorial 1: Getting Started with a Simple Dashboard and Step 4: Filter the Dashboard
Report
The end result should look something like this—a gauge of closed sales for the current quarter against projected quota:
Summary
Congratulations! With just a few clicks and drags, you performed some meaningful analysis on your data, and you have the beginnings
of a handy dashboard.
6
Tutorial 1: Getting Started with a Simple Dashboard and Summary
Report
In this tutorial, we showed you the interdependency between dashboard components and their source reports, plus how to let users
narrow the scope of the dashboard for themselves. In the next tutorial, we’ll create a combination chart, plus a custom table of top
salespeople—with photos! And we’ll see how cross filters can help you flag neglected accounts.
7
TUTORIAL 2: CREATING COMBINATION CHARTS AND
CUSTOM TABLE COMPONENTS
Level: Intermediate
We’ve got one dashboard component under our belt. The gauge component and its source report in the previous tutorial were pretty
basic. In this tutorial, we’re going to create two dashboard components from one report! Then we’ll enable photos on the table so you
can see sales reps’ pictures right on the dashboard.
To achieve this, we’ll create a source report that has a couple more summaries, as well as a chart, and we’ll introduce you to the wonderful
world of combination charts and custom table components. Plus, we’ll show you how to use cross filters to keep an eye out for neglected
accounts.
8
Tutorial 2: Creating Combination Charts and Custom Table Step 2: Add a Combination Chart on the Report
Components
Note that the report builder preview only shows a limited number of records, so your report may look different when you run it.
9. Click Save.
10. Name your report Sales Manager Leader Board and accept the auto-generated unique name.
11. Enter a description and choose the My Personal Custom Reports folder.
12. Click Save.
Tip: Creating a combination vertical column chart is a great way to make more values available in custom table components. You
can add up to three more columns, or one line.
1. Go back to the Sales Manager Leader Board report we just created and click Edit, then Add Chart.
2. Select the Vertical Bar Chart type (also known as a column chart).
3. Choose Record Count for the Y-Axis.
4. Choose Opportunity Owner for the X-Axis.
5. Select Plot additional values to create a combination chart.
6. Select Line for Display. This adds a line to your vertical column chart.
Notice that the only option under Value is Record Count. This is because we chose Record Count for the Y-Axis. With a single
axis, it doesn’t make sense to show other types of data on the chart.
7. Now, select Use second axis and look at the Value drop-down. Aha! Now you see both Record Count and the two
summaries you created on the report: Sum of Amount and Average Amount.
8. Select Sum of Amount for Value. The chart editor should look like this:
9
Tutorial 2: Creating Combination Charts and Custom Table Step 3: Create the Top Five Salespeople Custom Table
Components Component
9. Click OK
10. Click Save and close the report.
10
Tutorial 2: Creating Combination Charts and Custom Table Step 4: Add the Combination Chart to the Dashboard
Components
• For the fourth column... wait, where’s Average Amount? Remember that we only added the sum to the chart—not the
average—so it’s not available to use in the custom table. If you want to use a value as a column, figure out a way to add it to
the chart.
7. Enter 5 for Maximum Values Displayed. This will show only the top five salespeople based on the sort order you chose.
8. Select Show Chatter Photos. This displays each opportunity owner’s profile picture next to his or her name. This option is
available only on tables and horizontal bar charts.
9. Optionally, set conditional highlighting to mark ranges by color.
10. On the Component Data tab, set Drill Down to to Record Detail Page. Each salesperson’s name becomes a link that
dashboard viewers can click to go directly to that salesperson’s record detail page. If you don’t set the drill-down option, clicking
the dashboard component takes you to the source report.
11. Click OK.
12. Add a header, title, and footer by clicking those fields on the component:
• Enter Performance for the header.
• Enter Closed Deals Leader Board for the title.
• Enter Top 5 Salespeople - Current Month for the footer.
11
Tutorial 2: Creating Combination Charts and Custom Table Step 5: Create a Neglected Accounts Report With Cross Filters
Components
6. Select the Use chart as defined in source report option. All of the choices in the component editor are disabled
except the display units and drill behavior. We could leave that option unchecked and configure the component data right here
with the dashboard builder, but for now we’ll stick with what we’ve already set up in the report builder.
7. Click OK.
8. Add a header, title, and footer by clicking those fields on the component:
• Enter Closed Sales for the header.
• Enter Deals/Amounts by Owner for the title.
• Enter # of Deals and Sum of Amount - Current Month for the footer.
12
Tutorial 2: Creating Combination Charts and Custom Table Summary
Components
2. Set Opportunity Status to Open. For the Date Field, select Close Date , and set the Range to Current
and Next FQ. (The From and To date fields populate themselves automatically to reflect the date range you choose.)
3. Click Filters > Add > Cross Filter. Configure the cross filter to find Opportunities without Activities.
4. Without what kind of activities? Let’s narrow our query down with a subfilter. Click Add Activities Filter and set it to Date
equals. In the date field, type in Next 30 days.
Tip: You can type in almost any date range in plain English and get results. For a full list of the phrases that work, search for
“special date values” in the online help.
5. Click OK and run the report. You’ve just answered the question, “Which open opportunities don’t have any activities scheduled
within the next 30 days?” The report should look something like this:
Now sales reps can check the report for any pending opportunities for which they might want to schedule an email or phone call. To
make them really happy, try creating a table component on the dashboard as you did in the previous step.
Summary
By spending the time to get the report just right, you make creating dashboard components that much easier. The steps in this tutorial
showed how intertwined reports and dashboards are. For custom table components, the dependencies are even tighter; you can only
choose what you’ve put in the chart. And if you just want to use the chart from the report, as is, you can.
We showed that dashboard components can slice and dice the same data from a single report to yield more than one meaningful view
into your data. We also illustrated the power of cross filters to find records that don’t have a related record. In the next tutorial, we’ll
create a matrix report and dive into custom summary formulas that perform calculations using summary values for groupings. You won’t
know how you did without them.
13
TUTORIAL 3: CREATING A MATRIX REPORT WITH CUSTOM
SUMMARY FORMULAS
Level: Intermediate/Advanced
In previous tutorials, we based our work on summary reports, which are great, since they let you group rows of data by a specific field.
Matrix reports let you group by row and column, giving you an extra dimension to your data analysis. Use them to see how one dimension
behaves against another. For example, you can analyze sales by month and location to spot seasonal sales trends in different locales.
In this tutorial, we’ll create a matrix report that shows the monthly trend in revenue by type of business. We’ll also create formulas that
use report summary functions to calculate the relative size of each month’s business against the total, and compare each month’s total
sales against the previous month. Finally, we’ll create a dashboard component showing a cumulative line chart of each business type,
and another dashboard component based on a report using buckets, showing where each type of business is coming from.
Tip: For the fastest results, always set the smallest date range you can. If your report has to sift through a great many
dates, it can take longer to show the information you’ve asked for.
4. Group the report by Type by dragging that field into the column grouping drop zone.
5. Group the report by Close Month by dragging that field into the row grouping drop zone.
6. Click the menu for the Amount column and select Summarize this Field.
7. Select Sum and click Apply.
8. Click Show and deselect Record Count, Details and Drop Zones to clean up the view.
14
Tutorial 3: Creating a Matrix Report with Custom Summary Step 2: Create a Formula Using the PARENTGROUPVAL
Formulas Summary Function
9. Click Save. The report preview should look something like this:
10. Name your report Revenue Trend by Type and accept the auto-generated unique name.
11. Enter a description and choose the My Personal Custom Reports folder.
12. Click Save.
15
Tutorial 3: Creating a Matrix Report with Custom Summary Step 2: Create a Formula Using the PARENTGROUPVAL
Formulas Summary Function
5. Now, let’s write the formula. We want to calculate the percentage that the total of each business type contributes to the grand total.
In other words, divide the subtotal for each type by the grand total. Since the total is a calculated value, we have to create a formula
using the PARENTGROUPVAL summary function.
a. Under Formula, click Summary Fields > Amount > Sum. This adds AMOUNT:SUM to the formula. This is the sum at the
grouping level you specified above—that is, the subtotal for each type.
b. Click Operators > / Divide. We want to divide each subtotal by the grand total, which we’ll enter as a summary function.
c. Under Functions, select Summary, then PARENTGROUPVAL.
d. Choose Row Grand Summary and Column Grand Summary for the options, then click Insert. Your formula should
look like this so far:
AMOUNT:SUM/PARENTGROUPVAL(summary_field, ROW_GRAND_SUMMARY, COLUMN_GRAND_SUMMARY)
e. The summary_field text is just a placeholder. Replace it with AMOUNT:SUM. This defines which value to use at which
grouping level. That is, the grand total for amount.
6. Click OK. We’ve created our first formula! You’ll see the results in the bottom row. Your report preview should look something like
this:
16
Tutorial 3: Creating a Matrix Report with Custom Summary Step 3: Create a Formula Using the PREVGROUPVAL Summary
Formulas Function
7. Click Save.
5. Now, let’s write the formula. We want to calculate the difference between the subtotals for each month and the month before it. In
other words, subtract the previous month’s total from the current month’s. We’ll do this using the PREVGROUPVAL summary function.
a. Under Formula, click Summary Fields > Amount > Sum. This adds AMOUNT:SUM to the formula. This is the sum at the
grouping level you specified above—that is, the subtotal for each month.
b. Click Operators > - Subtract.
c. Under Functions, select Summary, then PREVGROUPVAL.
d. Choose Close Month (by Calendar Month), then click Insert. Your formula should look like this so far:
AMOUNT:SUM-PREVGROUPVAL(summary_field, CLOSE_MONTH)
e. The summary_field text is just a placeholder. Replace it with AMOUNT:SUM. You can specify an increment if you want
to compare to a value more than one month prior. The default increment is one, and the maximum is 12. For this step, we want
the default increment.
17
Tutorial 3: Creating a Matrix Report with Custom Summary Step 3: Create a Formula Using the PREVGROUPVAL Summary
Formulas Function
6. Click OK.
7. Click Show > Conditional Highlighting.
8. Let’s make it easy to see positive and negative values by assigning them colors:
• Select the formula field you just created.
• Enter 0 for the first breakpoint.
• Select the color red to display numbers below zero.
• Select the color green to display numbers above zero.
9. Click OK. Your report preview should look something like this:
18
Tutorial 3: Creating a Matrix Report with Custom Summary Step 4: Add a Cumulative Line Chart Component to the
Formulas Dashboard
5. Click to edit the component. On the Component Data tab, select the parameters you need.
• Choose Sum of Amount for the Y-Axis. Notice how the summary field and summary formula you created in the report
are available in the drop-down besides record count.
• Choose Close Month for the X-Axis. The choices here are column and row groupings from the report.
• Choose Type for Group By.
• Click Cumulative to show the monthly amounts added together through time. The chart editor should look like this:
19
Tutorial 3: Creating a Matrix Report with Custom Summary Step 5: Add a Bucket Field and Show It as a Pie Chart
Formulas
6. On the Formatting tab, set Legend Position to Bottom. This gives you more room to display your data.
7. Click Save. Your dashboard component should look something like this:
20
Tutorial 3: Creating a Matrix Report with Custom Summary Step 5: Add a Bucket Field and Show It as a Pie Chart
Formulas
4. Drag each industry from the detailed list into the appropriate bucket. For example, “Banking,” “Finance,” and “Insurance” will all go
in the Financial bucket. Select Show unbucketed values as "Other."
5. Drag your new bucket field into the column grouping drop zone, and save the report. Your New Business and Existing
Business columns are now split into three columns each, showing how much of each type of business is coming from each
industrial category.
Tip: You could have dragged the bucket field into the row grouping drop zone instead of the column grouping drop zone.
Then you’d see how much each industry contributed to each month’s revenue, rather than to each type of business. The overall
totals would be the same.
Now let’s put a graphical picture of this information on the dashboard for users to see.
1. Go back to our Sales Manager Dashboard and click Edit.
2. Drag the pie chart icon onto the dashboard, then drag the Revenue Trend by Type report from the Data Sources tab and
drop it on the pie chart component.
3. Add a header, title, and footer by clicking those fields on the component:
• Enter Industry Groups for the header.
• Enter Close Deals by Segment for the title.
4. Click to edit the component. On the Component Data tab, select the parameters you need.
• Choose Sum of Amount for Values.
• Choose Market Segment for the Wedges. (Your bucket field works just like any other grouping.)
• Leave Auto for Display Units.
• For Drill Down To, choose Filtered Source Report, so that users who click an area of the pie chart will go to
the report filtered for that area. The dashboard component editor should look like this:
21
Tutorial 3: Creating a Matrix Report with Custom Summary Summary
Formulas
5. Click Save. Your dashboard component should look something like this:
You’ve just seen how to group data on the fly with a bucket field, and show it off as a pie chart on your dashboard. The data we bucketed
here was from a picklist field; you can also bucket data by numerical ranges or text strings.
Summary
In this tutorial, we showed how the matrix format can take reporting to the next level. Matrix reports are great for showing summaries
down columns and across groupings at the same time—like the sum of sales for each type and for each month. Though we didn’t do
it here, you can also add secondary column and row groupings to matrix reports.
We showed how summary functions offer a powerful way to use grouping values in report formulas. The PARENTGROUPVAL function
lets you calculate values relative to a parent grouping, and PREVGROUPVAL relative to a peer grouping.
The formulas we used were fairly simple, but there’s so much more you can do with these summary functions. In the next tutorial, we’ll
show you how you can use them to pull together data from multiple different reports.
And finally, we showed how the little things, like grouping by date, hiding details, and combining like fields into buckets on the fly, can
make a report easier to understand.
22
TUTORIAL 4: CREATING A JOINED REPORT WITH CUSTOM
SUMMARY FORMULAS
Level: Intermediate/Advanced
We’ve seen how you can answer complex questions about Salesforce data by summarizing down columns and across groupings at the
same time. But what if the information you need doesn’t fit in a single report?
In a joined report, you have what amounts to several different reports in one. Each report is called a “block.” You can filter each block
separately, just like a standalone report. But you can also compare values across blocks, to look at your data from multiple angles. Best
of all, the blocks can look at different objects!
4. Create a third block in the same way. Now we have three different Opportunities reports sitting next to each other in the same
container. They’re all identical right now, but we’re going to use each one to tell us something unique.
5. We want all the blocks to give us comparable information, so prepare each block the same way:
a. Remove all the fields except Opportunity Name, Amount, and Account Name, by dragging them back over to the
Fields pane. That’ll help us focus on what’s important here.
b. In the filter panel, set Show to All Opportunities.
c. Click the dropdown at the top right of each block and make sure Record Count is checked.
d. Click the dropdown next to Amount, click Summarize this Field, and select Sum.
6. Now let’s configure each block to tell a different part of the story.
• We’ll use the first block to show the opportunities that got away. Click the title (right now it just says “Opportunities block 1”),
and rename it Closed Lost. In the Closed Lost filter panel above, set these filters:
Opportunity Status equals Closed
Date Field equals Close Date
Range equals Current and Previous FY
Stage equals Closed Lost
23
Tutorial 4: Creating a Joined Report with Custom Summary Step 2: Add a Custom Cross-Block Formula
Formulas
• We’ll use the second block to show the opportunities we landed. Rename the block Closed Won and set these filters:
Opportunity Status equals Closed Won
Date Field equals Close Date
Range equals Current and Previous FY
• The third block will show us opportunities that are getting close to their anticipated closing. Rename the block Closing
Next Month and set these filters:
Date Field equals Close Date
Range equals Next Month
Opportunity Status equals Open
Tip: For the fastest results, always filter as narrowly as you can. Filters that use equals will often return information more
quickly than filters that use contains, does not contain, or not equal to. In complex reports, this can make
a difference.
7. Now we’ll group all three blocks by sales rep. Drag the Opportunity Owner field to the horizontal bar that says, “Drop a field
here to group across report blocks.” (This is called the grouping drop zone.)
8. Click Save, then Run Report.
We’ve just created a handy resource that sales reps can use to monitor their track record and to stay on top of deals that are heating up.
Next, let’s see if we can wring a little more information out of this data with custom formulas.
24
Tutorial 4: Creating a Joined Report with Custom Summary Step 3: Build a Sales Rep Scorecard
Formulas
Tip: These custom summary formulas are just examples. Now that you know how, you’ll probably want to adjust them to
work best with the data you’re analyzing—or create new ones altogether.
We’ve just created two custom formulas that look at data in different blocks of a joined report and produce information we can use to
help reps monitor their performance and drive more revenue! Now we’ll see how we can extend our view to include data from multiple
report types.
4. For convenience, let’s clean up each block by removing fields we don’t need. For example, in the Opportunities block, you might
want to remove all fields except Opportunity Name, Amount, and Account Name.
5. To reduce distraction, let’s filter out old data.
a. In the filter panel for Opportunities, set Opportunity Status to Open.
b. In the Tasks and Events filter panel, set Show to Open Activities.
25
Tutorial 4: Creating a Joined Report with Custom Summary Step 4: Add the Sales Rep Scorecard to the Dashboard
Formulas
c. In the Cases filter panel, click Add and specify Status does not contain, and select all the statuses that include
“Closed.”
d. For Opportunities and for Tasks and Events, set Range to Current FQ.
6. Click the dropdown at the top right of each block and make sure Record Count is checked.
7. In the Opportunities block, click the dropdown next to Amount, click Summarize this Field, and select Sum.
Now we’re set up to see the power of a joined report. Notice how the Fields panel is divided into sets of fields that belong to each
of the Salesforce objects our report is looking at. The Common Fields section lists the fields that make sense for all the objects
in the reports. We can use any of these fields to group across all of our blocks.
9. This report might be even easier to read if we could also tell which tasks and cases are related to which opportunities. We can do
that with a sub-grouping. Drag the Parent Account field from the Fields pane to the secondary grouping drop zone.
Tip: Try different cross-block groupings and sub-groupings to highlight the information you’re most interested in. For example,
if you wanted to compare what’s going on in different accounts, you could use Account Name instead of Account
Owner for your top-level grouping.
26
Tutorial 4: Creating a Joined Report with Custom Summary Step 4: Add the Sales Rep Scorecard to the Dashboard
Formulas
1. Back in the Sales Rep Scorecard report that we just created, click Customize > Add Chart.
2. On the Chart Data tab, observe that the X (horizontal) axis measures the number of open opportunities for each of our sales reps,
who are listed on the Y (vertical) axis. We can go with those defaults in this case.
3. Select Plot additional values. For the first additional value, select Tasks and Events.
4. Click Add Bar to choose yet another value. For this one, select Cases.
5. Click OK. you’ve just created a chart that sketches out the relative health of each sales rep’s pipeline.
Tip: Other ways of showing this information graphically may serve better for the particular data you’re working with. Just click
Edit Chart and try different data and formatting combinations until you have exactly the representation you want.
6. Now let’s share the report as a dashboard component. Go back to the sales manager dashboard that we created in Tutorial 1 and
click Edit.
7. Drag the Sales Rep Scorecard onto the dashboard from the Data Sources tab in the Reports pane.
8. Switch to the Components tab in the Reports pane and drag any of the component types onto the source report that you just added.
An error message advises you that a dashboard component showing a joined report must use the chart that you designed in the
report itself. (Other report types can be designed right on the dashboard.)
Click and check that box on the Component Data tab. Now your bar chart appears as a dashboard component.
9. Let’s add one more detail to help users make the most of this dashboard component. On the Component Data tab, find the Drill
Down To dropdown list, select Filtered Source Report, and click OK.
Now sales reps can click their own names on the dashboard and go directly to a view of the underlying report that shows only their own
need-to-know information!
27
Tutorial 4: Creating a Joined Report with Custom Summary Summary
Formulas
Summary
We’ve seen how you can analyze complex situations by packaging several different reports as blocks of one joined report. We learned
how to filter within blocks and group the results in useful ways. We did some advanced tricks with custom formulas, and we put the
results on a dashboard for easy access.
In the next tutorial, we’ll use historical trend reporting to look at changes in your data over time.
28
TUTORIAL 5: CREATING A PIPELINE PUSH REPORT
Level: Intermediate
Analyzing your latest data is great, but what if you need to know how things are changing over time? For example, suppose you want
to monitor your company’s sales pipeline to catch deals that keep getting pushed out.
To do that, you’ll need to compare past and current values of key Opportunity attributes, such as dates, amounts, and status changes.
You may want to focus on deals whose value grew or shrank, or deals that moved into or out of a given target period.
Note: If Opportunities with Historical Trending doesn’t appear, ask your administrator to enable historical
trend reporting for your organization and set up historical trend reporting for the Opportunities object.
Tip: “Yesterday” is a rolling date value, meaning that it points to a date that is relative to today’s date. If you run this same
report tomorrow, Amount (Historical) will show today’s date.
3. Click the down arrow in the headers of the Amount (Historical) and the Amount—Today columns. Click Summarize
This Field, then select Sum.
The total amount appears at the bottom of each column.
4. Click the down arrow in the header of the Amount column and select Show Changes.
5. Click Run Report.
6. In the Change column, observe the difference between the total value of the Amount (Historical) column and that of
the Amount–Today column.
Tip: You can see changes at a glance by looking for values that are colored green or red.
29
Tutorial 5: Creating a Pipeline Push Report Step 2: Find Deals that Have Been Pushed Out
You’ve created a simple historical trending report to help you analyze your pipeline’s behavior. Now you’re ready to dig a little deeper
into your historical data.
Tip: Use the calendar under Fixed Days to select the date
3. Click the down arrow in the header of the Close Date column and select Show Changes.
4. Click Run Report.
5. For each deal in the report, compare the date in the Close Date — Historical column with the date in the Close
Date — Today column.
Tip: You can see changes at a glance by looking for values that are colored green or red.
You’ve created a report that can help you detect pushed opportunities. Now try turning it into a matrix report (as we saw in Tutorial 3)
and adding it to your dashboard (Tutorial 1)!
Summary
We’ve just built a simple report that shows how our pipeline is changing in value, and can help us identify deals that are being pushed
or otherwise manipulated. In the next tutorial, we’ll set up a simple sharing model so that the right people can see and edit our reports
and dashboards. And we’ll see how linking up a report or dashboard with a Chatter feed can multiply its value by helping others respond
quickly to changes in our data.
30
TUTORIAL 6: SHARING AND COLLABORATION
Level: Beginner
In the previous tutorials, we created some pretty cool reports and dashboards. But how do we make sure the right people are seeing
them? Creating your own security model for shared dashboard and report folders is a safe and easy way to protect access to sensitive
data.
In this tutorial, we’ll cover how to create folders and manage access to them, then we’ll highlight Chatter features for reports and
dashboards, like feed tracking, following, alerts, and posting dashboard component snapshots. And we’ll embed a report chart right in
a record detail page, so users can find valuable context without leaving the page they’re working on.
Another way to share information is to schedule report and dashboard refreshes and select people to receive notifications. Those people
get an email with an image of the report or dashboard. A nice option, but a far cry from the true, real-time collaboration that Chatter
provides.
Note: See Permissions You Need on page 2. If you can’t create dashboard folders, skip this step. You can always save the
dashboard to your private folder, or a public one.
1. Click the Dashboards tab. You’ll see your most recently viewed dashboard.
2. Click Go to Dashboard List.
3. Open the drop-down in the Folders pane and create a new dashboard folder.
Enter Sales Manager Dashboards for the label, accept the auto-generated unique name, and click Save.
4. Click Go to Dashboard List again. In the dropdown list next to your new folder, click Share.
5. You’ll probably want to share this folder with users who are sales managers. Click Share with: Users and pick the people you want.
(To search for a user, just start entering a name.)
31
Tutorial 6: Sharing and Collaboration Step 2: Embed a Chart in a Record
If your organization has a Sales Manager role set up, you can share the folder with that role. That’s an easy way to give multiple
people the same access level all at once. Just click Share with: Roles instead of Users and pick the role name from the list.
6. Give the right access level to each person (or role) you’ve shared this folder with. Your access level determines what you can do with
dashboards in this folder.
• With Viewer access you can see the data in a report or dashboard, but you can’t make any changes, except by cloning it into a
new report or dashboard. All users have at least Viewer access to report and dashboard folders that have been shared with them.
(Some users may have administrative user permissions that give them greater access.)
• When you are an Editor on a folder, you can view and modify the reports and dashboards it contains, and move them to and
from any other folders you have Editor or Manager access to.
• With Manager access, you can do everything Viewers and Editors can do, plus control other users’ access to it, change its properties,
or delete it.
7. Click Save. Now let’s put our Sales Manager Dashboard into this new folder. On the Reports tab, drag the dashboard over to the
Folders pane and drop it on the Sales Manager Dashboards folder.
8. If someone has access to a dashboard folder, but not to the report folder containing the source reports, they won’t be able to see
the data in the dashboard. Follow the steps on this page again, this time on the Reports tab, so you end up with a Sales Manager
Reports folder shared with the same people. Then drag Closed Sales This Quarter, Sales Manager Leader Board, Revenue Trend by
Type, Neglected Opportunities, Pipeline Predictor, and Sales Rep Scorecard onto the Sales Manager Reports folder in the Folders
pane.
Congratulations! You’ve just created a space where selected users can work with data you share with them, in the ways that you’ve
specified.
2. Go to the page layout editor for the object you’re adding a chart to. Let’s use Opportunities for this example. From the object
management settings for opportunities, go to Page Layouts.
Tip: You can do this with a custom object too. From the object management settings, select the custom object, and then
scroll down to Page Layouts.
32
Tutorial 6: Sharing and Collaboration Step 3: Turn on Feed Tracking for Reports and Dashboards
5. In the Quick Find box, type the name of the report and click to find and select the report chart.
You can browse up to 200 recently viewed reports by chart type in the Report Charts palette.
Congratulations! You’ve just saved some time and effort for everyone who works with Opportunities in your organization. You’ve made
it so they can see data about an opportunity right on the page they’re working on, without having to switch over to another tab.
33
Tutorial 6: Sharing and Collaboration Step 4: Follow Your Favorite Dashboards and Get Alerts on
Components
34
Tutorial 6: Sharing and Collaboration Summary
1.
Hover over a component to display the menu. To clear the hover menu, click an empty part of the screen.
2. Click Follow this Component.
When an alert is triggered, you’ll receive a Chatter post similar to this one:
Summary
An analysis is only as good as the data it’s based on. Very true. But no matter how good your analysis, it’s worthless if it doesn’t prompt
action, change behavior, or improve understanding. And you can’t achieve any of those if the right people aren’t seeing the results of
your analysis—your reports and dashboards.
Folders give you complete control over access to their contents. If you store dashboards and reports in appropriately shared folders, your
data is safe from inappropriate exposure.Chatter gives you feed tracking, following (for reports, dashboards, and components), alerts on
metric and gauge components, and dashboard component snapshot posts. Embedding report charts right on record detail pages gives
people a look at the broader picture without making them switch tabs.
Reports and dashboards make analysis easy. Folders, embedded charts, and Chatter make sharing and collaboration a cinch.
35
TUTORIAL 7: BUILDING CUSTOM APPS WITH THE
SALESFORCE REPORTS AND DASHBOARDS API
Level: Advanced
You’ve learned how to do some pretty sophisticated things with reports in this workbook so far. But what if you need more? What if
your users can’t live without a custom app specially tailored to their own unique business requirements?
No problem! If you can code a little, or have access to someone who can, Salesforce provides an API that can handle almost anything
you can do with reports and dashboards through the standard web interface.
For example, say you’ve used Visualforce to build a custom app, and you want that app to display report data. Or your users need a
special kind of chart that isn’t one of the out-of-the-box options when they build a dashboard. In this tutorial, we’ll take a look at some
ways you might give your users what they want.
To use the API, you have your app send a request to a URL that’s based on the instance where your Salesforce org is running. For example,
if your org is hosted on na1.salesforce.com, you could get a list of all the reports you have by sending a request to
https://na1.salesforce.com/analytics/reports.
Here are the basic operations you can undertake with the Salesforce Reports and Dashboards API. We’ll be using some of these in the
next few steps.
36
Tutorial 7: Building Custom Apps with the Salesforce Reports Step 1: Run a Report Synchronously
and Dashboards API
Note: This is just a brief overview to show you some of the cool kinds of things you can do with reports and dashboards using
the Salesforce Reports and Dashboards REST API. For full instructions and a detailed reference, check out the Salesforce Reports and
Dashboards API Developer Guide.
Note: We’re using NA1 as the instance for this example. Substitute the instance where your Salesforce organization is hosted.
You've just run your first report via the API! Don’t worry about reading the results yet. You’ll get to that in the next few pages.
2. To get the results of your asynchronous run, poll the report run instance with GET.
37
Tutorial 7: Building Custom Apps with the Salesforce Reports Step 3: Filter Report Data
and Dashboards API
A specific asynchronous run of a report is called an instance. Each instance has an ID. To get the data set that an instance contains,
you send a request to the system, identifying the instance you want by its ID. This is called polling the instance. If the report has
finished running, the response to your poll request is the data set you asked for. (If it’s not finished, you get an “in progress” response.)
curl -s -H 'Authorization: OAuth token ...'
https://na1.salesforce.com/services/data/v29.0/analytics/reports/00OD0000001ZbP7MAK/instances/instance_id
Now we’ve run a report synchronously and asynchronously. Next, we’ll make our data more useful by narrowing down our results.
2. Change the filter and run the report. It will look something like this, with the edited filter shown in bold type. (This example is
synchronous, but an asynchronous run works the same way.)
curl -s -H 'Authorization: OAuth token ...'
https://na1.salesforce.com/services/data/v29.0/analytics/reports/00OD0000001ZbP7MAK -X
POST -d '{reportMetadata":{"name":"PipelineReport","id":"00OD0000001ZbP7MAK",
"developerName":"PipelineReport","reportType":{"type":"CaseList","label":"Cases"},
"reportFormat":"MATRIX","reportBooleanFilter":null,"reportFilters":[{"column": "AMOUNT",
"operator":"lessThan", "value":"12"}],
"detailColumns":["ACCOUNT.NAME","CREATED_DATE","AMOUNT"],
"currency":null,"aggregates":["RowCount"],"groupingsDown":[{"name":"CONTACT2.COUNTRY_CODE",
"sortOrder":"Asc","dateGranularity":"None"}],"groupingsAcross":[{"name":"OWNER",
"sortOrder":"Asc","dateGranularity":"None"}]}}'
You’ve just run a filtered report and retrieved the data. You’re ready to do some cool tricks with it! For some ideas, along with full
instructions and detailed reference information, check out the Salesforce Reports and Dashboards REST API Developer Guide.
38
Tutorial 7: Building Custom Apps with the Salesforce Reports Step 4: Find, Show, and Refresh Dashboards
and Dashboards API
1. To help your users find their dashboards easily, use a GET request on the Dashboard List resource to retrieve a list of recently used
dashboards.
/services/data/v31.0/analytics/dashboards
For each dashboard, the Dashboard List resource sends you back something like this. The URL handle stores the status or results for
the dashboard. The list is sorted by the date when the dashboard was last refreshed.
[ {
"id" : "01ZD00000007QeuMAE",
"name" : "Adoption Dashboard",
"statusUrl" : "/services/data/v31.0/analytics/dashboards/01ZD00000007QeuMAE/status",
"url" : "/services/data/v31.0/analytics/dashboards/01ZD00000007QeuMAE"
}]
2. You may want to show users their dashboard data in different ways, depending on the platform or device where they’re using your
app. You can pull the data from the dashboard with a GET request to the Dashboard Results resource.
/services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE
What you get back is the actual data in the dashboard, plus its metadata (the dashboard ID, name, component metadata, and any
filters) and its refresh status. The result will look like this:
{
{
"componentData" : [ {
"componentId" : "01aD0000000a36LIAQ",
"reportResult" : {
// Report result data omitted for brevity.
},
"status" : {
"dataStatus" : "DATA",
"errorCode" : null,
"errorMessage" : null,
"errorSeverity" : null,
"refreshDate" : "2014-04-10T20:37:43.000+0000",
"refreshStatus" : "IDLE"
}
} ],
"dashboardMetadata" : {
"attributes" : {
"dashboardId" : "01ZD00000007S89MAE",
"dashboardName" : "Simple Dashboard",
"statusUrl" : "/services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE/status",
"type" : "Dashboard"
},
"canChangeRunningUser" : false,
"components" : [ {
"componentData" : 0,
"footer" : null,
"header" : null,
"id" : "01aD0000000a36LIAQ",
"properties" : {
"aggregateName" : "s!AMOUNT",
"maxRows" : null,
39
Tutorial 7: Building Custom Apps with the Salesforce Reports Step 4: Find, Show, and Refresh Dashboards
and Dashboards API
"sort" : {
"column" : "TYPE",
"sortOrder" : "asc"
},
"visualizationProperties" : { },
"visualizationType" : "Bar"
},
"reportId" : "00OD0000001g2nWMAQ",
"title" : null,
"type" : "Report"
} ],
"description" : null,
"developerName" : "Simple_Dashboard",
"filters" : [ {
"name" : "Amount",
"options" : [ {
"alias" : null,
"endValue" : null,
"id" : "0ICD00000004CBiOAM",
"operation" : "greaterThan",
"startValue" : null,
"value" : "USD 2000000"
} ],
"selectedOption" : null
} ],
"id" : "01ZD00000007S89MAE",
"layout" : {
"columns" : [ {
"components" : [ 0 ]
} ]
},
"name" : "Simple Dashboard",
"runningUser" : {
"displayName" : "Allison Wheeler",
"id" : "005D00000016V2qIAE"
}
}
}
3. If you’re concerned that users might not be seeing the latest data, you can refresh a dashboard remotely by sending a PUT Dashboard
Results request, specifying the dashboard you want to refresh by its ID.
/services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE
The response contains the status URL for the refreshed dashboard:
{
"statusUrl" : "/services/data/v31.0/analytics/dashboards/01ZD00000007S89MAE/status"
}
40
Tutorial 7: Building Custom Apps with the Salesforce Reports Summary
and Dashboards API
Summary
You’ve learned some nifty tricks in the workbook, from filtering report data to combining multiple reports in one. Now you’ve also got
the basics for doing it all remotely, from any app on any platform. With the Salesforce Reports and Dashboards REST API, you can help
users stay on top of their critical data wherever they are.
41
FINAL SUMMARY
We’ve come a long way since the beginning of the book. We’ve covered how to build detailed reports, how to visualize your data with
report charts, and how to leverage the data in a report with dashboard components. We’ve seen the importance of sharing your analysis
with the right people, and how to control access using folders.
We’ve also covered a lot of powerful reporting features, like joined reports, conditional highlighting, cross filters, and two-axis combination
charts, and a whole lot more. We even jumped into some advanced skills by creating formulas using summary functions.
We discussed the importance of sharing and collaboration around data. Ultimately, the goal of analysis is action. By analyzing trends,
comparing numbers, and gauging performance, you identify problem areas, set expectations, and recognize value. Chatter brings data
and people together.
In the final tutorial, we saw how you can design and deliver reports and dashboards without any need for the standard Salesforce web
interface. We sketched out ways to create, filter and read report data using the Reports and Dashboards REST API. You can find real-life
apps using the API on the App Exchange. Try it yourself!
Your finished dashboard will look something like this, using your own data. Each dashboard can have up to 20 components. What will
you create with the other fourteen?
42