Power BI Studio
Terug naar alle artikelen
Power BI

Disconnected tables in Power BI: de truc voor what-if analyses en parameters

Jan Willem den Hollander
Jan Willem den Hollander

Power BI architect, LSS Black Belt. 15 jaar ervaring in data & business intelligence.

Disconnected tables in Power BI: de truc voor what-if analyses en parameters

Een disconnected table in Power BI is een tabel zonder relaties met andere tabellen in je datamodel. Deze techniek maakt dynamische parameters mogelijk voor scenario-analyses, zonder dat je je stermodel hoeft te doorbreken.

Disconnected tables zijn de ruggengraat van what-if parameters en complexe slicers die niet direct gekoppeld zijn aan je feitentabellen. Ze werken door DAX-context-overgang in plaats van fysieke relaties.

Wat is een disconnected table en wanneer gebruik je het

Een disconnected table bevat waarden die je wilt gebruiken als parameters, maar die niet natuurlijk passen in je dimensionale model. Denk aan rentopercentages voor hypotheekberekeningen, groeipercentages voor prognoses, of threshold-waarden voor KPI-analyses.

Het verschil met gewone dimensietabellen: disconnected tables hebben geen directe one-to-many relaties met je feitentabellen. In plaats daarvan gebruik je DAX-functies zoals SELECTEDVALUE() of VALUES() om de geselecteerde waarden op te halen.

Typische use cases zijn:

  • What-if parameters voor financiële modellering
  • Drempelwaarden voor KPI-categorisering
  • Simulatieparameters voor voorspellingen
  • Complexe filters die niet in je dimensies thuishoren
  • A/B-test scenario's

Het grote voordeel: je kunt gebruikers sliders en slicers geven voor parameters zonder je datamodel te vervuilen met kunstmatige relaties.

Hoe disconnected tables werken onder de motorkap

Power BI evalueert DAX-expressies binnen een specifieke filtercontext. Bij normale tabellen komt deze context van relaties tussen tabellen. Bij disconnected tables maak je handmatig gebruik van deze context via DAX-functies.

De Vertipaq-engine houdt alle tabelwaarden in het geheugen, ook die zonder relaties. Wanneer je een slicer op een disconnected table plaatst, wordt de filtercontext aangepast voor die specifieke tabel. DAX-measures kunnen deze context uitlezen met functies als SELECTEDVALUE().

Een cruciale technische nuance: disconnected tables hebben geen cross-filter direction. Ze kunnen wel gefilterd worden, maar filteren zelf niets. Dit is precies wat je wilt voor parameters — ze beïnvloeden berekeningen, maar niet de onderliggende data.

Het memory-gebruik is minimal omdat disconnected tables typisch kleine lijsten bevatten (10-1000 rijen). De performance-impact zit niet in opslag, maar in de DAX-evaluatie van measures die deze parameters gebruiken.

Een werkend voorbeeld: what-if parameter voor groeipercentage

Stel je hebt verkoopcijfers en wilt verschillende groeiscenario's tonen. Hier is de complete implementatie:

Stap 1: Maak de disconnected table

In Power BI Desktop ga je naar Modeling > New Parameter. Kies "What-if parameter" met deze instellingen:

  • Parameter name: Groeipercentage
  • Data type: Decimal number
  • Minimum: 0.00
  • Maximum: 0.50
  • Increment: 0.01
  • Default: 0.05

Dit genereert automatisch een disconnected table 'Groeipercentage' met waarden van 0% tot 50%.

Stap 2: DAX-measure voor prognose

Verkoop Prognose = 
VAR SelectedGrowth = SELECTEDVALUE(Groeipercentage[Groeipercentage Value], 0.05)
VAR BaseVerkoop = SUM(Verkoop[Bedrag])
RETURN BaseVerkoop * (1 + SelectedGrowth)

Stap 3: Handmatige disconnected table (alternatief)

Voor meer controle maak je handmatig een tabel in Power Query:

let
    Source = {0.00, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30},
    ToTable = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    RenameColumn = Table.RenameColumns(ToTable,{{"Column1", "GrowthRate"}})
in
    RenameColumn

Stap 4: Advanced DAX voor meerdere scenario's

Verkoop Scenario = 
SWITCH(
    SELECTEDVALUE(ScenarioType[Scenario]),
    "Conservatief", [Verkoop Prognose] * 0.9,
    "Realistisch", [Verkoop Prognose],
    "Optimistisch", [Verkoop Prognose] * 1.2,
    [Verkoop Prognose]
)

Deze measure combineert twee disconnected tables: één voor groeipercentage, één voor scenariotype.

Edge cases en valkuilen bij disconnected tables

Valkuil 1: Context-verlies bij incorrecte DAX

