2025-03-27
Pour limiter la taille d’un fichier .pbix ou simplement garder le volume de données à charger acceptable par Power BI Desktop, il est habituel d’utiliser des paramètres dans Power Query. Ces paramètres permettent de filtrer les requêtes sources et donc de réduire la volumétrie.
Après la publication d’un rapport, il est nécessaire de modifier ces paramètres pour charger les données en intégralité.
La solution la plus simple est de modifier manuellement les paramètres dans les paramètres du modèle (il y a une certaine logique 😓).
Il ne faut pas oublier d’enregistrer la mise à jour en cliquant sur Appliquer ! Une fois les paramètres modifiés, il suffit de lancer un traitement du modèle.
Si on utilise un Pipeline de déploiement, il est possible de définir des paramètres spécifiques à un environnement. Lors de la publication vers un nouvel espace de travail, les paramètres du modèle sémantique seront mis à jour selon la configuration du Pipeline. Tout ça se configure dans les règles de déploiement ; comme souvent la documentation Microsoft explique très bien la marche à suivre.
L’API Power BI c’est le moyen d’automatiser toutes les actions manuelles que l’on fait habituellement via le portail Power BI. Avec le bon script, il suffit d’appeler une commande qui indique le nom du jeu de données et les nouveaux paramètres pour avoir en quelques instants un modèle configuré et en cours de rafraichissement !
.\UpdateDatasetParameters.ps1 -datasetName "Météo" -paramList '{"Nombre de mois": 36}' -refresheDataset $True
Et voici le code du script UpdateDatasetParameters.ps1 :
<#
.SYNOPSIS
Met à jour les paramètres d'un jeu de données
.DESCRIPTION
Modifie la valeur des paramètres d'un jeu de données par les valeurs passées en paramètre du script.
Si un paramètre indiqué n'existe pas dans le jeu de donnée, il est ignoré.
.PARAMETER datasetName
Specifies the file name.
.PARAMETER paramList
Liste des paramètres avec leurs valeurs au format JSON.
.PARAMETER refresheDataset
Si vrai, lance le traitement du jeu de données après la mise à jour des paramètres.
.INPUTS
.OUTPUTS
.EXAMPLE
C:\PS> UpdateDatasetParameters.ps1 -datasetName "MonRapport" -paramList '{"Instance SQL": "AZER-123", "Base de données": "SourceDb"}'
.EXAMPLE
C:\PS> UpdateDatasetParameters.ps1 -datasetName "MonRapport" -paramList '{"NbAnnéesHisto": 10}' -refresheDataset = $false
.LINK
https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/get-parameters
.LINK
https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/update-parameters
#>
param(
[Parameter()]
[String]$datasetName
, [String]$paramList
, [Bool]$refresheDataset = $true
)
<#
$datasetName = "FormationDAX_EchoPilote"
$paramList = '{"Instance SQL": "AZER-123", "Base de données": "SourceDb"}'
$refresheDataset = $false
#>
##identifier le dataset
$datasets = Get-PowerBIDataset
$datasetId = $($datasets | Where-Object {$_.name -like $datasetName }).id.guid
if($datasetId -eq $null){
Write-Error "Cant find the dataset $datasetName"
}
$currentParameters = Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/$datasetId/parameters" -Method Get
##changer les paramètre du dataset
$updatedParameters = @()
$paramList | ConvertFrom-Json | Get-Member -MemberType NoteProperty | ForEach-Object {
$paramName = $_.name
$paramValue = $_.ToString().Split("=")[1]
$paramIsValid = $false
$($currentParameters | ConvertFrom-Json).value | ForEach-Object {
if($_.name -eq $paramName){
$paramIsValid = $true
}
}
if($paramIsValid){
$param = New-Object -TypeName psobject
$param | Add-Member -MemberType NoteProperty -Name name -Value $paramName
$param | Add-Member -MemberType NoteProperty -Name newValue -Value $paramValue
$updatedParameters += $param
}
}
$body = New-Object -TypeName psobject
$body | Add-Member -MemberType NoteProperty -Name updateDetails -Value $updatedParameters
Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/$datasetId/Default.UpdateParameters" -Method Post -Body $($body| ConvertTo-Json)
##recharger le dataset
if($refresheDataset){
Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/$datasetId/refreshes" -Method Post -Body "{}"
}
#nouveaux parametres
Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/datasets/$datasetId/parameters" -Method Get