cathy monier: power query et power bi

16
POWER QUERY Les FONCTIONS

Upload: msdevmtl

Post on 12-Apr-2017

151 views

Category:

Data & Analytics


3 download

TRANSCRIPT

POWER QUERYLes 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 [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 La méthode #shared pour récupérer la liste des fonctions

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

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 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

Question(s) – Réponse(s)