Power Query Builder

The Power Query (M) Builder is a new tool for the XrmToolBox.

It is designed to automate the basic Power Queries for getting data into Power BI from Dynamics 365. This includes selecting fields, renaming fields, querying option sets etc.

Updated: July 22 2018. This page is a work in progress and will continue to be updated.

Here is an intro video on how to use the tool, and some of its features, particularly using FetchXML in your Power Query so you can easily retrieve the option set labels, lookup names, etc.

Video is for Power Query Builder version 1.2018.7.20. (Latest version)

Like the Advanced Chart Editor, the tool was developed between Mohamed Rasheed and myself.

Features included in this tool:

  • Support for FetchXML in your Power Query
    • Show labels for Option Sets and Status fields
    • Show name for Lookup fields
    • Show name and type for Owner and Customer fields
  • Support for OData retrieval (standard querying method for Dynamics 365)
  • Auto-include GUID for current entity
  • Use Dynamics 365 display name for all columns
  • Automatically set correct data type
  • Auto-generate a link back to the Dynamics 365
  • Handle empty tables when no records are retrieved
  • Use of all-attributes in FetchXML as a setting

Check back regularly for more information about the Power Query Builder for the XrmToolBox that helps accelerate getting data from Dynamics 365 into Power BI.

Some stuff that we are still working on:

  • Include fields from related (parent) entities

Ideas, how to questions, feedback etc. please put that in the comments below.

Issues, bugs etc. please put that on GitHub: https://github.com/ITLec/PowerQueryBuilder

NuGet link: https://nuget.org/packages/PowerQueryBuilder/

A big thank you to Scott Sewell, who provided a lot of great feedback during the development of this tool. We still have items on the to-do list.

Also, we want to thank Keith Mescha and the former Sonoma Partners Power BI Accelerator. This tool showed us how to do FetchXML pagination in a Power Query. Without it, all the benefits of using FetchXML would have been limited to just 5,000 records.

As always, please sign up for my newsletter or follow me on Twitter for the latest details 

