Доступ к данным Power BI с помощью Python и REST API Power BI
12 января 2024 г.API REST Сервера отчетов Power BI позволяет разработчикам программно получать доступ и управлять каталог сервера отчетов, позволяющий выполнять базовые операции CRUD с папками, отчетами, ключевыми показателями эффективности, источниками данных, наборами данных, планами обновления, подписками и т. д. Кроме того, REST API предоставляет расширенные функциональные возможности, включая возможность навигации по иерархии папок, обнаружение содержимого папок, загрузку определений отчетов, изменение параметров отчета по умолчанию, изменение или выполнение плана обновления и многое другое. Являясь RESTful преемником устаревшего API-интерфейса SOAP, REST API сервера отчетов Power BI представляет собой надмножество REST API служб отчетов SQL Server, использующее расширенные возможности сервера отчетов Power BI по сравнению со службами отчетов SQL Server. Такая гибкость позволяет разработчикам создавать собственные приложения, автоматизировать задачи администрирования и интегрировать функции сервера отчетов Power BI в различные программные решения.
Аутентификация с помощью сервера отчетов Power BI
Аутентификация с помощью API сервера отчетов Power BI включает использование библиотеки requests_ntlm2
и метода HttpNtlmAuth
для аутентификации NTLM. Задайте переменные username
, password
и baseurl
, а затем создайте экземпляр HttpNtlmAuth
с предоставленными учетными данными. Этот экземпляр можно использовать в запросах API для аутентификации на сервере отчетов Power BI и доступа к конечным точкам API. В примере фрагмента кода показано создание примера запроса API с использованием Python для получения списка отчетов Power BI, доступных на сервере.
from requests_ntlm2 import HttpNtlmAuth
import requests
import os
import pandas as pd
# please change username, password and localhost
username = "username"
password = 'password'
localhost = "localhost"
# baseurl
baseurl = "http://{}/Reports/api/v2.0".format(localhost)
# Auth
auth = HttpNtlmAuth(username=username, password=password)
# example
result = requests.get(os.path.join(baseurl, "PowerBIReports"), auth=auth).json()
print(result)
Получить список отчетов PowerBI
Приведенный код извлекает список отчетов Power BI с сервера отчетов Power BI, используя конечную точку PowerBIReports
. Он отправляет запрос GET к указанной конечной точке и проверяет подлинность, используя предоставленные учетные данные. Затем ответ анализируется в DataFrame Pandas для удобства манипулирования и анализа.
reports_json = requests.get(os.path.join(baseurl, "PowerBIReports"), auth=auth).json()
reports_df = pd.DataFrame(reports_json['value'])
print(reports_df.head())
Для получения дополнительной информации обратитесь к документу, доступному по адресу Получает массив элементов PowerBIReport CatalogItems. .
Получить список папок
Вы можете использовать следующий код Python для получения списка папок на сервере отчетов Power BI. Этот код использует библиотеку запросов для отправки запроса GET в соответствующую конечную точку и обрабатывает ответ JSON для создания кадра данных pandas, содержащего информацию о папках, доступных на сервере отчетов Power BI.
folders_json = requests.get(os.path.join(baseurl, "Folders"), auth=auth).json()
folders_df = pd.DataFrame(folders_json['value'])
print(folders_df.head())
Для получения дополнительной информации обратитесь к документу, доступному по адресу Получает массив Folder CatalogItems. .
Получить список планов обновления
Чтобы получить CacheRefreshPlans
для всех отчетов Power BI, опубликованных на сервере отчетов Power BI, этот процесс включает получение информации для всех отчетов, а затем итерацию по каждому отчету для получения его CacheRefreshPlans< /код>. Это достигается путем первоначальной выборки списка всех отчетов Power BI, а затем доступа к
CacheRefreshPlans
для каждого отдельного отчета. Путем объединения результатов каждого отчета создается комплексный фрейм данных CacheRefreshPlans
, предоставляющий обзор планов обновления для всех отчетов Power BI.
def get_report_CacheRefreshPlans(tag):
result = requests.get(os.path.join(baseurl, tag), auth=auth).json()
reports = result['value']
cache_refresh_plans = [requests.get(os.path.join(baseurl, "PowerBIReports({})/CacheRefreshPlans".format(report['Id'])), auth=auth).json()['value'] for report in reports]
df = pd.concat([pd.DataFrame(plans) for plans in cache_refresh_plans])
return df
df_refresh_plans = get_report_CacheRefreshPlans("PowerBIReports")
Для получения дополнительной информации обратитесь к документу, доступному по адресу Получает CacheRefreshPlans для заданного Отчет Power BI.
Получить список пользователей
Чтобы получить список пользователей, связанных с отчетами Power BI на сервере отчетов Power BI, вы можете использовать предоставленный код Python. Этот код использует REST API Power BI для получения политик элементов для каждого отчета Power BI и извлечения информации о пользователе. После выполнения кода у вас будет DataFrame, содержащий идентификаторы отчетов, имена пользователей групп и роли пользователей, связанных с каждым отчетом. Вы можете использовать эту информацию для управления и анализа политик доступа и разрешений пользователей для отчетов Power BI на сервере.
def get_Policies_for_all_reports(tag):
result = requests.get(os.path.join(baseurl, tag), auth=auth).json()
reports_df = pd.DataFrame(result['value'])
policies = []
for report_id in reports_df['Id']:
baseurl_report = "{}/PowerBIReports({})".format(baseurl, report_id)
report_result = requests.get(os.path.join(baseurl_report, 'Policies'), auth=auth).json()
report_policies_df = pd.DataFrame(report_result['Policies'])
report_policies_df['ReportID'] = report_id
report_policies_df = report_policies_df[['ReportID', 'GroupUserName', 'Roles']]
policies.append(report_policies_df)
all_policies_df = pd.concat(policies, axis=0)
return all_policies_df
df_users = get_Policies_for_all_reports("PowerBIReports")
Для получения дополнительной информации обратитесь к документу, доступному по адресу Получает ItemPolicies, связанные с указанным Элемент каталога PowerBIReport
Получить список безопасности на уровне строк (RLS)
Код использует API сервера отчетов Power BI для получения информации о безопасности на уровне строк из отчетов Power BI. Он состоит из двух функций: get_df_from_pbrs
для получения DataFrame отчетов и get_report_related_data
для получения ролей модели данных и назначений ролей для каждого отчета. Полученные кадры данных содержат подробную информацию о настройках безопасности на уровне строк в отчетах Power BI на сервере отчетов Power BI. Просто вызовите функции с соответствующими параметрами для получения информации.
def get_df_from_pbrs(tag):
result = requests.get(os.path.join(baseurl, tag), auth=auth).json()
df = pd.DataFrame(result['value'])
return df
def get_report_related_data(tag, endpoint):
re = []
for i in range(len(get_df_from_pbrs(tag))):
id = get_df_from_pbrs(tag)['Id'][i]
url = "{}/PowerBIReports({})".format(baseurl, id)
result = requests.get(os.path.join(url, endpoint), auth=auth).json()
df_row = pd.DataFrame(result['value'])
df_row['ReportID'] = id
if endpoint == 'DataModelRoleAssignments' and len(df_row) != 0:
df_row['DataModelRoles'] = df_row['DataModelRoles'].apply(lambda x: x[0])
re.append(df_row)
df = pd.concat(re, axis=0)
return df
df_DataModelRoles = get_report_related_data(tag="PowerBIReports", endpoint="DataModelRoles")
df_DataModelRoleAssignments = get_report_related_data(tag="PowerBIReports", endpoint="DataModelRoleAssignments")
Для получения дополнительной информации обратитесь к документу, доступному по адресу . Получает роли модели данных, которые связаны с указанным PowerBIReport и Получает назначения ролей модели данных, которые связанный с указанным PowerBIReport.
Заключение
В заключение в этой статье показано, как можно использовать код Python для доступа к различным частям сервера отчетов Power BI через REST API сервера отчетов Power BI. В примерах кода показано, как можно получить отчеты Power BI, папки, планы обновления, пользователей и настройки безопасности на уровне строк, что дает вам хорошее представление о том, что можно делать с помощью API.
Хотя в примерах для получения данных в основном используется метод GET
, стоит отметить, что REST API также поддерживает другие методы HTTP, такие как POST
и DELETE
. Если вы заинтересованы в изучении REST API Сервера отчетов Power BI для решения других задач, оставляйте комментарии для получения более подробных статей и дальнейшего изучения.
Спасибо, что нашли время, чтобы вместе со мной изучить информацию, связанную с данными. Я ценю ваше участие. Если эта информация окажется для вас полезной, я приглашаю вас подписаться на меня или связаться со мной на LinkedIn. Приятного изучения!👋
:::информация Также появляется здесь.
:::
Оригинал