Integrating SAP FSM with Microsoft Power BI: Step-by-Step Guide.
Le problème : aucun connecteur standard
Power BI sait se brancher nativement sur Salesforce, S/4HANA, IBM et des dizaines d'autres sources. Pas sur SAP Field Service Management. Le blocage n'est pas la donnée — la Query API de FSM expose tout — mais l'authentification : FSM parle OAuth2 client_credentials, et Power Query ne sait pas négocier un token tout seul. Tout le reste de ce guide consiste à lui apprendre.

Étape 1 · Créer le client OAuth2 dans FSM
Dans l'administration FSM, créez un client OAuth2 : c'est lui qui portera les droits de lecture utilisés par Power BI. Vous choisissez à cette occasion les permissions et la société auxquelles le Client ID donne accès — restreignez-les au strict nécessaire, ce compte n'a besoin que de lire.
- Le clientSecret n'est affiché qu'une seule fois, à la création : copiez-le immédiatement dans votre coffre-fort de mots de passe.
- Donnez au client les droits de lecture des seuls DTO que vos rapports consomment, et rien d'autre.
- Notez le tenant (account) et la société (company) : ils seront des paramètres de la requête.

Étape 2 · La fonction qui récupère le token
Ouvrez un rapport Power BI vierge, « Transformer les données », puis « Nouvelle source › Requête vide ». Dans l'éditeur avancé, remplacez le contenu par la fonction ci-dessous et renommez la requête « GET Token ». Elle concatène l'identifiant et le secret, les encode en base64 et échange le tout contre un bearer token.
() =>
let
// Concatène ClientID et Client Secret, puis encode en base64
authKey = "Basic " & Binary.ToText(Text.ToBinary("CLIENTID:CLIENTSECRET"), 0),
url = "https://eu.fsm.cloud.sap",
// Appelle la méthode POST OAuth2/token de FSM pour obtenir un bearer token
GetJson = Web.Contents(url,
[RelativePath = "/api/oauth2/v2/token",
Headers = [#"Authorization" = authKey,
#"Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8"],
Content = Text.ToBinary("grant_type=client_credentials")
]
),
FormatAsJson = Json.Document(GetJson),
// Extrait le token de la réponse JSON
AccessToken = FormatAsJson[access_token],
AccessTokenHeader = "bearer " & AccessToken
in
AccessTokenHeader
Si Power BI réclame des identifiants
Au premier lancement, Power BI affiche souvent un bandeau « Modifier les informations d'identification ». C'est attendu : l'authentification ne se joue pas au niveau de la source mais dans l'en-tête que la fonction construit elle-même. Choisissez « Anonyme », validez, et le token remonte. Adaptez aussi le domaine eu.fsm.cloud.sap si votre tenant est hébergé sur un autre cluster.



Étape 3 · La fonction qui interroge FSM
Créez une seconde requête vide, collez la fonction suivante et nommez-la « FSM Query ». Elle appelle la Query API de FSM en réutilisant « GET Token » à chaque exécution — le token est donc toujours frais, sans manipulation de votre part.
- query — la requête FSM à exécuter, en syntaxe Query API.
- DTOs — la liste des DTO mobilisés par la requête, versions comprises.
- companyName — la société FSM sur laquelle porte la requête.
- tenantName — le tenant (account) de votre environnement FSM.
(query as text, DTOs as text, companyName as text, tenantName as text) =>
let
Source = Json.Document(Web.Contents("https://eu.fsm.cloud.sap",
[RelativePath = "/api/query/v1?dtos=" & DTOs & "&query=" & query
& "&account=" & tenantName & "&company=" & companyName & "&useExternalIds=true",
Headers = [Authorization = "" & #"GET Token"(),
#"Content-Type" = "application/json",
#"x-client-ID" = "cpi",
#"x-client-version" = "1.0"]])),
data = Source[data]
in
data
Étape 4 · Invoquer et modéliser
Saisissez vos quatre paramètres, cliquez sur « Appeler » : une nouvelle requête apparaît à gauche, contenant le résultat brut renvoyé par FSM. À partir de là, vous êtes en terrain Power BI connu — développez les colonnes imbriquées, renommez, typez, ajoutez vos colonnes conditionnelles. Dupliquez la fonction autant de fois que vous avez de jeux de données à ramener.



Le point de sécurité, qui compte
Cette méthode fonctionne, mais elle a un défaut à connaître avant de la diffuser : le Client ID et le secret vivent en clair dans le fichier .pbix. Quiconque reçoit le rapport reçoit aussi les identifiants. Pour un prototype ou une analyse ponctuelle, c'est acceptable ; pour un rapport partagé largement, il faut sortir le secret du fichier — passerelle avec identifiants gérés, ou couche d'accès intermédiaire. C'est précisément ce que résout notre connecteur Power BI, et SAP oriente de son côté vers SAP Analytics Cloud.
Une première version de cet article a paru sur le SAP Community Blog