Utilisation de DirectQuery dans Power BI Desktop

Avec Power BI Desktop, quand vous vous connectez à une source de données, vous pouvez toujours importer une copie des données dans Power BI Desktop. Pour certaines sources de données, une autre approche est possible : vous connecter directement à la source de données à l’aide de DirectQuery.

Sources de données prises en charge

Pour obtenir la liste complète des sources données compatibles avec DirectQuery, consultez Sources de données prises en charge par DirectQuery.

Connexion à l’aide de DirectQuery

Quand vous utilisez Obtenir les données pour vous connecter à une source de données prise en charge par DirectQuery, la boîte de dialogue de connexion vous permet de choisir comment vous voulez vous connecter. Par exemple, dans Power BI Desktop, sous le ruban Accueil, sélectionnez Obtenir les données>SQL Server. Dans la boîte de dialogue SQL Server Database, Mode de connectivité des données présente les options Importer et DirectQuery :

Options Importer et DirectQuery, boîte de dialogue SQL Server Database, Power BI Desktop

Voici les différences entre l’option Importer et l’option DirectQuery :

  • Importer : Les tables et colonnes sélectionnées sont importées dans Power BI Desktop. Lorsque vous créez une visualisation ou interagissez avec elle, Power BI Desktop utilise les données importées. Pour voir les changements des données sous-jacentes depuis l’importation initiale ou la dernière actualisation, vous devez actualiser les données, ce qui implique de réimporter le jeu de données complet.

  • DirectQuery : Aucune donnée n’est importée ou copiée dans Power BI Desktop. Pour des sources relationnelles, les tables et colonnes sélectionnées apparaissent dans la liste Champs. Pour des sources multidimensionnelles telles que SAP Business Warehouse, les dimensions et mesures du cube sélectionné s’affichent dans la liste Champs. Quand vous créez une visualisation ou interagissez avec elle, Power BI Desktop interroge la source de données sous-jacente afin de toujours afficher des données à jour.

De nombreuses transformations et modélisations des données sont disponibles avec DirectQuery, mais certaines limitations s’appliquent. Quand vous créez ou utilisez une visualisation, vous devez interroger la source sous-jacente. La durée de l’actualisation de la visualisation varie selon les performances de la source de données sous-jacente. Si les données à utiliser pour exécuter la requête ont récemment été demandées, Power BI Desktop utilise les données récentes pour afficher plus vite la visualisation. Si vous sélectionnez Actualiser dans le ruban Accueil, toutes les visualisations sont actualisées avec les données les plus récentes.

L’article Power BI et DirectQuery décrit DirectQuery en détail. Pour plus d’informations sur les avantages, les limitations et d’autres considérations importantes en rapport avec l’utilisation de DirectQuery, consultez les sections suivantes.

Avantages de l’utilisation de DirectQuery

Il y a plusieurs avantages à utiliser DirectQuery :

  • DirectQuery vous permet de créer des visualisations sur des jeux de données très volumineux, qu’il serait autrement impossible d’importer au préalable dans leur totalité avec une pré-agrégation.
  • La modification des données sous-jacentes peut nécessiter une actualisation des données. Pour certains rapports, l’affichage des données actualisées peut nécessiter le transfert de grandes quantités de données, empêchant la réimportation des données. En revanche, les rapports DirectQuery utilisent toujours les données les plus récentes.
  • La limitation de la taille des jeux de données à 1 Go ne s’applique pas à DirectQuery.

Considérations et limitations

