Introduction à Dax
Basé sur le cours vidéo Dax de SQLBI.
Rapporter le schéma

Rapport

Théorie
La langue dax
Dax est un langage fonctionnel, l'exécution circule avec des appels de fonction.
! Le formatage du code est important dans DAX, car il facilite le débogage du code. Pour la mise en forme automatique du code DAX, on peut utiliser daxformatter.
Colonnes calculées
- Colonnes calculées à l'aide de DAX.
- Toujours calculé pour la ligne actuelle.
Mesures
- Écrit à l'aide de Dax
- Ne travaillez pas Row par rangée
- Au lieu de cela, utilisez des tables et des agrégateurs
- Je n'ai pas le concept de «ligne actuelle»
Conventions de dénomination
- Les mesures n'appartiennent pas à un tableau => Évitez le nom du tableau dans les mesures de référence. De cette façon, il est plus facile de se déplacer vers un autre tableau et de s'identifier comme mesure.
- Donc:
- Colonnes calculées -> Table [colonne]
- Mesures -> [Mesure]
Mesures vs colonnes calculées
- Utilisez une colonne lorsque:
- Besoin de trancher ou de filtrer sur la valeur
- Utilisez une mesure lorsque:
- Calcul des pourcentages ou ratios
- Besoin d'agrégations complexes
- Utilisation de l'espace et du processeur:
- Les colonnes consomment la mémoire
- Les mesures consomment le processeur
Fonctions d'agrégation
- Travaillez uniquement sur les colonnes numériques.
- Agréger une seule colonne.
Les fonctions d'agrégation «x»
- Itérateurs: utile pour agréger les formules
- Itérer sur la table et évaluer l'expression pour chaque ligne
- Recevez toujours deux paramètres:
- Table pour itérer
- Formule à évaluer pour chaque ligne
- Exemple:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
En utilisant des variables
- Très utile pour éviter de répéter des sous-expressions dans votre code.
- Exemple:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
Fonctions de date
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
Fonctions de table
- Fonctions de base qui fonctionnent sur des tables complètes et renvoient une table en conséquence
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- Leur résultat est souvent utilisé dans d'autres fonctions
- Ils peuvent être combinés ensemble pour former des expressions complexes
FILTRE
- Ajoute une nouvelle condition en restreint le nombre de lignes d'une table
- Renvoie une table qui peut être itérée par une fonction «x»
TOUS
- Renvoie toutes les lignes d'une table tout en ignorant le contexte du filtre
- Renvoie une table qui peut être itérée par une fonction «x»
- Peut également être utilisé avec une seule colonne
ALL ( Customers[CustomerName] ) Le résultat étant un tableau avec une colonne
DISTINCT
- Renvoie les valeurs distinctes d'une colonne, seulement celles visibles dans le contexte actuel
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
Lié
- Renvoie une table avec toutes les lignes liées à celle actuelle.
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
Contextes d'évaluation
1. Contexte de filtre
- Défini par:
- Sélection de lignes
- Sélection de colonne
- Signaler les filtres
- Sélection des tranchers
- Les lignes en dehors du contexte du filtre ne sont pas prises en compte pour le calcul
- Défini automatiquement par Ticottable, peut également être créé avec des fonctions spécifiques
2. Contexte de ligne
- Défini par:
- Définition de colonne calculée
- Défini automatiquement pour chaque ligne
- Fonctions d'itération des lignes
- Sumx, moyenx…
- Toutes les fonctions «x» et itérateurs
- Défini par les formules utilisateur
- Nécessaire pour évaluer les valeurs de la colonne, c'est le concept de "ligne actuelle"
! Le contexte de filtre filtre les tables. Le contexte de la ligne itère les lignes!
CALCULER
- Remplace partiellement le contexte du filtre
- Conditions
- Peut remplacer une table entière
- Peut remplacer une seule colonne
- Calculer les travaux sur le contexte du filtre
- Les filtres sont évalués dans le contexte du filtre externe, puis combinés ensemble et et finalement utilisés pour construire un nouveau contexte de filtre dans lequel DAX évalue l'expression.
- Synthax:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. Le filtre et la somme sont sur le même tableau. Vous pouvez obtenir le même résultat à l'aide du filtre.
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. CLICTER CLARD sur une seule colonne. Tous utilisés avec une seule table de colonne.
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
Filtres et relations
-Les relations affectent le contexte du filtre
EN RAPPORT
RELATED ( table[column] )
- Ouvre un nouveau contexte de ligne sur la table cible
- Suivant les relations
- Permet de filtrer le côté à un côté
Lié
RELATEDTABLE ( table )
- Filtre le tableau des paramètres
- Renvoie uniquement les lignes liées à celle actuelle
- C'est le compagnon de connexe
Transition de contexte
- Calcul effectue une autre tâche:
- Si exécuté dans un contexte de ligne
- Il prend le contexte de la ligne
- Le transforme en un contexte de filtre équivalent
- L'applique au modèle de données avant de calculer son expression
- Exemple:
SUM() vs CALCULATE(SUM())
Intelligence temporelle
- L'intelligence temporelle a besoin d'une table de date.
- Propriétés de la table de date:
- Toutes les dates doivent être présentes
- De 1 ° de janvier à 31 ° de décembre
- Pas de trous
- Sinon, l'intelligence temporelle ne fonctionnera pas
- Couvrages d'intelligence temporelle:
- Année à ce jour
- Quart à ce jour
- Total de course
- Même période de l'année précédente
- Calcul des jours ouvrables
- Exercice fiscal
- etc.
- AGLÉGATIONS:
- YTD: Année à ce jour
- QTD: Quarter à ce jour
- MTD: mois à ce jour
CALENDRIER
- Renvoie une table avec une seule colonne nommée "Date", contenant un ensemble contigu de dates dans la plage donnée, inclusive.
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
Calendaro
- Crée automatiquement un tableau de calendrier basé sur le contenu de la base de données. Éventuellement, vous pouvez spécifier le mois dernier (utile pour les exercices)
- CalendarAto utilise toutes les dates du modèle, excluant uniquement les colonnes et tables calculées
Année à ce jour
DATESYTD et TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
Même période l'année dernière
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
Total de course
- L'exécution totale nécessite un filtre explicite.
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)