Dynamics CRM 2011 includes plenty of nice reports out of the box; in fact there are so many of them it can be difficult to sift through them all to find the ones you need. In the web client, you can click Workplace and then Reports for a full listing; the following figure shows just a few of them, including a couple of custom ones my organization uses:
In my experience, the one thing that definitely doesn’t work is to simply let your users explore until they find the reports they need! If you’re responsible for customizing or configuring Dynamics CRM, you will generally need to take some steps to push the right reports out to the people who need them, and in CRM 2011, dashboards give you a great way of doing that. For example, take the built-in Activities report. It presents a stacked column chart, grouped by users, with segments of each column representing counts of the various activity types performed by users:
Rather than force users to locate it in the list of reports, you can give it more prominence by exposing it on a dashboard. For example, I’ve customized my organization’s dashboards to include one called “Activities: all Users, Last 90 Days”, and as a system dashboard it’s selectable from the Dashboards drop-down list:
Placing a Report on a Dashboard
You can’t place a report directly on a dashboard, however. In Dynamics CRM 2011, dashboards are really just specialized web pages designed to expose four kinds of “components”: Charts, Lists, Web Resources, and Iframes. The trick to placing a report on a dashboard is to remember that reports – along with all other views and forms – have unique URLs that can be used for direct navigation, or as the URL property of an Iframe control on a dashboard.
To create a dashboard that exposes the Activities report, follow these steps, using the web client:
1. Click Workplace, and then click Reports.
2. Locate the Activities report. The default filter is set to include activities for the last 14 days, so optionally, click Edit Default Filter and change the Last X Days filter to whatever you’d like, then click Save Default Filter.
3. Click Run Report. After a few seconds, the report will appear in the SQL Server Reporting Services (SSRS) Report Viewer.
4. Press the Ctrl+N key combination to open a new window with the URL/address field exposed, and click inside the field:
5. After making sure the entire URL is selected, use Ctrl+C to get it on the clipboard, and then close out of the two report viewer windows.
6. Create a new dashboard, give it an appropriate name, and delete all of the components except for one, and use the Increase Height and Increase Width buttons to make it big, along these lines:
7. Insert an Iframe control, and in the URL field, use Ctrl+V to paste in the URL on the clipboard:
8. Save & Close twice, publish your new dashboard and you’re good to go.
A couple of important points about that gnarly-looking URL:
§ Note the “?action=run” bit after “viewer.aspx”. This is what will cause the report to open up directly in the viewer, bypassing the filter window you’ll get if you simply point to the report in the report grid and use the built-in Copy a Link command. (And if you ever see ?action=filter in the URL and want to open the viewer directly, just replace it with ?action=run.)
§ The stuff to the right of “&id=%7b” is the GUID – the id that uniquely identifies records in Dynamics CRM, in this case the Activities report. Using Jscript to dynamically construct a URL that incorporates a record’s GUID is the key to many a Dynamics CRM mashup, so in case you haven’t seen this before, here’s a tip: the GUID itself is bracketed by “%7b” in front and “%7d” at the end; in my example, this portion of the URL looks like this: ?id=%7b6F7A3F7C-041F-E011-76DF-1CC1DE799302%7d – so the actual GUID is 6F7A3F7C-041F-E011-76DF-1CC1DE799302. As an example of when this is important, here’s a snippet of JScript that constructs a URL for a contact record:
var serverurl = Xrm.Page.context.getServerUrl();
var recordurl = serverurl+”main.aspx?etn=contact&id=”;
var strtemp = contactid.replace(”{”, “%7b”);
var strtemp = strtemp.replace(”}”, “%7d”);
recordurl += strtemp;
recordurl += “&pagetype=entityrecord”;
At the end of that bit of code, the recordurl variable will contain a nicely defined URL, suitable for inclusion in a workflow-generated email for example, for a contact record from my CRM.