Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PowerBI Deployment Example

Simple example of how to setup a deployment pipeline for Power BI dataset(s) from pbix file stored in git to Power Bi Service.

Pre-reqs for this to run

This example assumes that you have a Azure DevOps project at hand as well as one custom action installed in the Azure DevOps organization your project is created within.

  • Access to Azure DevOps project to run pipeline.
  • Power BI Actions externsion installed in your Azure DevOps Organization.
  • Power BI Service Connection configured in Azure DevOps.
  • Service account details available (Azure AD account) during configuration of Power BI Service Connection has been granted admin privilages on workspace.

General setup

This describes the general configuration required before pipeline run's in Azure DevOps can be completed successfully.

Create Service Connection for Power BI in Azure DevOps

In your Azure DevOps project start by creating a new Service Connection with connection type Power BI Service Connection. You will fins the New Service Connection button by navigating to Project Settings -> Service Connections.

Alt text

In this example I have used Username/Password and after that the below settings to configure the service connection:

  • Organization type = Commercial (Public)
  • Username = email_address_of_serviceaccount@somecompany.com
  • Password = [your password]
  • Service connection name = PBI_SC_PRODUCTION

When done click Save

Grant service account access

The service account used when settings up the Service Connection in the previous step need to be granted admin privilages in all the workspaces you want to deploy reports/datasets to.

Add PBIX files to git repo

You need to ahve a t least one pbix available in your git repo. It will be assumed that the PBIX files are saved in a folder named power-bi in the root of the git repo. In this example the pbix file also has one paramter configured called paramServer which is used to set the connectionstring used by the report.

Azure DevOps pipeline setup

Build stage

Our build stage will copy any pbix file added to the demo/power-bi folder to our artifact and publish it.

name: pipeline-pbixparameters:
- name: tenantId #Only needed if you want to configure log exporttype: string
- name: subscriptionId #Only needed if you want to configure log exporttype: string
- name: serverUrltype: string
- name: serviceAccountUserNametype: string
- name: serviceAccountPasswordtype: string
- name: logAnalyticsWorkspaceRgName #Only needed if you want to configure log exporttype: string
- name: logAnalyticsWorkspaceName #Only needed if you want to configure log exporttype: stringtrigger:
branches:
include:
- mastervariables:
- name: pbiServiceConnectionNamevalue: "PBI_SC_PRODUCTION"
- name: pbiWorkspaceNamevalue: "demo-workspace-1"
- name: pbiWorkspaceIdvalue: "82db5f5a-de46-4ab8-a4fa-3c890ebab893"
- name: pbiGatewayIdvalue: "97401768-9a0a-4973-a0e6-c60ed61adab4"stages:
- stage: builddisplayName: Buildjobs:
- job: Buildsteps:
- task: CopyFiles@2displayName: "Copy PBIX resources"inputs:
SourceFolder: "demo/power-bi"Contents: "**"TargetFolder: "demo/pbix-files"flattenFolders: false
- task: CopyFiles@2displayName: "Copy PowerShell scripts"inputs:
SourceFolder: "demo/ps"Contents: "*.ps1"TargetFolder: "demo/ps"flattenFolders: false
- task: PublishBuildArtifacts@1displayName: Publish Artifactinputs:
ArtifactName: demo-artifact

Deployment stage

As a starting point we use the Power Bi Actions task to publish the pbix file to the Power Bi Service and spcified workspace.

- task: PowerBIActions@5displayName: "Publish PBIX file to workspace"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "Publish"WorkspaceName: $(pbiWorkspaceName)PowerBIPath: "${{ Pipeline.Workspace }}/demo-artifact/INDE_RESOURCES/Sales"Create: false

To be able to configure settings and values for parameters we need to take ownership of the published pbix file. We can do that using the Power Bi Actions task again.

Please note that the example below will update this parameter on all dataset's present in the workspace.

- task: PowerBIActions@5displayName: "Take ownership of files"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "TakeOwnership"WorkspaceName: $(pbiWorkspaceName)UpdateAll: true

Next we will change the value for the dataset parameter named paramServer. This action is also available in the Power Bi Action extension. The actual server url will be provided in the pipeline parameter called serverUrl.

Please note that the example below will update this parameter on all dataset's present in the workspace. If you want to update a specific dataset only that is also possible but not shown in this example. More infromation can be found here.

- task: PowerBIActions@5displayName: "Update dataset parameters"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "UpdateParameters"UpdateAll: trueWorkspaceName: $(pbiWorkspaceName)ParameterInput: "[{'name' : 'paramServer', 'newValue' : '${{ parameters.serverUrl }}'}]"

In the following two steps we will need to use custom PowerShell script. For them to run without issues we need to make sure that PowerShell module MicrosoftPowerBIMgmt is installed on the build agent.

- task: PowerShell@2displayName: "Install MicrosoftPowerBIMgmt module"inputs:
targetType: "inline"script: | If(-not(Get-InstalledModule MicrosoftPowerBIMgmt -ErrorAction silentlycontinue)){ Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force }

The next step is only required if your dataset requires a On-premise data gateway to connect to the data source. If not you can skip this next step.

There is no action within the PowerBiActions actions to bind a dataset to a gateway so we need to run a custom PowerShell script to accomplish this.

- task: PowerShell@2displayName: "Bind datasets to gateway"inputs:
filePath: "path/to/demo-artifact/ps/pbi-bind-datasets-to-gateway.ps1"arguments: "-groupId '$(pbiWorkspaceName)' -gatewayId '${{ variables.powerBIGatewayId }}'"env:
saUserName: "${{ parameters.serviceAccountUserName }}"saPassword: "${{ parameters.serviceAccountUserPassword }}"

The next task will configure export of logs to Azure Log Analytics. To accomplish this we will again use a custom PowerShell script. Unfoutunatly this operation is somewhat undocumented and the current version of the script only supports configuration of Power BI workspaces hosted in Azure North Europe data center. If you run your broswer dev tools you should be able to easily find the url used by your Power BI Tenant and modify the script using it

- task: PowerShell@2continueOnError: truedisplayName: "Configure export of PBI Workspace logs to Azure Log Analytics"inputs:
filePath: "path/to/demo-artifact/ps/pbi-configure-logging.ps1"arguments: "-resourceGroup ${{ parameters.logAnalyticsWorkspaceRgName }} -laWorkspaceResourceName ${{ parameters.logAnalyticsWorkspaceName }} -subscriptionId ${{ parameters.subscriptionId }} -tenantId ${{ parameters.tenantId }} -pbiGroupId $(pbiWorkspaceId)"

Last but not least we will trigger a refresh of the dataset. We can use a built in action to accomplish this. This step is of course not needed if you have a dataset build using Direct Query.

- task: PowerBIActions@5continueOnError: truedisplayName: "Refresh dataset"inputs:
PowerBIServiceEndpoint: $(pbiServiceConnectionName)Action: "DataRefresh"WorkspaceName: "$(pbiWorkspaceName)"DatasetName: "demo-dataset"

About

Simple example of how to setup deployment of Power BI dataset from pbix file stored in git to Power Bi Service

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages