SimplePBI 1.0.3
Simplify usage of Power Bi Rest API
License: MIT
Keywords: Power BI Rest API, Power BI, Power Bi API, PBI, LaDataWeb, Azure, Data, Python, Fabric, Microsoft Fabric, Fabric Rest API, Fabric API

# SimplePBI
![downloads](https://img.shields.io/badge/downloads-93k-brightgreen) ![downloads](https://img.shields.io/badge/downloads-3,3k%2Fmonth-brightgreen) [![PayPal donate](https://img.shields.io/badge/paypal-donate-ff69b4?logo=paypal)][donate-url] [![Twitter][twitter-follow]][twitter-url]
 
| [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)][donate-url] | Your help is appreciated. |
|-|-|

[twitter-url]: https://twitter.com/ignacho_07
[twitter-follow]: https://img.shields.io/twitter/follow/chemerisuk.svg?style=social&label=Follow%20me
[donate-url]: https://www.paypal.com/donate/?hosted_button_id=7A8YKN3HQ65LU

This is a simple library that makes it easy to use the Power Bi REST API and Fabric REST API. We have cover more than 80% of PowerBi request and now we are working with Microsoft Fabric too. One day SimplePBI will contain all the categories in both APIs, our at least that's our vision dream.
Feel free to check the doc to get a deeper understanding of a specific request: 
- Power Bi Doc: https://learn.microsoft.com/en-us/rest/api/power-bi/
- Fabric Doc: https://learn.microsoft.com/en-us/rest/api/fabric/articles/using-fabric-apis

We are doing our best to make this library useful for the community. This project is not a remunerable job for us. It's a public community open source project. It's a way to express our passion of sharing knowledge. Please be patient if you submit an issue and it's not fixed right away.
<br>Each category is an Object. This means we need to initialize an object to start using its methods. In order to create them we need the Bearer token that can be obtain from a Token Object. 
Let's see how we can create an Admin Object to try the requests in that category.

```python
# Import library
from simplepbi import token
from simplepbi import admin
from simplepbi.fabric import adminfab
```

We always need to import token object to create the object to run requests. Then we can pick the object of the Power Bi Rest API category we need. For instance "admin".
The token can be created in two ways, the regular authentication and the service principal one. It depends which one you pick to complete the request. 
These are the necessary arguments to get a token:
- tenant_id (you can get it from subscription resource in azure portal or ask for it to the IT department)
- app_client_id (your app_id/client_id from the App registered in Azure with permissions to Power Bi Service)
- username (professional email account in Azure AD)
- password (professional password)
- app_secret_key (secret key generated for the client id)
- use_service_principal (True to athenticate with Service Principal and False to continue with user credentials)


*NOTE: if you want to use service principal, be sure to have your tenant ready for that.
<br>Register app example: https://blog.ladataweb.com.ar/post/188045227735/get-access-token
<br>Service Principal permissions for admin api: https://docs.microsoft.com/en-us/power-bi/admin/read-only-apis-service-principal-authentication*


```python
# Creating objects

#Regular Login
tok = token.Token(tenant_id, app_client_id, username, password, None, use_service_principal=False)

#Service Principal
tok = token.Token(tenant_id, app_client_id, None, None, app_secret_key, use_service_principal=True)

ad = admin.Admin(tok.token)

it = adminfab.Items(tok.token)

```

As you can see the Token object contains a token attribute with the Bearer used by Azure to run rest methods. That attribute will be user to create the category objects like admin.
Once we create our Object like admin, we can start using the requests adding the correct parameters if they are needed.

```python
# Getting objects

All_Datasets = ad.get_datasets()

Datasets_In_Groups = ad.get_datasets_in_group(workspace_id)

Items_In_Workspace = it.list_items(workspace_id)

```

The library get requests will return a response object .json() that python reads it as a Dict.

## Preview methods
There are some methods in the classes that still need more testing. Those will have a "preview" at the end of the name. Please let us know if something goes wrong with those. All Fabric requests are in "preview" even though they don't have the clarification at the name.

