Improve the performance getting data from MYOB by using Power Query Functions

The MYOB API and OdataLink are extremely powerful and allow you to download almost any data out of MYOB.

Some endpoints will naturally perform better than others. Smaller endpoints (such as Accounts) will always be quicker to return their data than larger endpoints (such as Journals or Sales).

Filters can be applied to most endpoints to control the amount of data that you retrieve. But even with filters, you may run into issues where the MYOB API is simply unable to work due to the amount of data involved. This is especially true for large data files.

Unfortunately, OdataLink is a simple bridge between your reports (built using Power BI or Excel) and the MYOB API. While it does have some settings that can be configured (e.g. default date range, default page size, etc.), these settings may not help in all situations.

This is where Power Query Functions come in.

Power Query allows you to create and call your own parameterised functions. Using this technique, you can create a function that accepts a date range to query and filter the data. This function can then be queried multiple times for smaller date ranges.

The benefit of this technique is that it makes each call to OdataLink and the MYOB API small and targeted. Once called, Power Query is able to recombine all the data together seamlessly and efficiently.

You can see it in explained and in action in the following video. You can also download the accompanying Power BI file used in the video.

Building OdataLink to be 100% OData compliant allows it to provide as much functionality and features as possible with the least amount of overhead.

And is therefore able to make use of all the advanced functionality available in Power BI, Excel and Power Query.