Every released version, what changed in it, and the date it went out. This page is generated from the module’s own changelog, which is the same file shipped inside technovision_powerbi and rendered on its Odoo Apps Store listing.
Three screenshots on the Apps Store listing, including the connection wizard with its generated instructions and its not-HTTPS warning.
18.0.1.0.0
Notes
First release.
Added
A native OData v4 feed at /powerbi/odata: service document, $metadata with real EDM types, and rows with $top/$skip and @odata.nextLink paging. Power BI Desktop opens it with Get Data → OData feed — no custom connector, no Power Query.
Saved reports are the tables. Tick Publish to Power BI on a report built in Advanced Report Builder and it appears in the picker, with the column labels a person chose rather than technical field names. The dashboard and the scheduled email therefore cannot disagree about what a report means: they are the same definition.
Per-person tokens. A token is bound to one Odoo user, and every row is read through with_user(that person). Two people refreshing the same report can legitimately get different data.
A generated connection guide with the URL and the exact Power BI steps, because the commonest failure is a token pasted into the username field.
Last-used time, refresh count and last IP per token.
Expiry, and one-click revocation effective on the next refresh.
Security
HTTP Basic, never a query-string key. A URL ends up in browser history, proxy logs and the dataset settings screen; a password box does not. The 401 carries WWW-Authenticate: Basic, without which Power BI never offers to store a credential at all.
The secret is never stored — a SHA-256 digest and a short non-secret prefix, compared in constant time, shown once at issue.
Owner and digest are frozen after issue, so revocation cannot be downgraded to a rename.
Publishing is off by default and per report. Exposing every saved report the moment somebody installs a module is a data-egress decision made by the wrong person.
A table that is unpublished and a table that does not exist answer identically, so the feed cannot be used to enumerate what reports exist.
Changed in Advanced Report Builder
definition.run() gained optional offset and limit, bounded by the definition's own limit, so a BI tool can page through a report without being able to page past what the definition permits.