TextQL already connects to Power BI, reading the tables and columns a model is built on. This release adds the layer above that: a Data App can now query the semantic model itself, in DAX.
In a mature Power BI or Fabric deployment, net revenue, churn, same-store growth, the fiscal calendar, and a year-over-year comparison that handles leap weeks correctly all live in the model rather than the warehouse. These are DAX measures, authored once and reviewed by the team that owns the definition. Row-level security lives there too, so the same report resolves differently for a regional manager and a VP, by design.
Querying in DAX means an app inherits the logic itself: how churn is defined, how same-store growth is scoped, how the fiscal calendar rolls up. A dashboard shows you where that logic landed for one report, on one day; querying the model gets you the logic, live. Measures evaluate inside the model, exactly as the model defines them, so a figure in a Data App matches the figure in the Power BI report it came from. Without that, the same logic has to be reconstructed in SQL by hand, then kept in step as the model evolves. That's work the model has already done once, now duplicated.
Teams have also solved this by hand: export the model's output to Excel, upload the file, rebuild the pivot in the app. It produces the right answer at the moment of export, and the whole process repeats on every refresh. Querying the model directly removes that loop. The pivot runs on the cube.
How it works
Add a powerbi_dax source: a connector, workspace, model, and DAX. Sources without parameters bake into the snapshot at publish or refresh. Parameterized sources run live at view time, the same split sql_query already uses. From a compute function, ana.query binds parameters as DAX literals; ana.dax composes DAX directly for dynamic pivots.
Security
Row-level security is part of what the model defines, so it carries through the same way. Live DAX runs as the app's Runner, with connector access re-checked on every call. Where row-level security should follow the viewer, the query impersonates them, and the model decides what that person sees.
Available today in Data Apps.