## Current Categories
Right now the library is consuming endpoints from: 
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Admin_details.txt" target="_blank">Admin</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Groups_details.txt" target="_blank">Groups</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Datasets_details.txt" target="_blank">Datasets</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Dataflows_details.txt" target="_blank">Dataflows</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Reports_details.txt" target="_blank">Reports</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Dashboards_details.txt" target="_blank">Dashboards</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Apps_details.txt" target="_blank">Apps</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Imports_details.txt" target="_blank">Imports</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Gateways_details.txt" target="_blank">Gateways</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Capacities_details.txt" target="_blank">Capacities</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Pipelines_details.txt" target="_blank">Pipelines (Preview)</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Scorecards_details.txt" target="_blank">Scorecards (Preview)</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Az_Pause_Resume_details.txt" target="_blank">Azure Pause and Resume resource (Preview)</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Push_Datasets_details.txt" target="_blank">Push Datasets</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Fabric_Admin_details.txt" target="_blank">Fabric Admin</a>
- <a href="https://github.com/ladataweb/SimplePBI/blob/main/Fabric_Core_details.txt" target="_blank">Fabric Core</a>
- <a href="#" target="_blank">Fabric Data Pipelines</a>
- <a href="#" target="_blank">Fabric Semantic Models</a>

## Complex requests
If you want to get a deeper look on complex __Admin__ methods and unique methods. 
<a href="https://github.com/ladataweb/SimplePBI/blob/main/Admin_complex.md" target="_blank">Check this doc</a>

## Azure Pause Resume Resources
We have added a new feature to include some Azure Resource API Manager. The new "azpause" class will let you Pause or Resume Azure tabular or capacity resources. With SimplePBI you can pause and resume Fabric, Power Bi Embedded or Azure Analysis Services resources.
<a href="https://github.com/ladataweb/SimplePBI/blob/main/AzPauseResume.md" target="_blank">Check this doc</a>

## Additional content
There an aditional library Utils for transformations. It is used to help some requests returning different values.
The most useful method in the Utils class might be to_pandas. You can use the method to convert simple dicts to pandas. It needs the dict and the key father of a list of dicts in the response. The usual get responses are using "value" as the key.
We are also adding new methods with the requests to help get new actions. Examples:

### Example of our amazing unique requests
- get_orphan_dataflows_preview: get dataflows without dataset
- simple_import_pbix: makes publishing a pbix file easier
- simple_import_pbix_as_parameter: import a pbix from api response content
- simple_import_pbix_folder_in_group_preview: post a all pbix files in a local folder
- simple_import_from_devops: import a pbix from azure devops repo
- simple_import_from_github: import a pbix from azure github repo
- simple_copy_reports_between_groups: copy report from workspace to a workspace
- enhanced_refresh_dataset_in_group: a special request feature that not only eliminates the need for synchronous client connections to perform a refresh, but also unlocks enterprise-grade refresh capabilities.
- get_activity_events_preview (already iterating): makes the get activity events specified by date easier
- get_user_artifact_access_preview (already iterating): makes the get user artifact access easier
- get_widely shared_artifacts_published_to_web (already iterating): makes geting the published to web repos info easier
- get_dataset_roles_in_group: get all the roles from a single dataset in a specific workspace
- get_datasets_roles_in_groups: get all the roles from all datasets in a list of workspaces
- create_doc_by_content_dataset_in_group (deprecated by Rest API source): generate an html code file or text with a document of semantic model in a workspace organized by content
- create_doc_by_table_dataset_in_group (deprecated by Rest API source): generate an html code file or text with a document of semantic model in a workspace organized by tables

## Small categories
Small categories like Dataflow Storage Accounts and Available Features were moved to Groups and Admin.

# Missing endpoints
We are still developing the library. The following endpoints from admin are still missing
### Admin 
- Set and Remove LabelsAsAdmin
### Groups
- Update group User
### Reports
- Export To File (full request, there is a smaller simpler one)
- Get Export To File Status (regular and in groups)
- Get File Of Export To File (regular and in groups)
- Update Datasources (rdl files regular and in groups)
- Update Report Content (regular and in groups)
### Imports
- Create Temporary Upload Location
- Create Temporary Upload Location In Group
- Post Import (for xlsx, json and rdl)
- Post Import In Group (for xlsx, json and rdl)
### Gateways 
- Create Datasource (looks like there is a bug on the API)
- Update Datasource 
- Delete Datasource 
### Scorecards (preview)
- Patch By Id 
- Move Goals
### Embed Token
- All requests 
### Goals (preview)
- All requests
### Fabric API
- Admin (External data shares, labels and tenants)
- Core (Capacities, deployment pipelines, external data shares, gateways, managed private endpoints)
- All other categories

# Next Steps (planned items)
- Complete Fabric API requests for admin and core.
- Creating new awesome ideas.
- Keep completing missing endpoints category.
- Keep updating and building power bi ideas.




Change Log
==========

0.0.1 (04/09/2021)
-------------------
- First Commit

0.0.2 (29/10/2021)
-------------------
- Completing almost all the requests in Admin Section

