Translate report visuals

Translate the text baked into a report canvas: visual titles, headers, buttons, and text boxes, not just the semantic model.

Last updated:

Semantic-model translations cover the data: table, column, and measure names, and their descriptions. They can’t reach the text painted onto the report canvas itself, a visual’s title, a slicer header, a button label, a text box. Daxlate translates that layer too, so a report switches language top to bottom instead of leaving its headings in the authoring language.

Report translation is a file-mode feature: open the .pbix or .pbit from disk (see File vs. live mode). It applies to reports that carry their own semantic model, since the translation tables live inside that model.

Turn on the enhanced report format (PBIR) #

Report translation needs Power BI’s enhanced report format (PBIR). In Power BI Desktop, open File → Options and settings → Options → Preview features, enable the enhanced report format (PBIR), then reopen your report and save it once so it adopts the new format.

Legacy-format reports

If a file’s report still uses the legacy format, Daxlate opens the model and translates it normally but shows a notice that report-canvas translation waits on PBIR. Nothing is blocked; only the report layer needs the format.

Switch to the report scope #

Open a file that has a report layer. The sidebar splits into a Model section (tables, columns, measures, hierarchies, as usual) and a Report section listing each page, its visuals, and their translatable text (Page → Visual → text item). A Model ↔ Report switch in the grid toolbar flips the grid between the two layers; clicking a report element in the sidebar switches to the report scope and filters the grid to that page, visual, or single string.

In report scope the toolbar fits the layer: report text has a single value per language, so the caption/description VIEW switch and the TYPE filter are hidden. Missing only and the search box work just as they do on the model.

Read the row badges #

Report rows carry a small icon that tells you their binding state:

  • T (text): report text that isn’t yet bound to a translation measure.
  • ƒ (function): text already bound, so it switches language.
  • T! (amber): a text box Daxlate can’t rewire automatically, because it has more than one formatting style or a link. Your translation is still saved and its measure is still created; either bind the text box to that measure in Power BI Desktop, or simplify it to a single unformatted line and save again.

Save #

Saving a file with report translations does two things. It writes the report text next to the file as a per-file sidecar, {file}.daxlate.csv (the CSV Power BI reads at refresh), and it rewrites the report so each translated string is bound to a lookup measure. Daxlate adds a few generated tables to carry this (_translations, _translations_measures, and _translations_languages); they’re hidden from the grid, the sidebar, the coverage figure, and Export, so they don’t pad your object list. Tick View → Show translation tables if you ever want to see or export them.

Each translation measure also bakes in the original text as a fallback, so a report whose data source can’t refresh still reads correctly in its base language rather than rendering blank titles.

Let readers switch languages #

Saving also generates a _translations_languages table. Drop its Language field onto a slicer and readers can switch the report’s language themselves. See Add a report language switcher.