«Исключение: отчет Power BI не встроен» в Azure Databricks

Мы пытаемся использовать пакет powerbiclient внутри записной книжки Azure Databricks, чтобы получить информацию об отчетах, но получаем ошибку Exception: Power BI report is not embedded. Вместо этого тот же код работает, если мы используем его локально в коде Visual Studio.

  • Кластер Azure Databricks: персональные вычисления, среда выполнения 15.3
  • Интересующие пакеты:
    • powerbiclient==3.1.1

Вот код, который мы используем:

!pip install powerbiclient==3.1.1
dbutils.library.restartPython()
from powerbiclient import Report, models
from io import StringIO
from ipywidgets import interact
import requests
import json

Мы попробовали как аутентификацию через вход по коду устройства, так и через принципала службы, но нам нужно придерживаться второго варианта:

# # option 1
# from powerbiclient.authentication import DeviceCodeLoginAuthentication
# device_auth = DeviceCodeLoginAuthentication()

# option 2
def azuread_auth(tenant_id: str, client_id: str, client_secret: str, resource_url: str):
    """
    Authenticates Service Principal to the provided Resource URL, and returns the OAuth Access Token
    """
    url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/token"
    payload = f'grant_type=client_credentials&client_id = {client_id}&client_secret = {client_secret}&resource = {resource_url}'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    response = requests.request("POST", url, headers=headers, data=payload)
    access_token = json.loads(response.text)['access_token']
    return access_token

tenant_id = 'XXX'
client_id = 'YYY
client_secret = 'ZZZ'
scope = 'https://analysis.windows.net/powerbi/api/.default'
resource_url = 'https://analysis.windows.net/powerbi/api'

token = azuread_auth(tenant_id, client_id, client_secret, resource_url)

И затем вызываем отчет:

group_id = '123-456'
dataset_id = 'abc-def'
report_id = '7g8-h9i'
report = Report(group_id=group_id, report_id=report_id, auth=token)

Но мы видим, что он не встроен:

print(report._embedded)
# False

Если мы попытаемся отобразить отчет, мы ничего не получим:

def loaded_callback(event_details):
    print('Report is loaded')
report.on('loaded', loaded_callback)

def rendered_callback(event_details):
    print('Report is rendered')
report.on('rendered', rendered_callback)

report.set_size(200, 300)

report

И если мы попытаемся получить страницы, мы получим вышеупомянутую ошибку:

pages = report.get_pages()


Exception                                 Traceback (most recent call last)
File <command-2809091020085831>, line 3
      1 report_dict = {}
      2 # Get list of pages
----> 3 pages = report.get_pages()
      4 for page in pages:
      5     report.set_active_page(page['name'])

File /local_disk0/.ephemeral_nfs/envs/pythonEnv-48b6b502-a176-4d52-a15d-9ed2a921ac04/lib/python3.11/site-packages/powerbiclient/report.py:566, in Report.get_pages(self)
    560 """Returns pages list of the embedded Power BI report
    561 
    562 Returns:
    563     list: list of pages
    564 """
    565 if not self._embedded:
--> 566     raise Exception(self.REPORT_NOT_EMBEDDED_MESSAGE)
    568 # Start getting pages on client side
    569 self._get_pages_request = True

Exception: Power BI report is not embedded

Есть ли способ встроить отчеты PowerBI в записные книжки Azure Databricks?

Измените код, установите report._embedded=True и запустите код.

Rukmini 17.07.2024 11:02

Я попробовал вставить report._embedded=True сразу после определения объекта report. Отчет по-прежнему не появляется, а строка pages = report.get_pages() теперь занимает больше 10 минут и все еще идет, возможно, где-то застряла.

Ric S 17.07.2024 11:30

Проверьте это stackoverflow.com/questions/78510054/…

Rukmini 17.07.2024 11:32

Теперь ваши страницы загружены?

Rukmini 17.07.2024 11:56

Да, страницы все равно загружаются через 30 минут, что странно: я прервал ячейку блокнота. Я проверил другой ответ, это то же решение, которое вы предложили здесь. К сожалению, похоже, это не работает в Azure Databricks...

Ric S 17.07.2024 12:13

Да, даже я получил ответ через долгое время после того, как прервал блокнот

Rukmini 17.07.2024 12:15

Дайте мне знать, если report._embedded=True решит вашу проблему

Rukmini 17.07.2024 12:30

Даже если бы это работало, такая большая продолжительность не подходит для производственных целей, поэтому я думаю, что должно быть что-то еще, что должно работать. В любом случае, спасибо за вашу помощь на данный момент

Ric S 17.07.2024 12:38

Конечно, дайте мне знать, если я смогу опубликовать это в качестве ответа.

Rukmini 17.07.2024 12:49

Можете ли вы попробовать обновить браузер (ноутбук), нажав CTRL+F5 после аутентификации?

Rukmini 17.07.2024 13:13

Эта функция находится в предварительной версии и, возможно, именно она является причиной проблемы. Проверьте это Learn.microsoft.com/en-us/fabric/data-engineering/…

Rukmini 17.07.2024 14:02

Обновление с помощью CTRL+F5 ничего не меняет. Хорошо, эта функция находится в предварительной версии, но она работает локально с записными книжками Jupyter, но не работает с записными книжками Azure Databricks.

Ric S 17.07.2024 14:37

Есть какие-нибудь новости по этому вопросу?

Rukmini 18.07.2024 13:32

Привет @Rukmini, в настоящее время эта функция не поддерживается в Azure Databricks: github.com/microsoft/powerbi-jupyter/issues/54

Ric S 18.07.2024 17:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
14
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Публикация ответа для справки сообщества:

Первоначально я получил ту же ошибку:

Для report.get_pages() получен отчет Power BI не встроен:

И когда я попытался распечатать отчет, он дал мне нулевой результат:

def  azuread_auth(tenant_id: str, client_id: str, client_secret: str, resource_url: str):
"""
Authenticates Service Principal to the provided Resource URL, and returns the OAuth Access Token
"""
url =  f"https://login.microsoftonline.com/{tenant_id}/oauth2/token"
payload =  f'grant_type=client_credentials&client_id = {client_id}&client_secret = {client_secret}&resource = {resource_url}'
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
access_token = json.loads(response.text)['access_token']
return access_token 

tenant_id =  'TenantID'
client_id =  'ClientID'
client_secret =  'ClientSecret'
scope =  'https://analysis.windows.net/powerbi/api/.default'
resource_url =  'https://analysis.windows.net/powerbi/api'
token =  azuread_auth(tenant_id, client_id, client_secret, resource_url)
group_id =  'GroupID'
report_id =  'ReportID'
report =  Report(group_id=group_id, report_id=report_id, auth=token)
report._embedded=True
print(report._embedded)

Обратите внимание: записные книжки Azure Databricks не поддерживают отображение виджета, поэтому в настоящее время невозможно отобразить отчет. Обратитесь сюда MsDoc

Альтернативно вы можете использовать Jupyter Notebook для отображения отчета, изменив код, включив report._embedded=True, если он подходит для вашей среды.

Ссылка:

«Исключение: отчет Power BI не встроен» в Azure Databricks · Проблема № 54 · microsoft/powerbi-jupyter · GitHub от orshemesh16

Другие вопросы по теме