PowerShell - Loop Through Nested Objects
I rejigged your code a little to make it tidier. I don't have PowerBI, so I haven't tested it, and I can't guarantee that I haven't done anything dumb.

I got rid of the nested loop. Note the -PipelineVariable ws. What that does is put the output of that stage of the pipeline into a variable called $ws, which we can refer to later. It means that we don't need to do $ws = $_.

-PipelineVariable is one of the "Common Parameters", and is available on many or most cmdlets. You can abbreviate it to -PV, by the way.

I also got rid of the intermediate array $myArray since it wasn't needed.

Install-Module -Name MicrosoftPowerBIMgmt

Login-PowerBIServiceAccount

Get-PowerBIWorkspace -Scope Organization -PipelineVariable ws | 
    ForEach-Object { Get-PowerBIReport -WorkspaceId $_.Id } | 
    ForEach-Object {
            [pscustomobject]@{
                workspaceId   = $ws.Id
                workspaceName = $ws.Name
                reportId      = $_.id
                reportName    = $_.Name
                reportUrl     = $_.WebUrl
             }
        } |
    Export-Csv "PowerBIWorkspaceReports.csv"