Skip to content
sandadocs

Connect Power BI

Read your semantic fluid in Power BI Desktop with the OData feed connector, shape it in Power Query, and keep it fresh with scheduled refresh in the service.

Power BI reads sanda's feed with its built-in OData connector, the same one Excel uses. You connect once in Power BI Desktop with a token, and after you publish, the Power BI service refreshes the dataset on a schedule.

Before you start

  • An integration token. An owner or admin creates one under Settings · Integrations. A feed needs none of the optional switches. Copy it when it is shown, because sanda cannot show it again. See agent tokens.
  • Something on the map. The feed offers the tables on your semantic fluid.

The feed is on every edition.

Connect in Power BI Desktop

  1. Open the OData feed connector. On the Home ribbon, choose Get data, then OData feed. If it is not in the short list, choose More, search for OData, and select OData feed.

  2. Paste sanda's address. Paste it exactly, including the trailing slash, and press OK:

    Text
    https://console.sanda-os.com.au/api/odata/
  3. Choose Basic. When Power BI asks how to sign in, choose Basic. Paste the token into Password. sanda ignores the user name, so leave it empty, or type any text if Power BI insists on a value.

  4. Apply it to the sanda address. If Power BI asks which level to apply the sign-in to, leave it on the address you typed. Press Connect.

  5. Choose tables. The Navigator lists everything on your map. A table with metrics appears twice: its rows (invoices) and its summary (invoices_summary). Tick what you need, then choose Load, or Transform Data to shape it first.

Use the summary for numbers. net revenue in a summary is the definition your business signed off, composed by the same engine that answers it in sanda. Use the rows table for detail, and ignore its _row column: it is sanda's row number for that read and it is not stable from one refresh to the next.

A table's description in the fluid is sent as its OData description, for clients that show one.

Shape the data in Power Query

Choosing Transform Data opens Power Query. What you do there is sent to sanda where it can be: removing columns becomes $select, and filtering rows becomes $filter. Narrowing at the source makes a refresh cheaper as well as smaller.

A query that loads one table is a few lines of Power Query M:

Load a summary table
let
    Source = OData.Feed("https://console.sanda-os.com.au/api/odata/"),
    invoices_summary = Source{[Name = "invoices_summary", Signature = "table"]}[Data]
in
    invoices_summary

The credential is not part of the query. It is stored in Power BI's data source settings, so the token never appears in your file.

To keep this year's rows and only the columns you need:

Filter and choose columns
let
    Source = OData.Feed("https://console.sanda-os.com.au/api/odata/"),
    invoices_summary = Source{[Name = "invoices_summary", Signature = "table"]}[Data],
    ThisYear = Table.SelectRows(invoices_summary, each [issue_date] >= #datetimezone(2026, 1, 1, 0, 0, 0, 0, 0)),
    Columns = Table.SelectColumns(ThisYear, {"region", "issue_date", "net_revenue"})
in
    Columns

The table and column names in these snippets are examples. Yours come from your own fluid, so copy them from the Navigator.

A few rules follow from what sanda accepts:

  • Filters combine with "and". A filter that needs "or" or "not" is refused with a message saying so, and Power BI shows it in the error pane. Filter in separate steps, or after loading.
  • Filter dates with "on or after" and "before". sanda compares dates as a window that includes its first day and excludes its end, so a month filter never loses its last day. A comparison that means "after" or "on or before" is refused.
  • Filter on a dimension, not a metric. A metric is worked out from the rows a query reads.

The complete list is in the feed reference.

Refresh

In Power BI Desktop, choose Refresh on the Home ribbon. Every refresh is a live read of your warehouse through the read-only role, billed to your workspace like any other query. sanda sends tables in pages of 1,000 rows, and Power BI follows the links to the next pages on its own.

Publish and schedule a refresh in the service

A dataset in the Power BI service refreshes without your desktop, so it needs the token entered again there. sanda's feed is on the public internet, so the service reads it directly and no on-premises data gateway is involved.

  1. Publish the report from Power BI Desktop to a workspace in the Power BI service.
  2. Open the dataset's settings. In the service, find the dataset in its workspace and open its Settings.
  3. Edit the credentials. Under Data source credentials, choose Edit credentials for the sanda data source.
  4. Choose Basic. Set the authentication method to Basic, leave the user name empty or type any text, and paste the token into the password box. Choose a privacy level, then Sign in.
  5. Turn on scheduled refresh. Under Scheduled refresh, switch it on, choose how often it runs and save.

How often the service lets you refresh depends on your Power BI licence. Whatever the schedule, each run is a query against your warehouse, so choose a frequency the report actually needs.

When you rotate the token, edit the credentials here as well as in Power BI Desktop. A dataset whose token was revoked or has expired fails its next refresh with a sign-in error.

Power Query Online and dataflows

A dataflow uses Power Query Online, which has an OData connector. Give it the same address and the same Basic credential, with the token as the password.

If something goes wrong

Power BI shows sanda's own message when it can.

What Power BI shows What it means What to do
A sign-in prompt, or a credentials error on refresh The token is wrong, revoked or expired Create a new token and update the credentials, in Desktop and in the service
"This workspace has nothing on its semantic map yet" No tables are on the map Import a table under Intelligence · Semantic fluid
"sanda can only combine filters with “and”" A filter used “or” or “not” Rewrite it without them
"... is a metric, worked out from the rows sanda reads" A filter named a metric Filter on a dimension instead
"... looks like it holds a secret, so sanda won't select it" A column whose name looks like a password or key is in the table, and sanda never reads those Rename the column if the name is wrong, or build a view that leaves it out. See views
"Reading ... took longer than sanda will wait" The read ran past 30 seconds Filter the table, or remove columns

More help is in troubleshooting.

Next steps

Something unclear or out of date? Tell us, and we will fix the page.