I do Power BI reporting directly against source systems, including our accounting/ERP system. I use Power BI Report Server on-prem, so I am not dealing with data gateways, but other aspects will apply regardless.
The first thing to note is that I do not read from the source at run-time. I always use scheduled refreshes. This is in part to PBIRS having limited support for direct queries and also because Sam noted in various trainings that certain measure requirements do not work if the data model is not pre-loaded. A second benefit of scheduled refreshes is that they can occur off-hours when systems are not under heavy load.
The second item to note is that I typically, but not always, have the Power BI report load data from a SQL view defined in or attached to the data source. FYI, I use SQL Server, and have the ability to create whatever views I need. What this does is hide the details of the source system from Power BI by effectively creating an API. If the source system changes, and the ERP system is always getting updates to its data structure, I only have to ensure that the SQL view columns are correctly populated. Power BI never has to know about the changes. You can also use the views to do basic transformations of the data values or data types.
In the rare cases where a SQL view is not warranted, I simply write a SQL query myself and use that as the data source query in Power BI. This is particularly helpful when there are lots of small dimension tables.
Finally, in some cases, such as the ERP system data which goes back to 1992, I use pre-defined dimensions such as the last 10 fiscal years to filter the import of the fact table data. This would be extremely useful in the Power BI service with data gateway, since you are limiting the amount of data that has to be retrieved before any processing can occur.
John C. Pratt