FOUT: SUM(DisconnectedTable[Value]) — dit geeft altijd de som van alle waarden, niet de geselecteerde.

GOED: SELECTEDVALUE(DisconnectedTable[Value]) — dit respecteert de slicer-selectie.

Valkuil 2: Performance bij complexe iteratie

Measures die disconnected table-waarden gebruiken in SUMX() of andere iterators kunnen langzaam worden bij grote datasets. De Vertipaq-engine moet voor elke rij de parameter opnieuw evalueren.

// TRAAG bij miljoenen rijen
TraageMeasure = SUMX(
    Verkoop,
    Verkoop[Bedrag] * SELECTEDVALUE(Parameter[Value])
)

// SNELLER - parameter eenmalig ophalen
SnelleMeasure = 
VAR ParamValue = SELECTEDVALUE(Parameter[Value])
RETURN SUMX(Verkoop, Verkoop[Bedrag] * ParamValue)

Edge case: Multi-select slicers

SELECTEDVALUE() geeft BLANK() wanneer meerdere waarden geselecteerd zijn. Voor multi-select support gebruik je VALUES() of CONCATENATEX():

MultiSelectParameter = 
IF(
    HASONEVALUE(Parameter[Value]),
    SELECTEDVALUE(Parameter[Value]),
    AVERAGEX(VALUES(Parameter[Value]), Parameter[Value])
)

Valkuil 3: Vergeten default-waarden

Altijd een default meegeven aan SELECTEDVALUE() voor wanneer niets geselecteerd is:

// FOUT - kan BLANK() returnen
SLECHTEDVALUE(Parameter[Value])

// GOED - fallback naar 0.05
SELECTEDVALUE(Parameter[Value], 0.05)

Performance en governance-overwegingen

Memory footprint

Disconnected tables nemen weinig geheugen in beslag, maar elke extra tabel voegt overhead toe aan het model. Houd je onder de 10 disconnected tables per model. Voor DAX performance optimalisatie zijn er betere winsten te behalen dan het micro-managen van kleine parameter-tabellen.

Compression ratio

Parameter-tabellen comprimeren slecht omdat ze vaak unieke waarden bevatten (0.01, 0.02, 0.03...). Een tabel met 100 percentage-waarden kan 2-3KB zijn na compressie — verwaarloosbaar in moderne datamodellen.

Governance-aandachtspunten

Documenteer welke disconnected tables parameters zijn versus lookup-tabellen. In een governance framework vereisen parameter-tabellen andere change management dan dimensies — ze beïnvloeden business logic, niet data-inhoud.

Voor enterprise-omgevingen: leg vast wie parameter-ranges mag wijzigen. Een what-if parameter van 0% tot 500% groei kan misleidende dashboards opleveren.

Refresh-impact

Parameter-tabellen hoeven zelden gerefresht te worden — ze bevatten vaste bereiken, geen data uit bronsystemen. In Premium kun je scheduled refresh uitschakelen voor datasets die alleen parameter-wijzigingen bevatten.

Cross-report consistency

Als je dezelfde parameters in meerdere rapporten gebruikt, overweeg ze in een apart, gedeeld model te plaatsen. Power BI composite models kunnen parameter-tabellen uit een centrale dataset halen terwijl fact-data lokaal blijft.

Vuistregels voor disconnected tables

Wanneer wel gebruiken:

  • Parameters hebben een logisch bereik (percentages 0-100%)
  • Je wilt gebruikers controle geven zonder data-editing
  • Scenario-analyses waar historische data ongewijzigd blijft
  • A/B-testing parameters

Wanneer niet gebruiken:

  • "Parameters" die eigenlijk dimensies zijn — maak gewone relaties
  • Waarden die uit bronsystemen moeten komen
  • Parameters die heel vaak wijzigen (dagelijks) — gebruik dan DAX-variabelen

DAX best practices:

  • Gebruik altijd SELECTEDVALUE() met default-waarde
  • Test multi-select gedrag expliciet
  • Haal parameter-waarden op in VAR-statements, niet inline in iterators
  • Documenteer de business logic achter parameter-bereiken

Naamgeving-conventie:

  • Prefix 'Param_' voor parameter-tabellen (Param_GrowthRate)
  • Duidelijke measure-namen die het parameter-gebruik tonen (Sales_WithGrowthParam)
  • Verschillende kleur voor parameter-slicers in rapport-design

Disconnected tables zijn een krachtig patroon voor complexe scenario-analyses. De truc zit in het begrijpen dat ze context creëren via DAX, niet via relaties. Master deze techniek en je kunt gebruikers geavanceerde what-if mogelijkheden geven zonder je datamodel te vervuilen.