Il existe actuellement quelques limitations à l’utilisation de DirectQuery :

  • Si la requête de l’Éditeur Power Query est trop complexe, une erreur se produit. Pour remédier à cette erreur, supprimez l’étape problématique dans l’Éditeur Power Query ou importez les données au lieu d’utiliser DirectQuery. Pour des sources multidimensionnelles comme SAP Business Warehouse, il n’y a pas d’Éditeur Power Query.

  • Les tables calculées et les colonnes calculées qui font référence à une table DirectQuery à partir d’une source de données avec authentification unique (SSO) ne sont pas prises en charge dans le service Power BI.

  • La date/l’heure automatique n’est pas disponible dans DirectQuery. Par exemple, le mode DirectQuery ne prend pas en charge le traitement spécial des colonnes de date (par année, trimestre, mois ou jour).

  • Il existe une limite d’un million de lignes pour les sources cloud (à savoir toute source de données non locale). Les sources locales sont quant à elles limitées à une charge utile définie : environ 4 Mo par ligne (selon l’algorithme de compression propriétaire) ou 16 Mo de données pour l’intégralité du visuel. Certaines limites peuvent être levées si vous utilisez la capacité Premium. Cette limite ne s’applique pas aux agrégations ou calculs utilisés pour créer le jeu de données retourné à l’aide de DirectQuery. Elle s’applique uniquement aux lignes retournées. Les capacités Premium peuvent définir des limites de lignes maximales, comme le décrit ce billet.

    Par exemple, vous pouvez agréger 10 millions de lignes avec une requête exécutée sur la source de données. La requête retourne avec précision les résultats de cette agrégation à Power BI à l’aide de DirectQuery si les données Power BI retournées représentent moins de un million de lignes. Si DirectQuery retourne plus d’un million de lignes, Power BI retourne une erreur (sauf avec la capacité Premium, si le nombre de lignes est inférieur à la limite définie par l’administrateur).

  • Il y a une limite de 125 colonnes dans une table ou une matrice pour les résultats qui ont plus de 500 lignes pour les sources DirectQuery. Quand vous affichez un résultat qui contient plus de 500 lignes dans une table ou une matrice, vous voyez une barre de défilement qui vous permet de récupérer plus de données. Dans ce cas, le nombre maximal de colonnes dans la table ou la matrice est de 125. Si vous devez inclure plus de 125 colonnes dans une seule table ou matrice, envisagez de créer des mesures en utilisant MIN, MAX, FIRST ou LAST, car ils ne sont pas comptabilisés par rapport à cette valeur maximale.

  • Impossible de changer à partir de l’importation en mode DirectQuery. s’il est possible de basculer un modèle du mode DirectQuery au mode Importation, cela signifie que toutes les données nécessaires doivent être importées. Il est également impossible de rebasculer dans l’autre sens, principalement en raison des fonctionnalités non prises en charge en mode DirectQuery. Les modèles DirectQuery sur des sources multidimensionnelles telles que SAP BW ne peuvent pas non plus être basculés du mode DirectQuery vers le mode Importation, en raison du traitement différent des mesures externes.

  • Un problème connu existe dans DirectQuery lors du filtrage d’une colonne de date contenant « 31 décembre 9999 », qui est souvent utilisé comme espace réservé de date spécial quand les informations de date réelles n’ont pas été capturées. Bien qu’il soit courant de filtrer la date du 31 décembre 9999 pour l’exclure de votre analyse, l’utilisation d’un filtre est ou n’est pas ne filtre pas correctement cette date spéciale. Pour éviter un filtrage incorrect quand cette date est présente, utilisez est le ou après le ou est le ou avant le pour filtrer cette date spéciale. L’exemple suivant fournit plus d’informations pour comprendre les problèmes de filtrage potentiels et la meilleure façon de les éviter.

    Dans cet exemple, nous utilisons un jeu de données simple qui contient seulement deux lignes de données avec deux dates. Les dates sont mises en forme dans les formats courants aux États-Unis : le mois suivi du jour, suivi de l’année. La première ligne contient la date du 5 mars 2022 (March 5th, 2022) et la deuxième ligne contient la date du 31 décembre 9999 (December 31st, 9999) :

    Exemple de données pour expliquer le problème de filtrage avec la date spéciale « December 31st, 9999 ». Les données contiennent deux lignes : la première ligne contient la date du 5 mars 2022 (March 5th, 2022) et la deuxième ligne contient la date du 31 décembre 9999 (December 31st, 9999) :

    Si vous souhaitez isoler ou supprimer les lignes contenant « December 31st, 9999 », vous créez probablement un filtre sur la colonne qui contient les dates et vous le définissez de façon à montrer les éléments quand la valeur est ou n’est pas égale à « December 31st, 9999 », comme illustré dans l’image suivante. Notez cependant que les résultats retournés ne sont pas ce qui est attendu, car le visuel ne retourne aucune donnée, au lieu de retourner une ligne, comme attendu :

    La définition d’un filtre pour montrer les éléments dont la valeur est ou n’est pas égale à « December 31st, 9999 » va filtrer toutes les données et va donc retourner des résultats incorrects.

    Cependant, la définition du filtre pour montrer les éléments quand la valeur est le ou avant le ou est le ou après le « December 31st, 9999 » retourne les résultats attendus :

    La définition d’un filtre sur « est le ou avant le December 31st, 9999 » retourne les résultats corrects : les lignes qui contiennent « December 31st, 9999 » sont supprimées.

    La définition d’un filtre sur « est le ou après le December 31st, 9999 » retourne les résultats corrects : seules les lignes qui contiennent « December 31st, 9999 » sont retournées.

Considérations importantes concernant l’utilisation de DirectQuery

