Power BI und Excel
Laden Sie Ihre Kompetenzdaten aus MuchSkills mit Power Query in Excel oder Power BI. Sie erstellen in MuchSkills einen Read-Client, fügen eine Abfrage in eine leere Power Query ein und erhalten eine Tabelle mit einer Zeile pro Person und Kompetenz, die sich aktualisiert, wann immer Sie möchten.
- Wer
- Ein MuchSkills Owner oder Admin erstellt den Client; alle mit Excel oder Power BI können die Daten laden
- Sie brauchen
- Einen API-Client mit dem Scope Read
- Tools
- Power Query in Excel, Power BI Desktop und der Power BI-Dienst
- Aktualisierung
- Bei Bedarf oder nach Zeitplan im Power BI-Dienst
How to
So funktioniert es
Bei jeder Aktualisierung erledigt die Abfrage auf dieser Seite drei Schritte. Zuerst holt sie sich mit Ihrer Client ID und Ihrem Client Secret ein Zugriffstoken. Dann liest sie die Profilsuche per POST-Anfragen, immer 300 Personen auf einmal. Zum Schluss macht sie aus dem Ergebnis eine Tabelle mit einer Zeile pro Person und Kompetenz. Dafür verwendet sie die Funktion Web.Contents mit den Optionen Content, Headers, RelativePath und Query. Microsoft-Dokumentation zu Web.Contents
Bevor Sie beginnen
- Ein API-Client mit dem Scope Read. Ein Owner oder Admin erstellt ihn unter Team/Org › Settings › API Access. Die Schritte finden Sie unter MuchSkills API und API Access.
- Excel mit Power Query oder Power BI Desktop. Für eine Aktualisierung nach Zeitplan brauchen Sie außerdem Zugriff auf einen Power BI-Arbeitsbereich.
- Eine private Datei. Die Abfrage enthält Ihr Client Secret. Behalten Sie die Arbeitsmappe oder Berichtsdatei für sich und teilen Sie nur die Ergebnisse.
Schritte
In der MuchSkills-App
- Legen Sie einen Read-Client an. Öffnen Sie Team/Org › Settings › API Access, klicken Sie auf New Client und vergeben Sie einen Namen, etwa Power BI export. Setzen Sie unter Scopes das Häkchen bei Read und klicken Sie auf Create Client. Kopieren Sie Client ID und Client Secret, bevor Sie auf Done klicken.
In Excel oder Power BI Desktop
- Öffnen Sie eine leere Abfrage. In Excel geht das über Data › Get Data › From Other Sources › Blank Query, in Power BI Desktop über Home › Get data › Blank query.
- Fügen Sie die Abfrage ein. Öffnen Sie im Power Query-Editor Home › Advanced Editor, löschen Sie den vorhandenen Text und fügen Sie diese Abfrage ein. Tragen Sie statt
YOUR_CLIENT_IDundYOUR_CLIENT_SECRETIhre eigenen Werte ein, die Anführungszeichen bleiben stehen. Klicken Sie dann auf Done.
let
ClientId = "YOUR_CLIENT_ID",
ClientSecret = "YOUR_CLIENT_SECRET",
BaseUrl = "https://app.muchskills.com",
PageSize = 300,
// 1. Zugriffstoken abrufen. Bei jeder Aktualisierung wird ein neues geholt.
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. Eine Seite mit Profilen lesen. Die Suche ist ein POST:
// skip und limit stehen in der Adresse, der Body ist {}.
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. Alle Seiten lesen.
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. Eine Zeile pro Person und Kompetenz.
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
- Erlauben Sie die Verbindung. Wenn Power Query fragt, wie die Verbindung zu
https://app.muchskills.comhergestellt werden soll, wählen Sie Anonymous und klicken Sie auf Connect. Wenn nach Datenschutzebenen gefragt wird, wählen Sie Organizational. - Laden Sie die Tabelle. Wählen Sie in Excel Home › Close & Load. Wählen Sie in Power BI Desktop Home › Close & Apply. Für spätere frische Daten wählen Sie in Excel Data › Refresh All oder in Power BI Desktop Refresh.
Im Power BI-Dienst (optional)
- Veröffentlichen Sie den Bericht und hinterlegen Sie die Anmeldedaten. Veröffentlichen Sie den Bericht in einem Arbeitsbereich. Öffnen Sie dann die Einstellungen des semantischen Modells und bearbeiten Sie unter Data source credentials die Anmeldedaten für
https://app.muchskills.com: Wählen Sie Anonymous und die Datenschutzebene Organizational und melden Sie sich an. - Richten Sie die geplante Aktualisierung ein. Schalten Sie in denselben Einstellungen die geplante Aktualisierung ein und legen Sie fest, wie oft sie laufen soll. Ein Gateway brauchen Sie dafür nicht. Microsoft-Anleitung zur Datenaktualisierung in Power BI
Ergebnis prüfen
- Sie erhalten eine Tabelle mit einer Zeile pro Person und Kompetenz, mit dem eigenen Niveau jeder Person und gegebenenfalls dem validierten Niveau.
- Die Anzahl unterschiedlicher E-Mail-Adressen in der Tabelle entspricht der Anzahl der Personen in Ihrer MuchSkills-Organisation.
- Im Power BI-Dienst zeigt der Aktualisierungsverlauf eine erfolgreiche Aktualisierung.
Benefits
Ihre Vorteile
- Kompetenzen in Ihren eigenen Berichten. Kombinieren Sie MuchSkills-Daten in Power BI oder Excel mit HR-, Finanz- oder Projektdaten.
- Aktuelle Zahlen ohne Exporte. Eine Aktualisierung holt die aktuellen Daten, niemand muss Dateien herunterladen und einfügen.
- Selbst- und Führungskräftesicht nebeneinander. Beide Niveaus stehen in der Tabelle, sodass Sie sehen, wo sie voneinander abweichen.
Important to know
Wichtig zu wissen
Niveaus liegen auf einer Skala von 1 bis 9. 1 bis 3 entspricht Beginner, 4 bis 6 Intermediate und 7 bis 9 Expert. Das validierte Niveau ist das von einer Führungskraft bestätigte. Es bleibt leer, wenn keine Führungskraft die Kompetenz validiert hat.
POST-Anfragen müssen anonym sein. Power Query sendet POST-Anfragen nur, wenn die Verbindung auf Anonymous gesetzt ist. Deshalb holt die Abfrage ihr eigenes Token, statt gespeicherte Anmeldedaten zu nutzen. Microsoft-Hinweise zum Web-Connector
Halten Sie die Basisadresse fest. Der Power BI-Dienst kann diese Abfrage aktualisieren, weil die Adresse immer https://app.muchskills.com lautet und Pfad und Paging über RelativePath und Query ergänzt werden. Wenn Sie die Abfrage bearbeiten, behalten Sie dieses Muster bei. Wird die Adresse als Text zusammengesetzt, kann die geplante Aktualisierung nicht mehr funktionieren.
Seitenweises Laden. Auf eine Seite passen bis zu 300 Personen. Die Abfrage entnimmt der ersten Seite die Gesamtzahl und lädt anschließend die übrigen Seiten.
Anfragelimits. Wenn Sie viele Abfragen gleichzeitig aktualisieren, antwortet MuchSkills möglicherweise mit 429 Too Many Requests. Warten Sie eine Minute und aktualisieren Sie erneut.
Bei Offenlegung widerrufen. Gelangt die Datei an jemanden, der sie nicht haben sollte, klicken Sie in API Access beim Client auf Revoke und erstellen Sie einen neuen.
Common errors
Fehlerbehebung
| Was Sie sehen | Ursache | Was zu tun ist |
|---|---|---|
Ein Fehler mit (404): Not Found | Die Daten wurden mit From Web geladen, oder die Abfrage wurde so geändert, dass sie ein GET sendet | Fügen Sie die Abfrage von dieser Seite erneut ein und ändern Sie nur die beiden Werte |
Ein Fehler mit (400): Bad Request von oauth2/token | Client ID oder Client Secret ist falsch, oder die Anführungszeichen wurden entfernt | Prüfen Sie beide Werte. Ist das Secret verloren, widerrufen Sie den Client und erstellen Sie einen neuen |
Ein Fehler mit (401): Unauthorized | Der Client wurde widerrufen, oder das Token wurde abgelehnt | Aktualisieren Sie noch einmal. Bleibt der Fehler, erstellen Sie einen neuen Client und verwenden Sie dessen Werte |
Ein Fehler mit (429) | Zu viele Anfragen in kurzer Zeit | Warten Sie eine Minute und aktualisieren Sie |
| "Web.Contents with the Content option is only supported when connecting anonymously" | Die Anmeldedaten für https://app.muchskills.com sind nicht auf Anonymous gesetzt | Bearbeiten Sie in Data source settings die Berechtigungen für die Adresse und wählen Sie Anonymous |
| Eine Abfrage zu Datenschutzebenen oder ein Formula.Firewall-Fehler | Power Query prüft, wie Datenquellen kombiniert werden dürfen | Setzen Sie die Datenschutzebene für https://app.muchskills.com auf Organizational |
| Der Power BI-Dienst meldet, dass das semantische Modell eine dynamische Datenquelle hat und nicht aktualisiert werden kann | Die Abfrage setzt ihre Adresse aus verkettetem Text zusammen | Halten Sie die Basisadresse fest und ergänzen Sie Pfade mit RelativePath und Query, wie in der Abfrage auf dieser Seite |
Häufig gestellte Fragen
Warum lässt sich From Web in Excel nicht nutzen?
From Web sendet eine GET-Anfrage. Die Suche nach Kompetenzprofilen in MuchSkills akzeptiert jedoch nur POST und beantwortet GET mit 404 Not Found. Die Abfrage auf dieser Seite sendet die passende Anfrage und ruft ihr Token selbst ab.
Warum wählen wir Anonymous, wenn die API ein Token benötigt?
Die Abfrage fordert das Token selbst bei MuchSkills an, mit Ihrer Client ID und Ihrem Client Secret, und sendet es bei jedem Aufruf mit. Power Query erlaubt POST-Anfragen nur, wenn die Verbindung auf Anonymous eingestellt ist.
Funktioniert die geplante Aktualisierung im Power BI-Dienst?
Ja. Die Basisadresse bleibt in der Abfrage fest, Pfad und Paginierung kommen über die Optionen RelativePath und Query hinzu. So kann der Power BI-Dienst die Daten aktualisieren. Setzen Sie die Anmeldeinformationen der Datenquelle nach dem Veröffentlichen auf Anonymous.
Brauchen wir ein Datengateway?
Nein. MuchSkills ist ein Clouddienst, den der Power BI-Dienst über das Internet erreicht, daher wird das semantische Modell ohne Gateway aktualisiert.
Ist es sicher, das Client Secret in der Abfrage zu speichern?
Wer die Abfrage öffnen kann, kann auch das Secret lesen. Verwenden Sie einen Client, der nur den Read-Scope hat, teilen Sie den Bericht oder die geladene Tabelle statt der Datei, und widerrufen Sie den Client unter API Access, falls die Datei an eine Stelle gelangt, an die sie nicht gehört.
Müssen wir ein Token erneuern?
Nein. Bei jeder Aktualisierung wird ein neues Token bei MuchSkills angefordert, es gibt also nichts zu erneuern.
Können wir auch Skill-Listen, Zertifikate oder Verfügbarkeiten laden?
Ja. Kopieren Sie die Abfrage, behalten Sie den Token-Teil bei und ändern Sie den Pfad auf einen anderen Endpunkt, zum Beispiel api/v1/analysis für Analyselisten. GET-Endpunkte erhalten keine Content-Option.