> ## Documentation Index
> Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# Power BI in 2026.9

> Load Speckle models with Get Tables, relate on Object Key, and bind the 2026.9 3D visual.

<Note>
  This is 2026.9 preview documentation. Coverage here is incremental: a page exists only where
  2026.9 differs or is newly documented.
</Note>

Get Data now shows **Speckle - Get Tables**. The default Simplified layout loads a small Objects
table plus Properties and Relations functions, instead of one wide table. The 2026.9 3D visual
streams geometry from Speckle over a WebSocket and requires WebGPU.

This page covers only what changed. For the connector that is available today, see
[How to use Speckle for Power BI](/connectors/power-bi/power-bi). Existing reports that still call
`Speckle.GetByUrl` must be rebuilt. See
[Upgrade Power BI to 2026.9](/next/connectors/power-bi/migration).

## What changed

**Speckle - Get Tables** accepts model, version, federated, and project URLs.

The default **Simplified** layout provides three Navigator entries:

* **Objects** has one row per object. Its standard columns are `Object Key`, `Application ID`, and
  `Model Info`. Federated loads also include `Source Model`.
* **Properties** is a function. Choose the property paths the report needs, then load a table that
  contains `Object Key` and those property columns.
* **Relations** is a function. Choose outgoing graph relations such as `ON_LEVEL` or `IN_ROOM`, then
  load a table that contains `Object Key` and those relation columns.

Create one-to-one relationships from the invoked Properties and Relations tables to Objects using
`Object Key`.

## Functions

| Function                                                                        | Where it appears                               | Behavior                                                                                              |
| ------------------------------------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `Speckle.GetTables(url, options)`                                               | The **Speckle - Get Tables** entry in Get Data | Returns the navigation table for the new data model                                                   |
| `Properties(paths?, useFullPaths?)`                                             | A Navigator entry bound to each loaded model   | Returns `Object Key` plus the selected property columns                                               |
| `Relations(relationNames?)`                                                     | A Navigator entry bound to each loaded model   | Returns `Object Key` plus selected outgoing relation columns                                          |
| `Speckle.AddProperties(source, propertyPaths, objects?, useFullPaths?)`         | M code only                                    | Adds selected properties to Objects. An optional Objects table can filter rows and keep extra columns |
| `Speckle.AddAllProperties(source, objects?, useFullPaths?)`                     | M code only                                    | Adds every property path to Objects. Intended for property-light models                               |
| `Speckle.AddRelations(objects, relations, relationTypes, nodes, relationNames)` | M code only                                    | Adds selected outgoing, one-hop relations to an Objects table                                         |

`Properties` and `Relations` are bound to the loaded model. They are not global M functions.

`useFullPaths` is a logical value. `false` uses the shortest unique suffix and `true` uses the full
dotted path. The connector adds numeric suffixes when names still collide at full depth.

`Speckle.AddProperties` and `Speckle.AddAllProperties` take the navigation table returned by
`Speckle.GetTables` as `source`. Their optional Objects override can filter the result and preserve
extra columns.

