Configurer l'actualisation automatique d'un dashboard Power BI Online implique certaines contraintes techniques. Cela nécessite notamment un code adapté pour récupérer les données depuis Finalcad One.
Voici comment procéder, étape par étape.
Pour rafraîchir automatiquement les données d’un dashboard dans Power BI Online, vous devez configurer des requêtes spécifiques dans Power BI Desktop. Certaines de ces requêtes pourront être réutilisées directement dans vos datasets, tandis que d'autres serviront de paramètres fixes dans le code.

Créez les quatre paramètres suivants dans Power BI Desktop, nécessaires à la configuration des requêtes :
ApiUrl = https://developer.finalcad.cloud/
MediaApiUrl = https://medias.eu.finalcad.cloud
OrganizationId = l’identifiant de votre organization
ApiKey = Votre clé d’API
Ces requêtes sont nécessaires pour l’actualisation automatique de chaque dataset. Pour éviter la duplication du code, vous pouvez les isoler dans des requêtes distinctes réutilisables par l'ensemble de vos datasets.
(datasetName) =>
let
RawData = Web.Contents(ApiUrl, [
RelativePath = "api/organizations/" & OrganizationId & "/data/config/dataseturl",
Query = [
name = datasetName
],
Headers=[#"X-API-Key"= ApiKey, Authorization="token " & ApiKey]
]),
Url = Json.Document(RawData)[url]
in
Url(datasetName) =>
let
GetAuthenticationParameterValue = (token) =>
let
split = Text.Split(token, "="),
Value = split{1}
in
Value,
datasetUrl = GetDatasetUrl(datasetName),
queryParamPos = Text.PositionOf(datasetUrl, "?"),
queryParams = Text.RemoveRange(datasetUrl, 0, queryParamPos + 1),
splitParameters = Text.Split(queryParams, "&"),
expires = GetAuthenticationParameterValue(splitParameters{0}),
signature = GetAuthenticationParameterValue(splitParameters{1}),
keyPairId = GetAuthenticationParameterValue(splitParameters{2}),
AuthenticationParameters = [Expires = expires, Signature = signature, KeyPairId = keyPairId]
in
AuthenticationParameters(relativePath, query) =>
let
RawData = Web.Contents(MediaApiUrl, [
RelativePath = relativePath,
Query = query
])
in
RawDataUne fois les paramètres et requêtes en place, le code de récupération d’un dataset devient plus simple et modulaire.
La seule variable à modifier pour chaque nouveau dataset est “dataset_name “, défini dans les premières lignes du script, pour choisir le dataset voulu.
let
dataset_name = "Modules",
// Étape 1: Récupérer les paramètres d'url présignée
authenticationParameters = GetAuthenticationParameters(dataset_name),
// Étape 2: Récupérer le fichier de dataset
dataset = GetDataset("data/datasets/" & OrganizationId & "/" & dataset_name & "/" & dataset_name & ".parquet", [
Expires = authenticationParameters[Expires],
Signature = authenticationParameters[Signature],
#"Key-Pair-Id" = authenticationParameters[KeyPairId]
]),
datasetContent = Parquet.Document(Binary.Buffer(dataset)),
// Étape 3 : Trier les lignes par la colonne "updated_at"
SortedRows = Table.Sort(datasetContent, {{"updated_at", Order.Descending}}),
// Étape 4 : Supprimer les doublons basés sur la colonne "module_id"
DistinctRows = Table.Distinct(SortedRows, {"module_id"}),
// Étape 5 : Ajouter une colonne "name" selon la logique de valeur préférée
AddNameColumn = Table.AddColumn(DistinctRows, "name", each
let
valuesList = [names], // Assuming "names" is the column holding the list of records
preferredValue =
if valuesList = null or List.IsEmpty(valuesList) then null
else
let
frRecord = List.Select(valuesList, each [Locale] = "fr" and [Value] <> null),
enRecord = if List.IsEmpty(frRecord) then List.Select(valuesList, each [Locale] = "en" and [Value] <> null) else {},
anyRecord = if List.IsEmpty(frRecord) and List.IsEmpty(enRecord) then List.Select(valuesList, each [Value] <> null) else {},
finalValue =
if not List.IsEmpty(frRecord) then frRecord{0}[Value]
else if not List.IsEmpty(enRecord) then enRecord{0}[Value]
else if not List.IsEmpty(anyRecord) then anyRecord{0}[Value]
else null
in
finalValue
in
preferredValue
)
in
AddNameColumnUne fois votre dashboard publié sur Power BI Online, quelques étapes supplémentaires sont nécessaires pour finaliser la configuration.
Le code mis en place permet de contourner l’utilisation des passerelles de données. Celles-ci doivent toutefois être configurées en mode anonyme. Un avertissement restera affiché, mais l’authentification auprès de l’API Finalcad One sera assurée directement par le code et votre clé d’API.


Une fois les passerelles configurées, vous pouvez activer le rafraîchissement automatique du dashboard sans difficulté.