power-bi

Ruby wrapper around the Power BI API

Initialization

The Power BI API does not handle the authorization part. It requires the user to pass a function where it can request tokens.

pbi = PowerBI::Tenant.new(->{token = get_token(client, token) ; token.token})

Supported endpoints

Workspaces (aka Groups)

  • List workspaces: pbi.workspaces
  • Create workspace: pbi.workspaces.create
  • Upload PBIX to workspace: ws.upload_pbix('./test.pbix', 'new_datasetname_in_the_service')
  • Delete workspace: workspace.delete
  • Add a user to a wokspace: workspace.add_user('[email protected]')

Reports

  • List reports in a workspace: workspace.reports
  • Clone a report from one workspace to another: report.clone(src_workspace, new_report_name)
  • Rebind report to another dataset: report.rebind(dataset)
  • Export report to file: report.export_to_file(filenam, format: 'PDF')

Datasets

  • List datasets in a workspace: workspace.datasets
  • Update parameter in a dataset: dataset.update_parameter(parameter_name, new_value)
  • Get time of last refresh: dataset.last_refresh
  • Refresh the dataset: dataset.refresh
  • Delete the dataset: dataset.delete
  • Bind dataset to a gateway datasource: dataset.bind_to_gateway(gateway, gateway_datasource)

Gateways

  • List gateways: pbi.gateways

Gateway datasources

  • List datasources in a gateway: gateway.gateway_datasources
  • Update credentials of a gateway datasource: gateway_datasource.update_credentials(new_credentials)
  • Create a new gateway datasource: gateway.gateway_datasource.create(name, credentials, db_server, db_name)
  • Delete a new gateway datasource: gateway_datasource.delete

Note about gateway credentials

Power BI uses an obscure mechanism to encrypt credential exchange between the service and the gateway. The encryption must be done outside this module on a Windows machine based on th public key of the gateway. This is an example C# script:

using System;
using Microsoft.PowerBI.Api.Models;
using Microsoft.PowerBI.Api.Models.Credentials;
using Microsoft.PowerBI.Api.Extensions;


namespace pbi_credentials
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Kicking off");

            var credentials = new BasicCredentials(username: "cdmuser", password: "cdmuserpw4879515365");

            var publicKey = new GatewayPublicKey("AQAB", "ru5gTdHbJ+8eC/uwERTOMz9Yktf/kCDWeRDCY1M5fPCB9+p4c8Uk54/NzT5ZWPQCp958bLcO8nSOSOpz4I8fW/AI4d+JxwW6VCsxzue2mKbJjeuSDXXmIiNUFqvjOIolfSIxJFNlfWkZUFlaD3dXgJkjJxrrc4OrYBDUt0FF14UsvdZymTbOl39sAhD4i9CqkXTqm6+JDxsEkPE3GAZ6ZslCsRUqu7lX73anAHkm889FR9NOMtsLV02JDMKCblJqnoszTzgExEEeoTJKxLiJdC8Mfbl96fKFS8JElJIzfTPzldGx5TxdjRmekQODWr7SNMSVJJQTJaANh9C2FZ85pQ==");
            var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);

            var credentialDetails = new CredentialDetails(
                credentials,
                PrivacyLevel.Private,
                EncryptedConnection.Encrypted,
                credentialsEncryptor
            );
            Console.WriteLine(credentialDetails.Credentials);

            Console.WriteLine("Bye Bye");
        }
    }
}