POWER QUERY Les FONCTIONS
Cathy Monier Auteure du Site CathyAstuce.com Auteur des livres Power Query et le langage M (Edition ENI) Excel 2013 & VBA (Ed. Pearson) Tableaux croisés dynamiques (Ed. Pearson – Épuisé) Maîtriser Excel 2013 (Ed. Pearson – Épuisé) Me Contacter www.gemccap.com cathy.monier@gemccap.fr
Déroulement de la Session Récupérer Contenu d’un classeur Créer une fonction récursive RH Utilisation de #shared Aide Une fonction récursive sur une table API Meetup
Problématique RH En France, pour toute personne embauchée en CDD, nous devons considérer plusieurs contrats qui se suivent pour une même personne comme étant un seul contrat.
Suivi des contrats Les contrats se suivent et donc n’en font qu’un seul Les contrats ne se suivent pas, nous avons donc 6 contrats
Fonction récursive OUI NON Ligne actuel (table + Entrée) Sortie+1 = Entrée ? debut contrat = Date entrée Ligne précédente Besoin de lire les données de la ligne précédente Utilisation d’un index Fusion de la table avec elle-même Schéma de la fonction
Code de la fonction fnGetDebut (TableContrats as table, ID as number, DateEntree as date) => let LigneTest = Table.SelectRows(TableContrats , each ([Index] = ID-1)), NbLignes = Table.RowCount(LigneTest), DateDebut = if NbLignes = 0 then DateEntree else if DateEntree = (LigneTest{0}[Sortie] + #duration(1,0,0,0)) then fnGetDebut(TableContrats, ID-1,LigneTest{0}[Entree]) in DateDebut
Aide La méthode #shared pour récupérer la liste des fonctions
Aide Vous trouverez ce tableau de bord sur Un partage d’app BI Mon site CathyAstuce
Code Récupérer l’ensemble des fonctions de Power Query #shared Se limiter aux fonctions Value.Is([Value], type function) Récupérer les métadonnées de la fonction Value.Metadata(Value.Type([Value])) Il peut y avoir jusque 3 exemples, donc recupération dans 3 colonnes de chaque ligne de la liste [Documentation.Examples]{0} , [Documentation.Examples]{1} , [Documentation.Examples]{2}
Meetup Comment récupérer l’ensemble des membres du groupe Meetup MSDEVMTL
Meetup Documentation https://www.meetup.com/fr- FR/meetup_api/ page : la taille de page (nombre maximal de résultats à chaque réponse) offset : la page à retourner. Exemple, page = 10, offset =0 donne les lignes de 1-10, offset=1 de 11à 20, etc.. desc : ordre inverse, desc=true
Récupérer la 1ère page Construire l’URL L’URL de connexion : https://api.meetup.com/members?status=past Paramètres communs aux requêtes : &group_urlname= GroupUrlName &key= MeetupApiKey “https://api.meetup.com/members?status=past" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200" & "&offset=0" Création d’un paramètre pour chaque page : NumPage = 0 “https://api.meetup.com/members?status=past" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200" & "&offset=" & Text.From(NumPage) Dès que la table est récupérée, on compte le nombre de lignes afin de savoir s’il faut lire d’autres pages Table.RowCount(ConvertTable )
Fonction récursive NON OUI NumPage = 0 Resultat = 200 membres Nb Membres <200 Nous sommes arrivés sur la dernière page NumPage=+1 Combiner les tables Schéma de la fonction Combiner les tables CombineResult = Table.Combine({MaTable , ConvertTable}) Code de la ligne de récursivité if NbLignes = 0 then CombineResult else fnGetPages (NumPage + 1, CombineResult )
Code de la fonction (NumPage as number, MaTable as table) => let Source = Json.Document(Web.Contents("https://api.meetup.com/members?status=past" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200" & "&offset=" & Text.From(NumPage))), Navigation = Source[results], ConvertTable = Table.FromList(Navigation , Splitter.SplitByNothing(), null, null, ExtraValues.Error), NbLignes = Table.RowCount(ConvertTable), CombineResult = Table.Combine({MaTable , ConvertTable}), Resultat = if NbLignes = 0 then CombineResult else fnGetPages (NumPage + 1, CombineResult ) in Resultat
Question(s) – Réponse(s)