`Speckle.Objects.*` and `Speckle.Models.*` helpers still exist. They operate on the legacy
`Speckle.GetByUrl` table only. They do not accept the tables returned by `Speckle.GetTables`. For
the retained-function list, see [Upgrade Power BI to
2026.9](/next/connectors/power-bi/migration#retained-functions).

## Load

<Steps>
  <Step title="Open Speckle - Get Tables">
    Select **Get Data**. Search for Speckle, then select **Speckle - Get Tables** and **Connect**.
    You should see the URL dialog for that connector.
  </Step>

  <Step title="Paste a Speckle URL">
    Paste a model, version, federated, or project URL from the web app and select **OK**. You should
    see the Navigator for that URL.
  </Step>

  <Step title="Load Objects and related tables">
    Load the Objects table. Invoke Properties and select only the property columns the report needs.
    If the report uses graph-backed fields such as levels or rooms, invoke Relations and select
    those fields. Relate each invoked result to Objects one-to-one using `Object Key`.
  </Step>
</Steps>

<Tip>
  The **All tables** layout also exposes Property Values, Property Paths, Object Types, Type
  Properties, the raw Relations table, Relation Types, and Nodes. Use these tables for custom
  relationships. Nodes includes `Elevation`, which can sort level names.
</Tip>

<Note>
  The Properties function uses the shortest unique suffix for column names by default. Set **Use
  full paths** to `true` to use full dotted paths. If two names still collide at full depth, the
  connector adds numeric suffixes such as `.1` and `.2`. Instance values use unprefixed column
  names. Type values use the `Type_` prefix.
</Note>

<Warning>
  For 2026.9 loads, use the Properties and Relations Navigator functions, and relate on `Object
      Key`. Do not pass Get Tables output into `Speckle.Objects.*` or `Speckle.Models.*` helpers.
</Warning>

## View

The new visual has four field wells: **Model Info** (required), **Object Keys** (required),
**Object Data** (tooltips), and **Color By**. Use `Objects[Object Key]` as the standard object
binding. `Application ID` remains supported, but large models require an extra lookup dictionary
that can add tens of megabytes to the load.

Geometry no longer passes through the Power BI dataset. The visual streams it from Speckle over a
WebSocket, becomes interactive after the first geometry arrives, and continues loading in the
background.

<Steps>
  <Step title="Import the 2026.9 visual">
    In the Visualizations pane, select **Import a visual from a file**. Browse to `Documents/Power
            BI Desktop/Custom Visuals`, select `Speckle 3D Visual.pbiviz`, and **Open**. You should see
    Speckle 3D Visual in the pane.
  </Step>

  <Step title="Bind Model Info and Object Keys">
    Select **Speckle 3D Visual**. Drag `Objects[Model Info]` into **Model Info** and `Objects[Object
            Key]` into **Object Keys**. Drag tooltip fields into **Object Data** and the category field into
    **Color By**. You should see the first geometry arrive, then the rest stream in the background.
  </Step>
</Steps>

<Warning>
  Importing the new `.pbiviz` replaces the old visual in place. The two visuals share the same GUID.
  Import the new visual only when you are ready to reconnect Model Info, Object Keys, Object Data,
  and Color By.
</Warning>

<Warning>
  The 3D visual requires WebGPU. There is no fallback. If WebGPU is missing, the visual shows an
  error.
</Warning>

The visual's Edit page supports per-category color overrides and a diagnostics mode. Color overrides
remain fixed when the report theme changes. Diagnostics show streaming statistics and recent events.

The toolbar sits at the bottom center and contains Zoom Extents and Camera. Camera includes
orthographic projection, Move camera on filter, and Top, Front, Left, Back, and Right views.
Resizing the visual rebuilds its render targets.

The visual reads Power BI data in 30,000-row windows. When a real filter is active, it can process
up to one million rows for exact isolation. Above 30,000 filtered rows, the visual keeps the
viewport responsive but disables tooltips and click selection for that selection. Chart-click
highlights on very large models are sampled. Use a slicer when exact isolation matters.

The server must serve 4.0 artifact bundles and advertise a geometry stream. The Power BI client
must run in a WebGPU-capable environment. The visual uses the existing OAuth flow and receives a
limited-scope token for each load. The account's main token does not enter the report.

## FAQ

<AccordionGroup>
  <Accordion title="Why don't I see Connect to Speckle in Get Data?">
    After you update the connector, Get Data shows **Speckle - Get Tables**. That is the published
    entry for 2026.9. `Speckle.GetByUrl` remains available for versions that still contain JSON, but
    it is no longer the Get Data entry.
  </Accordion>

  <Accordion title="Why should I use Object Key instead of Application ID?">
    `Object Key` is the standard join and visual binding. `Application ID` still works, but large
    models need an extra lookup dictionary that can add tens of megabytes to the load.
  </Accordion>

  <Accordion title="What happens if Get Tables fails on an older version?">
    `GetTables` reads artifact bundles. JSON-only versions published before a 4.0 connector need
    `Speckle.GetByUrl`, or the model must be republished with a 4.0 connector.
  </Accordion>

  <Accordion title="How do I update the 3D visual to the 2026.9 version?">
    The 3D visual has no AppSource auto-update channel. Import the new `.pbiviz` from
    `Documents/Power BI Desktop/Custom Visuals`, then reconnect `Objects[Model Info]` to Model Info
    and `Objects[Object Key]` to Object Keys.
  </Accordion>

  <Accordion title="What is missing from the 2026.9 3D visual?">
    Section box, view modes, edges, ghosting, and named scene views are unavailable. Filtered-out
    objects are hidden. Top, Front, Left, Back, and Right remain available. Exact minimum versions
    for Speckle Server, Power BI Desktop, and WebView2 are not confirmed.
  </Accordion>
</AccordionGroup>
