La RLS dynamique (Dynamic Row Level Security) est une variante de la RLS dans laquelle le filtre de sécurité n'est pas écrit en dur dans le rôle, mais déterminé à l'exécution selon l'identité de l'utilisateur connecté au rapport. Là où la RLS statique impose de créer autant de rôles que de périmètres à couvrir (un rôle par pays, par exemple), la RLS dynamique n'en nécessite qu'un seul.
Pour la mettre en place, il faut d'abord ajouter au modèle une table de sécurité associant chaque utilisateur à son périmètre, puis créer un rôle contenant une expression DAX qui compare l'identifiant de l'utilisateur à cette table (ex : [Email] = USERPRINCIPALNAME()). La fonction USERPRINCIPALNAME() renvoie l'adresse de connexion de l'utilisateur, dans Power BI Desktop comme dans Power BI Service, ce qui la rend préférable à USERNAME(). Il faut ensuite veiller à ce que le filtre se propage bien de la table de sécurité jusqu'à la table de faits, ce qui suppose parfois d'activer un filtrage croisé bidirectionnel.
Son principal avantage est la maintenance : lors de l'arrivée ou du départ d'un collaborateur, il suffit de mettre à jour la table de sécurité et d'actualiser le modèle sémantique, sans republier le rapport. Pour une sécurité hiérarchique, où un manager accède aux données de toute son équipe, la RLS dynamique se combine avec les fonctions DAX PATH() et PATHCONTAINS().
