De DAX-functie ALLSELECTED is een krachtige functie die iets doet wat anders niet mogelijk is. De eenvoudige uitleg van wat ALLSELECTED doet, is deze: net als andere ALL-functies verwijdert het filters uit de evaluatiecontext van een berekening. ALLSELECTED gedraagt zich echter op een speciale manier: het kan onderscheid maken tussen filters die binnen een visueel […]
De DAX-functie ALLSELECTED is een krachtige functie die iets doet wat anders niet mogelijk is. De eenvoudige uitleg van wat ALLSELECTED doet, is deze: net als andere ALL-functies verwijdert het filters uit de evaluatiecontext van een berekening. ALLSELECTED gedraagt zich echter op een speciale manier: het kan onderscheid maken tussen filters die binnen een visueel element zelf zijn aangemaakt en filters die afkomstig zijn van andere elementen in het rapport.
De meest voorkomende toepassing van ALLSELECTED is om het totaal te berekenen van alles wat in een visueel element is opgenomen. Bijvoorbeeld:
Sales AllSelected =
CALCULATE(
[Sales],
ALLSELECTED(‘Product’)
)
De maatstaf [Sales AllSelected] retourneert de totale omzet voor alle producten, maar behoudt filters die buiten het visuele element zijn toegepast, zoals een slicer:
Deze maatstaf is op zichzelf niet bijzonder waardevol, maar de berekening kan worden gebruikt om een relatieve percentageberekening te maken van de verkoop ten opzichte van alles wat in het visuele element wordt weergegeven:
Relative Product Sales =
VAR AllSales =
CALCULATE(
[Sales],
ALLSELECTED(‘Product'[Product])
)
RETURN
DIVIDE([Sales], AllSales)
Met deze maatstaf worden percentages berekend die altijd optellen tot 100% binnen het visuele element.
Stel dat je tooltips wilt toevoegen aan dit visuele element. (Ik weet het, tooltips op een tabelvisual zijn niet per se de meest nuttige toevoeging, maar je kunt dit natuurlijk ook doen met grafieken.) De standaardtooltip werkt prima:
Maar omdat deze zwarte vakjes nogal saai zijn, besluit je een aangepaste rapportpagina-tooltip te maken. In het onderstaande voorbeeld gebruiken we drie kaartvisuals met de productnaam, de verkoopwaarde en de relatieve productverkoop:
Na het instellen van de tooltip-eigenschap van de tabelvisual op deze aangepaste tooltip, is het resultaat als volgt:
Er is duidelijk iets mis! Hoewel de productnaam en omzet correct worden weergegeven, is de relatieve productverkoop nu 100%. Wat is hier gebeurd?
De oorzaak van dit probleem is ALLSELECTED. In de context van de verkoopberekening voor de Office Chair zijn er twee filters actief: één op productcategorie (die de categorie Furniture selecteert) en één op het product zelf (dat Office Chair selecteert). ALLSELECTED verwijdert het filter op het product, omdat dit filter binnen het visuele element is aangemaakt, waardoor alleen het categoriefilter overblijft. Het resultaat is de totale omzet binnen de Furniture-categorie.
Een rapportpagina-tooltip werkt door alle filters uit het visuele element dat de tooltip gebruikt, toe te passen op de tooltip-pagina. Maar dit betekent dat er op de tooltip-pagina geen filters afkomstig zijn van een visueel element! Hierdoor verwijdert ALLSELECTED helemaal niets. De maatstaf Relative Product Sales berekent daardoor het percentage productverkoop ten opzichte van de verkoop van hetzelfde product, wat natuurlijk 100% oplevert.
De oplossing voor dit probleem is om ALLSELECTED niet te gebruiken, maar op een andere manier de context zo te wijzigen dat alle items in het visuele element geselecteerd zijn. In het bovenstaande voorbeeld kan een alternatieve formule worden gebruikt:
Relative Product Sales 2 =
VAR RelativeSales =
CALCULATE(
[Sales],
ALL(‘Product'[Category])
)
RETURN
DIVIDE([Sales], RelativeSales)
Dit zorgt ervoor dat de tooltip correct wordt weergegeven.
Deze aanpak heeft natuurlijk enkele nadelen. De alternatieve formule werkt mogelijk niet in andere configuraties van visualisaties, en je moet mogelijk meerdere alternatieven schrijven voor verschillende rapporten of rapportpagina’s. Een andere beperking is dat dit voorbeeld alleen werkt omdat het veld Category niet in het visuele element zelf zit. Als dit wel het geval was, zou de nieuwe maatstaf waarschijnlijk incorrecte resultaten opleveren. Dit probleem kan eigenlijk niet worden opgelost, omdat het afhankelijk is van het onderscheid tussen twee filters op dezelfde kolom.
Wees dus voorzichtig bij het gebruik van ALLSELECTED in combinatie met geavanceerde rapportpagina-tooltips!