4
votes

Quelle est l '«expression» dans COUNTAX et COUNTX (DAX)?

La documentation pour COUNTAX (DAX) et COUNTX (DAX) indique que le deuxième argument est une expression évaluée pour chaque ligne.

Voir: https://docs.microsoft.com/en-us/dax/countax-function-dax

C'est exactement ce dont j'ai besoin, mais je n'arrive pas à comprendre de quoi 'expression' devrait ressembler à.

L'exemple donné dans la documentation de Microsoft est le suivant:

=COUNTAX(FILTER('Reseller',[Status]="Active"),[Phone])

Mais le deuxième argument ( [Phone] ) ne ressemble pas à une expression. Une expression dans mes attentes est quelque chose comme "value> 3 AND value

Quel type d'expression peut être utilisé ici?


0 commentaires

3 Réponses :


0
votes

généralement dans dax, le terme expression signifie Colonne ou Formule, vous pouvez donc utiliser une colonne ou une formule dans le countax / countx ou dans toute autre fonction évaluée pour chaque ligne (généralement des fonctions qui se terminent par x: D)


0 commentaires

1
votes

Dans l'exemple, [Phone] est l'expression évaluée pour chaque ligne du tableau résultant. Pour clarifier, puisque COUNTAX et COUNTX renvoient le nombre de lignes non vides, le nombre de valeurs non vides dans la colonne [Phone] est l'expression calculée . Une fois la fonction FILTER appliquée à la table, l'expression serait équivalente à COUNT ([Phone]) pour ce contexte. Utilisation de la fonctionnalité Timings du serveur dans Dax Studio , la représentation textuelle de ce qui est passé au moteur de stockage peut être visualisée. Dans le cas de COUNTX , vous verrez une requête avec IS NOT NULL dans la clause WHERE pour la colonne utilisée comme expression, comme ce serait [Phone] dans ce cas, avec la fonction COUNT sélectionnée car toutes les lignes avec un [Phone] vide auront déjà été filtrées. L'instruction ci-dessous est un exemple de requête de la fonction Server Timings de DAX Studio utilisant l'exemple de mesure de votre question. Comme vous pouvez le voir, il y a deux filtres dans la clause WHERE . Le premier dans la colonne Status , pour ne renvoyer que les lignes actives. La seconde consiste à éliminer les valeurs nulles dans la colonne Phone . Cela laisse la fonction d'agrégation COUNT pour compter toutes les lignes qui ont un Status actif et une valeur non vide dans la colonne Phone , ce qui est équivalent à un décompte de la colonne Téléphone avec le Statut actif. La requête ici n'est qu'une représentation textuelle des requêtes envoyées au moteur de stockage, donc la syntaxe affichée ne sera pas le SQL réel, mais vous donnera une meilleure idée de la façon dont le DAX est traité.

SET DC_KIND="AUTO";
SELECT
COUNT (  )
FROM 'Reseller'
WHERE
    'Reseller'[Status] = 'Active' AND
    'Reseller'[Phone] IS NOT NULL;

'Estimated size ( volume, marshalling bytes ) : 224012, 1392082'


0 commentaires

0
votes

Merci @ userfl89, pour l'explication éclairante et analytique. Je vois maintenant que est en fait une clause WHERE . La raison pour laquelle Microsoft a choisi d'utiliser le mot «expression» ici commence maintenant à avoir un sens. Pourtant, tout est plein de contradictions.

La syntaxe de Count est COUNT()

Ensuite, [Phone] , dans COUNT ([Phone]) est de type . Je suppose que c'est aussi juste une clause WHERE vers le moteur de stockage? Comparez avec COUNTAX (FILTER ('Reseller', [Status] = "Active"), [Phone]), où [Phone] est de type .

La vraie logique dans COUNTAX est en fait la fonction FILTER . La est toujours une clause WHERE qui sélectionne les valeurs non blanches. OK, c'est une «expression», mais c'est toujours la même. N'est-ce pas?

Je ne peux que conclure que le système de types de Microsoft dans sa description de syntaxe est un peu compliqué et me rend difficile (en tant que démarreur sur PowerBI) de créer mes propres requêtes DAX en fonction de leur documentation. Ou ils devraient proposer de meilleurs exemples pour compenser les descriptions de syntaxe déroutantes


3 commentaires

J'ai mis à jour ma réponse avec un exemple de traitement de la mesure. J'espère que cela aidera à clarifier les choses.


Votre exemple clarifie beaucoup, et je vais essayer de lire la syntaxe de Microsoft «plus détendue». Merci également d'avoir signalé l'existence de DAX Studio.


Aucun problème. Si ma réponse couvrait ce que vous demandiez, n'hésitez pas à la marquer comme acceptée. Aucune obligation de le faire, rend simplement les messages plus faciles à comprendre pour ceux qui les verront à l'avenir. Si vous travaillez toujours sur ce problème et que vous voulez laisser les choses telles quelles, cela fonctionne aussi.