Si vous utilisez DirectQuery, prenez en considération les trois points suivants :

  • Performances et charge : toutes les requêtes DirectQuery étant envoyées à la base de données source, le délai d’actualisation des visuels dépend du temps que cette source back-end met pour retourner les résultats de chaque requête. Si vous utilisez DirectQuery pour les visuels, le temps de réponse recommandé (avec le retour des données demandées) est de cinq secondes ou moins, avec un temps de réponse maximal recommandé de 30 secondes. Si le temps de réponse est plus long, l’expérience d’un utilisateur utilisant le rapport devient d’une médiocrité pratiquement inacceptable. Une fois qu’un rapport est publié sur le service Power BI, toute requête prenant plus de quelques minutes expire, et l’utilisateur reçoit un message d’erreur.

    La charge sur la base de données source doit également être prise en considération, en fonction du nombre d’utilisateurs de Power BI qui utiliseront le rapport publié. L’utilisation de la sécurité au niveau des lignes (SNL) peut également avoir un impact significatif. En effet, si une vignette de tableau de bord sans sécurité au niveau des lignes est partagée par plusieurs utilisateurs, une seule requête est envoyée à la base de données. Toutefois, quand la sécurité au niveau des lignes est appliquée à une vignette de tableau de bord, l’actualisation de la vignette nécessite généralement une requête par utilisateur, ce qui augmente considérablement la charge sur la base de données source et peut potentiellement impacter les performances.

    Power BI crée des requêtes aussi efficaces que possible. Cependant, dans certaines situations, la requête générée peut ne pas être suffisamment efficace pour éviter une actualisation qui échoue. C’est le cas, par exemple, quand une requête générée extrait un trop grand nombre de lignes à partir de la source de données back-end. L’erreur suivante est retournée :

    The resultset of a query to external data source has exceeded
    

    Cette situation peut se produire avec un simple graphique qui comprend une colonne de la cardinalité très élevée, avec l’option d’agrégation définie sur ne pas résumer. Le visuel doit avoir uniquement des colonnes avec une cardinalité inférieure à un million ou il doit appliquer les filtres appropriés.

  • Sécurité : par défaut, tous les utilisateurs qui consomment un rapport publié se connectent à la source de données back-end en utilisant les informations d’identification entrées après la publication sur le service Power BI. C’est le même processus pour des données importées : tous les utilisateurs voient les mêmes données, quelles que soient les règles de sécurité définies dans la source back-end.

    Les clients qui souhaitent une sécurité par utilisateur implémentée avec des sources DirectQuery doivent utiliser la sécurité au niveau des lignes ou configurer l’authentification Kerberos contrainte par rapport à la source. Kerberos n’est pas disponible pour toutes les sources. En savoir plus sur RLS. Découvrez plus d’informations sur Kerberos dans DirectQuery.

  • Fonctionnalités prises en charge : certaines fonctionnalités dans Power BI Desktop ne sont pas prises en charge en mode DirectQuery, ou leur prise en charge est limitée. De plus, certaines fonctionnalités du service Power BI (comme Quick Insights) ne sont pas disponibles pour les jeux de données qui utilisent DirectQuery. Pour déterminer si vous avez intérêt à utiliser DirectQuery, tenez compte de ces limitations de fonctionnalités.

Notes

Lors de l’utilisation de DirectQuery avec Azure SQL Database et une adresse IP privée, une passerelle locale est nécessaire.

Publication sur le service Power BI

Les rapports créés à l’aide de DirectQuery peuvent être publiés sur le service Power BI.

Si la source de données utilisée n’a pas besoin de la passerelle de données locale (Azure SQL Database, Azure Synapse Analytics (anciennement SQL Data Warehouse) ou Redshift), vous devez fournir les informations d’identification avant que le service Power BI affiche le rapport publié. Suivez ces instructions pour fournir les informations d’identification :

  1. Connectez-vous à Power BI.

  2. Dans le service Power BI, sélectionnez l’icône d’engrenage Paramètres , puis choisissez l’élément de menu Paramètres.

    Paramètres, service Power BI

  3. Dans la page Paramètres du service Power BI, sélectionnez l’onglet Jeux de données, choisissez le jeu de données qui utilise DirectQuery, puis sélectionnez Modifier les informations d’identification.

  4. Ajoutez les informations d’identification. Si vous ne fournissez pas ces informations, une erreur se produit lorsque vous ouvrez un rapport publié ou explorez un jeu de données créé avec une connexion DirectQuery.

Pour créer une connexion de données à des sources de données utilisant DirectQuery autres que Azure SQL Database, Azure Synapse Analytics (anciennement SQL Data Warehouse) , Redshift ou Snowflake Data Warehouse, installez une passerelle de données locale et inscrivez la source de données. Pour plus d’informations, consultez Qu’est-ce qu’une passerelle de données locale ?

Étapes suivantes

Pour plus d’informations sur DirectQuery, consultez les ressources suivantes :