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