[{"data":1,"prerenderedAt":1722},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-contributing-conventions-getting-started":242,"-fr-contributing-conventions-getting-started-surround":1717},[4,17,42,206,233],{"title":5,"redirect":6,"path":7,"stem":8,"children":9,"page":16},"Introduction","\u002Ffr\u002Fintroduction\u002Fintroduction","\u002Ffr\u002Fintroduction","fr\u002F1.introduction",[10,12],{"title":5,"path":6,"stem":11},"fr\u002F1.introduction\u002F1.introduction",{"title":13,"path":14,"stem":15},"Prérequis","\u002Ffr\u002Fintroduction\u002Fprerequisites","fr\u002F1.introduction\u002F2.prerequisites",false,{"title":18,"redirect":19,"path":20,"stem":21,"children":22,"page":16},"Installation","\u002Ffr\u002Finstallation\u002Fsetup","\u002Ffr\u002Finstallation","fr\u002F2.installation",[23,26,30,34,38],{"title":24,"path":19,"stem":25},"Configuration de la machine","fr\u002F2.installation\u002F1.setup",{"title":27,"path":28,"stem":29},"L'histoire de deux repos","\u002Ffr\u002Finstallation\u002Ftale-repos","fr\u002F2.installation\u002F2.tale-repos",{"title":31,"path":32,"stem":33},"Connexion à la base de données","\u002Ffr\u002Finstallation\u002Fdbt-profile","fr\u002F2.installation\u002F3.dbt-profile",{"title":35,"path":36,"stem":37},"Test de fumée","\u002Ffr\u002Finstallation\u002Fsmoke-testing","fr\u002F2.installation\u002F4.smoke-testing",{"title":39,"path":40,"stem":41},"Et maintenant?","\u002Ffr\u002Finstallation\u002Fwhat-now","fr\u002F2.installation\u002F5.what-now",{"title":43,"path":44,"stem":45,"children":46,"page":16},"Guide utilisateur","\u002Ffr\u002Fusing","fr\u002F3.using",[47,50,54,88,188,202],{"title":5,"path":48,"stem":49},"\u002Ffr\u002Fusing\u002Fintroduction","fr\u002F3.using\u002F1.introduction",{"title":51,"path":52,"stem":53},"Exécuter l'ETL","\u002Ffr\u002Fusing\u002Frunning","fr\u002F3.using\u002F2.running",{"title":55,"path":56,"stem":57,"children":58,"page":16},"Configuration","\u002Ffr\u002Fusing\u002Fconfiguration","fr\u002F3.using\u002F3.configuration",[59,72,76,80,84],{"title":60,"path":61,"stem":62,"children":63,"page":16},"Architecture","\u002Ffr\u002Fusing\u002Fconfiguration\u002Farchitecture","fr\u002F3.using\u002F3.configuration\u002F1.architecture",[64,68],{"title":65,"path":66,"stem":67},"Vue d'ensemble","\u002Ffr\u002Fusing\u002Fconfiguration\u002Farchitecture\u002Foverview","fr\u002F3.using\u002F3.configuration\u002F1.architecture\u002F1.overview",{"title":69,"path":70,"stem":71},"Marts et couche reporting","\u002Ffr\u002Fusing\u002Fconfiguration\u002Farchitecture\u002Fmarts-reporting","fr\u002F3.using\u002F3.configuration\u002F1.architecture\u002F2.marts-reporting",{"title":73,"path":74,"stem":75},"Lier les bases de données","\u002Ffr\u002Fusing\u002Fconfiguration\u002Fdatabases","fr\u002F3.using\u002F3.configuration\u002F2.databases",{"title":77,"path":78,"stem":79},"Adapters et seeds","\u002Ffr\u002Fusing\u002Fconfiguration\u002Fadapts-seeds","fr\u002F3.using\u002F3.configuration\u002F3.adapts-seeds",{"title":81,"path":82,"stem":83},"Activer une ressource","\u002Ffr\u002Fusing\u002Fconfiguration\u002Fenabling","fr\u002F3.using\u002F3.configuration\u002F4.enabling",{"title":85,"path":86,"stem":87},"Overriding","\u002Ffr\u002Fusing\u002Fconfiguration\u002Foverriding","fr\u002F3.using\u002F3.configuration\u002F5.overriding",{"title":89,"redirect":90,"path":91,"stem":92,"children":93,"page":16},"Tableaux de bord","\u002Ffr\u002Fusing\u002F","\u002Ffr\u002Fusing\u002Fdashboards","fr\u002F3.using\u002F4.dashboards",[94,97,126,167,176,184],{"title":5,"path":95,"stem":96},"\u002Ffr\u002Fusing\u002Fdashboards\u002Fintroduction","fr\u002F3.using\u002F4.dashboards\u002F1.introduction",{"title":98,"redirect":99,"path":99,"stem":100,"children":101,"page":16},"Ressources humaines","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr","fr\u002F3.using\u002F4.dashboards\u002F2. hr",[102,106,110,114,118,122],{"title":103,"path":104,"stem":105},"Congés des employés","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr\u002Femp_conge","fr\u002F3.using\u002F4.dashboards\u002F2. hr\u002F1.emp_conge",{"title":107,"path":108,"stem":109},"Employés actifs","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr\u002Fempl_actif","fr\u002F3.using\u002F4.dashboards\u002F2. hr\u002F2.empl_actif",{"title":111,"path":112,"stem":113},"Retraite","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr\u002Fretirement","fr\u002F3.using\u002F4.dashboards\u002F2. hr\u002F3.retirement",{"title":115,"path":116,"stem":117},"Efficacité","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr\u002Fefficacite","fr\u002F3.using\u002F4.dashboards\u002F2. hr\u002F4.efficacite",{"title":119,"path":120,"stem":121},"Absences des employé(e)s","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr\u002Femp_abs","fr\u002F3.using\u002F4.dashboards\u002F2. hr\u002F5.emp_abs",{"title":123,"path":124,"stem":125},"Resignation","\u002Ffr\u002Fusing\u002Fdashboards\u002Fhr\u002Fresignation","fr\u002F3.using\u002F4.dashboards\u002F2. hr\u002F6.resignation",{"title":127,"redirect":128,"path":128,"stem":129,"children":130,"page":16},"Services éducatifs","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv",[131,135,139,143,147,151,155,159,163],{"title":132,"path":133,"stem":134},"Résultats aux épreuves","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fres_epreuves","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F1.res_epreuves",{"title":136,"path":137,"stem":138},"Suivi des résultats des élèves","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fsuivi_resultats","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F2.suivi_resultats",{"title":140,"path":141,"stem":142},"Effectif des élèves","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Feffectif_css","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F3.effectif_css",{"title":144,"path":145,"stem":146},"Absentéisme des élèves","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fchronic_absenteeism","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F4.chronic_absenteeism",{"title":148,"path":149,"stem":150},"Résultats scolaires","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fres_scolaires","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F5.res_scolaires",{"title":152,"path":153,"stem":154},"Modélisation prédictive - agrégée","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fpredictive-aggregated","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F6.predictive-aggregated",{"title":156,"path":157,"stem":158},"PEVR","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fpevr","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F7.pevr",{"title":160,"path":161,"stem":162},"Absentéisme","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fabsenteeism","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F8.absenteeism",{"title":164,"path":165,"stem":166},"Diplôme","\u002Ffr\u002Fusing\u002Fdashboards\u002Feduc-serv\u002Fdiplome","fr\u002F3.using\u002F4.dashboards\u002F3.educ-serv\u002F9.diplome",{"title":168,"redirect":169,"path":169,"stem":170,"children":171,"page":16},"Organisation scolaire","\u002Ffr\u002Fusing\u002Fdashboards\u002Fschool-org","fr\u002F3.using\u002F4.dashboards\u002F4.school-org",[172],{"title":173,"path":174,"stem":175},"Anomalies","\u002Ffr\u002Fusing\u002Fdashboards\u002Fschool-org\u002Fanomalies","fr\u002F3.using\u002F4.dashboards\u002F4.school-org\u002F1.anomalies",{"title":177,"path":178,"stem":179,"children":180,"page":16},"DirectionGenerale","\u002Ffr\u002Fusing\u002Fdashboards\u002Fdirection_generale","fr\u002F3.using\u002F4.dashboards\u002F5.direction_generale",[181],{"title":156,"path":182,"stem":183},"\u002Ffr\u002Fusing\u002Fdashboards\u002Fdirection_generale\u002Fpevr","fr\u002F3.using\u002F4.dashboards\u002F5.direction_generale\u002F1.pevr",{"title":185,"path":186,"stem":187},"Row Level Security","\u002Ffr\u002Fusing\u002Fdashboards\u002Frls","fr\u002F3.using\u002F4.dashboards\u002F5.rls",{"title":189,"redirect":90,"path":190,"stem":191,"children":192,"page":16},"Marts de données","\u002Ffr\u002Fusing\u002Fmarts","fr\u002F3.using\u002F6.marts",[193,196,199],{"title":5,"path":194,"stem":195},"\u002Ffr\u002Fusing\u002Fmarts\u002Fmarts","fr\u002F3.using\u002F6.marts\u002F1.marts",{"title":127,"path":197,"stem":198},"\u002Ffr\u002Fusing\u002Fmarts\u002Feducational-service","fr\u002F3.using\u002F6.marts\u002F2.educational-service",{"title":98,"path":200,"stem":201},"\u002Ffr\u002Fusing\u002Fmarts\u002Fhuman-resources","fr\u002F3.using\u002F6.marts\u002F3.human-resources",{"title":203,"path":204,"stem":205},"Checklist de production","\u002Ffr\u002Fusing\u002Fproduction","fr\u002F3.using\u002F7.production",{"title":207,"redirect":208,"path":209,"stem":210,"children":211,"page":16},"Guide développeur","\u002Ffr\u002Fcontributing\u002Fgetting-started","\u002Ffr\u002Fcontributing","fr\u002F4.contributing",[212,215,224],{"title":213,"path":208,"stem":214},"Premiers pas","fr\u002F4.contributing\u002F1.getting-started",{"title":216,"redirect":217,"path":218,"stem":219,"children":220,"page":16},"Conventions","\u002Ffr\u002Fcontributing\u002Fconventions\u002Fgetting-started","\u002Ffr\u002Fcontributing\u002Fconventions","fr\u002F4.contributing\u002F2.conventions",[221],{"title":222,"path":217,"stem":223},"Getting Started","fr\u002F4.contributing\u002F2.conventions\u002F1.getting-started",{"title":225,"path":226,"stem":227,"children":228,"page":16},"Référence docs","\u002Ffr\u002Fcontributing\u002Fdocs","fr\u002F4.contributing\u002F99.docs",[229],{"title":230,"path":231,"stem":232},"Composants","\u002Ffr\u002Fcontributing\u002Fdocs\u002Fcomponents","fr\u002F4.contributing\u002F99.docs\u002F1.components",{"title":234,"redirect":6,"path":235,"stem":236,"children":237,"page":16},"Migrations","\u002Ffr\u002Fmigrations","fr\u002F5.migrations",[238],{"title":239,"path":240,"stem":241},"V0.17 -> V0.18","\u002Ffr\u002Fmigrations\u002Fv0.17_to_v0.18","fr\u002F5.migrations\u002F1.v0.17_to_v0.18",{"id":243,"title":222,"body":244,"description":290,"extension":1712,"links":1713,"meta":1714,"navigation":674,"path":217,"seo":1715,"stem":223,"__hash__":1716},"docs_fr\u002Ffr\u002F4.contributing\u002F2.conventions\u002F1.getting-started.md",{"type":245,"value":246,"toc":1698},"minimark",[247,252,257,261,277,284,305,315,319,327,333,398,402,421,429,435,443,446,489,496,508,540,545,550,558,563,583,590,617,624,656,746,761,764,771,779,795,810,818,827,833,847,854,862,878,931,940,950,962,968,977,1004,1016,1103,1108,1117,1130,1134,1154,1160,1173,1201,1273,1277,1285,1289,1303,1444,1449,1453,1466,1469,1481,1487,1570,1584,1606,1632,1641,1647,1653,1659,1663,1668,1695],[248,249,251],"h2",{"id":250},"conventions-et-lignes-directrices-de-développement","Conventions et lignes directrices de développement",[253,254,256],"h3",{"id":255},"commits","Commits",[258,259,260],"h4",{"id":260},"sqlfmt",[262,263,264],"blockquote",{},[265,266,267,268,271,272,276],"p",{},"Nous utilisons ",[269,270,260],"code",{}," pour formater le SQL. Qu'on l'aime ou non, tout le monde doit l'utiliser afin que le code ait la même apparence et que la collaboration soit plus simple. Certaines règles de ",[273,274,275],"em",{},"linting"," peuvent être discutables, mais elles sont au moins cohérentes et explicites.",[265,278,279,280,283],{},"Avant de faire un ",[273,281,282],{},"commit",", assurez-vous d'exécuter la commande suivante:",[285,286,291],"pre",{"className":287,"code":288,"language":289,"meta":290,"style":290},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sqlfmt .\n","bash","",[269,292,293],{"__ignoreMap":290},[294,295,298,301],"span",{"class":296,"line":297},"line",1,[294,299,260],{"class":300},"sBMFI",[294,302,304],{"class":303},"sfazB"," .\n",[265,306,307,308,311,312,314],{},"... Vous voudrez peut-être relancer un ",[269,309,310],{},"dbt build"," après avoir tout formaté. ",[269,313,260],{}," ne devrait rien casser, mais il vaut mieux être prudent.",[258,316,318],{"id":317},"message-de-commit","Message de commit",[262,320,321],{},[265,322,323,324,326],{},"Les messages de ",[273,325,282],{}," suivent la convention Commitizen.",[265,328,329,330,332],{},"Assurez-vous que tous vos messages de ",[273,331,282],{}," commencent par un type. Les types suivants sont disponibles:",[334,335,336,343,349,355,361,367,373,379,389],"ul",{},[337,338,339,342],"li",{},[269,340,341],{},"feat",": nouvelle fonctionnalité",[337,344,345,348],{},[269,346,347],{},"fix",": correction de bogue",[337,350,351,354],{},[269,352,353],{},"docs",": changements de documentation seulement",[337,356,357,360],{},[269,358,359],{},"style",": changements qui ne modifient pas le sens du code, comme espaces, formatage ou points-virgules manquants",[337,362,363,366],{},[269,364,365],{},"refactor",": changement de code qui ne corrige pas de bogue et n'ajoute pas de fonctionnalité",[337,368,369,372],{},[269,370,371],{},"perf",": changement de code qui améliore la performance",[337,374,375,378],{},[269,376,377],{},"test",": ajout de tests manquants ou correction de tests existants",[337,380,381,384,385,388],{},[269,382,383],{},"chore",": changements au processus de ",[273,386,387],{},"build",", aux outils auxiliaires ou aux librairies, comme la génération de documentation",[337,390,391,394,395,397],{},[269,392,393],{},"revert",": annule un ",[273,396,282],{}," précédent",[253,399,401],{"id":400},"structure-des-dossiers-et-conventions","Structure des dossiers et conventions",[334,403,404,411],{},[337,405,406,407,410],{},"Tout le code SQL \u002F Python se trouve dans le dossier ",[269,408,409],{},"models",".",[337,412,413,414,417,418,410],{},"Tous les ",[273,415,416],{},"dashboards"," et rapports se trouvent dans le dossier ",[269,419,420],{},"reporting",[265,422,423],{},[424,425,426,427],"strong",{},"À propos du dossier ",[269,428,409],{},[265,430,431,432,434],{},"Le dossier ",[269,433,409],{}," est organisé comme suit:",[285,436,441],{"className":437,"code":439,"language":440},[438],"language-text",".\n└── models\u002F\n    ├── interfaces\u002F\n    │   └── database_spame\u002F\n    │       └── mart_foobar\n    ├── marts\u002F\n    │   └── mart_foobar\n    └── dashboards\u002F\n        ├── spam\u002F\n        │   ├── features\u002F\n        │   │   └── fact_absences.sql\n        │   └── pbi_tables\u002F\n        │      └── fact_absences.sql\n        └── egg\u002F\n            ...\n","text",[269,442,439],{"__ignoreMap":290},[265,444,445],{},"Où:",[334,447,448,468,474],{},[337,449,450,452,453,456,457,460,461,467],{},[269,451,416],{},": chaque sous-dossier de ",[269,454,455],{},"models\u002Fdashboards"," doit porter le nom du ",[273,458,459],{},"dashboard"," correspondant (",[424,462,463,464,466],{},"un ",[273,465,459],{},", un dossier contenant son code SQL",").",[337,469,470,473],{},[269,471,472],{},"interfaces",": contient les mappings vers les tables d'interface. Chaque table d'interface peut être remplacée pour ajouter une logique de connexion propre à la base sous-jacente.",[337,475,476,479,480,482,483,486,487,410],{},[269,477,478],{},"marts",": contient les ",[273,481,478],{},". Un ",[273,484,485],{},"mart"," est une collection de tables réutilisées ou partagées entre plusieurs ",[273,488,416],{},[253,490,492,493],{"id":491},"test-dintégration-et-nightly-build","Test d'intégration et ",[273,494,495],{},"nightly build",[262,497,498],{},[265,499,500,501,503,504,507],{},"Le ",[273,502,495],{}," est une vérification automatisée du ",[273,505,506],{},"repo"," exécutée à la fin de chaque journée.",[265,509,510,511,514,515,518,519,522,523,526,527,529,530,532,533,535,536,539],{},"Lorsque vous introduisez une nouvelle ",[273,512,513],{},"seed"," ",[424,516,517],{},"NON OPTIONNELLE"," dans ",[269,520,521],{},"core.dashboards_store",", vous devez l'ajouter dans le dossier ",[269,524,525],{},"core.dashboards_store\u002Fnightly\u002Fdbt\u002Fseeds",", afin que le prochain ",[273,528,495],{}," ne tombe pas en erreur à cause d'une ",[273,531,513],{}," manquante. La ",[273,534,513],{}," doit être alimentée avec des données de CSSVDC, puisque CSSVDC sert de base cible pour les tests d'intégration.\nVous pouvez aussi exécuter la suite d'intégration localement. Consultez ",[269,537,538],{},"core.dashboards_store\u002Fnightly\u002FREADME.md"," pour plus de détails.",[253,541,542],{"id":478},[273,543,544],{},"Marts",[258,546,548],{"id":547},"educ_serv",[269,549,547],{},[262,551,552],{},[265,553,554,555,557],{},"Ce ",[273,556,485],{}," regroupe toutes les données liées aux services éducatifs.",[559,560,562],"h5",{"id":561},"populations","Populations",[265,564,565,566,568,569,571,572,410],{},"Les ",[269,567,562],{}," sont des ensembles d'élèves utilisés comme filtres par plusieurs ",[273,570,416],{},". ",[424,573,574,575,578,579,582],{},"Vous pouvez consulter le dossier ",[269,576,577],{},"analyses\u002Fmarts\u002Feduc_serv\u002Fstaging\u002Fpopulations"," et utiliser le ",[273,580,581],{},"template"," de population pour construire ou définir vos populations",[265,584,585,586,589],{},"Les populations suivantes sont obligatoires, voir ",[269,587,588],{},"adapters",", et doivent être définies:",[334,591,592,597,602,607,612],{},[337,593,594],{},[269,595,596],{},"stg_ele_prescolaire",[337,598,599],{},[269,600,601],{},"stg_ele_primaire_reg",[337,603,604],{},[269,605,606],{},"stg_ele_primaire_adapt",[337,608,609],{},[269,610,611],{},"stg_ele_secondaire_reg",[337,613,614],{},[269,615,616],{},"stg_ele_secondaire_adapt",[265,618,619,620,623],{},"L'intégrateur peut ajouter de nouvelles populations en remplaçant le modèle ",[269,621,622],{},"custom_fgj_populations.sql",". Pour cela:",[625,626,627,635,642],"ol",{},[337,628,629,630,518,632,410],{},"Créez un nouveau fichier nommé ",[269,631,622],{},[269,633,634],{},"cssXX.dashboards_store\u002Fmodels\u002Fmarts\u002Feduc_serv\u002Fstaging\u002Fpopulations",[337,636,637,638,641],{},"Votre modèle ",[269,639,640],{},"custom_fgj_populations"," doit être implémenté comme l'union de vos populations personnalisées.",[337,643,644,645,648,649,518,652,655],{},"Désactivez le ",[273,646,647],{},"placeholder"," du ",[273,650,651],{},"core",[269,653,654],{},"cssXX.dashboards_store",":",[285,657,661],{"className":658,"code":659,"language":660,"meta":290,"style":290},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# cssXX.dashboards_store\u002Fdbt_project.yml\n\nmodels:\n  core_dashboards_store:\n    marts:\n      educ_serv:\n        staging:\n          populations:\n            custom_fgj_populations:\n              +enabled: false\n","yaml",[269,662,663,669,676,686,694,702,710,718,726,734],{"__ignoreMap":290},[294,664,665],{"class":296,"line":297},[294,666,668],{"class":667},"sHwdD","# cssXX.dashboards_store\u002Fdbt_project.yml\n",[294,670,672],{"class":296,"line":671},2,[294,673,675],{"emptyLinePlaceholder":674},true,"\n",[294,677,679,682],{"class":296,"line":678},3,[294,680,409],{"class":681},"swJcz",[294,683,685],{"class":684},"sMK4o",":\n",[294,687,689,692],{"class":296,"line":688},4,[294,690,691],{"class":681},"  core_dashboards_store",[294,693,685],{"class":684},[294,695,697,700],{"class":296,"line":696},5,[294,698,699],{"class":681},"    marts",[294,701,685],{"class":684},[294,703,705,708],{"class":296,"line":704},6,[294,706,707],{"class":681},"      educ_serv",[294,709,685],{"class":684},[294,711,713,716],{"class":296,"line":712},7,[294,714,715],{"class":681},"        staging",[294,717,685],{"class":684},[294,719,721,724],{"class":296,"line":720},8,[294,722,723],{"class":681},"          populations",[294,725,685],{"class":684},[294,727,729,732],{"class":296,"line":728},9,[294,730,731],{"class":681},"            custom_fgj_populations",[294,733,685],{"class":684},[294,735,737,740,742],{"class":296,"line":736},10,[294,738,739],{"class":681},"              +enabled",[294,741,655],{"class":684},[294,743,745],{"class":744},"sfNiH"," false\n",[265,747,748],{},[424,749,750,751,753,754,518,757,760],{},"Développeurs: lorsque vous créez un nouveau ",[273,752,459],{}," qui utilise le mécanisme de population, vous devez inscrire son ",[273,755,756],{},"tag",[269,758,759],{},"marts\u002Feduc_serv\u002Fadapters.yml"," afin de déclencher le calcul des populations.",[253,762,98],{"id":763},"ressources-humaines",[262,765,766],{},[265,767,554,768,770],{},[273,769,485],{}," regroupe toutes les données liées au service des ressources humaines.",[559,772,774,775,648,777],{"id":773},"alimenter-la-seed-du-mart","Alimenter la ",[273,776,513],{},[273,778,485],{},[262,780,781],{},[265,782,554,783,785,786,789,790,514,792,410],{},[273,784,459],{}," nécessite la spécification des ",[273,787,788],{},"seeds"," dans le ",[273,791,485],{},[269,793,794],{},"human_resources",[265,796,797,798,800,801,804,805,514,807,410],{},"La ",[273,799,513],{}," doit être alimentée dans ",[269,802,803],{},"cssXX.dashboards_store\u002Fseeds\u002Fmarts\u002Fhuman_resources\u002F"," selon la définition du ",[273,806,485],{},[269,808,809],{},"core.dashboards_store\u002Fseeds\u002Fmarts\u002Fhuman_resources\u002Fschema.yml",[265,811,812,813,514,815,817],{},"Consultez la documentation du ",[273,814,485],{},[269,816,809],{}," pour connaître l'implémentation concrète.",[265,819,820,821,823,824,410],{},"N'oubliez pas de rafraîchir vos ",[273,822,788],{}," avec la commande ",[269,825,826],{},"dbt seed --select tag:human_resources --full-refresh",[253,828,830,831],{"id":829},"exposer-la-fraîcheur-des-données-dans-le-dashboard","Exposer la fraîcheur des données dans le ",[273,832,459],{},[262,834,835],{},[265,836,500,837,839,840,842,843,846],{},[269,838,651],{}," fournit un mécanisme pour exposer la fraîcheur des données dans le ",[273,841,459],{},". Ce mécanisme s'appelle ",[269,844,845],{},"the stamper"," et peut être activé et utilisé avec des macros.",[258,848,850,851],{"id":849},"activer-le-stamper","Activer le ",[269,852,853],{},"stamper",[262,855,856],{},[265,857,858,859,410],{},"Cette opération doit être faite UNE SEULE FOIS dans ",[269,860,861],{},"cssXX.dashboards_store\u002Fdbt_project.yml",[265,863,500,864,866,867,870,871,874,875,655],{},[273,865,853],{}," est une table qui collecte des métadonnées sur vos exécutions d'",[273,868,869],{},"ETL",". Pour activer la collecte, ajoutez d'abord les deux ",[273,872,873],{},"hooks"," suivants dans ",[269,876,877],{},"dbt_project.yml",[285,879,881],{"className":658,"code":880,"language":660,"meta":290,"style":290},"# cssXX.dashboards_store\u002Fdbt_project.yml\n# Hooks\non-run-start:\n  - \"{{ core_dashboards_store.init_metadata_table() }}\"\non-run-end:\n  - \"{{ core_dashboards_store.purge_metadata_table() }}\"\n",[269,882,883,887,892,899,913,920],{"__ignoreMap":290},[294,884,885],{"class":296,"line":297},[294,886,668],{"class":667},[294,888,889],{"class":296,"line":671},[294,890,891],{"class":667},"# Hooks\n",[294,893,894,897],{"class":296,"line":678},[294,895,896],{"class":681},"on-run-start",[294,898,685],{"class":684},[294,900,901,904,907,910],{"class":296,"line":688},[294,902,903],{"class":684},"  -",[294,905,906],{"class":684}," \"",[294,908,909],{"class":303},"{{ core_dashboards_store.init_metadata_table() }}",[294,911,912],{"class":684},"\"\n",[294,914,915,918],{"class":296,"line":696},[294,916,917],{"class":681},"on-run-end",[294,919,685],{"class":684},[294,921,922,924,926,929],{"class":296,"line":704},[294,923,903],{"class":684},[294,925,906],{"class":684},[294,927,928],{"class":303},"{{ core_dashboards_store.purge_metadata_table() }}",[294,930,912],{"class":684},[258,932,934,937,938],{"id":933},"stamping-dun-nouveau-dashboard",[273,935,936],{},"Stamping"," d'un nouveau ",[273,939,459],{},[262,941,942],{},[265,943,944,945,947,948,410],{},"Une bonne pratique consiste à ",[273,946,853],{}," seulement les tables de ",[273,949,420],{},[265,951,952],{},[424,953,954,955,958,959,961],{},"Seules les exécutions réussies seront estampillées. Cela signifie que prendre ",[269,956,957],{},"MIN(run_ended_at)"," vous donne le dernier moment où votre ",[273,960,869],{}," a réussi. C'est le scénario de fraîcheur le plus conservateur.",[265,963,964,965,967],{},"Pour ajouter une estampille à votre ",[273,966,459],{},", vous pouvez:",[334,969,970],{},[337,971,972,973,976],{},"Ajouter le ",[269,974,975],{},"post_hook"," suivant dans votre modèle:",[285,978,982],{"className":979,"code":980,"language":981,"meta":290,"style":290},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# model.sql\n{{ config(\n    post_hook='{{ core_dashboards_store.stamp_model(\"my_dashboard\") }}',\n) }}\n","sql",[269,983,984,989,994,999],{"__ignoreMap":290},[294,985,986],{"class":296,"line":297},[294,987,988],{},"# model.sql\n",[294,990,991],{"class":296,"line":671},[294,992,993],{},"{{ config(\n",[294,995,996],{"class":296,"line":678},[294,997,998],{},"    post_hook='{{ core_dashboards_store.stamp_model(\"my_dashboard\") }}',\n",[294,1000,1001],{"class":296,"line":688},[294,1002,1003],{},") }}\n",[334,1005,1006],{},[337,1007,1008,1009,1012,1013,655],{},"Estampiller plusieurs modèles à la fois en ajoutant le ",[273,1010,1011],{},"hook"," directement dans le ",[269,1014,1015],{},"core\u002Fdbt_project",[285,1017,1019],{"className":658,"code":1018,"language":660,"meta":290,"style":290},"models:\n  core_dashboards_store:\n    dashboards:\n      my_dashboard:\n        +tags: [\"my_dashboard\"]\n        +schema: dashboard_my_dashboard\n        pbi_tables:\n          +post_hook: [\"{{ core_dashboards_store.stamp_model('my_dashboard') }}\"]\n",[269,1020,1021,1027,1033,1040,1047,1068,1078,1085],{"__ignoreMap":290},[294,1022,1023,1025],{"class":296,"line":297},[294,1024,409],{"class":681},[294,1026,685],{"class":684},[294,1028,1029,1031],{"class":296,"line":671},[294,1030,691],{"class":681},[294,1032,685],{"class":684},[294,1034,1035,1038],{"class":296,"line":678},[294,1036,1037],{"class":681},"    dashboards",[294,1039,685],{"class":684},[294,1041,1042,1045],{"class":296,"line":688},[294,1043,1044],{"class":681},"      my_dashboard",[294,1046,685],{"class":684},[294,1048,1049,1052,1054,1057,1060,1063,1065],{"class":296,"line":696},[294,1050,1051],{"class":681},"        +tags",[294,1053,655],{"class":684},[294,1055,1056],{"class":684}," [",[294,1058,1059],{"class":684},"\"",[294,1061,1062],{"class":303},"my_dashboard",[294,1064,1059],{"class":684},[294,1066,1067],{"class":684},"]\n",[294,1069,1070,1073,1075],{"class":296,"line":704},[294,1071,1072],{"class":681},"        +schema",[294,1074,655],{"class":684},[294,1076,1077],{"class":303}," dashboard_my_dashboard\n",[294,1079,1080,1083],{"class":296,"line":712},[294,1081,1082],{"class":681},"        pbi_tables",[294,1084,685],{"class":684},[294,1086,1087,1090,1092,1094,1096,1099,1101],{"class":296,"line":720},[294,1088,1089],{"class":681},"          +post_hook",[294,1091,655],{"class":684},[294,1093,1056],{"class":684},[294,1095,1059],{"class":684},[294,1097,1098],{"class":303},"{{ core_dashboards_store.stamp_model('my_dashboard') }}",[294,1100,1059],{"class":684},[294,1102,1067],{"class":684},[265,1104,1105],{},[424,1106,1107],{},"La seconde option est préférable si tous vos modèles de rapport sont dans un dossier commun.",[258,1109,1111,1112,1114,1115],{"id":1110},"utiliser-le-stamper-dans-votre-dashboard","Utiliser le ",[269,1113,853],{}," dans votre ",[273,1116,459],{},[265,1118,1119,1120,1123,1124,1126,1127,410],{},"Dans ",[273,1121,1122],{},"Power BI",", vous pouvez facilement récupérer la dernière exécution de votre ",[273,1125,869],{}," en filtrant sur l'argument fourni à la macro ",[269,1128,1129],{},"stamp_model",[258,1131,1133],{"id":1132},"conventions-de-variables","Conventions de variables",[334,1135,1136,1139,1151],{},[337,1137,1138],{},"N'utilisez pas d'espaces dans les noms de variables.",[337,1140,1141,1142,1145,1146],{},"Respectez la convention de nommage ",[273,1143,1144],{},"snake_case",".\n",[334,1147,1148],{},[337,1149,1150],{},"Utilisez les tables d'interface pour choisir les bons noms de variables.",[337,1152,1153],{},"Les mots réservés doivent être écrits en majuscules.",[258,1155,1157,1158],{"id":1156},"conventions-dbt_projectyml","Conventions ",[269,1159,877],{},[262,1161,1162],{},[265,1163,1164,1165,1167,1168,1170,1171,410],{},"Le fichier ",[269,1166,877],{}," doit être mis à jour chaque fois qu'un nouveau ",[273,1169,459],{}," est ajouté à ",[269,1172,521],{},[334,1174,1175],{},[337,1176,1177,1178,1180,1181,1183,1184,1186,1187,1190,1191,1193,1194,1197,1198,1200],{},"Chaque ",[273,1179,459],{},", c'est-à-dire chaque sous-dossier du dossier ",[269,1182,409],{},", doit recevoir un ",[273,1185,756],{}," et un ",[273,1188,1189],{},"schema",". L'exemple suivant montre les lignes minimales à ajouter à ",[269,1192,877],{}," pour ajouter ",[269,1195,1196],{},"dummy_dashboard"," à ",[269,1199,521],{},". Cette convention vise à faciliter le filtrage de l'information dans la base de données ou dans la documentation.",[285,1202,1204],{"className":658,"code":1203,"language":660,"meta":290,"style":290},"models: # Deja present, reference seulement\n  core_dashboards_store: # Deja present, reference seulement\n    +enabled: False # Deja present, reference seulement\n    dummy:\n      +tags: [\"dummy\"]\n      +schema: \"dummy\"\n",[269,1205,1206,1215,1223,1235,1242,1260],{"__ignoreMap":290},[294,1207,1208,1210,1212],{"class":296,"line":297},[294,1209,409],{"class":681},[294,1211,655],{"class":684},[294,1213,1214],{"class":667}," # Deja present, reference seulement\n",[294,1216,1217,1219,1221],{"class":296,"line":671},[294,1218,691],{"class":681},[294,1220,655],{"class":684},[294,1222,1214],{"class":667},[294,1224,1225,1228,1230,1233],{"class":296,"line":678},[294,1226,1227],{"class":681},"    +enabled",[294,1229,655],{"class":684},[294,1231,1232],{"class":744}," False",[294,1234,1214],{"class":667},[294,1236,1237,1240],{"class":296,"line":688},[294,1238,1239],{"class":681},"    dummy",[294,1241,685],{"class":684},[294,1243,1244,1247,1249,1251,1253,1256,1258],{"class":296,"line":696},[294,1245,1246],{"class":681},"      +tags",[294,1248,655],{"class":684},[294,1250,1056],{"class":684},[294,1252,1059],{"class":684},[294,1254,1255],{"class":303},"dummy",[294,1257,1059],{"class":684},[294,1259,1067],{"class":684},[294,1261,1262,1265,1267,1269,1271],{"class":296,"line":704},[294,1263,1264],{"class":681},"      +schema",[294,1266,655],{"class":684},[294,1268,906],{"class":684},[294,1270,1255],{"class":303},[294,1272,912],{"class":684},[253,1274,1276],{"id":1275},"conventions-de-nommage","Conventions de nommage",[334,1278,1279],{},[337,1280,1281,1282,1284],{},"Utilisez ",[273,1283,1144],{}," pour nommer vos variables.",[258,1286,1288],{"id":1287},"conventions-de-tables","Conventions de tables",[334,1290,1291,1296],{},[337,1292,1293,1294,410],{},"Utilisez la convention de nommage ",[273,1295,1144],{},[337,1297,1298,1299,1302],{},"Utilisez un ",[424,1300,1301],{},"préfixe"," pour indiquer l'objectif général de la table. Les conventions de préfixe suivantes doivent être utilisées.",[1304,1305,1306,1325],"table",{},[1307,1308,1309],"thead",{},[1310,1311,1312,1316,1319,1322],"tr",{},[1313,1314,1315],"th",{},"Type de table",[1313,1317,1318],{},"Description",[1313,1320,1321],{},"Préfixe",[1313,1323,1324],{},"Exemple",[1326,1327,1328,1343,1357,1371,1384,1408,1426],"tbody",{},[1310,1329,1330,1334,1337,1340],{},[1331,1332,1333],"td",{},"fact",[1331,1335,1336],{},"Contient des tables de faits",[1331,1338,1339],{},"fact_",[1331,1341,1342],{},"fact_eleve",[1310,1344,1345,1348,1351,1354],{},[1331,1346,1347],{},"dimension",[1331,1349,1350],{},"Associe un ID arbitraire à un nom lisible",[1331,1352,1353],{},"dim_",[1331,1355,1356],{},"dim_subject_category",[1310,1358,1359,1362,1365,1368],{},[1331,1360,1361],{},"bridge",[1331,1363,1364],{},"Mappe des clés quasi primaires entre systèmes",[1331,1366,1367],{},"bridge_",[1331,1369,1370],{},"NA",[1310,1372,1373,1376,1379,1382],{},[1331,1374,1375],{},"base",[1331,1377,1378],{},"Table squelette utilisée pour construire des tables de faits",[1331,1380,1381],{},"base_",[1331,1383,1370],{},[1310,1385,1386,1389,1402,1405],{},[1331,1387,1388],{},"staging",[1331,1390,1391,1392,1395,1396,1398,1399,1401],{},"Table intermédiaire produite pendant la construction d'une table de faits. ",[1393,1394],"br",{},"Elle agit un peu comme une table de faits, mais n'est pas interrogée directement.",[1393,1397],{},"Les tables de ",[273,1400,1388],{}," sont généralement combinées ou jointes à une table de base pour créer une table de faits",[1331,1403,1404],{},"stg_",[1331,1406,1407],{},"stg_droppers_raw",[1310,1409,1410,1413,1420,1423],{},[1331,1411,1412],{},"interface",[1331,1414,1415,1416,1419],{},"La toute-puissante. Les interfaces sont des tables qui mappent les données brutes du système opérationnel. Il s'agit essentiellement d'un ",[269,1417,1418],{},"select"," suivi de la liste des champs utilisés en aval. Ces tables peuvent être remplacées dans le package hérité pour répondre aux besoins du CSS. Ajoutez seulement les colonnes nécessaires.",[1331,1421,1422],{},"target_",[1331,1424,1425],{},"target_perseverance",[1310,1427,1428,1430,1438,1441],{},[1331,1429,420],{},[1331,1431,1432,1433,1435,1436,410],{},"Table de ",[273,1434,420],{},". Sert de repère visuel pour détecter facilement les tables à brancher au ",[273,1437,459],{},[1331,1439,1440],{},"rprt_",[1331,1442,1443],{},"rprt_emp65_ann_bdgt",[1445,1446,1448],"h1",{"id":1447},"comment-faire","Comment faire",[248,1450,1452],{"id":1451},"conflits-de-noms-de-tables-entre-projets","Conflits de noms de tables entre projets",[262,1454,1455],{},[265,1456,1457,1458,1461,1462,1465],{},"Certains noms de tables sont assez génériques, comme ",[269,1459,1460],{},"spine"," ou ",[269,1463,1464],{},"dim_school",", et peuvent être utilisés dans différents contextes sans référer à la même table sous-jacente. Pour éviter la confusion, utilisez le patron suivant afin de désambiguïser les tables.",[559,1467,1324],{"id":1468},"exemple",[265,1470,1471,1472,1474,1475,1478,1479,410],{},"Prenons les deux ",[273,1473,416],{}," suivants: ",[269,1476,1477],{},"employees_absences"," et ",[269,1480,1255],{},[285,1482,1485],{"className":1483,"code":1484,"language":440},[438],".\n└── core.store\u002F\n    ├── reporting\u002F\n    │   └── employees_absences.pbit\n    └── models\u002F\n        ├── employees_absences\u002F\n        │   └── fact_absences.sql\n        └── dummy\u002F\n            └── fact_absences.sql\n",[269,1486,1484],{"__ignoreMap":290},[285,1488,1490],{"className":658,"code":1489,"language":660,"meta":290,"style":290},"models:\n  +employees_absences:\n    +schema: \"employees_absences\"\n    +tags: [\"employees_absences\"]\n  +dummy:\n    +schema: \"dummy\"\n    +tags: [\"dummy\"]\n",[269,1491,1492,1498,1505,1518,1535,1542,1554],{"__ignoreMap":290},[294,1493,1494,1496],{"class":296,"line":297},[294,1495,409],{"class":681},[294,1497,685],{"class":684},[294,1499,1500,1503],{"class":296,"line":671},[294,1501,1502],{"class":681},"  +employees_absences",[294,1504,685],{"class":684},[294,1506,1507,1510,1512,1514,1516],{"class":296,"line":678},[294,1508,1509],{"class":681},"    +schema",[294,1511,655],{"class":684},[294,1513,906],{"class":684},[294,1515,1477],{"class":303},[294,1517,912],{"class":684},[294,1519,1520,1523,1525,1527,1529,1531,1533],{"class":296,"line":688},[294,1521,1522],{"class":681},"    +tags",[294,1524,655],{"class":684},[294,1526,1056],{"class":684},[294,1528,1059],{"class":684},[294,1530,1477],{"class":303},[294,1532,1059],{"class":684},[294,1534,1067],{"class":684},[294,1536,1537,1540],{"class":296,"line":696},[294,1538,1539],{"class":681},"  +dummy",[294,1541,685],{"class":684},[294,1543,1544,1546,1548,1550,1552],{"class":296,"line":704},[294,1545,1509],{"class":681},[294,1547,655],{"class":684},[294,1549,906],{"class":684},[294,1551,1255],{"class":303},[294,1553,912],{"class":684},[294,1555,1556,1558,1560,1562,1564,1566,1568],{"class":296,"line":712},[294,1557,1522],{"class":681},[294,1559,655],{"class":684},[294,1561,1056],{"class":684},[294,1563,1059],{"class":684},[294,1565,1255],{"class":303},[294,1567,1059],{"class":684},[294,1569,1067],{"class":684},[265,1571,1572,1573,1575,1576,1579,1580,1583],{},"Les deux ",[273,1574,416],{}," utilisent une table nommée ",[269,1577,1578],{},"fact_absences",", mais le code SQL n'est pas le même. J'ai donc bien besoin de ces deux tables. Malheureusement, ",[273,1581,1582],{},"dbt"," lèvera une erreur puisque chaque nom doit être unique.",[265,1585,1586,1587,1589,1590,1593,1594,571,1597,1599,1600,1602,1603,410],{},"Une correction simple consiste à renommer l'une des tables ",[269,1588,1578],{},". Supposons que nous renommions ",[269,1591,1592],{},"models\u002Fdummy\u002Ffact_absences"," en ",[269,1595,1596],{},"dummy_fact_absences",[273,1598,1582],{}," pourra maintenant compiler le code, et toute tâche en aval du projet ",[269,1601,1255],{}," pourra référencer la table avec ",[269,1604,1605],{},"{{ ref('dummy_fact_absence') }}",[265,1607,1608,1609,1611,1612,1614,1615,1617,1618,1621,1622,1625,1626,1628,1629,410],{},"Le problème avec cette correction est que ",[273,1610,1582],{}," produira une table ",[269,1613,1596],{}," dans le schéma ",[269,1616,1255],{},". C'est redondant, car le conflit se produit ",[273,1619,1620],{},"entre"," schémas, et non ",[273,1623,1624],{},"dans"," le schéma ",[269,1627,1255],{},". Heureusement, nous pouvons remplacer le nom de sortie dans le code SQL en ajoutant la ligne suivante dans ",[269,1630,1631],{},"dummy_fact_absences.sql",[285,1633,1635],{"className":979,"code":1634,"language":981,"meta":290,"style":290},"{{ config(alias='fact_absences') }}\n",[269,1636,1637],{"__ignoreMap":290},[294,1638,1639],{"class":296,"line":297},[294,1640,1634],{},[258,1642,1644,1645],{"id":1643},"message-derreur-dbt","Message d'erreur ",[273,1646,1582],{},[265,1648,1649,1650,1652],{},"Dans ce cas, ",[273,1651,1582],{}," produirait un message d'erreur semblable à celui-ci:",[285,1654,1657],{"className":1655,"code":1656,"language":440},[438],"Compilation Error\n  dbt found two models with the name \"\u003Cfoobar>\".\n\n  Since these resources have the same name, dbt will be unable to find the correct resource\n  when looking for ref(\"foobar\").\n\n  To fix this, change the name of one of these resources:\n  - model.core_dashboards_store.removeme (models\u002Fprospectif_cdp\u002Ffeatures\u002Ffoobar.sql)\n  - model.core_dashboards_store.removeme (models\u002Femp_conge\u002Ffeature\u002Ffoobar.sql)\n",[269,1658,1656],{"__ignoreMap":290},[559,1660,1662],{"id":1661},"patron","Patron",[262,1664,1665],{},[265,1666,1667],{},"Le patron générique pour résoudre les conflits de noms de tables entre projets est le suivant:",[625,1669,1670,1686],{},[337,1671,1672,1673,1145,1675],{},"Préfixez votre table avec le nom convivial unique de votre ",[273,1674,459],{},[334,1676,1677],{},[337,1678,1679,1680,1682,1683,410],{},"Ce nom convivial devrait être court, peut-être entre 3 et 10 lettres. ",[269,1681,1255],{}," pourrait devenir ",[269,1684,1685],{},"dmy",[337,1687,1688,1689,1691,1692,410],{},"Ajoutez une directive ",[273,1690,1582],{}," dans le code de la table pour sortir la table sous son nom original en définissant la propriété ",[269,1693,1694],{},"alias",[359,1696,1697],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":290,"searchDepth":671,"depth":671,"links":1699},[1700,1711],{"id":250,"depth":671,"text":251,"children":1701},[1702,1703,1704,1706,1707,1708,1710],{"id":255,"depth":678,"text":256},{"id":400,"depth":678,"text":401},{"id":491,"depth":678,"text":1705},"Test d'intégration et nightly build",{"id":478,"depth":678,"text":544},{"id":763,"depth":678,"text":98},{"id":829,"depth":678,"text":1709},"Exposer la fraîcheur des données dans le dashboard",{"id":1275,"depth":678,"text":1276},{"id":1451,"depth":671,"text":1452},"md",null,{},{"description":290},"NyrCAz5WBusX1is838anGaTnDdL8crxVF0JiMLznsgI",[1718,1720],{"title":213,"path":208,"stem":214,"description":1719,"children":-1},"À compléter.",{"title":230,"path":231,"stem":232,"description":1721,"children":-1},"Découvrez les composants que vous pouvez utiliser dans le contenu.",1781106575044]