Aller au contenu principal

Qu'est-ce que la fonction RANGMEMBRECUBE ?

Définition
La fonction RANGMEMBRECUBE retourne le membre à la position indiquée dans un jeu de membres OLAP. Elle est réservée aux classeurs connectés à un cube OLAP (SQL Server Analysis Services, Power BI, etc.).

RANGMEMBRECUBE (CUBERANKEDMEMBER en anglais) te sert dès qu'un rapport BI doit afficher un Top N ou un classement qui se met à jour tout seul quand le cube change, sans que tu aies à retaper le nom du premier ou du dernier chaque semaine. Elle est réservée aux classeurs connectés à un cube OLAP, SQL Server Analysis Services ou Power BI.

Concrètement, c'est elle qui identifie automatiquement le premier produit par chiffre d'affaires chaque semaine, qui liste les cinq meilleurs clients d'une période, ou qui affiche la région en queue de classement sans qu'on ait besoin de connaître le nombre total de membres dans le jeu.

Syntaxe

=RANGMEMBRECUBE(connexion; expression_jeu; rang)

Clique sur un argument pour aller à son explication.

La connexion doit être préalablement configurée dans ton classeur via Données > Connexions existantes. L'expression_jeu utilise la syntaxe MDX et doit référencer un jeu déjà trié côté cube pour que les rangs soient significatifs.

Lucas, la mascotte du Dojo, inspecte les arguments de la fonction à la loupe

Comprendre chaque paramètre de la fonction RANGMEMBRECUBE

Les trois arguments s'enchaînent dans un ordre fixe et aucun n'est facultatif : d'abord le nom de ta connexion OLAP entre guillemets, ensuite l'expression MDX du jeu à parcourir, et enfin le rang voulu.

Le rang accepte des valeurs négatives : 1 te donne le premier membre, -1 le dernier, sans que tu aies à connaître la taille du jeu. Et comme ce dernier argument peut pointer vers une cellule, tu rends tout ton classement pilotable depuis une simple liste déroulante.

1

connexion

: le nom de la connexion au cube OLAP, tel qu'il est configuré dans ton classeur

Ce paramètre doit être une chaîne de texte entre guillemets, par exemple "VentesCube" ou "CRM_OLAP".

Pour vérifier les connexions disponibles, va dans Données > Connexions. Le nom est sensible à la casse et doit correspondre exactement à celui visible dans la liste.

2

expression_jeu

: l'expression MDX (Multidimensional Expressions) qui définit le jeu de membres à classer

C'est ce jeu qui sera parcouru pour trouver le membre à la position demandée. Tu peux référencer des dimensions, des hiérarchies, ou utiliser des fonctions MDX pour créer des jeux filtrés ou triés.

Exemples valides : "[Produit].[Tous les produits].Children", "[Client].[Top Clients]", "[Geo].[Region].Members".

3

rang

: la position du membre à retourner dans le jeu

Le rang 1 correspond au premier membre, 2 au deuxième, etc. Tu peux aussi utiliser des rangs négatifs : -1 pour le dernier membre, -2 pour l'avant-dernier, et ainsi de suite.

Tu peux référencer une cellule pour rendre le rang dynamique, par exemple =RANGMEMBRECUBE("VentesCube"; "[Produit].Children"; A1)A1 contient le rang choisi par l'utilisateur.

Attention : Si le rang demandé dépasse le nombre de membres dans le jeu (par exemple rang 15 pour un jeu de 10 membres), Excel retourne l'erreur #REF!. Utilise MEMBRESENSEMBLECUBE pour compter les membres disponibles avant d'utiliser un rang variable.

Le savais-tu ?
Le rang de RANGMEMBRECUBE accepte des valeurs négatives : 1 renvoie le premier membre, -1 le dernier, -2 l'avant-dernier, sans que tu aies à connaître la taille du jeu. Quand de nouveaux membres arrivent dans le cube, le -1 pointe toujours sur le dernier du classement.
Lucas, la mascotte du Dojo, fait une démonstration pas à pas de la fonction dans Excel

Exemples pratiques pas à pas

Exemple 1

Comment obtenir le premier membre d'un classement avec la fonction RANGMEMBRECUBE

Ton jeu de produits est trié par chiffre d'affaires décroissant, mais la cellule qui le contient n'affiche qu'une étiquette : le meilleur vendeur est là, invisible. Tu veux l'afficher en tête de ta synthèse, et surtout qu'il change tout seul le jour où un autre produit prend la première place. La fonction RANGMEMBRECUBE va chercher le membre qui occupe une position donnée.

