Meertaligheid in Power BI, het kan!

Meertaligheid in Power BI, het kan!

Als je in een internationale organisatie werkt is de kans groot dat je gebruikers in verschillende talen communiceren. Om tegemoet te komen aan het gemak van de gebruikers bestaat de wens dan ook vaak om rapportages en dashboards in verschillende talen beschikbaar te stellen aan de gebruikers. In deze blog laat ik zien hoe je dit kunt ondersteunen in Power BI. Ik laat je zien hoe je gebruikers zelf een taal kunt laten selecteren of hoe dit vol automatisch via ‘zelfdetectie’ ingeregeld kan worden.

 

Hello John, Hallo Jeroen of नमस्ते Deepthi

In het onderstaande voorbeeld dashboard zie je dat ik in het Nederlands begroet wordt met ‘Hallo Jeroen’. In het rechter panel heb ik er echter voor gekozen om de producten in de Engelse taal te tonen. Dit is mogelijk omdat het dashboard op verschillende manieren meertaligheid ondersteund. De begroeting is ‘automatisch via zelfdetectie’, de taal van de producten kan ik handmatig kiezen.

 

Als ik in de slicer rechtsboven voor Hindi kies , dan ziet de tabel er heel anders uit.

 

 

Het datamodel

De vraag is nu hoe we Power BI in moeten richten om de meerdere talen te ondersteunen. Dit begint bij het datamodel, in het model heb ik tabellen gemaakt voor usernames en voor greetings gemaakt. Voor de greetings heb ik de volgende tabel opgenomen:

 

Afhankelijk van de taal zal Power BI je begroeten met één van deze ‘greetings’.

 

De usernames zijn vastgelegd in een aparte tabel. Deze moet je of zelf bijhouden, of je kunt Active Directory gebruiken als datasource voor die informatie. Het is wel mogelijk om de voornaam te creëren op basis van het emailadres (bijvoorbeeld email splitsen op . symbool en dan het eerste deel pakken). Ik heb het handmatig gedaan, hieronder het resultaat.

 

 

Naast usernames en greetings hebben ook de producten extra aandacht nodig. Om de koppeling te kunnen leggen naar de producten is de product dimensie in het datamodel uitgebreid naar een snowflake model. De tabel ProductNames heeft een N:1 relatie met Product en Product heeft een 1:N relatie met Sales. Om het geheel goed te laten werken is het dus belangrijk om een filter op de taal zetten. Anders zie je hetzelfde product in meerdere talen terugkomen in je overzicht. In de relatie tussen Product en ProductNames heb ik de filterrichting op “beide” ingesteld omdat de keuze van taal ook moet doorwerken naar Sales.

 

In de ProductName tabel zelf zie je dat voor ieder product er 3 regels zijn. Voor Nederlands, Engels en Hindi.

 

De formules

Het datamodel staat nu als een huis. Vervolgens verdienen de formules nog extra aandacht. Om te zorgen dat nergens per ongeluk meerdere talen zichtbaar worden zijn er 2 mogelijkheden:

  1. Zet een filter op het hele rapport voor de selectie van 1 taal.
  2. Voeg een filter toe aan de DAX formules die je maakt.

 

Filter op het hele rapport

Als ik als formule Sales =SUM ( Sales[Sales] ) gebruik dan krijg ik het volgende resultaat.

 

Nu kan ik dus een filter toepassen om alleen de gewenste taal te tonen. Met behulp van een slicer bied ik de mogelijkheid om een taal te kiezen. Door ook de ‘sync slicers functie’ aan te vinken zorg ik er voor dat de gekozen taalfilter op alle pagina’s in het rapport wordt toegepast.

 

Filter in de DAX formule

Een 2e optie is om in de DAX formules gebruik te maken van USERCULTURE(). Dit is een functie die toegevoegd is in de september 2022 release en deze functie geeft aan wat de nationaliteit en taal is van de gebruiker. Door met deze functie de taal op te vragen, kunnen we voor iedere gebruiker zien welke taalinstelling er is ingesteld en daarmee kan ik het gedrag van het dashboard sturen. Als ik een measure maak met deze functie krijg ik de onderstaande waarde.

 

