Работа с Power BI Matrix на основе данных из оператора DAX

Aug 15 2020

У меня следующие требования:

  • Пользователь увидит матрицу Power BI на веб-странице (в отличие от Power BI Desktop).
  • Веб-страница должна содержать три элемента: текстовое поле, кнопку и матрицу Power BI (потенциально включенную в отчет Power BI).
  • Пользователь вводит оператор DAX в текстовое поле и щелкает по кнопке, чтобы заставить матрицу принять оператор DAX, выполнить его и заполнить данные.
  • Пользователь должен иметь возможность детализировать матрицу.
  • Пользователь может повторно ввести новый оператор DAX, обновив матрицу.

Теперь вся документация, которую я смог найти, например здесь , говорит о матрице в Power BI Desktop (то есть не веб-странице) и данных, полученных путем выбора вручную таблиц / столбцов / показателей (в правой части экрана).

В Power BI Studio я знаю, что могу ввести оператор DAX, создав таблицу в верхней панели, например, если у меня есть DAX:

 EVALUATE TOPN (3, branches)

Я мог бы создать таблицу для заполнения матрицы:

BranchesTable = TOPN (3, branches)

Но как динамически связать статус DAX, определенный во время выполнения, с матрицей на веб-странице?

Ответы

1 vvvv4d Aug 15 2020 at 21:20

В настоящее время невозможно сделать именно то, что вы хотите. Вы можете динамически изменять источник данных и обновлять запрос, используемый в конкретном отчете, но нет доступного API (PowerBI REST или PowerBI JavaScript) для обновления того, какие столбцы находятся на визуальном элементе в отчете. Вы можете довольно близко подойти к тому, что хотите, но отчет не может отображаться в Viewрежиме, и его нужно будет отображать в Editрежиме, чтобы пользователь имел возможность перетаскивать поля, созданные из их обновленных результатов запроса DAX, на визуальный элемент Matrix вручную, они вносят изменения.

Предполагая, что у вас уже есть предварительная установка и конфигурация регистрации приложения, и вы готовы к встраиванию, вот несколько шагов, которые помогут приблизиться к тому, что вы ищете. Если вы не готовы к встраиванию, ниже приведена документация, содержащая 8 шагов, которые я предоставил, чтобы завершить предварительную настройку для возможности встраивания.

  1. Использование PowerBI Desktop Создайте шаблонный отчет с визуальным элементом матрицы и подключением к источнику данных, который вы хотите использовать. Обязательно настройте этот отчет с использованием определенного запроса, а НЕ всех таблиц в источнике данных, будь то SQL или SSAS. (Вы указываете запрос в расширенных параметрах при первоначальной настройке источника данных в отчете)
  2. Настройте шлюз данных Power BI для источника данных, который использует ваш отчет
  3. Создайте рабочее пространство на PowerBI.com для загрузки отчета на
  4. Использование PowerBI Desktop Опубликуйте отчет, созданный на шаге 1, в рабочем пространстве, созданном на шаге 3.
  5. В вашем веб-приложении, когда пользователь просматривает страницу средства просмотра отчетов, вам нужен способ идентифицировать каждого пользователя. Предположим, у вас есть UserIdполе с уникальным идентификатором для каждого пользователя. Позвоните в GetReports в группеhttps://docs.microsoft.com/en-us/rest/api/power-bi/reports/getreportsingroup. У вас должно быть известное имя отчета плюс UserId. Предположим, его DynamicReport. Поэтому вызовите GetReports и проверьте, DynamicReport_UserIdсуществует ли для пользователя, пытающегося просмотреть страницу средства просмотра отчетов в вашем веб-приложении.
  6. В этом вызове API результат шага 5, если отчет не существует для пользователя, используйте https://docs.microsoft.com/en-us/rest/api/power-bi/reports/clonereport чтобы клонировать шаблон отчета, опубликованный на шаге 4.
  7. Встраивать и отображать пользовательский шаблон отчета (DynamicReport_UserId) для пользователя.
  8. Имейте логику на странице средства просмотра отчетов, чтобы пользователь мог отправлять и POSTзапросы DAX. Когда они делают отправку, у них есть логика для использованияhttps://docs.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasources на бэкэнде, чтобы обновить источник данных в своем отчете, а затем снова встроить отчет со своим выражением DAX и измененными данными.

Визуальный элемент не будет автоматически обновляться до новых полей из нового запроса, отправленного пользователем, но доступные поля данных, которые они имеют в режиме редактора, изменятся. Пользователь должен будет перетащить поля из своего запроса DAX на визуал Matrix или любой визуальный тип, который они собираются использовать. Вы не сможете просто отобразить отчет в Viewрежиме, так как у вас нет возможности программно обновить поля, отображаемые в визуальном элементе. Пользователь может даже сначала увидеть неработающий визуальный элемент из-за измененного запроса и полей визуальных ссылок из ранее использованного запроса. Вы можете использовать PowerBI Javascript API, чтобы скрыть существующий визуальный элемент, чтобы улучшить пользовательский интерфейс, чтобы пользователь не видел что-то сломанное.

Дайте мне знать, если у вас есть какие-либо конкретные вопросы об этих вызовах API или о том, как их использовать.

Вот где я искал функциональность Power BI JavaScript https://github.com/Microsoft/powerbi-javascript/wiki (Не могу найти ничего специфического для визуальных элементов матрицы. Функциональность JavaScript для визуальных элементов, общих для визуальных элементов, а не визуальных типов, таких как матрица или карта)

Вот документация Microsoft по доступным REST API и https://docs.microsoft.com/en-us/rest/api/power-bi/

Вот несколько полезных ресурсов, чтобы узнать больше о встраивании

https://docs.microsoft.com/en-us/power-bi/developer/embedded/register-app https://docs.microsoft.com/en-us/power-bi/developer/embedded/embedding

Если вам нужна возможность детализации, Иерархии - отличный вариант

https://spreadsheeto.com/power-bi-hierarchy/