Het is mogelijk om gegevens uit ClockWise te visualiseren op de online versie van Power BI. Dit kan gedaan worden via een gegevensstroom. In deze handleiding wordt uitgelegd hoe deze ingesteld kan worden om de goede gegevens uit ClockWise te halen.
Om met Power BI te kunnen werken, moet er een API client aangemaakt worden in ClockWise. Dit kan in Configuratie → Instellingen → OAuth/API clients. Klik op 'OAuth client toevoegen'. Geef een herkenbare naam aan de client, wat aangeeft waar het voor gebruikt wordt (bijv. Power BI), en vul hier ook de emailadres van de connectorbeheerder in.
Druk op Opslaan.
Zet de optie "Access token expires" op "Never". De access token die in een volgende stap wordt opgehaald wordt steeds gebruikt om de data op te vragen.
Let op: De autorisatiecode verloopt na een uur, dus zorg ervoor dat de komende stap(pen) minder dan een uur duren, anders moet deze stap opnieuw uitgevoerd worden!
We hebben een autorisatiecode nodig. Ga hievoor naar de OAuth client en klik op de knop "Request Authorization Code (api/v2/auth)".
Er verschijnt een pop-up met een ingevuld "Response type", "Redirect URI" en "Client ID". Deze hoeven niet veranderd te worden. Klik op "Request".
U wordt doorgestuurd naar de inlogpagina van ClockWise. Log in zoals normaal ook wordt gedaan.
Als het inloggen is voltooid, wordt een nieuwe pagina getoond. Op deze nieuwe pagina wordt aan de onderkant een code wordt getoond:
Deze code is nodig voor de volgende stap
We hebben nu een access token nodig. Dit werkt ongeveer hetzelfde als de stappen hierboven, alleen is nu de knop "Request Tokens" nodig.
De standaardgegevens staan weer goed, alleen moet de autorisatiecode nog wel worden ingevoerd in het veld authorization code
. Dat is de code uit de vorige stap.
Klik op "Request"
Er wordt nu een venster zichtbaar met een access_token, refresh_token en wat andere informatie. Hiervan is de access_token nodig voor de volgende stappen.
Deze token is onbeperkt geldig, wegens de "Access token expires"-instelling uit de eerste stap
De autorisatiecode is niet meer nodig, dus de tijdsbeperking van een uur geldt niet meer
Download het bestand ServerDataConnector.m van onze website. Open het in een tekstbewerker (bijv. notepad).
In dit bestand komt "uwomgevingnaam" voor, rond regel 26. Dit moet vervangen worden door de naam van de ClockWise omgeving.
Daarnaast staat op regel 3 tussen aanhalingstekens de tekst **access token**. Dit (inclusief de sterretjes, exclusief de aanhalingstekens) moet vervangen worden door de verkregen access token uit de vorige stap.
Indien gewenst kunnen er parameters worden meegegeven aan de verschillende tabellen, vergelijkbaar met de parameters uit de ClockWise Dataconnector.
Deze kunnen worden ingesteld in de Contents()
functieaanroep op regel 228. Deze heeft een aantal parameters:
true
of false
, standaard false
)"
) worden opgegeven, als URL-parameter (bijv. "all_projects=true&project_name_split=1,1"
). Uitleg over de verschillende velden kan worden gevonden bij de API-documentatie. Ga hiervoor naar "uwomgevingnaam.clockwise.info/api/v2/doc" → Reports → "Hours in flat format", waarbij uwomgevingnaam weer de naam is van de ClockWise omgeving.Sla de aanpassingen op.
Nu kunnen we de gegevensstroom aanmaken.
Log in de browser in op de online omgeving van Power BI en ga naar de werkruimte/workspace waar de gegevensstroom/dataflow moet worden aangemaakt.
LET OP: Dit kan niet in een persoonlijke werkruimte
Er wordt een query getoon met een tekst als
let Bron="" in Bron
(of met Source) in de Engelse versie.
Laat dit staan en klik op Volgende.
De Power Query editor wordt nu geopend. Echter wil Power BI heel graag dat de query een tabel is, dus u wordt doorgestuurd naar de "Hulpprogramma's tekst" tab.
De editor die u nu opent lijk op degene die eerder werd getoond, met een paar extra regels.
Klik met de rechtermuisknop op de query (in de linker kolom), en zorg dat het vinkje bij "Laden inschakelen" uit staat! Er zitten moeilijke types in de query, en PowerBI kan er (nog) niets mee.
We gaan nu wat met deze query doen om de losse tabellen te krijgen in de gegevensstroom.
Een query met de naam "Query (...)" wordt gemaakt (met een getal op de puntjes)
Doe deze 3 stappen nog 3 keer, voor respectievelijk "Projects", "Resources" en "Hours".
Let op: Zorg dat de selectie steeds gemaakt worden van de nieuwe "Query (...)", en niet van de orginele "Query"! Anders kunnen de andere query's de data niet ophalen, omdat ze allemaal verwijzen naar de oorspronkelijke.
Tip! *Het is overzichtelijker als de verschillende query's hernoemd worden naar de tabel die daar geselecteerd is, bijv. "Query (2)" kan worden hernoemd naar "Employee". Dit kan in de rechterkolom.
Als het goed is kan nu de gegevensstroom worden opgeslagen. Het valideren kan een tijdje duren, dus geen zorgen als het een kwartier duurt.
Soms vraagt PowerBI een aantal dingen tijdens het valideren van de query's:
De vier tabellen hebben referenties naar elkaar, waardoor ze aan elkaar kunnen worden gekoppeld in de gegevensstroom.
Deze koppelingen zijn:
- hours.resource_id ↔ resources.resource_id
- resources.employee_id ↔ employees.employee_id
- resources.project_id ↔ projects.project_id
De volgende tabel geeft een vertaling van de meest gebruikte veldnamen in Power BI naar die in ClockWise. (Let op, niet alle velden zijn altijd beschikbaar! Sommige worden bijvoorbeeld alleen opgehaald als tarieven ophalen op 'true' is gezet.
Power BI | <=> | ClockWise |
---|---|---|
employees.contract_hours_min | Minimale contracturen van medewerker | |
employees.department_name_path | Pad van afdelingsnamen (standaard onderscheiden met ' / ') | |
employees.employee_email | Emailadres van medewerker | |
employees.employee_name | Medewerkernaam | |
employees.salary_number | Salarisnummer van medewerker | |
hourly_sales_rate | Uurtarief verkoop | |
hourly_purchase_rate | Uurtarief inkoop | |
hours.date | Datum | |
hours.hours | Aantal uren | |
hours.hourstatus | Uurstatus (written = beschreven, submitted = ingeleverd, approved = goedgekeurd, rejected = afgekeurd) | |
hours.units | Eenheden | |
projects.customer_name_path | Pad van klantnamen (standaard onderscheiden met ' / ') | |
projects.end_date | Deadline | |
projects.hours_budgetted | Begrote uren | |
projects.project_name_path | Pad van projectnamen (standaard onderscheiden met ' / ') | |
projects.start_date | Startdatum | |
resources.resource_status | Koppelingstatus (running = Lopend, closed = gesloten, in_preparation = in voorbereiding) | |
employee_id | Identifier van de medewerker. Wordt gebruikt om de koppeling- en medewerkertabellen te verbinden | |
project_id | Identifier van de project. Wordt gebruikt om de koppeling- en projecttabellen te verbinden | |
resource_id | Identifier van de koppeling. Wordt gebruikt om de uren- en koppelingtabellen te verbinden |
De velden "customer_name_path", "project_name_path" en "department_name_path" hebben ook versies met code (geeft paden van klantcodes, projectcodes of afdelingscodes) en ids (de interne identifiers van de klanten projecten en afdelingen). Daarnaast is er ook nog een "customer_number_path", die een pad van klantnummers bevat.
Het is ook mogelijk om andere tabellen of endpoints aan te roepen in een gegevensstroom, net zoals met de GetTable
functie in het 'Geavanceerd' hoofdstukje in de ClockWise Dataconnector handleiding. Dit gaat met de ParsedTable(url)
functie.
Er zijn twee manieren om dit te doen:
Bron = Contents()
op regel 228 moet er staan Bron = ParsedTable(*url*)
(bijv. Bron = ParsedTable("/report/flat/planning?params=hier")
).GetTable
. Daar staat bovengenoemd voorbeeld al ingevuld.Mogelijk worden er waarschuwingen getoond dat een paar kolommen geen type hebben. Dit kan worden opgelost in het tabje "Transformeren":
Let op: De gegevensstroom kan niet worden opgeslagen zolang er fouten worden gegeven over kolommen zonder types!
In deze case laten we een voorbeeld zien hoe de Contents
functie moet worden aangeroepen. Hiervoor gebruiken we als voorbeeld dat we statistieken willen gaan maken op subprojectniveau.
We gaan uit van de volgende projectstructuur:
We willen in Power BI de uren van de projecten "Documentatie", "Techniek" en "Website" uitzetten tegen de begrote uren van deze projecten.
Hiervoor moeten we de volgende parameters meegeven in Power BI:
start=2020-01-01
. Niet perse nodigallprojects=true&project_name_split=1,1&project_id_split=1,1
Regel 228 in het script ziet er dan als volgt uit:
Bron = Contents(false, "start=2020-01-01", "", "allprojects=true&project_name_split=1,1&project_id_split=1,1", "")
Om data uit de API te besparen, is het mogelijk om de data incrementeel te vernieuwen
Let op: Deze functionaliteit is alleen in Premium werkruimtes mogelijk
Microsoft heeft hier documentatie over geschreven: Incrementeel vernieuwen gebruiken met gegevensstromen
Contents
functie?De eerste parameter van deze functie is true
of false
. Gebruik true
als tariefinformatie moet worden opgehaald, en anders false
.
De rest van de parameters zijn in url-parameter formaat: Ze worden genoteerd als key=value
, met key
een van de waardes die in de API-documentatie staat, te vinden op uwomgevingnaam.clockwise.info/api/v2/doc → Reports → "Hours in flat format", en value
een waarde die daarbij past.
Verschillende key-value-paren worden samengevoegd met een &
. Zie ook het voorbeeld in de case hierboven.
Voor de fields
parameter specifiek (om specifieke velden op te halen): Deze zijn kommagescheiden. (Bijv. fields=name,code,type
). Om velden uit te zetten, kan er een uitroepteken voor worden gezet (Bijv. fields=name,code,!type
). Er zijn verschillende veldgroepen, die gebruikt kunnen worden. Deze kunnen op dezelfde manier worden aan- en uitgezet (Bijv. fields=name,projectfields,!otherfields,!type
).
Er worden standaard al een paar velden opgehaald! Het kan handig zijn om eerst te kijken welke velden worden opgehaald, en daarna de Contents
functie aanpassen om de goede velden aan- en uit te zetten.
De script die hier wordt gebruikt werkt ook in Power BI Desktop, maar er is een makkelijkere en ietsje veiligere manier, met de ClockWise Dataconnector.
Informatie en instructies hierover kunnen worden gevonden in de Dataconnector handleiding