Power BI: Comment configurer l’actualisation incrémentielle (Incremental Refresh)

Publié le 30 juin 2020
par Kim Leblanc BAA
IncRefresh_PBIOptions

Depuis février 2020, l’option d’actualisation incrémentielle (Incremental Refresh) est disponible pour tous (elle était auparavant disponible seulement pour les utilisateurs de la version Premium). L’actualisation incrémentielle, permet lors de l’actualisation, non pas d’actualiser l’ensemble de nos données historiques, mais seulement les nouvelles données, par exemple des 5 derniers jours. Il est possible également de détecter les éléments nouveaux ou modifiés depuis la dernière actualisation. Ceci permet entre autres de se connecter à une large volumétrie de données et permet une actualisation plus rapide et efficace. On diminuera également la consommation de nos ressources systèmes étant donné qu’il y a moins de données à actualiser. Il faudra configurer l’actualisation incrémentielle dans Power BI Desktop, mais ce sera sur le Service de Power BI que le tout pourra être appliqué. Cet article vous explique comment procéder.

 

Préparation des paramètres dans Power Query

Il faut tout d’abord préparer 2 paramètres dans Power Query. Ces 2 paramètres doivent être nommés exactement comme suit: RangeStart et RangeEnd. Attention, c’est sensible à la casse.

 

Il faudra ensuite utiliser ces 2 paramètres pour apposer un filtre personnalisé sur notre colonne de dates de nos données.

 

Veuillez noter ici que le signe égal doit être appliqué seulement à un des 2 paramètres pour éviter qu’une ligne de données puissent satisfaire aux deux conditions et se trouve doublée dans le modèle. Donc ne pas utiliser >= RangeStart et <= RangeEnd. Ensuite, on pourra Fermer et Appliquer le tout.

 

Vous devez analyser de grandes quantités de données et les présenter dans des rapports et tableaux de bord, avec des indicateurs de performance pertinents ? Développez vos compétences avec nos formations en Power BI.

Formations Power BI disponibles en anglais

Activation de l’option “Actualisation incrémentielle” dans Power BI

Une fois dans l’interface principale de Power BI Desktop, il faut cliquer sur la table en question avec le bouton droit de votre souris, dans le panneau des champs, puis sélectionner Actualisation incrémentielle.

 

Il faudra alors spécifier certains critères (voir l’illustration des 5 critères sur l’image qui suit):

  1. Choisir la table à laquelle l’actualisation incrémentielle sera affectée, dans notre cas, c’est la table Ventes_Internet. Puis activer l’actualisation incrémentielle en cliquant sur le bouton à bascule. Advenant que les 2 paramètres mentionnés plus haut ne sont pas configurés comme il se doit, il vous sera impossible d’activer cette option.
  2. Indiquer la période que vous souhaitez comme historique de départ. 

  3. Indiquer la période que vous souhaitez pour l’actualisation (l’incrémental). 

  4. Vous pouvez également aller plus loin en utilisant l’option Détecter les changements de données. Pour ce faire, il faudra que vos données sources contiennent une colonne de date/heure qui identifie les données qui ont été modifiées. On retrouvera ce type de colonne pour des besoins d’audit par exemple. Dans notre exemple, nous avons utilisé la colonne LastUpdateDate. Le comportement sera le suivant: les 5 derniers jours pour lesquels la colonne LastUpdateDate aura changé seront actualisés. Cette colonne doit être différente de la colonne filtrée par nos 2 paramètres.

  5. Cocher l’option Actualiser uniquement les éléments complets jours vous permet de spécifier si vous désirez seulement actualiser des journées complètes, c’est à dire que si votre actualisation est prévue à 6 am, est-ce que vous désirez actualiser les 6 heures de la journée actuelle ou bien si vous voulez omettre ces 6 heures et terminer la mise à jour au jour précédent.

Bien entendu, la première mise à jour sur le service, risque de prendre un certain laps de temps étant donné que les données historiques seront chargées. Par contre, par la suite les actualisations prendront une fraction du temps. Voici en gros ce qui ce passe lors de l’actualisation: si par exemple l’actualisation se fait à tous les jours et que les critères d’actualisation incrémentielle sont ceux indiqués dans l’image ci-dessus, il y aura:

  • l’ajout des données de la dernière journée;
  • l’actualisation des 5 derniers jours;
  • la suppression des données de l’année calendrier qui précède les 5 dernières années.

