Forum Discussion

orsmolnar28's avatar
orsmolnar28
New Member
6 years ago

Getting the PbiServiceModelId so we can change the dataset against a report (pbix file).

Hi everyone,

 

I exported a report+dataset from PowerBI Desktop and after unzipping the pbix file I would like to amend the connections json in order to change the dataset against the report. There are three fields which need to be changed: 

 

Catalog: Which is the datasetID

PbiModelDatabaseName: Which is the datasetID again.

PbiServiceModelId: which is 7digits(in my case), but have no idea how can I get this digit through the API.

 

It is crucial to get this through a "programable" way (so through api).

 

I saw few post about this but haven't found the answer.

 

Someone managed to do this somehow? It would be very very very useful 🙂

 

Thank you.

2 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    I have the same issue.

    Anyone has a solution here?

    Anyone knows what the PbiServiceModelId exactly is?

     

    What i found out:

    If you change the datasetID and open the pbix file again it is reestablishing the connection to the PBIService and after saving the PbiServiceModelId is changed.

    But I do not know how to get the id via API.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Currently there is no straight forward approach to retrieve PbiServiceModelId(numeric digit) using API. 

      There are multiple workarounds you could try to do the automation. I have followed below mentioned approach. 

       

      1. Deploy Model.pbix to pbi service. 

      2. Login to powerbi.com to grab the PbiServiceModelId.  After logging in navigate to any workspaces, it makes a call to SharedDatasets to fetch all datasets.  You could grab the right one. 

      3. You can use below ZipUnZip function to update the connection.

       

      function Set-DatasetId([string] $directoryPath, [string] $reportName)
      {

      $zipFileName = "$($directoryPath)\$($reportName).zip"
      $pbiFileName = "$($directoryPath)\$($reportName).pbix"
      Copy-Item $pbiFileName $zipFileName -Force

      $unZippedirname = "$($directoryPath)\$($reportName)"
      Expand-Archive -Path $zipFileName -DestinationPath $unZippedirname -Force -Verbose
      Write-Host "$($directoryPath)\$($reportName)"
      $securityBindingsFileName = "$($unZippedirname)\SecurityBindings"
      Remove-Item -Path $securityBindingsFileName -Force -ErrorAction SilentlyContinue

      $connectionFileName = "$($unZippedirname)\Connections"
      $fileContent = (Get-Content -Raw $connectionFileName) -replace $global:orgdatasetId, $global:PPACModelDatasetId
      $fileContent = $fileContent -replace $global:orgModelId , $PpacModelId
      $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
      [System.IO.File]::WriteAllLines($connectionFileName, $fileContent, $Utf8NoBomEncoding)

      $contentTypesFileName = "$($unZippedirname)"
      Get-ChildItem "$contentTypesFileName" -Filter *.xml | Sort-Object -desc |
      Foreach-Object {
      $contentTypeorg= $_.Name
      $filenameExracted= $_.Name.Replace("[","``[").Replace("]","``]")

      if ($filenameExracted -eq "``[Content_Types``].xml")
      {
      $filenameExracted= $contentTypesFileName+'\'+ $filenameExracted
      $fileContent = (Get-Content -Raw $filenameExracted) -replace '<Override PartName="/SecurityBindings" ContentType="" />', ''
      $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
      #[System.IO.File]::WriteAllLines($_.FullName, $fileContent, $Utf8NoBomEncoding)
      }
      }

      $ZipDirName = "$($unZippedirname)\*"
      Compress-Archive -Path $ZipDirName -DestinationPath $zipFileName -Update -Verbose
      Remove-Item -Path $pbiFileName -Force -ErrorAction SilentlyContinue -Verbose
      Copy-Item $zipFileName $pbiFileName -Force -Verbose
      Write-Host "PowerBI file $($reportName) are updated with dataset"
      }