Author: James Mounsey-Moran

  • My Path to Product: PowerBI & Prism

    My Path to Product: PowerBI & Prism

    Yes, that is Sonic the Hedgehog (those who know me will know I’m a bit of a fan). But more than just nostalgia, this was one of the last 3D models I created—somewhere between 10 and 15 years ago—right before I met my now wife and started a family. Oddly enough, it’s also where the mindset that helped me build Prism really began. This is my path to product: PowerBI & Prism.

    Back then, I used to spend hours tweaking and changing all the aspects big and small of the design, lighting, textures and just about everything involved in my 3D work (I actually did Games Development at University).

    I have always been into tech so had built myself a powerhouse of a PC to work on these things.

    As I moved into working for Trustmarque, whilst I was still very tech focused and now involved in the world of licensing, I still had that desire to create.

    I had worked with Microsoft products most of my life in some form or another and at this point understood pretty much all involved to a certain degree with IT infrastructure.

    A few years in, I was introduced to Microsoft PowerBI, a product that I had never touched before but one that turned out to be exactly what I needed.

    I’ve been told several times I have a bit of a superpower: the ability to learn insanely fast, especially if I can then go build something with what I’ve learned

    I never took any formal training for PowerBI as I learnt best by doing. Some of the fantastic content creators out there, a lot of who I now engage with were the perfect resource to understand visuals, DAX, measures, everything. I went through tonnes of content and then applied what I already knew.

    PowerBI became that evolution of creating 3D renders of Sonic.

    I started collecting data, building dashboards, experimenting with design and UX, and exploring new ways to interact with data—many of which were still rare or new at the time.

    Eventually, it turned into a product. One I was passionate about, not because I was told to build it, but because I wanted to. (I even loaded up Photoshop and made the logo).

    At this point I had no idea how successful Prism would become.

    There were other tools on the market—many built by much bigger dev teams using more conventional approaches. But Power BI gave me an edge: speed and adaptability.

    Making a product using PowerBI as a base meant I could adapt to changes in the IT market (and there are a lot) very quickly.

    I could respond to customer feedback in near real-time. I could change visuals, metrics, or layouts in hours—not weeks.

    Now, I’m a Lead Product Manager at Trustmarque, Prism is used by customers around the world, Trustmarque has built services around Prism to great success and the product receives nothing but praise.

    It’s not one I ever expected, but product management with Power BI turned out to be my ideal job.

    Sure, it has its stresses. But every day, I get to build, come up with new ideas, meet new exciting people, and help others see more clearly—through data.

    So, the original thought for this blog post. what would I say to someone just starting out?

    • Find data that means something to you. Maybe you’ve worked with it before, or maybe it’s just something that grabs your attention.
    • Just build. It won’t be perfect. It shouldn’t be. But each dashboard you tweak, each visual you redesign, will teach you something new.
    • Design matters. A great UI can make your dashboard. Play with colour palettes—Coolors is a great resource for that.
    • Think scale early. Whether it’s your data source, Power BI capacity, or your deployment strategy—plan ahead.
    • Consider Power BI Embedded if you’re heading into product. It opens up possibilities beyond licensing and lets you create apps around your reports.
    • Adapt fast. This is Power BI’s secret weapon in product. Use it.
    • Document it. I’m now using my Aether platform and blog posts to share lessons I’ve learned along the way. You should too!

    If you’re interested in scaling, automation, and pushing updates across environments, I’ve written a few PowerShell posts that might help too.

    Thanks for reading—and if you’re just starting out, enjoy it. I started with Sonic. You can start wherever you like.

    Bonus!

    And just in case you were interested here were a couple of others out of what seems loads! Seems a long time ago now!

  • Add permissions to PowerBI Deployment pipelines

    Add permissions to PowerBI Deployment pipelines

    A relatively simple post today, but just this past week a customer came to me with an issue where they had accidentally removed permissions from one of their primary PowerBI deployment pipelines. They still had the PowerBI service admin permissions but could no longer see the pipelines via the PowerBI site.

    Naturally, as per recent blogs. I wrote a PowerShell script that links into the PowerBI Rest API that can then add permissions to PowerBI Deployment pipelines!

    Hopefully if you find yourself in a similar situation this script may quickly help you out

    I’ve broken this script down into three parts, get a list of all pipelines so we can find the specific IDs, check existing pipeline users and then add new users.

    • Firstly we connect to the PowerBI service (this is going to be needed for all 3 parts)
    • We then define the API endpoint we want to use to target all pipelines. $apiUrlPipelines = “admin/pipelines” . Note we use the admin endpoint otherwise the script will only target what your user account specifically has access to
    • Invoke the PowerBI Rest method to pull back information on all pipelines – we are mainly interested in the pipeline IDs
    • Using our existing connection to the PowerBI service
    • We then define the API endpoint of the specific pipeline using the Pipeline ID as one of the variables
    • Finally invoke the PowerBI Rest method, which will pull back the existing users
    • Again using the existing connection
    • And also the same API endpoint we used to check for existing users
    • Using the email address / upn of the user to add in a variable we then load the body to POST to the API endpoint. In this script I have set the access right as Admin and the principal type as User
    • Invoke the PowerBI Rest method, to then add the User account

    https://github.com/AetherAdv/powerbi_powershell_addpipelinepermissions

    Connect-PowerBIServiceAccount
    
    
    # Get list of pipelines (optional)
    $apiUrlPipelines = "admin/pipelines"
    $pipelineList = Invoke-PowerBIRestMethod -Url $apiUrlPipelines -Method Get
    
    #---------------------------------
    
    $pipelineId = "####"
    $userEmail = "user@example.com"
    
    # Get users assigned to a pipeline
    $apiUrlUsers = "admin/pipelines/$pipelineId/users"
    $pipelineUsers = Invoke-PowerBIRestMethod -Url $apiUrlUsers -Method Get
    $pipelineUsers | ConvertTo-Json -Depth 2
    
    
    # Add a user as Admin
    $body = @{
        identifier = $userEmail
        accessRight = "Admin"
        principalType = "User"
    } | ConvertTo-Json -Depth 3
    
    Invoke-PowerBIRestMethod -Url $apiUrlUsers -Method Post -Body $body -ContentType "application/json"
    
  • Uploading new reports with PowerShell

    Uploading new reports with PowerShell

    At this point you may be starting to wonder how many PowerShell scripts I have for working with PowerBI, turns out quite a few! Uploading new reports with PowerShell is the latest one!

    As Prism grew I was looking at more workspaces and more reports, and so I turned to what I knew best at the time, PowerShell. Whilst going into PBI desktop, ensuring the data was loaded up then publishing to the PowerBI service doesn’t take a huge amount of time individually, but when building a product I needed much greater flexibility.

    So what this latest script does is solve that exact problem.

    The PBIX files I have are all loaded into source control but have a copy ready that is synced via VsCode. This script will pick up that file and upload it to the PowerBI workspace as required. (Even creating the PowerBI workspace and adding permissions at the same time if needed!)

    In my case and something you may be interested in as well, I then combined this script with a couple of the others I have already posted about. Adding parameters and setting refresh times. At this point you can automate the whole thing end to end!

    How does it work?

    This script whilst looks simple, will do quite a few things!

    Firstly, you need to provide a name for your workspace and a name for your report. These are going to be what the script uses, regardless of what your PBIX file is named already.

    If using this part of the code, you will also need to supply your capacity ID. This is so the workspace can then link up with your premium / embedded / fabric etc capacity. Note this will require you to have a level of admin permissions in your organisation if you want to do this automated.

    Once it has set those, it will add a new user (usually best to have more than just yourself as an admin on these things). In this example ive added a user, you can add groups , distribution lists all sorts. Prism for example, we have support teams as group who get applied to new workspaces.

    Lastly it will upload the PBIX file you specified, name it how you wanted all ready to go!

    The Script

    Connects to the PowerBI service Account

    Uses the parameters you have set to:

    Create a PowerBI workspace

    Add it to the specified capacity

    Adds a new admin user

    Add the PowerBI report

    Like I say, combine this with the other PowerShell scripts I have posted about uploading new reports with PowerShell will then go even further! Especially if you are using PowerBI as part of a product or simply dealing with many workspaces and reports.

    https://github.com/AetherAdv/powerbi_powershell_addnew

    # Ensure Power BI module is installed
    Import-Module MicrosoftPowerBIMgmt
    
    # Connect to Power BI (if not already connected)
    Connect-PowerBIServiceAccount
    
    # Define conflict action
    $Conflict = "CreateOrOverwrite"
    
    # Define Capacity ID
    $CapacityId = "00000000-0000-0000-0000-000000000000"  # Replace with your capacity ID
    
    # Define workspace details
    $WorkspaceName = "AETHER - MyNewWorkspace"
    
    # Define report details
    $ReportName = "AETHER - MyReport"
    
    # Define PBIX file path
    $DeployPath = "C:\Temp\myreport.pbix"
    
    # Create the workspace
    $Workspace = New-PowerBIWorkspace -Name $WorkspaceName
    
    # Wait a few seconds for workspace creation - just incase it needs time to be accessible
    Start-Sleep -Seconds 5
    
    # Assign the workspace to a Power BI Premium capacity - Not this will require some additional licence and access considerations to do with commands!
    Set-PowerBIWorkspace -Id $Workspace.Id -CapacityId $CapacityId -Scope Organization
    
    # Add a user as an admin
    Add-PowerBIWorkspaceUser -Id $Workspace.Id -UserPrincipalName "user@jamesmm.com" -AccessRight Admin
    
    # Publish the Power BI report
    New-PowerBIReport -Path $DeployPath -Name $ReportName -WorkspaceId $Workspace.Id -ConflictAction $Conflict