Il ne vous restera plus qu’à planifier votre actualisation dans le Service (actualisation planifiée) comme à l’habitude.

 

Limitations

  • La source de données doit supporter le Query Folding, c’est en général le cas pour les sources qui proviennent d’une bases de données relationnelles.
  • Cette option n’est pas disponible pour les modèles en connexion active.
  • Une fois l’actualisation incrémentielle programmée sur le service, il ne sera plus possible de télécharger le fichier PBIX à partir du Service pour l’ouvrir dans Power BI Desktop.

 


Fichier d’accompagnement

Pour télécharger le fichier utilisé dans ce tutoriel, devenez membre VIP du CFO masqué.

 

Power BI: De zéro à héro

Voici nos formations Power BI disponibles en français : Voici nos formations Power BI disponibles en anglais : Découvrez également notre parcours de 10 formations sur Power BI. Ce parcours vous donne le droit de vous inscrire à un coaching en ligne gratuit de 3 heures pour vous préparer à passer l'examen d'accréditation de Microsoft en Power BI.

 

CFO-Masque_Formations-en-ligne_FBLa mission du CFO masqué est de développer les compétences techniques des analystes et des contrôleurs de gestion en informatique décisionnelle avec Excel et Power BI et favoriser l’atteinte de leur plein potentiel, en stimulant leur autonomie, leur curiosité, leur raisonnement logique, leur esprit critique et leur créativité.

 

