BITLSHIFT |
Décalage de bit |
| DAX (Data Analysis Expressions) |
Syntaxe
|
BITLSHIFT(Number, Shift_Amount)
|
Paramètres
| Nom |
Description |
| Number |
Ce paramètre permet de spécifier la valeur entière à décaler vers la gauche en représentation binaire. |
| Shift_Amount |
Ce paramètre permet de définir le nombre de positions (bits) vers la gauche auquel le nombre doit être décalé. Chaque décalage multiplie la valeur par 2n. |
Description
Cette fonction permet de décaler un nombre vers la gauche d'un nombre de bits spécifié.
Remarques
- BITLSHIFT correspond à une multiplication par 2n : Lorsque vous effectuez un décalage vers la gauche de n bits, vous équivalez à multiplier
le nombre par 2^n. Par exemple, BITLSHIFT(5,1) renvoie 10 car 5 (0101 en binaire) devient 1010, soit 10. Cela permet d'augmenter rapidement la valeur de manière exponentielle
en manipulant les bits sans opérations arithmétiques explicites.
- Les bits déplacés hors de la zone binaire sont perdus : Lorsqu'un décalage dépasse la longueur binaire utile du nombre, les bits les plus significatifs sortent
et ne sont pas conservés. Par exemple, si un nombre a des bits à gauche déjà élevés, ceux-ci peuvent disparaître lors du shift. Cela impose de planifier le décalage pour ne
pas perdre d'information importante.
- Fonction idéale pour la création de masques binaires : BITLSHIFT est très utile pour générer rapidement des masques binaires dynamiques. Par exemple,
BITLSHIFT(1,3) produit 8 (1000 en binaire), ce qui permet de créer un masque ciblant spécifiquement un bit sans risque d'erreur manuelle. Cette technique est couramment
utilisée dans le codage de droits, de groupes ou de marqueurs.
- Les paramètres doivent être des entiers : Bien que DAX accepte des expressions numériques, BITLSHIFT convertit implicitement la valeur en entier avant
d'opérer. Cela signifie que toute valeur décimale sera tronquée. Ainsi, si vous utilisez 5.9, la fonction considère 5 avant le décalage. Ce comportement peut surprendre
si les données ne sont pas explicitement nettoyées.
- Fonction purement binaire, indépendante du contexte de filtre : Comme toutes les fonctions BIT*, BITLSHIFT n'est pas influencée par le contexte de filtre ou
d'agrégation. Peu importe si la formule est utilisée dans une mesure, une colonne calculée ou via des dépendances, le résultat est strictement déterminé par les deux
paramètres fournis, sans effet du modèle relationnel.
- Utile dans la construction d'identifiants compacts : En combinant BITLSHIFT avec BITOR ou BITAND, on peut encoder plusieurs attributs dans un seul entier. Par
exemple, BITOR(BITLSHIFT(type,4), niveau) peut créer un identifiant unique combinant plusieurs informations. Ce type d'architecture compacte est fréquent dans les systèmes
industriels ou analytiques hautes performances.
- Attention aux grands décalages, ils peuvent exploser la valeur : Un shift de 20 ou 30 bits multiplie la valeur initiale par plus d'un million ou un milliard.
Si l'on travaille sur de grandes quantités ou des masques complexes, la valeur résultante peut dépasser la capacité attendue et poser des problèmes de cohérence, de performance
ou d'entreposage. Des tests intermédiaires sont donc recommandés.
- BITLSHIFT facilite la manipulation algorithmique dans DAX : Dans des scénarios où DAX est souvent perçu comme limité à l'agrégation, BITLSHIFT montre une
dimension algorithmique puissante. Elle permet d'implémenter des transformations de bas niveau, comme la sérialisation de propriétés ou la construction de tables de lookup
codées en entier. Pour certains modèles métier, cela ouvre la voie à des approches innovantes sans recourir au backend SQL.
Dernière mise à jour : Vendredi, le 30 Mai 2025