Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在没有密码的情况下发布powerbi报告?_Powerbi_Powerbi Desktop_Powerbi Datasource - Fatal编程技术网

是否可以在没有密码的情况下发布powerbi报告?

是否可以在没有密码的情况下发布powerbi报告?,powerbi,powerbi-desktop,powerbi-datasource,Powerbi,Powerbi Desktop,Powerbi Datasource,下午好 我们的开发人员使用PBI创建了一些不错的报告,但问题是他们使用的是数据库X。这些数据库只包含开发数据。一旦他们想要发布报告,我们就必须调整他们的报告以使用数据库Y,其中包含内容生产数据 开发人员是否有办法发布报告,将数据库从X更新到Y,但不添加凭据? 通过这种方式,他们的报告将通过网关刷新,网关将设置为使用指向DB Y的UID/PWD链接(用户无法访问) 谢谢:)嗯,毕竟有人知道数据库Y的密码,对吗?为什么不在Power BI Desktop中打开报告,更改数据源并发布它?但是,当数据源

下午好

我们的开发人员使用PBI创建了一些不错的报告,但问题是他们使用的是数据库X。这些数据库只包含开发数据。一旦他们想要发布报告,我们就必须调整他们的报告以使用数据库Y,其中包含内容生产数据

开发人员是否有办法发布报告,将数据库从X更新到Y,但不添加凭据? 通过这种方式,他们的报告将通过网关刷新,网关将设置为使用指向DB Y的UID/PWD链接(用户无法访问)


谢谢:)

嗯,毕竟有人知道数据库Y的密码,对吗?为什么不在Power BI Desktop中打开报告,更改数据源并发布它?但是,当数据源仍然是开发数据库(database X)时,可以选择重定向开发人员发布的报告

首先,它们可以用来定义数据源。然后,在发布之后,知道凭据的人更新参数值以将数据库重定向到生产数据库并输入凭据

第二个不需要对报告进行任何更改。让您的开发人员发布它,然后使用和。这可以通过使用PowerShell来实现。首先,以管理员身份启动PowerShell,并通过执行以下脚本安装cmdlet:

Install-Module MicrosoftPowerBIMgmt
如果您在计算机上没有管理员权限,或者出于其他原因不想为所有用户安装这些权限,则只能为当前用户安装这些权限:

Install-Module MicrosoftPowerBIMgmt -Scope CurrentUser
您没有提到使用了什么数据库。这很重要,因此在下面的示例中,我将假定它是SQL Server。更新前几行中的值以指向生产数据库和已发布的报告,然后执行脚本以更改数据源:

# Fill these ###################################################
$workspaceName = "The name of the workspace where the report is published"
$datasetName = "The name of the report"
$sqlDatabaseServer = "Server name"
$sqlDatabaseName = "Database name"
$username = "powerbiuser@yourcompany.com"
$password = "the password of the power bi user" | ConvertTo-SecureString -asPlainText -Force
################################################################

Import-Module MicrosoftPowerBIMgmt

Clear-Host

$credential = New-Object System.Management.Automation.PSCredential($username, $password)

Connect-PowerBIServiceAccount -Credential $credential | Out-Null

$workspace = Get-PowerBIWorkspace -Name $workspaceName

$dataset = Get-PowerBIDataset -WorkspaceId $workspace.Id -Name $datasetName

$datasource = Get-PowerBIDatasource -WorkspaceId $workspace.Id -DatasetId $dataset.Id

# Construct url
$workspaceId = $workspace.Id
$datasetId = $dataset.Id
$datasourceUrl = "groups/$workspaceId/datasets/$datasetId/datasources"

# Call the REST API to get gateway Id, datasource Id and current connection details
$datasourcesResult = Invoke-PowerBIRestMethod -Method Get -Url $datasourceUrl | ConvertFrom-Json

# Parse the response
$datasource = $datasourcesResult.value[0]
$gatewayId = $datasource.gatewayId
$datasourceId = $datasource.datasourceId
$sqlDatabaseServerCurrent = $datasource.connectionDetails.server
$sqlDatabaseNameCurrent = $datasource.connectionDetails.database

# Construct url for update
$datasourePatchUrl = "groups/$workspaceId/datasets/$datasetId/Default.UpdateDatasources"

# create HTTP request body to update datasource connection details
$postBody = @{
  "updateDetails" = @(
   @{
    "connectionDetails" = @{
      "server" = "$sqlDatabaseServer"
      "database" = "$sqlDatabaseName"
    }
    "datasourceSelector" = @{
      "datasourceType" = "Sql"
      "connectionDetails" = @{
        "server" = "$sqlDatabaseServerCurrent"
        "database" = "$sqlDatabaseNameCurrent"
      }
      "gatewayId" = "$gatewayId"
      "datasourceId" = "$datasourceId"
    }
  })
}

