Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
1 year ago
Solved

Power BI Rest API - $PbiRestApi + "admin/datasets/" + $DatasetId + "/datasources"

I've been using Power BI Rest API to extract datasource information given a dataset id. It was working fine for the last 7 months. I had many attempts this week but it is erroring out after 300 itera...
  • Anonymous's avatar
    Anonymous
    1 year ago

    Hi All,

     

    The Scanner API didn't meet my needs, so I resolved the issue by running the admin API at 1-hour intervals to bypass the limits. The code below, broken down into six separate runs, worked for me. I hope this helps anyone facing a similar issue.

     

    # Base API for Power BI REST API
    $PbiRestApi = "https://api.powerbi.com/v1.0/myorg/"

    # Define the run number
    $Runnumber = 1

    # Change the api based on run number
    if ($Runnumber -eq 1)
    {
    $ApiCall = "/admin/datasets?%24top=300"
    }
    elseif ($Runnumber -eq 2)
    {
    $ApiCall = "/admin/datasets?%24top=300&%24skip=300"
    }
    elseif ($Runnumber -eq 3)
    {
    $ApiCall = "/admin/datasets?%24top=300&%24skip=600"
    }
    elseif ($Runnumber -eq 4)
    {
    $ApiCall = "/admin/datasets?%24top=300&%24skip=900"
    }
    elseif ($Runnumber -eq 5)
    {
    $ApiCall = "/admin/datasets?%24top=300&%24skip=1200"
    }
    else
    {

    $ApiCall = "/admin/datasets?%24top=300&%24skip=1500"
    }

    #=================================================================
    # General tasks
    #=================================================================
    # Sign in to the Power BI Service using OAuth
    Write-Host -ForegroundColor White "Sign in to connect to the Power BI Service";
    Connect-PowerBIServiceAccount

    #=================================================================## Dataset tasks
    #=================================================================
    # List all datasets
    Write-Host "Collecting dataset metadata..."
    $GetDatasetsApiCall = $PbiRestApi + $ApiCall
    $AllDatasets = Invoke-PowerBIRestMethod -Method GET -Url $GetDatasetsApiCall | ConvertFrom-Json
    $ListAllDatasets = $AllDatasets.value

     

    #=================================================================
    # Function to get dataset datasources results
    #=================================================================

     

    # Create empty json array
    $DatasetResults = @()

    # Get datasources for each dataset in defined workspace
    $counter = 0
    foreach($Dataset in $ListAllDatasets) {
    $counter++
    $DatasetHistories = GetDatasetDataSources -DatasetId $Dataset.id
    foreach($DatasetHistory in $DatasetHistories) {
    Add-Member -InputObject $DatasetHistory -NotePropertyName 'DatasetId' -NotePropertyValue $Dataset.id
    $DatasetResults += $DatasetHistory
    }
    Write-Host "Incremented counter: $counter"
    }

     

    Function GetDatasetDataSources {
    [cmdletbinding()]
    param (
    [parameter(Mandatory = $true)][string]$DatasetId
    )
    Write-Host "Collecting dataset datasources..." $DatasetId
    $GetDatasetDatasources = $PbiRestApi + "admin/datasets/" + $DatasetId + "/datasources"
    $DatasetDatasources = Invoke-PowerBIRestMethod -Method GET -Url $GetDatasetDatasources | ConvertFrom-Json
    return $DatasetDatasources.value
    }