Skip to main content

How to Create Dynamics 365 SSRS Report

https://readyxrm.blog/2018/07/24/how-to-create-your-first-dynamics-365-ssrs-report/


Summary

  • SQL Server Reporting Services reports are a viable way to generate information from your Dynamics 365 system.
  • The Dynamics 365 Report Wizard has limitations in terms of the reports that can be created.
  • Creating SSRS Reports does not necessarily require deep development skills.
This post outlines the steps to create a simple SSRS report integrated and connected to Dynamics 365 without using the Dynamics 365 Report Wizard.

Dynamics 365 SQL Server Reports

Dynamics 365 Sales and Service Apps come with a set of reports out of the box.  In my experience, these reports are not often used and in most cases, there is a need for custom reports.
The Dynamics 365 report wizard can create simple list based reports based on one or two related entities, has some basic charting abilities, but has limits on flexibility.
With some basic knowledge, you can create custom SSRS reports for Dynamics 365 very quickly.







wizard_lego
Become your own Report Wizard!

SSRS reports are created using SQL Server Data Tools, which is a version of Visual Studio specific for creating database related projects.  The fact that Visual Studio is used does NOT mean that the report author needs to be a developer or coder to create powerful reports.
Before starting, please review my post on setting up your workstation to create SQL Server Reports for Dynamics 365.
Once you have your workstation ready, you will also need some level of access to your Dynamics 365 system.  Note that these steps could also be used to create custom reports for a Common Data Service Model-driven PowerApp.

Creating your First SSRS Report

To create reports, you first need to launch SQL Server Data Tools
ssdtdl8
This will launch Visual Studio.  Again, you don’t need to be a developer to use this tool!







assdt16
Visual Studio SQL Server Data Tools

Click on File -> New -> Project
assdt17
The New Project Dialog will appear.
From the Templates, choose Business Intelligence -> Reporting Services and select Report Server Project.
assdt18
Once that is loaded, from the Solution Explorer on the right-hand side, right click on the Reports folder, choose Add -> New Item
assdt19
Choose to create a Report file and give it a name.  The “RDL” extension stands for “Report Definition Language” which is an XML interpretation of the report you will create.
assdt20
The report design surface will appear.







assdt21
Report Designer

The first step is to create a link to your Dynamics 365 system.  On the left of the report designer window, in the Report Data section, right click on the Data Sources folder and click “Add Data Source”.
assdt22
If the Report Authoring extensions were installed correctly, you should see “Microsoft Dynamics 365 Fetch” as a type.  For Dynamics 365 On-Premise, you do have the option to create T-SQL based reports, but to future proof your reports, you should consider writing in FetchXML where you can.
Provide the Data Source with a name and enter in your URL for your Dynamics 365 system.
assdt23
Click on credentials and enter in your Dynamics 365 login and password.  Note that these will not be “carried” with the report, but just used in the designer.  When we eventually load the report in Dynamics 365 it will run in the context of the logged in user (and applicable security roles will apply)
assdt24
We need to add a Dataset to pull data from Dynamics 365.  We will be using a query language called “FetchXML”.
While you could construct a FetchXML by hand, it is easier to generate using a tool.
One quick way to get a FetchXML query is from Dynamics 365 Advanced Find.
Directly in Dynamics 365, simply build an Advanced Find query, and then choose the “Download FetchXML” button.  An XML file containing the query will be downloaded.
assdt26
Looking at the FetchXML file, you can see the structure identifying the entity, the fields and filters.
assdt27
If you want to create advanced FetchXML queries, I suggest using the XrmToolBox  plug-in “FetchXML Builder” by MVP Jonas Rapp.







fetchxml
Must Have Tool for Dynamics 365 Report Development

Again on the Report Data section, right click on the Datasets folder and choose “Add Dataset”
assdt25
Provide a name, choose to use the embedded dataset that we created earlier and paste in the FetchXML statement.
assdt28
You should now see a dataset in the Report Data section.
assdt29
For the first report, we will just drag a “table” component onto the design surface.
assdt30
The table will automatically bind itself to the dataset we created earlier, from here we can define what fields we want to appear on our report.
assdt31
Once we have defined our layout (pretty simple at this point) we can click the “Preview” button to see what our report will look like.
assdt32
Now that we have our “fancy” report created, lets load it to Dynamics 365!