Let op: De functie wordt nog met rood onderstreept alsof deze niet bestaat, het werkt echter wel gewoon.

 

Nu ga ik eerst de gebruiker begroeten. Ik gebruik de tabellen voor Greeting en User en gebruik dit om te komen tot een welkomsgroet:

Addressering =
VAR Greet =
    CALCULATE (
        MAX ( Greeting[greeting] ),
        Greeting[locale]
            USERCULTURE ()
    )
VAR FirstName =
    CALCULATE (
        MAX ( Users[User First Name] ),
        Users[Username]
            USERPRINCIPALNAME ()
    )
VAR divider = ” “
RETURN
    Greet & divider & FirstName

 

In de eerste regel zie je dat ik de juiste begroeting op basis van USERCULTURE() ophaal. Met de tweede regel haal ik de voornaam op, op basis van het emailadres met USERPRINCIPALNAME(). Tot slot voeg ik de groet en naam samen tot 1 begroeting.

 

De volgende stap is nu om de sales uit te breiden zodat ook daar slechts 1 taal wordt weergegeven. Dit doe ik als volgt:

Sales local language =
CALCULATE (
    SUM ( Sales[Sales] ),
    ProductNames[UserLocale]
        USERCULTURE ()
)

 

Door deze filter toe te voegen wordt de filter alleen in de taal weergegeven zoals aangegeven in USERCULTURE().

 

Maar wat als?

De meest gestelde vraag die ik krijg als ik deze functionaliteit aan mensen uitleg is altijd: “Maar wat gebeurt er nu als een gebruiker met een taalinstelling inlogt die niet in de taaltabel staat?” Dat verdient inderdaad aandacht. Zonder extra configuratie ziet de gebruiker namelijk geen enkel cijfer in het dashboard en dat is natuurlijk niet de bedoeling. Daarom ga ik de formule nog aanpassen om er voor te zorgen dat er default voor Engels wordt gekozen als de gebruikerstaal niet is gespecificeerd. Eerst definieer ik een tabel die samenvat welke talen we tot beschikking hebben, dat doe ik als volgt:

 

AvailableUserLocales = SUMMARIZECOLUMNS ( ProductNames[UserLocale] )

 

Deze tabel gebruik ik daarna in de Sales formule om te controleren of de taal van de gebruiker beschikbaar is. Zo niet, dan gaan we door naar Engels.

Sales local language =
VAR GlobalLanguage = “en-US”
VAR langfound =
    CALCULATE (
        COUNTROWS ( AvailableUserLocales ),
        AvailableUserLocales[UserLocale]
            USERCULTURE ()
    )
RETURN
    IF (
        langfound = 1,
        CALCULATE (
            SUM ( Sales[Sales] ),
            ProductNames[UserLocale]
                USERCULTURE ()
        ),
        CALCULATE (
            SUM ( Sales[Sales] ),
            ProductNames[UserLocale] = GlobalLanguage
        )
    )

 

 

Conclusie

In dit verhaal heb ik verschillende manieren beschreven waardoor je met behulp van een slicer of met de functie USERCULTURE() een dashboard taalafhankelijk kunt maken. Dit werkt voor de masterdata maar je kunt ook de teksten in het dashboard naar de juiste taal sturen. Dit is de basis maar er zijn natuurlijk nog veel meer mogelijkheden, denk bijvoorbeeld aan tekstvtabellen met helpteksten we nu ook taalafhankelijk kunnen maken.

 

In situaties waar taalafhankelijkheid belangrijk is zijn dit mooie mogelijkheden om het rapport dynamisch te laten reageren. Succes met uitproberen!

 

Ben je benieuwd naar nog meer details, dan kun je die in de officiele Microsoft blog lezen.

Heb je na het lezen van alle blogs nog steeds vragen, neem dan gerust contact met ons op!

 

 

 

Jeroen van der A