Thank you so much to mwegener for posting this. From 2020 still applies in 2025. This little post should be copied and pasted as an example directly into the Microsoft incremental refresh documentation.
As of today I don't seem to need the Date.From() step, but simply use [DATE] >= RangeStart and [DATE] < RangeEnd) in all of the queries. That is the INVOICE HEADER, INVOICE LINE AND (Merged as new query) INVOICE queries.
Something that was slightly confusing to me at first, is that you work with load enabled on all tables during development, but when you upload it to the PBI Service you disable the load on the tables-that-will-be-merged, leaving only the merged table enabled during load and which has the incremental refresh configured.
All the queries have to be foldable for this to work. Then, once the semantic model gets loaded into the PBI Service, it will "compute" the merged query, which then will "compute" the queries from which it is created by merging, so to speak. Having RangeStart and RangeEnd is what sets off this chain reaction, broadly speaking.
Once you grasp the whole concept (which actually is quite easy once you get it, but the devil is in the details) this whole set up gives you nearly super powers when it comes to incremental refresh and what you can do with your semantic models.
Sometimes doing certain stuff directly with views in the database might be efficient, but sometimes you just can't push everything upstream to the DB and be partially flattening tables, since you might need the ordinary relationships established between them.