DAX-operators
De DAX-taal (Data Analysis Expression) maakt gebruik van operators om expressies te maken waarmee waarden worden vergeleken, rekenkundige berekeningen worden uitgevoerd of met tekenreeksen worden gewerkt.
Typen operators
Er zijn vier verschillende typen berekeningsoperatoren: rekenkundig, vergelijking, tekstsamenvoeging en logisch.
Rekenkundige operators
Eenvoudige wiskundige bewerkingen uitvoeren, zoals optellen, aftrekken of vermenigvuldigen; getallen combineren; en numerieke resultaten produceren, gebruikt u de volgende rekenkundige operatoren.
Rekenkundige operator | Betekenis | Opmerking |
---|---|---|
+ (plusteken) | Aanvullend | 3+3 |
– (minteken) | Aftrekken of ondertekenen | 3–1–1 |
* (sterretje) | Vermenigvuldiging | 3*3 |
/ (slash) | Divisie | 3/3 |
^ (caret) | Machtsverheffen | 16^4 |
Notitie
Het plusteken kan zowel als een binaire operator als als een unaire operator functioneren. Een binaire operator vereist getallen aan beide zijden van de operator en voert optellen uit. Wanneer u waarden in een DAX-formule aan beide zijden van de binaire operator gebruikt, probeert DAX de waarden naar numerieke gegevenstypen te casten als ze nog geen getallen zijn. De unaire operator kan daarentegen worden toegepast op elk type argument. Het plusteken heeft geen invloed op het type of de waarde en wordt gewoon genegeerd, terwijl de min-operator een negatieve waarde maakt, indien toegepast op een numerieke waarde.
Vergelijkingsoperators
U kunt twee waarden vergelijken met de volgende operators. Wanneer twee waarden worden vergeleken met behulp van deze operators, is het resultaat een logische waarde, TRUE of FALSE.
Vergelijkingsoperator | Betekenis | Opmerking |
---|---|---|
= | Gelijk aan | [Region] = "USA" |
== | Strikt gelijk aan | [Region] == "USA" |
> | Groter dan | [Verkoopdatum] > "Jan 2009" |
< | Kleiner dan | [Verkoopdatum] < "1 januari 2009" |
>= | Groter dan of gelijk aan | [Bedrag] >= 20000 |
<= | Kleiner dan of gelijk aan | [Bedrag] <= 100 |
<> | Niet gelijk aan | [Regio] <> "VS" |
Alle vergelijkingsoperatoren behalve == behandelen BLANK als gelijk aan getal 0, lege tekenreeks "", DATE(1899, 12, 30) of FALSE. Als gevolg hiervan is [Kolom] = 0 waar wanneer de waarde van [Kolom] 0 of LEEG is. [Kolom] == 0 is daarentegen alleen waar als de waarde van [Kolom] 0 is.
Tekstsamenvoegingsoperator
Gebruik het en-teken (&) om twee of meer tekenreeksen samen te voegen of samen te voegen om één stuk tekst te produceren.
Tekstoperator | Betekenis | Opmerking |
---|---|---|
& (teken &) | Verbinding maken s of voegt twee waarden samen om één doorlopende tekstwaarde te produceren | [Regio] & ", " & [Stad] |
Logische operators
Gebruik logische operators (&&) en ||) om expressies te combineren om één resultaat te produceren.
Tekstoperator | Betekenis | Voorbeelden |
---|---|---|
&&& (dubbel ampersand) | Hiermee maakt u een AND-voorwaarde tussen twee expressies die elk een Boole-resultaat hebben. Als beide expressies TRUE retourneren, retourneert de combinatie van de expressies ook TRUE. Anders retourneert de combinatie FALSE. | ([Regio] = "Frankrijk") && ([BikeBuyer] = "ja")) |
|| (symbool voor dubbele sluis) | Hiermee maakt u een OR-voorwaarde tussen twee logische expressies. Als een van de expressies TRUE retourneert, is het resultaat WAAR; alleen wanneer beide expressies ONWAAR zijn, is het resultaat FALSE. | (([Regio] = "Frankrijk") || ([BikeBuyer] = "ja")) |
IN | Hiermee maakt u een logische OR-voorwaarde tussen elke rij die wordt vergeleken met een tabel. Opmerking: de syntaxis van de tabelconstructor maakt gebruik van accolades. | 'Product'[Color] IN { "Rood", "Blauw", "Zwart" } |
Operatoren en volgorde van prioriteit
In sommige gevallen kan de volgorde waarin de berekening wordt uitgevoerd van invloed zijn op de retourwaarde; Daarom is het belangrijk om te begrijpen hoe de order wordt bepaald en hoe u de volgorde kunt wijzigen om de gewenste resultaten te verkrijgen.
Berekeningsvolgorde
Een expressie evalueert de operators en waarden in een specifieke volgorde. Alle expressies beginnen altijd met een gelijkteken (=). Het gelijkteken geeft aan dat de volgende tekens een expressie vormen.
Na het gelijkteken worden de elementen berekend (de operanden), die worden gescheiden door berekeningsoperatoren. Expressies worden altijd van links naar rechts gelezen, maar de volgorde waarin de elementen zijn gegroepeerd, kan worden bepaald met haakjes.
Operatorprioriteit
Als u verschillende operatoren in één formule combineert, worden de bewerkingen gerangschikt volgens de volgende tabel. Als de operatoren een gelijke prioriteitswaarde hebben, worden ze van links naar rechts geordend. Als een expressie bijvoorbeeld zowel een operator voor vermenigvuldigen als delen bevat, worden ze geëvalueerd in de volgorde waarin ze in de expressie worden weergegeven, van links naar rechts.
Operator | Beschrijving |
---|---|
^ | Machtsverheffen |
– | Aanmelden (zoals in –1) |
*En/ | Vermenigvuldiging en deling |
+ en – | Optellen en aftrekken |
& | Verbinding maken twee tekenreeksen tekst (samenvoeging) |
=,=,<,>,<=,>=,,<>IN | Vergelijking |
NIET | NOT (unaire operator) |
Haakjes gebruiken om de berekeningsvolgorde te beheren
Als u de volgorde van de evaluatie wilt wijzigen, moet u tussen haakjes plaatsen dat deel van de formule dat eerst moet worden berekend. De volgende formule produceert bijvoorbeeld 11 omdat vermenigvuldigen wordt berekend vóór optellen. De formule vermenigvuldigt 2 met 3 en voegt vervolgens 5 toe aan het resultaat.
=5+2*3
Als u daarentegen haakjes gebruikt om de syntaxis te wijzigen, wordt de volgorde gewijzigd, zodat 5 en 2 worden opgeteld en het resultaat wordt vermenigvuldigd met 3 om 21 te produceren.
=(5+2)*3
In het volgende voorbeeld dwingen de haakjes rond het eerste deel van de formule de berekening af om eerst de expressie (3 + 0.25)
te evalueren en vervolgens het resultaat te delen door het resultaat van de expressie (3 - 0.25)
.
=(3 + 0.25)/(3 - 0.25)
In het volgende voorbeeld wordt eerst de exponentiatieoperator toegepast op basis van de regels van prioriteit voor operators en vervolgens wordt de tekenoperator toegepast. Het resultaat voor deze expressie is -4.
=-2^2
Als u ervoor wilt zorgen dat de tekenoperator eerst wordt toegepast op de numerieke waarde, kunt u haakjes gebruiken om operatoren te beheren, zoals wordt weergegeven in het volgende voorbeeld. Het resultaat voor deze expressie is 4.
= (-2)^2
Compatibiliteit
DAX verwerkt en vergelijkt eenvoudig verschillende gegevenstypen, net zoals Microsoft Excel. De onderliggende berekeningsengine is echter gebaseerd op SQL Server Analysis Services en biedt aanvullende geavanceerde functies van een relationeel gegevensarchief, waaronder uitgebreidere ondersteuning voor datum- en tijdtypen. In sommige gevallen zijn de resultaten van berekeningen of het gedrag van functies dus mogelijk niet hetzelfde als in Excel. Bovendien ondersteunt DAX meer gegevenstypen dan Excel. In deze sectie worden de belangrijkste verschillen beschreven.
Gegevenstypen van operanden dwingen
Over het algemeen moeten de twee operanden aan de linker- en rechterkant van een operator hetzelfde gegevenstype zijn. Als de gegevenstypen echter verschillend zijn, converteert DAX deze naar een gemeenschappelijk gegevenstype om de operator in sommige gevallen toe te passen:
- Beide operanden worden geconverteerd naar het grootst mogelijke algemene gegevenstype.
- De operator wordt, indien mogelijk, toegepast.
Stel dat u twee getallen hebt die u wilt combineren. Eén getalresultaten van een formule, zoals =[Price] * .20
, en het resultaat kan veel decimalen bevatten. Het andere getal is een geheel getal dat is opgegeven als tekenreekswaarde.
In dit geval converteert DAX beide getallen naar reële getallen in een numerieke notatie, met behulp van de grootste numerieke notatie waarmee beide soorten getallen kunnen worden opgeslagen. Vervolgens past DAX de vermenigvuldiging toe.
Afhankelijk van de combinatie van het gegevenstype kan het type coercion niet worden toegepast voor vergelijkingsbewerkingen. Zie Gegevenstypen die worden ondersteund in tabellaire modellen en gegevenstypen in Power BI Desktop voor een volledige lijst met gegevenstypen die worden ondersteund door DAX.
Geheel getal, reëel getal, valuta, datum/tijd en leeg worden beschouwd als numeriek voor vergelijkingsdoeleinden. Leeg resulteert in nul bij het uitvoeren van een vergelijking. De volgende combinaties van gegevenstypen worden ondersteund voor vergelijkingsbewerkingen.
Gegevenstype aan de linkerkant | Gegevenstype rechts |
---|---|
Numeriek | Numeriek |
Booleaanse waarde | Booleaans |
String | String |
Andere vergelijkingen van gemengde gegevenstypen retourneren een fout. Een formule zoals ="1" > 0 retourneert bijvoorbeeld een fout waarin wordt aangegeven dat DAX-vergelijkingsbewerkingen geen ondersteuning bieden voor het vergelijken van waarden van het type Tekst met waarden van het type Geheel getal.
Gegevenstypen die worden gebruikt in DAX | Gegevenstypen die worden gebruikt in Excel |
---|---|
Getallen (I8, R8) | Getallen (R8) |
String | String |
Booleaanse waarde | Booleaanse waarde |
Datum en tijd | Variant |
Valuta | Valuta |
Verschillen in prioriteitsvolgorde
De prioriteitsvolgorde van bewerkingen in DAX-formules is in feite hetzelfde als die van Microsoft Excel, maar sommige Excel-operators worden niet ondersteund, zoals percentage. Bereiken worden ook niet ondersteund.
Wanneer u formules kopieert en plakt uit Excel, moet u daarom de formule zorgvuldig controleren, omdat sommige operatoren of elementen in de formules mogelijk niet geldig zijn. Wanneer er twijfel is over de volgorde waarin bewerkingen worden uitgevoerd, is het raadzaam haakjes te gebruiken om de volgorde van bewerkingen te bepalen en eventuele dubbelzinnigheid over het resultaat te verwijderen.