50 thoughts on “Power Query Builder

    • Hi Olivier. We are adding support for more methods soon. We will definitely have a close look at CDS-A when it becomes fully available. Right now it looks like you’ll be able to use the same query string that is generated., but we’ll have to wait a little and see.

  1. The Power Query builder is now used in production. I handed over a PowerBI report to a client today where the last extra data source I had added was made with your tool.
    Besides the ideas you have already mentioned I would add: pre-filtering in the builder for instance: “only active accounts”.
    And there is an issue when selecting the statuscodename field. I can export the query but it will error in Power Bi and say that there is no statusccodename. I just changed it to statuscode and got the usal codes. Just thought I could get the name now the field was on the list.

    • Hi Marianne. Thanks for the input. The name field issue you are referring to was because the tool included virtual fields. OData can’t support those. The latest version automatically excludes those from the list.

  2. Will this work for me if I’m on prem and version 2015? I am getting errors and can’t find any version limitations listed on your docs. Thanks!

    • Good question. I have not been able to test that, but the tool automates the transformations based on the Dyn365 metadata. Those are the same between online and on-premise, so the only manual adjustment you may have to do for an on-premise environment, is the ServiceRootURL and make sure that is in the proper format.

    • Hi Rajul. Yes, it works for 8.2 as well. However, it does require that you are using a recent version of the Power BI Desktop, so if that is more than 2-3 months old, you may have to update. Just as a note, future versions of the tool will have features that are only available for 9.0 and above, but the current/standard feature set will continue to work.

      • Hello, thanks for the response. I need data for audits. It seems to be working for 9.0 but doesn’t work for 8.1 instance. Do you have any idea why it isn’t working?

  3. hi
    thanks for the great tool.
    please add a part to accept custom FetchXML queries and not only accept views
    i need to create a fetchXML Main query from a complex query i generated by FetchXML Query Builder

  4. Hi,
    This tool is fantastic, a huge THANK YOU to you and your contributors!!
    I pulled a FetchXML query that had “OR” Filters across two different Entities, the result pulled through multiple of same records, I couldn’t see a Distinct=True in the Generated Query so added it in front of Page code (

  5. This is a game-changer for me and my clients. Much more elegant way to pull in Dynamics CRM data and transform data in Power BI. Really impressed and hope you keep developing this awesome tool!

  6. Has anyone else experience issues with custom date fields not updating when using Power Query Builder?
    I have a bunch of custom date fields on my Opportunity entity and for some reason they are not updated in Power BI.
    Other standard date fields as est. close date etc. are updated as supposed.

  7. Follow-up on my last post.

    Sometimes I get an error instead:

    DataFormat.Error: We couldn’t parse the input provided as a Date value.
    Details 2018-10-31T07:00:00Z

    I’ve tried messing around with the Date/time field settings in Dynamics and also the data type in Power BI without any luck.

    I’m not able to spot any patterns.

    • If you open the advanced editor and find the #”Changed Type” step – you can see that your custom datetime field is changed to date. if you change it to datetime instead – it works.

      #”Changed Type” = Table.TransformColumnTypes(#”Renamed Columns”,
      {“Process Stage Last Changed”, type datetime},

    • I get this error all the time. What I Do is find the last line in the applied steps where I don’t have an error for the date field and I insert a Powerbi command to extract before T and then everything is fixed.

  8. Hi Ulrik,

    Loving the tool. however, when trying to use the new “Copy FetchXml” functionality I get and error when adding a query from the asyncoperation table (System Jobs).
    I have exported this query from CRM, used the “Open Fetch Xml Builder”, opened the query and ran successfully. When using the “Return FetchXML” function PowerQuery fails with the following message.

    “System.Exeption: Error while retrieving views: Object reference not set to an instance of an object……

  9. Hi,
    We have working Queries in PBI Desktop (using Power Query Builder), however after Publishing to PBI Online and setting up a Scheduled Refresh (Using the On-Premise Data Gateway) we get an error:
    “We found extra characters at the end of JSON Input.”

    Is anyone else experiencing this? Does the Json query need to be different for Web version of PowerBI??


    • Hey, I’ve heard this reported before, but haven’t seen it myself. Let me know if you locate the issue, and we’ll try to update the tool if possible. I do think it is specific to on-premise, as I have not seen issues with online. Will definitely share any findings on this if they come along.

  10. Hi Ulrik

    I just updated to version 1.2018.10.29

    Custom Picklists are not being generated correctly through the “Generate OptionSets”. Status and StatusReason works and standard option sets – but not custom picklists.

    Error: Expression.Error: Vi kan ikke anvende feltadgang på typen Null.

    In the first step “source” the OptionSet is null

    For optionsets that work is says Record.

  11. Hi Ulrik,

    Love the tool! I just updated to 1.2018.1014.5 and when I Generate FetchXml I no longer have the Filter pane to filter the data. Has this been removed or can be accomplished in another way?



  12. Hi Ulrik

    How do you recommend getting the Process Stage on Opportunity into PowerBI – and sorted?

    If I use Stepname/Pipeline Phase – it is prefixed with a number – and the field does not always seem to be up to date in CRM. – Also the same phase can have different numbers and some phases can have the same number. It is a CRM system with many iterations of the BPF…

    If I use a view for Opportunity and include the Stage Category from the Process Strage – the view will have data in CRM, but not Power BI if I use Power Query Builder.

    So I include the PBF entity for opportunity as a table. This works fine.
    Then I include the BPF entity for lead as a table.
    Then I combine the two in a merged table so I can link to both lead and opportunity.
    Then I add a new coloum (from example) and add the sort numbers of the stages. And then I sort the Active Stage coloum by the new sort coloum.

    This works.

    But the question is – is there an easier way to do it? How do you get the Process Stage into Power BI?

  13. Hi Ulrik,

    What a bloody brilliant tool 🙂 As a business person and not a data analyst I am challenged to find ways to improve the views and dashboards beyond what is natively possible in Dynamics. I have been using your guide to update the charts to make them really useful and now discovered this wonderful tool. But again, it would still be way beyond me if not for your incredible ‘tutorials’ that take things which are relatively sophisticated and make them seem much easier.

    Big thanks!

  14. Hi, Ulrik. Fantastic tool. Quick question. Have you heard of users getting errors from D365 around having the connection forcibly closed? There is a fair amount of data in D365 prod (a few entities each with 100k – 200k records), but nothing crazy. I keep getting errors for different entities along the lines of “The request was aborted: the connection was closed unexpectedly” or another, “unable to read data from the transport connection: an existing connection was forcibly closed by the remote host.”

    These errors do not come up in the dev environments where there is less data, so this is leading me to think there might be a time out issue on the part of D365. I am wondering if you’ve talked to anyone else who has encountered this issue?

    Thanks! Scott

  15. Wow! What an excellent tool! Not sure how I can survive Power BI without this tool now. 🙂 Thank you so much!!! You guys are magicians.

  16. I have a question. Can we publish the charts to CRM online and the user can use power bi charts in MS CRM without locally running XRM toolbox and Power BI desktop client? Also is XRM toolbox compatible with the web version of power bi or does it need the local install of power bi desktop. Thanks in advance

  17. This tool has really changed my relationship with Power BI. THANK YOU!!
    That said, I’m working on a new project and I am getting a weird error,
    DataFormat.Error: We found extra characters at the end of JSON input

    The generated query looks like this and looks like every successful use of this tool that I’ve ever done.
    When I put it in a JSON validator I get Error: Parse error on line 1: let GetResults=(z as ^ Expecting ‘STRING’, ‘NUMBER’, ‘NULL’, ‘TRUE’, ‘FALSE’, ‘{‘, ‘[‘, got ‘undefined’
    But, I put in a query that didn’t error out and got the same thing from this validator.


    GetResults = (z as text, x as number) =>
    S = Json.Document(Web.Contents(ServiceRootURL & “/ipm_jobs”, [Headers=[Prefer=”odata.include-annotations=*”],Query=[fetchXml=”


  18. I just read another comment about this error and YES, this is from an on prem installation. IS there any way to use your tool with on-prem CRM?

  19. More info…the Service Root URL is correct based on the developer’s tools in CRM. I’m not sure I even remember how to load data the hard way! LOL!

  20. Hi Ulrik and thanks for a great tool!

    Just a question, I’m not sure if I’m doing it wrong or if it’s at all possible, but I’d like to “replicate” a sales person dashboard in Power BI and set it up in a D365 Dashboard. The original dashboard, of course, is mainly using the “my open opportunities” fetch xml. I hoped maybe the fetch xml would run inside a PBI report created with the tool, but it appears to run as the user creating the dashboard (me). Is there any way of getting this to work, without going into row level security?

    • Hi Jostein. Yes, the data is always queried in the context of the report owner. You can create DAX Measures with KPIs like My Est. Sales, Count of My Opportunities by using the USERPRINCIPALNAME function. That returns the domainname (emailaddress) of the logged in user, and you can match it against the user table. I.e. My Est. Revenue = CALCULATE(SUM(Opportunity[Est. Revenue]),Owner[Domainname]=USERPRINCIPALNAME())
      When it comes to showing a table, DAX won’t be able to filter based on the USERPRINCIPALNAME, so the only route there, that I know of, is using Row Level Security.

      • Thanks for the feedback and tip, Ulrik, I’ll go play with the USERPRINCIPALNAME, didn’t think of that. Long term, I’m hoping Microsoft comes up with even tighter and improved integration with PBI, as the regular D365 charts and Dashboards seem to be slightly fading into the background of the power platform.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s