15 réflexions sur “Power BI: Comment configurer l’actualisation incrémentielle (Incremental Refresh)”

  1. Bonjour,
    L’article est clair et agréable à lire.
    3 points svp:
    1/ au niveau des paramètres RangeStart et RangeEnd, quelle “valeur actuelle” faut il renseigner ? cette valeur est elle importante?
    2/ Un base sql qui a 10 millions de lignes justifie t elle l’utilisation de cette méthode d’actualisation incrémentielle?
    3/ Pour une base comptable par exemple, si:
    a: je demande une actualisation avec un stockage en nombre de jours afin de stocker les
    écritures du 1er janvier 2020 à ce jour (1er septembre 2020)
    b: je demande d’actualiser les 6 derniers jours
    c: pour une raison quelconque, on modifie ou rajoute une écriture du mois de juin par exemple
    (ce qui n’est pas normal dans la pratique)
    Qu’en sera t il de cette modification ou rajout qui concernerait une période “hors 6 derniers jours
    d’actualisation”
    Merci bien.

  2. Bonjour,

    Merci pour votre commentaire!

    1 – La valeur actuelle est la valeur par défaut du paramètre, sa valeur est plus ou moins importante dans notre cas puisqu’elle est remplacée par les informations saisies dans la section actualisation incrémentielle une fois sur le service. Par contre, pour être en mesure de filtrer la colonne de date dans Power Query et continuer d’avoir des lignes de données, vaut mieux insérer des dates qui feront du sens.

    2 – Tout est une question de performance et à quelle fréquence on veut rafraîchir les données. Si tout fonctionne bien sans l’actualisation incrémentielle alors il n’est peut-être pas nécessaire de l’utiliser, mais si vous trouvez que votre modèle est long à actualiser alors c’est une option à envisager.

    3 – D’après ma compréhension, la donnée de juin ne serait pas modifiée. Pour se faire, il faudrait que la période d’actualisation inclue juin et vous pourriez appliquer l’option de détection de changement si vous avez un champs du type LastUpdateDate. Voir le point 4 dans l’article.

    Kim

    1. Bonjour Kim,
      Merci pour les réponses simples et précises !!!!
      Pour le point 3:
      J’ai lu l’article sur le site microsoft aussi (https://docs.microsoft.com/fr-fr/power-bi/admin/service-premium-incremental-refresh) mais je n’arrive pas à comprendre :
      1/ l’option de détection de changement
      2/ le champs du type LastUpdateDat
      Si vous avez le temps de m’éclairer s’il vous plait ou de m’indiquer un lien avec un exemple, cela m’aiderait.
      Je vous remercie Kim,
      Pierre.

  3. Bonjour,

    L’option de détection de changement permet de regarder ligne par ligne pour la période donnée si un champs date/heure a été modifié. S’il a été modifié (la date/heure n’est plus la même) depuis la dernière mise à jour alors la ligne sera mise à jour sinon elle ne sera pas actualisée.

    Ce champs doit être différent de celui filtré par nos deux paramètres RangeStart, RangeEnd. Ce type de champs n’est pas disponible dans toutes les sources de données mais s’il est présent, ça implique que chaque fois qu’un élément est modifié par l’usager/système alors la date est mise à jour.

    Dans votre exemple, si on utilisait la détection de changement pour les 6 derniers mois en utilisant le champs date LastUpdateDate, que nous sommes le 1er sept. et que la dernière actualisation a eu lieu le 20 août. Si on exécute l’actualisation le 1er sept, toutes les lignes inscrites entre le 20 août et le 31 août seront ajoutées et la ligne modifiée en juin sera également actualisé puisque la date du LastUpdateDate aura été modifiée.

    Kim

  4. Bonjour Kim,
    Très clair je comprends je crois.
    Ce champ date “LastUpdateDate” est géré par la système (s’il existe dans la source) et est “surveillé” quand on coche la case “option de détection de changement”, afin que les lignes relatives au champs “LastUpdateDate” soient actualisées en cas de modification dudit champ.
    Merci encore!!!!
    Pierre.

  5. Vous avez bien compris. Ce champs existe oui, mais n’est pas automatiquement ajouté à toutes les tables. Il faudrait donc vérifier la structure de la table utilisée et il ne sera pas forcément nommé LastUpdateDate.

  6. Rebonjour Kim,
    Désolé de demander trop de précisions vraiment ! si je reprends la logique suivante:
    “L’option de détection de changement permet de regarder ligne par ligne pour la période donnée si un champs date/heure a été modifié. S’il a été modifié (la date/heure n’est plus la même) depuis la dernière mise à jour alors la ligne sera mise à jour sinon elle ne sera pas actualisée.”

    Que se passerait il en cas de suppression de ligne (et non de rajout ou de modification)?

  7. Bonjour Pierre,

    Si la ligne est supprimée alors il n’y a pas moyen de comparer la date LastUpdateDate alors la ligne resterait présente dans votre modèle même si elle a été supprimé de la source.

    Pour remédier à la situation, il a 2 moyens soit:
    1 – modifier votre paramètre de l’actualisation incrémentielle temporairement pour aller chercher une plus longue période à actualiser
    ou préférablement:
    2 – il vous faudrait dans vos données sources une colonne du type IsDeleted ou IsInactive qui permettrait au lieu de supprimer la ligne dans les données sources, de mettre un 1 par exemple dans IsDeleted. Ensuite dans votre requête Power Query vous pourriez filtrer vos données à IsDeleted = 0. Dans ce cas, le LastUpdateDate serait modifié au moment où la colonne IsDeleted passerait de 0 à 1 et donc la ligne serait actualisée mais filtré par la suite dans Power Query, elle n’apparaîtrait donc plus dans vos visualisations.

    Kim

  8. Bonjour,
    Très bon article clair et bien expliqué…
    Par contre me demande si cela fonctionne avec des requêtes de ce type (toutes les tables de mon rapport sont créées comme ça) :
    let
    Source = OleDb.DataSource(“provider=OraOLEDB.Oracle;data source=”&DataSource&”;FetchSize=30000″,
    [Query=”
    SELECT
    *
    FROM
    XXXX.YYYY
    WHERE
    CHMPDATE BETWEEN SYSDATE – “&NB_Jours&” AND SYSDATE
    AND
    CHMPCODESITE=”&CODE_SITE&”
    “]),
    #”Type modifié 1” = Table.TransformColumnTypes(Source,{{“CHMPDATE”, type date}}),
    Etc…

    1. Bonjour,
      Comme c’est une connexion à une base de données, j’imagine que vous pouvez modifier cette partie:
      SYSDATE – “&NB_Jours&” AND SYSDATE pour faire référence à vos paramètres RangeStart et RangeEnd. Mais je ne l’ai jamais testé directement dans la Query SQL ni avec une base de données Oracle.
      Vous pouvez omettre le WHERE SYSDATE – “&NB_Jours&” AND SYSDATE dans la requête SQL mais plutôt profiter du “Query Folding” dans Power Query.
      Kim

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut