
Comment filtrer les dates, incluant ou excluant les dates futures, dans les modèles sémantiques
Imaginez que nous ayons trois mesures :
- Montant des ventes
- Montant des ventes Budget
- Montant des ventes PY
Lorsque nous regardons un tableau avec ces chiffres, nous voyons ceci (en supposant que nous disposions de données actuelles jusqu’à fin juillet 2025) :

Même si les résultats sont corrects, mes utilisateurs peuvent avoir besoin de deux vues différentes :
- Voir uniquement les résultats selon les données existantes
- Y compris les données budgétaires et les données PY
J’ai plusieurs façons de le faire:
- Créez des visuels séparés avec différents filtres.
- Créez deux pages pour les deux vues, toujours en utilisant des filtres différents.
- Dites à mes utilisateurs d’utiliser le slicer de calendrier pour filtrer les données selon leurs besoins.
Mais je souhaite concevoir mes rapports aussi conviviaux que possible sans rien dupliquer.
Par conséquent, je souhaite ajouter un Slicer afin que les utilisateurs puissent choisir d’inclure les données futures ou de voir uniquement les données actuelles.
Créer le tableau Filtre de dates
Ma table Date comprend des colonnes d’index pour différentes périodes : jours, semaines, mois, trimestres et années.
- La ligne avec la période en cours contient un 0
- Les lignes des périodes passées contiennent des nombres négatifs
- Les lignes des périodes futures contiennent des nombres positifs
Voyons les lignes d’un petit échantillon réalisé en SQL en utilisant la colonne DayIndex :

En utilisant cette colonne, j’ai construit un tableau avec une colonne supplémentaire pour servir de Slicer.
J’ai pris toutes les lignes avec un index allant jusqu’à 0 et les ai marquées comme « Données actuelles uniquement ».
Ensuite, j’ai ajouté (UNION) toutes les lignes de la table Date et les ai marquées comme « Données futures incluses ».

Je l’ai fait avec SQL, mais vous pouvez le faire dans Power Query ou dans tout autre langage de votre choix.
Maintenant, j’ai importé ce tableau dans Power BI
Développez le modèle de données
Après avoir ajouté cette table à Power BI, j’ai créé une nouvelle relation entre la nouvelle table et la table Date :

La direction du filtre croisé doit être définie sur Les deux car la colonne DateKey dans la table Date Filter n’est pas unique :

Par conséquent, la direction du filtre serait Date -> Filtre de date uniquement, ce qui ne fonctionnera pas.
Je souhaite filtrer la table Date par la table Date Filter. Par conséquent, je dois définir la direction du filtre sur « Les deux ».
Résultat
Ensuite, j’ai ajouté un Slicer au rapport :

Après toute la préparation, le Slicer permet la sélection des données selon les besoins :


Les utilisateurs peuvent utiliser ce slicer pour choisir les données qu’ils souhaitent voir, quelle que soit la sélection dans le slicer Calendrier.
Sélection de périodes complètes
L’exemple ci-dessus est pratique lorsque la sélection doit se faire au niveau du jour.
Ceci est particulièrement utile lorsque l’on compare les données actuelles avec le budget ou l’année fiscale.
Imaginez le 5ème ou 6ème jour du mois. Vous n’avez que quelques jours de Soldes, mais vous le comparez au Budget de tout le mois. Cela peut être trompeur.
Mais que se passe-t-il lorsque le filtre doit être réglé sur des périodes complètes, comme des mois ou des années ?
Ici, une requête modifiée pour définir la colonne DateFilter en fonction d’années entières :

Désormais, l’année entière est affichée, alors que seules les données actuelles devraient être affichées :

Vous pouvez modifier le tableau Filtre de date de la même manière pour filtrer par mois ou autres périodes.
Cela peut être fait très facilement en filtrant les lignes de la table Date pour la date actuelle.
Conclusion
Cette approche est simple à mettre en œuvre et facile à utiliser pour les consommateurs de rapports.
Il évite d’écrire du code DAX et s’appuie entièrement sur les informations de la table Date.
L’astuce consiste à étendre le modèle de données pour prendre en charge les exigences avec le moins d’effort possible.
Si vous ne disposez pas des colonnes d’index comme moi, vous pouvez utiliser une approche différente pour générer la table Filtre de date. Par exemple, utilisez une fonction pour obtenir la date actuelle, comme GETDATE() en T-SQL ou Now() dans d’autres langages.
J’ai trouvé les colonnes d’index très utiles, non seulement dans ce cas mais aussi dans de nombreuses autres situations où le client me demande de filtrer les données par dates par rapport à la date actuelle.
Cela facilite la vie lorsque la « date actuelle » n’est pas aujourd’hui, mais doit suivre une logique spécifique, par exemple le jour de la semaine précédent.
OK, vous pouvez ajouter des filtres relatifs au rapport. Dans de nombreux cas, ils suffisent.
Dans d’autres cas, les colonnes Index m’offrent plus de flexibilité.
Références
Comme dans mes articles précédents, j’utilise l’exemple de jeu de données Contoso. Vous pouvez télécharger gratuitement l’ensemble de données ContosoRetailDW depuis Microsoft. ici.
Les données Contoso peuvent être utilisées librement sous la licence MIT, comme décrit dans ce document. J’ai modifié l’ensemble de données pour déplacer les données vers des dates contemporaines.



