SlideShare une entreprise Scribd logo
1  sur  13
aOS Toulouse
20 juin 2017
Power Query – des fonctions avancées
aOS Toulouse
20 juin 2017
Cathy Monier
• MVP Excel
• 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 XinXii)
• Maîtriser Excel 2013 (Ed. Pearson – Épuisé)
• Me Contacter
• www.gemccap.com
• cathy.monier@gemccap.fr
aOS Toulouse
20 juin 2017
Les fonctions de Power Query
aOS Toulouse
20 juin 2017
La méthode #shared
aOS Toulouse
20 juin 2017
Les fonctions récursives
aOS Toulouse
20 juin 2017
Lire toutes les pages d’une API
• Documentation
https://www.meetup.com/fr-
FR/meetup_api/
• page : la taille de page (nb maximal
de résultats à chaque réponse, 200 par
défaut)
• 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
aOS Toulouse
20 juin 2017
Récupérer la 1ère page
Construire l’URL
• L’URL de connexion : https://api.meetup.com/members?
• Paramètres communs aux requêtes :
• &group_urlname= GroupUrlName
• &key= MeetupApiKey
“https://api.meetup.com/members?" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200"
& "&offset=0"
NumPage = 0
“https://api.meetup.com/members?" & "&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
Table.RowCount(ConvertTable )
aOS Toulouse
20 juin 2017
Fonction récursive
• 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 )
NON
OUI
NumPage = 0
Resultat = 200 membres
Nb
Membres
<200
Nous sommes arrivés sur la
dernière page
NumPage=+1
Combiner les tables
aOS Toulouse
20 juin 2017
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
aOS Toulouse
20 juin 2017
Problématique RH
Les contrats se suivent et donc la date de début est le 19/02/2013
Les contrats ne se suivent pas, nous avons donc 6 contrats différents
aOS Toulouse
20 juin 2017
Fonction récursive
Besoin de lire les données de la ligne
précédente
• Utilisation d’un index
• Fusion de la table avec elle-même
OUI
NON
Ligne actuel
(table + Entrée)
Sortie+1
=
Entrée ?
debut contrat = Date
entrée
Ligne précédente
aOS Toulouse
20 juin 2017
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
DateEntree
in
DateDebut
aOS Toulouse
20 juin 2017
Merci à nos sponsors !

Contenu connexe

Plus de aOS Community

Introduction a Power Automate - aOS Nouméa 28-02-2020
Introduction a Power Automate  - aOS Nouméa 28-02-2020 Introduction a Power Automate  - aOS Nouméa 28-02-2020
Introduction a Power Automate - aOS Nouméa 28-02-2020 aOS Community
 
aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...
aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...
aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...aOS Community
 
aOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent Pilo
aOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent PiloaOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent Pilo
aOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent PiloaOS Community
 
aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...
aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...
aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...aOS Community
 
aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...
aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...
aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...aOS Community
 
aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...
aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...
aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...aOS Community
 
aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...
aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...
aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...aOS Community
 
aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...
aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...
aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...aOS Community
 
aOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi Voncina
aOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi VoncinaaOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi Voncina
aOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi VoncinaaOS Community
 
aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...
aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...
aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...aOS Community
 
aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...
aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...
aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...aOS Community
 
aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...
aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...
aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...aOS Community
 
aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...
aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...
aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...aOS Community
 
aOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher Glémot
aOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher GlémotaOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher Glémot
aOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher GlémotaOS Community
 
aOS Monaco 2019 - All you need to know about modern team sites & communicatio...
aOS Monaco 2019 - All you need to know about modern team sites & communicatio...aOS Monaco 2019 - All you need to know about modern team sites & communicatio...
aOS Monaco 2019 - All you need to know about modern team sites & communicatio...aOS Community
 
aOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane Rouquet
aOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane RouquetaOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane Rouquet
aOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane RouquetaOS Community
 
aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...
aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...
aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...aOS Community
 
aOS Monaco 2019 - Tout sur les documents dans Office 365 - Sébastien Paulet
aOS Monaco 2019 - Tout sur les documents dans  Office 365 - Sébastien PauletaOS Monaco 2019 - Tout sur les documents dans  Office 365 - Sébastien Paulet
aOS Monaco 2019 - Tout sur les documents dans Office 365 - Sébastien PauletaOS Community
 
aOS Monaco 2019 - Présentation aOS - fr
aOS Monaco 2019 - Présentation aOS - fraOS Monaco 2019 - Présentation aOS - fr
aOS Monaco 2019 - Présentation aOS - fraOS Community
 
2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...
2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...
2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...aOS Community
 

Plus de aOS Community (20)

Introduction a Power Automate - aOS Nouméa 28-02-2020
Introduction a Power Automate  - aOS Nouméa 28-02-2020 Introduction a Power Automate  - aOS Nouméa 28-02-2020
Introduction a Power Automate - aOS Nouméa 28-02-2020
 
aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...
aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...
aOS Monaco 2019 - S3 - Présentation Varonis - Cloud Data Protection - Benjami...
 
aOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent Pilo
aOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent PiloaOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent Pilo
aOS Monaco 2019 - S2 - Présentation ARKADIN - TEAMS Adoption - Laurent Pilo
 
aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...
aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...
aOS Monaco 2019 - C1 - Sécuriser sa messagerie sur Office 365 - Hakim Taoussi...
 
aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...
aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...
aOS Monaco 2019 - B7 - I Developed a SPFx solution, what to do next and how t...
 
aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...
aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...
aOS Monaco 2019 - B6 - Mister Governance and Doctor Teams - Jean-François Ber...
 
aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...
aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...
aOS Monaco 2019 - B5 - The good, the bad and the unexpected - a BOT story - K...
 
aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...
aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...
aOS Monaco 2019 - B4 - Three must have workflows with Microsoft Flow - Vlad C...
 
aOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi Voncina
aOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi VoncinaaOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi Voncina
aOS Monaco 2019 - B3 - Create purchase request in PowerApps - Robi Voncina
 
aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...
aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...
aOS Monaco 2019 - B2 - Intégrer la Power Platform avec SharePoint - Patrick G...
 
aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...
aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...
aOS Monaco 2019 - B1 - Construire son infrastructure sur Azure un jeu d'enfan...
 
aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...
aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...
aOS Monaco 2019 - A7 - Sécurisez votre SI et vos services Office 365 partie 2...
 
aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...
aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...
aOS Monaco 2019 - A6 - Sécurisez votre SI et vos services Office 365 partie 1...
 
aOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher Glémot
aOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher GlémotaOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher Glémot
aOS Monaco 2019 - Dois-je protéger mes données Office 365 - Christopher Glémot
 
aOS Monaco 2019 - All you need to know about modern team sites & communicatio...
aOS Monaco 2019 - All you need to know about modern team sites & communicatio...aOS Monaco 2019 - All you need to know about modern team sites & communicatio...
aOS Monaco 2019 - All you need to know about modern team sites & communicatio...
 
aOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane Rouquet
aOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane RouquetaOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane Rouquet
aOS Monaco 2019 - Tour d'horizon Office 365 - Max Duca Stéphane Rouquet
 
aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...
aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...
aOS Monaco 2019 - Prévenir la perte de données dans Office 365 & Sharepoint O...
 
aOS Monaco 2019 - Tout sur les documents dans Office 365 - Sébastien Paulet
aOS Monaco 2019 - Tout sur les documents dans  Office 365 - Sébastien PauletaOS Monaco 2019 - Tout sur les documents dans  Office 365 - Sébastien Paulet
aOS Monaco 2019 - Tout sur les documents dans Office 365 - Sébastien Paulet
 
aOS Monaco 2019 - Présentation aOS - fr
aOS Monaco 2019 - Présentation aOS - fraOS Monaco 2019 - Présentation aOS - fr
aOS Monaco 2019 - Présentation aOS - fr
 
2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...
2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...
2019-08-13 - aOS Sao Paulo - Wiliam Rocha - Teams, bots e PowerPlatform um ex...
 

2 Des fonctions avancées dans Power Query

  • 1. aOS Toulouse 20 juin 2017 Power Query – des fonctions avancées
  • 2. aOS Toulouse 20 juin 2017 Cathy Monier • MVP Excel • 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 XinXii) • Maîtriser Excel 2013 (Ed. Pearson – Épuisé) • Me Contacter • www.gemccap.com • cathy.monier@gemccap.fr
  • 3. aOS Toulouse 20 juin 2017 Les fonctions de Power Query
  • 4. aOS Toulouse 20 juin 2017 La méthode #shared
  • 5. aOS Toulouse 20 juin 2017 Les fonctions récursives
  • 6. aOS Toulouse 20 juin 2017 Lire toutes les pages d’une API • Documentation https://www.meetup.com/fr- FR/meetup_api/ • page : la taille de page (nb maximal de résultats à chaque réponse, 200 par défaut) • 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
  • 7. aOS Toulouse 20 juin 2017 Récupérer la 1ère page Construire l’URL • L’URL de connexion : https://api.meetup.com/members? • Paramètres communs aux requêtes : • &group_urlname= GroupUrlName • &key= MeetupApiKey “https://api.meetup.com/members?" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200" & "&offset=0" NumPage = 0 “https://api.meetup.com/members?" & "&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 Table.RowCount(ConvertTable )
  • 8. aOS Toulouse 20 juin 2017 Fonction récursive • 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 ) NON OUI NumPage = 0 Resultat = 200 membres Nb Membres <200 Nous sommes arrivés sur la dernière page NumPage=+1 Combiner les tables
  • 9. aOS Toulouse 20 juin 2017 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
  • 10. aOS Toulouse 20 juin 2017 Problématique RH Les contrats se suivent et donc la date de début est le 19/02/2013 Les contrats ne se suivent pas, nous avons donc 6 contrats différents
  • 11. aOS Toulouse 20 juin 2017 Fonction récursive Besoin de lire les données de la ligne précédente • Utilisation d’un index • Fusion de la table avec elle-même OUI NON Ligne actuel (table + Entrée) Sortie+1 = Entrée ? debut contrat = Date entrée Ligne précédente
  • 12. aOS Toulouse 20 juin 2017 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 DateEntree in DateDebut
  • 13. aOS Toulouse 20 juin 2017 Merci à nos sponsors !

Notes de l'éditeur

  1. https://api.meetup.com/members? &group_urlname= &key=
  2. 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