Archives du mois : juin 2017


La fonction IF() est bien connue des utilisateurs d’Excel. Elle permet de tester une condition et de retourner une valeur, dans le cas ou la condition est remplie, ou une autre valeur, dans le cas contraire. Anatomie de la fonction : IF(Test logique,valeur si Vrai,valeur si Faux) Avec DAX il faut envisager deux emplois de la fonction IF() : Emploi de IF()) dans une colonne calculée C’est le cas le plus simple, car alors IF() fonctionne exactement comme dans Excel. A titre d’exemple créons une nouvelle colonne calculée dans notre Table ‘Gd livre’ Test = IF([Solde]>200;1;0) Deuxième cas : Emploi de IF() dans une mesure. Si nous créons une nouvelle mesure et y collons cette formule, nous recevrons un message d’erreur. Ce message est le résultat de la violation d’une règle sacrée du langage DAX : « Pas de colonnes NUES dans une mesure ». Le seul moyen d’utiliser IF() dans une mesure est de le coupler avec la fonction VALUES(). Le meilleur moyen de comprendre ce que retourne VALUES() est  encore de créer une nouvelle Table. Comme on peut le constater, VALUES() retourne une table reprenant l’ensemble des soldes de ‘Gd livre’. Nous pouvons donc écrire la mesure suivante : Test1 = IF(VALUES(‘Gd […]

DAX – IF()



CALCULATETABLE() permet de créer une table filtrée. Cette table sera le plus souvent virtuelle pour être utilisée dans une mesure. Elle peut aussi être visualisée dans Power Bi pour mieux comprendre le fonctionnement de cette fonction. Par exemple imaginons que nous voulions appliquer un calcul sur les ventes antérieures au 31/12/2015. Il nous suffit de générer une nouvelle table avec CALCULATETABLE() : Table =CALCULATETABLE(‘Gd livre’;’Gd livre'[Compte]=70711000; ‘Gd livre'[Date]<=date(2015;12;31) ) Cette formule nous retourne une Table complète filtrée selon ces critères, sur laquelle nous pouvons pratiquer des calculs, comme par la somme de montants créditeurs. Ventes2015 = SUMX( CALCULATETABLE(‘Gd livre’;’Gd livre'[Compte]=70711000; ‘Gd livre'[Date]<=date(2015;12;31) );[Crédit] ) Lorsque l’on utilise cette mesure dans un tableau, on constate que les filtres du contexte s’appliquent bien, mais seulement sur les données retournées par cette table virtuelle.

DAX – CALCULATETABLE()



La fonction DISTINCTCOUNT() prend une colonne de table en entrée, crée une table virtuelle des valeurs uniques (supprime les doublons), puis compte les lignes de cette table virtuelle avant de retourner la valeur. Par exemple la mesure : Distinct = DISTINCTCOUNT(‘Gd livre'[Compte]) Retournera le nombre de comptes présents dans la table ‘Gd livre’, en fonction du contexte. Comme prévu, la mesure réagit au contexte du tableau, et retourne le nombre de comptes utilisés selon les mois. Cette fonction peut aussi être utilisée en prenant deux tables liées comme paramètres. Par exemple, si nous souhaitons calculer le nombre de catégories de produits mouvementées dans nos stocks, par périodes, nous pouvons créer la mesure suivante : TotalCategoriesMouvementées = CALCULATE( DISTINCTCOUNT(Produits[Catégorie] );’Mouvements de stock’ ) Le fait d’inclure DISTINCTCOUNT() dans une fonction CALCULATE() nous permet d’utiliser la table ‘Mouvements de stocks’ comme filtre de la table mono-colonne Produits[Catégorie] . Le tableau retourne pour chaque jour, le nombre de catégories de produits mouvementés dans les stocks. Si nous ne voulions calculer que les catégories sorties du stock, il nous suffirait de modifier le second paramètre de la fonction, en filtrant la table ‘Mouvements de stock’. TotalCategoriesMouvementées = CALCULATE( DISTINCTCOUNT( Produits[Catégorie] ); FILTER(‘Mouvements de stock’;’Mouvements stock'[Mouvement ]= »S » […]

DAX – DISTINCTCOUNT()



CALCULATE() est certainement l’une des fonctions les plus puissantes et les plus utiles du langage DAX. On peut la comparer à la fonction SUMIF() d’Excel, sans ses limitations. Anatomie de la fonction : =CALCULATE(<aggrégateur>, <filtre1>, <filtre2>, … ) Agrégateurs SUM ([Colonne]) SUM ([Colonne1]) / MIN ([Colonne2]) MIN(),AVERAGE(),SUMX() …Ou une autre mesure définie [Mesure 1]. Filtres Avec CALCULATE() nous pouvons non seulement réaliser n’importe quel calcul, mais nous pouvons appliquer autant de filtres que nous le souhaitons sur les données source ! Par exemple, créons une nouvelle mesure dans notre table ‘Gd livre’. MesureExemple = CALCULATE( SUM(‘Gd livre'[Solde]);’Gd livre'[C.j]= »ACH »; ‘Gd livre'[Racine]=607; ‘Gd livre'[Centre Analytique]= »Centre A » ) Cette mesure calcule le total des soldes des écritures du journal des Achats, pour chaque compte dont la racine est 607, et uniquement pour le Centre analytique « Centre A ». CAlCULATE() + ALL() : Du lourd !! Nous n’avons pas jusqu’à présent rencontré encore  la fonction ALL(). Son utilité est simple à décrire : ALL() neutralise tous les filtres appliqués. Reprenons notre exemple précédent, en transformant la carte en histogramme groupé. Maintenant glissons le champs [MoisNom] dans la case Axe. Notre [mesure1] est maintenant « découpée » par mois, c’est-à-dire qu’en arrière-plan, un nouveau filtre s’applique sur chaque barre : Barre du mois de Janvier : […]

DAX – CALCULATE() – Introduction



Parmi les fonctions statistiques, AVERAGE() et AVERAGEX() sont probablement les plus utilisées. AVERAGE() est la plus simple d’utilisation. Elle permet de calculer la moyenne statistique des valeurs présentes dans une colonne. Par exemple, nous pouvons calculer la moyenne des valeurs de la colonne [Débit] de la table ‘Gd livre’. Average = AVERAGE(‘Gd livre'[Débit]) Comme vous pouvez le constater, chaque moyenne est calculée en fonction du contexte du rapport (ici par compte, année, trimestre, et mois.) Si nous souhaitons effectuer la moyenne des valeurs calculées ligne par ligne (par exemple pour calculer une moyenne mobile) , nous devrons utiliser  la fonction itérateur AVERAGEX().

DAX – AVERAGE()



7
PowerBi met à notre disposition de puissantes fonctions pour manipuler les données selon les dates. Ces fonctions sont communément regroupées sous le terme anglophone de « Time intelligence ». Pour pouvoir les utiliser il est indispensable de disposer d’une table de type calendrier, dans notre modèle. Il existe de nombreuses manières d’obtenir une telle table, mais nous allons nous concentrer sur une technique précise : comment générer une table Calendrier depuis Power Query. Procédure Tout d’abord nous devons créer une nouvelle requête vide : Cliquez sur éditeur avancé. Effacer le texte et copiez-collez ce script Après validation, vous devez obtenir le formulaire suivant : Validez (Bouton Appeler). Une nouvelle requête est créée, renommez la sous le nom calendrier. Enfin n’oubliez pas de transformer le type des champs. Cliquez sur fermer et appliquer. PowerQuery charge alors une nouvelle table dans le modèle. Vous ne devez pas oublier de trier vos colonnes texte, comme [MoisNom] par leur correspondant numérique (ici [MoisNombre]). Votre table calendrier est prête à être liée à vos autres tables contenant un champs de type Date.

Power Query : Générer un Calendrier