Les étapes
  1. 1
    Dans une cellule, écris =RANGMEMBRECUBE(.
  2. 2
    En 1er argument : saisis le nom de ta connexion au cube entre guillemets, "ThisWorkbookDataModel". C'est le nom réservé du modèle de données interne au classeur, à écrire exactement comme dans la liste Données puis Connexions.
  3. 3
    En 2ᵉ argument : clique sur la cellule où vit le jeu déjà trié, F4. C'est le tri de ce jeu qui donne son sens au classement, la fonction RANGMEMBRECUBE ne réordonne rien par elle-même.
  4. 4
    En 3ᵉ argument : saisis la position à lire, 1, pour obtenir le premier membre du jeu. Un -1 lirait le dernier et un -2 l'avant-dernier sans que tu aies à connaître la taille du jeu, tandis qu'un rang au-delà du nombre de membres renvoie une erreur.
  5. 5
    Ferme la parenthèse et appuie sur Entrée. La cellule affiche alors le nom natif du membre trouvé, ici Moniteur.
Au final, ta formule devrait ressembler à ça :=RANGMEMBRECUBE("ThisWorkbookDataModel"; F4; 1)
Explication
La fonction rend Moniteur, le produit en tête du jeu avec ses 8000 de chiffre d'affaires. Elle ne trie rien par elle-même : elle lit le jeu à la position demandée, et tout dépend donc du tri posé dans la fonction JEUCUBE. Sur un jeu non trié, le rang 1 rendrait un membre parfaitement arbitraire.
Exemple 2

Comment afficher un classement complet avec la fonction RANGMEMBRECUBE

Le premier vendeur ne suffit pas : ta réunion commerciale veut voir le podium entier, et tu ne veux pas rouvrir la formule à chaque fois pour changer un chiffre. En sortant le rang de la formule pour le poser dans une cellule, tu obtiens un classement que l'on parcourt en tapant simplement un autre numéro.

Les étapes
  1. 1
    Dans une cellule, écris =RANGMEMBRECUBE(.
  2. 2
    En 1er argument : saisis le nom de la connexion entre guillemets, "ThisWorkbookDataModel", comme dans l'exemple précédent.
  3. 3
    En 2ᵉ argument : clique sur la cellule qui porte le jeu trié par chiffre d'affaires décroissant, F4. C'est ce tri qui donne son sens au rang, sans lui le « premier » ne voudrait rien dire.
  4. 4
    En 3ᵉ argument : clique sur la cellule qui contient le rang à consulter, F7, au lieu du 1 écrit en dur de l'exemple précédent. Toute la souplesse est là, la formule ne bouge plus et c'est la cellule qui décide de la place lue.
  5. 5
    Ferme la parenthèse et appuie sur Entrée, puis tape 2 dans F7, puis 3, et le résultat suit en déroulant le classement. Tu peux remplacer cette saisie par une liste déroulante, ou poser les numéros 1, 2 et 3 dans une colonne en figeant le jeu en $F$4 pour recopier la formule vers le bas.
Voici la formule que tu obtiens à la fin :=RANGMEMBRECUBE("ThisWorkbookDataModel"; F4; F7)
Explication
Le rang n'est pas écrit dans la formule, il vit dans la cellule F7. Tu passes donc tout le podium sans jamais rouvrir la formule : 1 donne Moniteur (8000), 2 donne Clavier (4000), 3 donne Souris (2000). C'est ce qui fait la différence avec l'exemple précédent, où le 1 était figé dans la formule et ne montrait jamais que le premier.
Exemple 3

Comment afficher le chiffre du premier membre en combinant la fonction RANGMEMBRECUBE et la fonction VALEURCUBE

Afficher le meilleur produit sans le montant qui va avec laisse ton lecteur à mi-chemin : « c'est l'écran, oui, mais combien ? ». Écrire ce montant à la main le condamne à devenir faux au premier changement de classement, et personne ne le remarquera. La fonction RANGMEMBRECUBE rend un membre que la fonction VALEURCUBE sait chiffrer.

Les étapes
  1. 1
    Dans une cellule, écris =VALEURCUBE(.
  2. 2
    En 1er argument : saisis le nom du modèle de données interne, "ThisWorkbookDataModel". C'est le même que celui qu'interroge déjà la formule de la cellule F7.
  3. 3
    En 2ᵉ argument : saisis entre guillemets la mesure à évaluer, "[Measures].[Total CA]", qui porte le chiffre d'affaires total du cube.
  4. 4
    En 3ᵉ argument : clique sur la cellule du membre gagnant, F7, sans guillemets puisque c'est une référence et non du texte. Une formule RANGMEMBRECUBE y a d'abord placé Moniteur, et ce membre sert de filtre exactement comme l'aurait fait l'expression "[Ventes].[Produit].[Moniteur]" écrite en toutes lettres.
  5. 5
    Ferme la parenthèse et appuie sur Entrée. La cellule rend 8000, le chiffre d'affaires du premier du classement, et le jour où la souris passe en tête le montant suit tout seul.
Une fois les morceaux assemblés, ta formule donne ça :=VALEURCUBE("ThisWorkbookDataModel"; "[Measures].[Total CA]"; F7)
Explication
La fonction RANGMEMBRECUBE ne rend pas un texte mais un vrai membre du modèle, et c'est ce qui permet de le passer à la fonction VALEURCUBE comme filtre. Résultat, 8000 : le chiffre d'affaires du premier du classement, sans jamais nommer l'écran nulle part. Le jour où la souris passe en tête, le nom et le montant suivent ensemble.
Le conseil du pro
Le classement suit l'ordre du jeu tel qu'il sort du cube. Ce tri doit être défini côté cube, dans l'expression MDX avec la fonction ORDER(), et non après coup dans Excel : sans ça, ton Top 5 ne reflète pas la mesure qui t'intéresse.
Lucas, la mascotte du Dojo, l'air gêné face à une erreur Excel

Les erreurs fréquentes avec la fonction RANGMEMBRECUBE

Comme RANGMEMBRECUBE dialogue avec un cube externe, ses ratés viennent presque toujours de la liaison plutôt que d'une faute de calcul. Le #NOM? signale une connexion que ton classeur ne reconnaît pas (souvent une majuscule de travers dans le nom), et le #VALEUR! une expression MDX qui ne tient pas la route.

Les deux autres cas sont liés aux données : #REF! quand tu réclames un rang plus loin que le nombre de membres réellement présents, et une cellule vide ou #N/A quand le cube n'a pas été actualisé ou que le serveur est hors d'atteinte.

Erreur #NOM? : connexion introuvable

Excel ne trouve pas la connexion OLAP spécifiée dans le premier paramètre. Le nom est sensible à la casse ou ne correspond pas exactement à celui configuré dans le classeur.

Solution : Va dans Données > Connexions pour vérifier le nom exact de ta connexion OLAP. Copie-colle ce nom dans ta formule entre guillemets pour éviter toute erreur de frappe.

Erreur #REF! : rang hors limites

Tu demandes un rang qui n'existe pas dans le jeu. Par exemple, le rang 15 alors que le jeu ne contient que 10 membres.

Solution : Utilise MEMBRESENSEMBLECUBE pour compter les membres disponibles : =MEMBRESENSEMBLECUBE("Ventes"; "[Produit].[Top 10]"). Assure-toi que ton rang ne dépasse pas cette valeur, ou entoure la formule de SIERREUR.

Erreur #VALEUR! : expression MDX invalide

L'expression_jeu utilise une syntaxe MDX incorrecte ou référence une dimension qui n'existe pas dans le cube. Une parenthèse manquante ou un nom de dimension mal orthographié suffit.

Solution : Teste ton expression MDX dans SQL Server Management Studio ou dans l'outil de requête de ton serveur OLAP avant de l'utiliser dans Excel. Vérifie que les noms de dimensions et hiérarchies sont orthographiés exactement comme dans le cube.

Résultat vide ou #N/A : cube non actualisé

Les données du cube ne sont pas à jour ou la connexion n'est pas active. Excel retourne #N/A ou une cellule vide.

Solution : Actualise ta connexion OLAP via Données > Actualiser tout. Vérifie aussi que le serveur OLAP est accessible depuis ton réseau et que tes identifiants de connexion sont valides.

FAQ

Questions fréquentes

Le rang commence à 1 pour le premier membre du jeu. Tu peux utiliser un rang positif pour classer depuis le début (1, 2, 3...), ou un rang négatif pour classer depuis la fin du jeu (-1 pour le dernier, -2 pour l'avant-dernier, etc.).

Ressources

Pour aller plus loin

Continue sur ta lancée après la fonction RANGMEMBRECUBE : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.

Tout voir