Sharepoint can delegate several functions, which effectively means you can request sharepoint complete the action and then return the results. When you use a non-delegable function or data source, the data source sends everything to powerapps and powerapps performs the function. This is effected by the row limit and means that you may not get all of your data.
This is the documentation for Sharepoint including a list of the delegable functions:
https://docs.microsoft.com/en-us/connectors/sharepointonline/
As for how to get a unique id, I use a combination of First() and SortByColumns to make sure I always get the highest value.
For you, the formula would be:
ReportID: First(SortByColumns(ExpenseReport_2, "ReportID", Descending)).ReportID + 1
This asks Sharepoint to sort the data source into descending order by the column ReportID, and then return the first value. Since it is descending, the first value will always be the highest.