$postBodyJson = ConvertTo-Json -InputObject $postBody -Depth 6 -Compress

# Execute POST operation to update datasource connection details
Invoke-PowerBIRestMethod -Method Post -Url $datasourePatchUrl -Body $postBodyJson

# NOTE: dataset credentials must be reset after updating connection details
现在更新以下脚本开头的值,并执行它以修补生产数据库的凭据:

# Fill these ###################################################
$workspaceName = "The name of the workspace where the report is published"
$reportName = "The name of the report"
$sqlUserName = "user name"
$sqlUserPassword = "password"
$username = "powerbiuser@yourcompany.com"
$password = "the password of the power bi user" | ConvertTo-SecureString -asPlainText -Force
################################################################

Import-Module MicrosoftPowerBIMgmt

Clear-Host

$credential = New-Object System.Management.Automation.PSCredential($username, $password)

Connect-PowerBIServiceAccount -Credential $credential | Out-Null

$workspace = Get-PowerBIWorkspace -Name $workspaceName

$dataset = Get-PowerBIDataset -WorkspaceId $workspace.Id -Name $reportName

$workspaceId = $workspace.Id
$datasetId = $dataset.Id

$datasources = Get-PowerBIDatasource -WorkspaceId $workspaceId -DatasetId $datasetId

foreach($datasource in $datasources) {

  $gatewayId = $datasource.gatewayId
  $datasourceId = $datasource.datasourceId
  $datasourePatchUrl = "gateways/$gatewayId/datasources/$datasourceId"

  Write-Host "Patching credentials for $datasourceId"

  # HTTP request body to patch datasource credentials
  $userNameJson = "{""name"":""username"",""value"":""$sqlUserName""}"
  $passwordJson = "{""name"":""password"",""value"":""$sqlUserPassword""}"

  $patchBody = @{
    "credentialDetails" = @{
      "credentials" = "{""credentialData"":[ $userNameJson, $passwordJson ]}"
      "credentialType" = "Basic"
      "encryptedConnection" =  "NotEncrypted"
      "encryptionAlgorithm" = "None"
      "privacyLevel" = "Organizational"
    }
  }

  # Convert body contents to JSON
  $patchBodyJson = ConvertTo-Json -InputObject $patchBody -Depth 6 -Compress

  # Execute PATCH operation to set datasource credentials
  Invoke-PowerBIRestMethod -Method Patch -Url $datasourePatchUrl -Body $patchBodyJson
}

$datasetRefreshUrl = "groups/$workspaceId/datasets/$datasetId/refreshes"

Write-Host "Refreshing..."

Invoke-PowerBIRestMethod -Method Post -Url $datasetRefreshUrl 

谢谢你的回答。我们正在使用Teradata。问题是我们想给最终用户以灵活性;我们不希望每次他们生成/更新报告时都联系我们发布报告(我们有1000多份报告PBI^^)。关于我所测试的解决方案,我还尝试查看是否可以在ODBC的连接字符串中添加参数(一旦获取数据完成),但没有办法。。。我的想法是在报告发布后更改网关上的参数“为最终用户提供灵活性”意味着什么?现在还不清楚你想要实现什么。如果我不清楚,很抱歉。今天我们的用户可以发布他们的报告(几个人可以更新),目标是PRD db(Y),从安全角度来看,这是不允许的。将来,为了能够创建从PRD db(Y)收集数据的报告,他们必须使用自己的开发数据库(X_USER1/2/3/…)。db X_USER1是一个个性化的数据库,这意味着如果有几个人处理报告,每个人都有自己的开发数据库。¨问题是,如果用户希望使用生产数据库设置自动刷新,我们必须更改报告上的DB,并使用DB在网关上配置连接。a)或者开发人员能够在没有访问权限的情况下使用数据库Y调整和发布报告。问题是PBI桌面需要uid/pwd并防止发布。如何跳过它?b) 我们在连接字符串中使用参数:DATABASE=@MYDB;DSN=TeradatDev,但无法在ODBC连接字符串上使用变量(我们可以在Power查询中使用变量,但我们希望避免这种情况,因为创建报告的人不是it人员)。c) 我们建立了一个基于Azure Devops(CICD)的解决方案,链接到您提到的解决方案(脚本)d)我们拥有所有报告的所有权。。。