Calculer les classements par ordre de priorité

Effectué

La fonction DAX RANKX est une fonction d’itérateur spéciale que vous pouvez utiliser pour calculer les classements. Sa syntaxe est comme suit :

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

À l’instar de toutes les fonctions d’itérateur, vous devez transmettre une table et une expression. En option, vous pouvez transmettre une valeur de classement, définir la direction de l’ordre ou déterminer comment gérer les classements quand des valeurs sont liées.

Direction de l’ordre

La direction de l’ordre est soit croissante soit décroissante. Lors du classement d’un événement favorable, comme les valeurs de revenus, vous pouvez utiliser l’ordre décroissant afin que le revenu le plus élevé soit classé en premier. Lors du classement d’un événement non favorable, comme les réclamations des clients, vous pouvez utiliser l’ordre croissant afin que le plus petit nombre de réclamations soit classé en premier. Quand vous ne transmettez pas d’argument d’ordre, la fonction utilise 0 (zéro) (pour ordre décroissant).

Liens Handle

Vous pouvez gérer les liens en ignorant les valeurs de classement ou en utilisant un classement dense, qui utilise la valeur de classement suivante après un lien. Quand vous ne transmettez pas d’argument de liens, la fonction utilise Skip. Vous aurez la possibilité d’utiliser un exemple de chaque argument de lien plus loin dans cette unité.

Créer des mesures de classement

Ajoutez la mesure suivante à la table Produit :

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity]
)

Ajoutez la mesure Classer par ordre de priorité de quantité de produits à l’objet visuel de table qui se trouve sur la Page 2 du rapport. L’objet visuel de la table regroupe les produits Vélo et affiche la quantité, qui commande les produits par ordre décroissant de quantité.

La fonction RANKX parcourt une table retournée par la fonction DAX ALL. La fonction ALL est utilisée pour retourner toutes les lignes d’une table de modèle ou des valeurs dans une ou plusieurs colonnes et elle ignore tous les filtres. Ainsi, dans ce cas, elle retourne une table qui se compose de toutes les valeurs de la colonne Produit de la table Produit. La fonction RANKX doit utiliser la fonction ALL, car l’objet visuel de table effectue un regroupement par produits (qui est un filtre sur la table Produit).

Dans l’objet visuel de la table, notez que deux produits sont liés pour le dixième emplacement et que le classement du prochain produit est égal à 12. Cet objet visuel est un exemple d’utilisation de l’argument de liens Ignorés.

Une image montre un objet visuel de la table intitulée Ventes de vélo. Elle a trois colonnes : Classement par ordre de priorité de produits, de quantités et de quantité de produits. Les lignes de la table sont classées par quantité décroissante. Deux produits partagent le rang 10 et le prochain produit est le rang 12.

La tâche suivante consiste à entrer la logique suivante pour modifier la définition de la mesure Classer par ordre de priorité de quantité de produits afin d’utiliser un classement dense :

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity],
    ,
    ,
    DENSE
)

Dans l’objet visuel de table, notez qu’un classement ignoré n’existe plus. Après les deux produits qui sont en lien avec la dixième place, le classement suivant est 11.

Une image montre un objet visuel de la table intitulée Ventes de vélo. Elle a trois colonnes : Classement par ordre de priorité de produits, de quantités et de quantité de produits. Les lignes de la table sont classées par quantité décroissante. Deux produits partagent le rang 10 et le prochain produit est au rang 11.

Notez que la valeur totale affichée de la table pour le Classement par ordre de priorité de la quantité de produits est égale à un (1). La raison est que le total de tous les produits est classé.

Une image indique que le classement total par ordre de priorité de la quantité de produit est 1.

Il n’est pas approprié de classer par ordre de priorité le total des produits. Vous allez donc utiliser la logique suivante pour modifier la définition de la mesure afin qu’elle retourne une valeur VIDE, sauf si un seul produit est filtré :

Product Quantity Rank =
IF(
    HASONEVALUE('Product'[Product]),
    RANKX(
        ALL('Product'[Product]),
        [Quantity],
        ,
        ,
        DENSE
    )
)

Une image indique que le classement total par ordre de priorité de la quantité de produits est VIDE.

Notez que le classement par ordre de priorité de la quantité de produits total est maintenant VIDE, ce qui a été accompli en utilisant la fonction DAX HASONEVALUE pour vérifier si la colonne Produit de la table Produit a une valeur unique dans le contexte de filtre. C’est le cas pour chaque groupe de produits, mais pas pour le total, qui représente tous les produits.

Le contexte de filtre et la fonction HASONEVALUE seront introduits dans le module de contexte de filtre.