Top Banner
POWER QUERY Les FONCTIONS
16

Cathy Monier: Power Query et Power BI

Apr 12, 2017

Download

Data & Analytics

MSDEVMTL
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cathy Monier: Power Query et Power BI

POWER QUERYLes FONCTIONS

Page 2: Cathy Monier: Power Query et Power BI

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]

Page 3: Cathy Monier: Power Query et Power BI

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

Page 4: Cathy Monier: Power Query et Power BI

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.

Page 5: Cathy Monier: Power Query et Power BI

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

Page 6: Cathy Monier: Power Query et Power BI

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

Page 7: Cathy Monier: Power Query et Power BI

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

Page 8: Cathy Monier: Power Query et Power BI

Aide La méthode #shared pour récupérer la liste des fonctions

Page 10: Cathy Monier: Power Query et Power BI

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}

Page 11: Cathy Monier: Power Query et Power BI

Meetup

Comment récupérer l’ensemble des membres du groupe Meetup MSDEVMTL

Page 12: Cathy Monier: Power Query et Power BI

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

Page 13: Cathy Monier: Power Query et Power BI

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 )

Page 14: Cathy Monier: Power Query et Power BI

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

Page 15: Cathy Monier: Power Query et Power BI

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

Page 16: Cathy Monier: Power Query et Power BI

Question(s) – Réponse(s)