De perfecte technische post is (in mijn ogen) het heroïsche verhaal over hoe iemand een uitdaging tegenkwam en – door nachtelijk zwoegen – uiteindelijk de oplossing vond. In dit geval worstelde ik vorige week in een rapport met een circulaire afhankelijkheid. Maar eerst en vooral: wat is circulaire afhankelijkheid in Power Bi?

“Er wordt een circulaire afhankelijkheid gedetecteerd wanneer twee objecten naar elkaar verwijzen, op een zodanige manier dat Power Bi de objecten niet kan verwerken. Vaak maak je een berekende kolom als je bijvoorbeeld bepaalde categorieën aan bepaalde waarden wilt toevoegen.”

Het voorbeeld dat ik hier naar voren wil brengen is de variabele ‘tenure’, die is onderverdeeld in verschillende categorieën:

  • Mensen die 5 tot 10 jaar bij het bedrijf werken, krijgen het label “5-10 jaar”
  • Mensen die 10 tot 20 jaar bij het bedrijf werken, krijgen het label ‘10-20 jaar’
  • Mensen die al meer dan 20 jaar bij het bedrijf werken, krijgen het label “20 jaar+”

Mijn doel was om dit samen met het personeelsbestand in een grafiek weer te geven. De DAX-formule voor mijn categorieën lijkt eenvoudig:

Het plotten van de grafiek had een fluitje van een cent moeten zijn. Alleen kon ik mijn nieuwe categorieën niet sorteren. Het sorteren gebeurde op basis van het eerste nummer van mijn label, wat de verkeerde volgorde was zoals je op de onderstaande afbeelding kunt zien.

Mijn eerste idee was om een tweede berekende kolom te maken die verwees naar mijn ‘bereik’-kolom om deze te sorteren. Dit is echter precies wat de circulaire afhankelijkheidsfout veroorzaakte. Na wat vruchteloos lezen over de ‘Microsoft Power Bi-gemeenschap’, beproefde ik mijn geluk met het lezen van enkele SQLBI-cursussen. Het was hier dat onze beroemde Alberto Ferrari plotseling een oefening uitlegde met exact hetzelfde probleem. De oplossing was simpel en toch elegant:

Et voilà, we hebben nog een berekende kolom gemaakt die niet afhankelijk is van de vorige berekende kolom, terwijl het wel mogelijk is om onze bereikkolom te sorteren. Ik hoop dat dit bericht mensen helpt die vastzitten in dezelfde situatie als ik!