0.0.3 (14/11/2021)
------------------
- Creating aditional content to admin and adding first commit for groups and datasets category

0.0.4 (15/11/2021)
------------------
- Repo/source going public. Adding datasets and groups Power Bi Rest API category.

0.0.5 (16/11/2021)
------------------
- Fixing error handling. Adding dataflows Power Bi Rest API category

0.0.6 (29/11/2021)
------------------
- Fixing install module issues

0.0.7 (29/11/2021)
------------------
- Fixing datasets for dax queries

0.0.8 (29/11/2021)
------------------
- Fixing typo for dax queries avoiding nulls

0.0.9 (04/01/2022)
------------------
- Adding new preview requests for subscriptions in Admin category. Those released this month by Power Bi.

0.0.10 (18/01/2022)
------------------
- Adding all dashboards requests and 80% of reports requests.

0.0.11 (08/04/2022)
------------------
- Adding widely shared artifacts requests for admin category. 
- Adding App category requests.
- Adding "get" requests from import category.

0.0.12 (20/05/2022)
------------------
- Fixing reports bugs and adding export to file as preview
- Adding post import file to workspace (only pbix files of less than 1gb)

0.0.13 (27/05/2022)
------------------
- Updating Import request ExecuteQueries with the new update from Microsoft making it GA.
- Creating a new method to import all pbix files in an specified local folder to a workspace

0.0.14 (27/07/2022)
------------------
- Adding almost all gateway category requests
- Adding new special request from ladataweb. Migrating reports between workspaces. Importing pbix files from Reponse.Content requests library to a Power Bi Service Workspace

0.0.15 (08/08/2022)
------------------
- Adding capacities category requests.
- Fixing descriptions

0.1.0 (03/10/2022)
------------------
- Adding pipelines and scorecards category requests.
- All component categories are now available with a little missing endpoints
- Completing at least 80% of request for all most frequent items at Power Bi. The only categories unavailables are push datasets and embedding.
- Bug fixing requests 

0.1.1 (30/01/2023)
------------------
Minor bug fixing for imports to read filesystem

0.1.2 (14/02/2023)
------------------
Improving get activity events for single day after PowerBi updates.
Adding new request to get last 30 days of activity logs automatically.

0.1.3 (08/05/2023)
------------------
Adding update sources for datasets. It's a complex body request.
Adding new unique request for publishing pbix file from azure devops repo.
Changing pandas coding to work with 2.0.1 version. Fixing deprecated methods.

0.1.4 (30/06/2023)
------------------
Adding newest admin request for getting tenant settings
Adding new unique requests for pausing and resuming Fabric, Power Bi Embedded and Azure Analysis Services.

0.1.5 (19/09/2023)
------------------
Adding dataset requests for scaleout. Update dataset to turn it on, get query sync and trigger query scale out sync.

0.1.6 (24/10/2023)
------------------
Filtering Activity Events. The request methods for getting Activity Events for a single day or the last 30 days can now filter by user or activity.

0.1.7 (16/12/2023)
------------------
Fixing request for importing powerbi desktop file from Azure DevOps.

0.1.8 (25/03/2024)
------------------
Adding new request for importing pbix from GitHub (less 1Mb) like the one for DevOps.
New Object category. Adding all Push Dataset category requests.

0.1.9 (12/05/2024)
------------------
Adding support for GitHub pbix importing up to 100Mb.

0.1.10 (15/07/2024)
------------------
Adding new cool features. Getting tables, measures, columns and roles from a dataset in a group (semantic model in workspace)

0.1.11 (10/09/2024)
------------------
Adding Getting roles from a all datasets in a list of workspace or for a single workspace and dataset as admin.
New autodocument feature. Create an html document by content or by tables from a semantic model at Datasets category.

0.1.12 (07/10/2024)
------------------
Updating documentation adding definition of custom unique cool requests of our library.

1.0.1 (18/12/2024)
------------------
New release and milestone completed. Our PowerBi backlog is mostly completed and we have added Fabric API. The Fabric categories involved are admin (adminfab) and core.

1.0.2 (26/02/2025)
------------------
Refactor of code separating the parts build for semantic model and reports deploys.

1.0.3 (14/07/2025)
------------------
Adding semantic model fabric category get requests and sub category connections and folders to Core.
Refactor code due to fabric/powerbi rest api updates. INFODAX functions are not supported any more. Some dataset requests were deprecated. Improving getting list continuation token to fabric requests. Get activity for 28 days instead of 30. Updating fabric pause api version.
Fixing pending details with some parameters.