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.

Aktualisiert

Verbindung in EigenregieAdmins und HRIT

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

So funktioniert es

Power QueryKennt Ihre Client ID und Ihr Client Secret
Erst das Token, dann POST mit 300 Personen pro Seite
MuchSkills APIGibt Profile mit Kompetenzen und Niveaus zurück
Bei jeder Aktualisierung
Ihre TabellePro Person und Kompetenz eine Zeile, in Excel oder Power BI

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

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

  1. Ö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.
  2. 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_ID und YOUR_CLIENT_SECRET Ihre 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
  1. Erlauben Sie die Verbindung. Wenn Power Query fragt, wie die Verbindung zu https://app.muchskills.com hergestellt werden soll, wählen Sie Anonymous und klicken Sie auf Connect. Wenn nach Datenschutzebenen gefragt wird, wählen Sie Organizational.
  2. 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)

  1. 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.
  2. 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.

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.

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.

Fehlerbehebung

Was Sie sehenUrsacheWas zu tun ist
Ein Fehler mit (404): Not FoundDie Daten wurden mit From Web geladen, oder die Abfrage wurde so geändert, dass sie ein GET sendetFügen Sie die Abfrage von dieser Seite erneut ein und ändern Sie nur die beiden Werte
Ein Fehler mit (400): Bad Request von oauth2/tokenClient ID oder Client Secret ist falsch, oder die Anführungszeichen wurden entferntPrüfen Sie beide Werte. Ist das Secret verloren, widerrufen Sie den Client und erstellen Sie einen neuen
Ein Fehler mit (401): UnauthorizedDer Client wurde widerrufen, oder das Token wurde abgelehntAktualisieren 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 ZeitWarten 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 gesetztBearbeiten Sie in Data source settings die Berechtigungen für die Adresse und wählen Sie Anonymous
Eine Abfrage zu Datenschutzebenen oder ein Formula.Firewall-FehlerPower Query prüft, wie Datenquellen kombiniert werden dürfenSetzen 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 kannDie Abfrage setzt ihre Adresse aus verkettetem Text zusammenHalten Sie die Basisadresse fest und ergänzen Sie Pfade mit RelativePath und Query, wie in der Abfrage auf dieser Seite
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.

Wir prüfen den Kalender von Daniel...

Stellen Sie uns Ihre Fragen

Ein echter Mensch antwortet, meist noch am selben Arbeitstag.

Live-Webinar · 30 Oct, 10:00 CET

How to analyse the Skill Gaps in your organisation

MuchSkills allows organisations to conduct an in-depth skills gap analysis in a matter of minutes and uncover the skill gaps that hurt organisational performance In this webinar, you will learn how t…