Loading the Report to Dynamics 365

Login to Dynamics 365 and choose Sales or Service and click on the Reports icon.
Note: If you using a CDS environment with no Dynamics 365 First Party Apps installed, you can find the reports via the Advanced Find or add the Report Button to a Site Map.







assdt33
Dynamics 365

You will see the list of out of the box reports.  Click on the +NEW button to add your new report.
assdt34
Change the Report Type to “Existing File”.
Click the Choose File and navigate to the directory where you created the report project in Visual Studio, locate and choose the “rdl” file.  To have the report appear on the menu within the context of certain entities, you can set them in the “Related Record Types” and indicate for them to show up on the report area, forms and lists.  In a future post I will expand upon running reports agains specific Dynamics 365 records (e.g. running a quote report against a specific quote record).
assdt35
The report should now appear on the list of available reports.  Double click the report to run.
assdt36
You should now see your report rendered within the context of Dynamics 365.  You can now print or download to a variety of formats.







assdt37
Super fancy SSRS Report generated directly in Dynamics 365

Next Steps

The report we created was pretty simple and frankly, quite ugly.  In SQL Server Data Tools, we can clean up the report and have specific formatting, totals, logos, sections, etc.  and create a pixel perfect rendering of our data.
Creating SSRS reports for Dynamics 365 is not difficult once you understand the basics.  I hope you find this post useful and I look forward to hearing about the amazing reports you have created.


Comments

Popular posts from this blog

Microsoft Dynamics 365 CRM Troubleshooting Solution Import Errors

Remember when CRM life was so much simpler that solutions did not yet exist? If you had separate development and production environments and you wanted to move your customizations, you simply clicked  Export Customizations  and voila! It was done. Those were the days. Nostalgia Warning – in case you’ve forgotten, here’s a screenshot to jog your memory: With CRM 2011, the concept of solutions was introduced, giving us a new set of powers – by picking individual entities, workflows, etc., we now had the ability to group together and move only those customizations we wanted to include in our solution. The next great solutions advancement came with CRM 2016: we can now select specific components within each individual entity – so instead of moving the entire contact entity, for example, we have the option of moving only a certain view or field within the entity. And we can do this without having to hack the xml in the zip file. (By the way, if you want to learn more abou...

How to Filter SubGrid Lookup view in Dynamics 365 CRM

How to Filter SubGrid Lookup view in Dynamics 365 CRM.  Please check the comments in the below code and do follow the steps accordingly and call the  filterSubGrid() funtion on onload. var LastQuery = ""; function filterSubGrid() { debugger; setSubgridLookupFiltering(); } function AddLookupFilter(entity_type, customFilter) { var subgridLookup = Xrm.Page.getControl("lookup_Contacts_Participants"); subgridLookup.addCustomFilter(customFilter, entity_type); } function setSubgridLookupFiltering() { var subgridAddButtonId = "Contacts_Participants_addImageButton"; //Try to get the element from both the current and the parent document. var subgridAddButton = document.getElementById(subgridAddButtonId) || window.parent.document.getElementById(subgridAddButtonId); //This script may run before the subgrid has been fully loaded on the form. If this is the case, //delay and retry until the subgrid has been loaded. if (subg...

How to prevent record from saving in Dynamics CRM using Javascript

  From time to time you might need to add some validation to the save event of an entity, this actually used to be an approach I would use on a regular basis but since the introduction of business rules have found myself doing this less and less. But still, knowing the ability is available is handy. When you define the onsave event function, you must tick the “Pass execution contact as first parameter” option. (See below) Having done that you can create an onSave function with code similar to the example I have shown below. Note forgetting the “(context)”, which will take the context parameter allowing you to prevent the save when needed. function onSave(context) { var saveEvent = context.getEventArgs(); if (Xrm.Page.getAttribute("telephone1").getValue() == null) { // *** Note: I am using an alert for testing a notification maybe better! alert("Put in a phone number!"); saveEvent.preventDefault(); } } Note: This simple example might be better achi...