cathy monier: power query et power bi
TRANSCRIPT
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 [email protected]
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
1. Besoin de lire les données de la ligne précédente Utilisation d’un index Fusion de la table avec elle-
même2. Schéma de la fonction
OUI
NON
Ligne actuel(table + Entrée)
Sortie+1=
Entrée ?
debut contrat = Date entrée
Ligne précédente
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]) else DateEntreein DateDebut
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 fonctionValue.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
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 pageConstruire 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
Schéma de la fonction Combiner les tablesCombineResult = Table.Combine({MaTable , ConvertTable}) Code de la ligne de récursivitéif NbLignes = 0 then
CombineResult else
fnGetPages (NumPage + 1, CombineResult )
NON
OUI
NumPage = 0Resultat = 200 membres
Nb Membres <200
Nous sommes arrivés sur la dernière page
NumPage=+1Combiner les tables
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