Power BI och Excel
Hämta din kompetensdata från MuchSkills till Excel eller Power BI med Power Query. Du skapar en Read-klient i MuchSkills, klistrar in en fråga i en tom Power Query och får en tabell med en rad per person och kompetens, som uppdateras när du vill.
- Vem
- En Owner eller Admin i MuchSkills skapar klienten, sedan kan alla med Excel eller Power BI hämta datan
- Du behöver
- En API-klient med behörigheten Read
- Verktyg
- Power Query i Excel, Power BI Desktop och Power BI-tjänsten
- Uppdatering
- Vid behov, eller enligt schema i Power BI-tjänsten
How to
Så fungerar det
Frågan på den här sidan gör tre saker vid varje uppdatering. Den byter ditt Client ID och din Client Secret mot en åtkomsttoken. Den läser profilsökningen, 300 personer åt gången, med POST-anrop. Sedan gör den om resultatet till en tabell med en rad per person och kompetens. Den använder funktionen Web.Contents med alternativen Content, Headers, RelativePath och Query. Microsofts referens för Web.Contents
Innan du börjar
- En API-klient med behörigheten Read. En Owner eller Admin skapar den under Team/Org › Settings › API Access. Stegen finns i MuchSkills API och API Access.
- Excel med Power Query, eller Power BI Desktop. För schemalagd uppdatering behöver du också åtkomst till en arbetsyta i Power BI.
- En privat fil. Frågan innehåller din Client Secret. Behåll arbetsboken eller rapportfilen för dig själv och dela resultaten.
Steg
I MuchSkills-appen
- Skapa en Read-klient. Gå till Team/Org › Settings › API Access, klicka på New Client, ge den ett namn, till exempel Power BI-export, markera Read under Scopes och klicka på Create Client. Kopiera Client ID och Client Secret innan du klickar på Done.
I Excel eller Power BI Desktop
- Öppna en tom fråga. I Excel väljer du Data › Get Data › From Other Sources › Blank Query. I Power BI Desktop väljer du Home › Get data › Blank query.
- Klistra in frågan. I Power Query-redigeraren väljer du Home › Advanced Editor, raderar det som står där och klistrar in den här frågan. Ersätt
YOUR_CLIENT_IDochYOUR_CLIENT_SECRETmed dina värden och behåll citattecknen. Klicka på Done.
let
ClientId = "YOUR_CLIENT_ID",
ClientSecret = "YOUR_CLIENT_SECRET",
BaseUrl = "https://app.muchskills.com",
PageSize = 300,
// 1. Hämta en åtkomsttoken. En ny hämtas vid varje uppdatering.
TokenResponse = Json.Document(Web.Contents(BaseUrl, [
RelativePath = "oauth2/token",
Headers = [#"Content-Type" = "application/x-www-form-urlencoded"],
Content = Text.ToBinary(Uri.BuildQueryString([
grant_type = "client_credentials",
client_id = ClientId,
client_secret = ClientSecret
]))
])),
Token = TokenResponse[access_token],
// 2. Läs en sida med profiler. Sökningen är en POST:
// skip och limit står i adressen, brödtexten är {}.
GetPage = (Skip as number) as record =>
Json.Document(Web.Contents(BaseUrl, [
RelativePath = "api/v2/profile/search",
Query = [skip = Text.From(Skip), limit = Text.From(PageSize)],
Headers = [
Authorization = "Bearer " & Token,
#"Content-Type" = "application/json"
],
Content = Text.ToBinary("{}")
])),
// 3. Läs alla sidor.
FirstPage = GetPage(0),
Total = FirstPage[pagination][total],
MoreSkips = List.Numbers(PageSize, List.Max({0, Number.RoundUp(Total / PageSize) - 1}), PageSize),
Pages = {FirstPage} & List.Transform(MoreSkips, GetPage),
Profiles = List.Combine(List.Transform(Pages, each _[data])),
// 4. En rad per person och kompetens.
OrEmpty = (x) => if x = null then {} else x,
Rows = List.Combine(List.Transform(Profiles, (person) =>
List.Combine(List.Transform(OrEmpty(Record.FieldOrDefault(person, "skillTypes", null)), (category) =>
List.Transform(OrEmpty(Record.FieldOrDefault(category, "skills", null)), (skill) => [
Name = person[profile][name],
Email = person[profile][email],
Department = Record.FieldOrDefault(person[profile], "department", null),
#"Skill category" = category[type],
Skill = skill[name],
#"Own level (1-9)" = Record.FieldOrDefault(skill, "level", null),
#"Validated level (1-9)" = Record.FieldOrDefault(skill, "validatedLevel", null)
])
))
)),
Result = Table.FromRecords(Rows)
in
Result
- Tillåt anslutningen. Om Power Query frågar hur den ska ansluta till
https://app.muchskills.comväljer du Anonymous och klickar på Connect. Om den frågar om sekretessnivåer väljer du Organizational. - Läs in tabellen. I Excel väljer du Home › Close & Load. I Power BI Desktop väljer du Home › Close & Apply. När du vill ha färsk data senare väljer du Data › Refresh All i Excel eller Refresh i Power BI Desktop.
I Power BI-tjänsten (valfritt)
- Publicera och ange autentiseringsuppgifter. Publicera rapporten till en arbetsyta. Öppna inställningarna för den semantiska modellen och gå till Data source credentials. Redigera där autentiseringsuppgifterna för
https://app.muchskills.com: välj Anonymous och sekretessnivån Organizational och logga sedan in. - Schemalägg uppdateringen. Slå på schemalagd uppdatering i samma inställningar och välj hur ofta. Ingen gateway behövs. Microsofts guide till datauppdatering i Power BI
Kontrollera att det fungerade
- Du får en tabell med en rad per person och kompetens, med varje persons egen nivå och eventuell validerad nivå.
- Antalet unika e-postadresser i tabellen stämmer med antalet personer i din organisation i MuchSkills.
- I Power BI-tjänsten visar uppdateringshistoriken en lyckad uppdatering.
Benefits
Det här får du
- Kompetenser i dina egna rapporter. Kombinera data från MuchSkills med HR-, ekonomi- eller projektdata i Power BI eller Excel.
- Färska siffror utan exporter. En uppdatering hämtar aktuell data, så ingen behöver ladda ner och klistra in filer.
- Egen bedömning och chefens bedömning sida vid sida. Båda nivåerna finns i tabellen, så du ser var de skiljer sig åt.
Important to know
Bra att veta
Nivåerna går från 1 till 9. 1 till 3 motsvarar Beginner, 4 till 6 Intermediate och 7 till 9 Expert. Den validerade nivån är den nivå som en chef har bekräftat. Har ingen chef validerat kompetensen är fältet tomt.
POST-anrop måste vara anonyma. Power Query skickar bara POST-anrop när anslutningen är inställd på Anonymous. Därför hämtar frågan sin egen token i stället för att använda sparade autentiseringsuppgifter. Microsofts anteckningar om Web-anslutningen
Håll basadressen fast. Power BI-tjänsten kan uppdatera den här frågan eftersom adressen alltid är https://app.muchskills.com, och sökvägen och sidindelningen läggs till med RelativePath och Query. Om du ändrar frågan ska du behålla det mönstret. Att sätta ihop adressen som text kan göra att schemalagd uppdatering slutar fungera.
Sidindelning. Varje sida rymmer upp till 300 personer. Frågan läser totalen från den första sidan och hämtar resten.
Begränsat antal anrop. Uppdaterar du många frågor på en gång kan MuchSkills svara med 429 Too Many Requests. Vänta då en minut och uppdatera igen.
Återkalla om filen har spridits. Om filen hamnar hos någon som inte ska ha den klickar du på Revoke för klienten i API Access och skapar en ny.
Common errors
Felsökning
| Det här ser du | Varför | Gör så här |
|---|---|---|
Ett fel med (404): Not Found | Datan lästes in med From Web, eller så ändrades frågan till att skicka en GET | Klistra in frågan från den här sidan igen och ändra bara de två värdena |
Ett fel med (400): Bad Request från oauth2/token | Client ID eller Client Secret är fel, eller så har citattecknen tagits bort | Kontrollera båda värdena. Om du har tappat bort din secret återkallar du klienten och skapar en ny |
Ett fel med (401): Unauthorized | Klienten har återkallats, eller så avvisades token | Uppdatera en gång till. Om felet kvarstår skapar du en ny klient och använder dess värden |
Ett fel med (429) | För många anrop på kort tid | Vänta en minut och uppdatera |
| "Web.Contents with the Content option is only supported when connecting anonymously" | Autentiseringsuppgifterna för https://app.muchskills.com är inte Anonymous | I Data source settings redigerar du behörigheterna för adressen och väljer Anonymous |
| En fråga om sekretessnivåer eller ett Formula.Firewall-fel | Power Query kontrollerar hur datakällor får kombineras | Sätt sekretessnivån för https://app.muchskills.com till Organizational |
| Power BI-tjänsten säger att den semantiska modellen har en dynamisk datakälla och inte kan uppdateras | Frågan bygger sin adress av sammanfogad text | Håll basadressen fast och lägg till sökvägar med RelativePath och Query, som i frågan på den här sidan |
Vanliga frågor
Varför kan vi inte använda From Web i Excel?
From Web skickar en GET-förfrågan. Sökningen efter kompetensprofiler i MuchSkills tar bara emot POST och svarar på GET med 404 Not Found. Frågan på den här sidan skickar rätt typ av förfrågan och hämtar sin token själv.
Varför väljer vi Anonymous om API:et kräver en token?
Frågan hämtar en token från MuchSkills på egen hand, med hjälp av ditt Client ID och din Client Secret, och skickar med den i varje anrop. Power Query tillåter bara POST-anrop när anslutningen är inställd på Anonymous.
Fungerar schemalagd uppdatering i Power BI-tjänsten?
Ja. Basadressen ligger fast i frågan, och sökväg och sidindelning läggs till via alternativen RelativePath och Query. Det gör att Power BI-tjänsten kan uppdatera frågan. Ställ in autentiseringsuppgifterna för datakällan på Anonymous efter att du har publicerat.
Behöver vi en datagateway?
Nej. MuchSkills är en molntjänst som Power BI-tjänsten når via internet, så den semantiska modellen uppdateras utan gateway.
Är det säkert att ha Client Secret i frågan?
Alla som kan öppna frågan kan läsa hemligheten. Använd en klient med enbart Read-behörighet, dela rapporten eller den inlästa tabellen i stället för filen, och återkalla klienten i API Access om filen hamnar någonstans där den inte borde vara.
Måste vi förnya en token?
Nej. Varje uppdatering begär en ny token från MuchSkills, så det finns inget att förnya.
Kan vi även läsa in kompetenslistor, certifikat eller tillgänglighet?
Ja. Kopiera frågan, behåll delen som hämtar token och byt sökväg till en annan endpoint, till exempel api/v1/analysis för analyslistor. GET-endpoints använder inte alternativet Content.