#powerbi #dax
#powerbi #dax
Вопрос:
У меня есть следующие требования:
- Пользователь увидит матрицу 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. какой оператор DAX вы ожидаете ввести? Вы используете
DirectQuery
или статический набор данных? Если вам нужно несколько предопределенных представлений (например, ветвей TopN, где пользователь предоставляет N), то вы можете достичь этого без повторного заполнения данных2. @Stachu Это может быть любая допустимая инструкция DAX. Я использую DirectQuery и SQL Server в качестве хранилища данных. Как только пользователь вводит инструкцию DAX, приложение должно проанализировать, каковы столбцы в результирующей таблице, и заполнить матрицу.
Ответ №1:
В настоящее время невозможно сделать именно то, что вы хотите. Вы можете динамически изменять источник данных и обновлять запрос, используемый в конкретном отчете, но нет доступного API (PowerBI REST или PowerBI JavaScript) для обновления того, какие столбцы находятся на визуальном изображении в отчете. Вы можете получить довольно близкое к тому, что хотите, но отчет не может быть отображен в View
режиме, и его придется отображать в Edit
режиме, чтобы у пользователя была возможность перетаскивать поля, сгенерированные из их обновленных результатов запроса DAX, на изображение матрицы вручную, если они отправят изменения.
Предполагая, что у вас уже есть предварительная настройка регистрации приложения и вы готовы к внедрению, вот несколько шагов, чтобы приблизиться к тому, что вы ищете. Если вы не готовы к встраиванию, ниже приведена документация по 8 шагам, которые я предоставил для завершения предварительной настройки для возможности встраивания.
- С помощью PowerBI Desktop создайте шаблон отчета с визуальным изображением матрицы и подключением к источнику данных, который вы хотите использовать. Обязательно настройте этот отчет, используя определенный запрос, а НЕ все таблицы в источнике данных, будь то SQL или SSAS. (Запрос указывается в разделе дополнительные параметры при первоначальной настройке источника данных в отчете)
- Настройте шлюз данных Power BI для источника данных, используемого в вашем отчете
- Создайте рабочее пространство на PowerBI.com чтобы загрузить отчет в
- С помощью PowerBI desktop Опубликуйте отчет, созданный на шаге 1, в рабочей области, созданной на шаге 3
- В вашем веб-приложении, когда пользователь просматривает страницу просмотра отчетов, вам нужен способ идентификации каждого пользователя. Давайте предположим, что у вас есть
UserId
поле, которое является уникальным идентификатором для каждого пользователя. Вызовите GetReports в группе https://learn.microsoft.com/en-us/rest/api/power-bi/reports/getreportsingroup. У вас должно быть известное имя отчета плюс идентификатор пользователя. Давайте предположим, что это DynamicReport. Итак, вызовите GetReports и проверьте,DynamicReport_UserId
существует ли для пользователя, пытающегося просмотреть страницу просмотра отчетов в вашем веб-приложении. - В этом случае вызовы API являются результатом шага 5. если отчет не существует для пользователя, используйте https://learn.microsoft.com/en-us/rest/api/power-bi/reports/clonereport для клонирования шаблона отчета, который вы опубликовали на шаге 4.
- Встраивать и отображать пользовательский шаблон отчета (DynamicReport_UserId) для пользователя.
- На странице просмотра отчетов есть логика, позволяющая пользователю отправлять и
POST
запрос DAX. Когда они выполняют отправку, нужно использовать логикуhttps://learn.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasources на серверной части, чтобы обновить источник данных в своем отчете, а затем снова внедрить отчет с их инструкцией DAX и измененными данными.
Визуальный элемент не будет автоматически обновляться до новых полей из нового запроса, который отправляется пользователем, но доступные поля данных, которые у них есть в режиме редактора, изменятся. Пользователю придется перетаскивать поля из своего запроса DAX в Matrix visual или любой другой визуальный тип, который они собираются использовать. Вы не сможете просто отобразить отчет в View
режиме, поскольку у вас нет способа программно обновлять поля в visual. Пользователь может даже в конечном итоге увидеть изначально неработающий визуальный элемент из-за измененного запроса и полей визуальных ссылок из ранее использованного запроса. Вы могли бы использовать PowerBI Javascript API, чтобы скрыть существующий визуальный элемент, чтобы улучшить пользовательский опыт пользователя, не видящего что-то сломанное.
Дайте мне знать, если у вас возникнут какие-либо конкретные вопросы об этих вызовах API или о том, как их использовать.
Вот где я искал функциональность Power BI JavaScripthttps://github.com/Microsoft/powerbi-javascript/wiki (Не могу найти ничего конкретного для визуальных элементов матрицы. Функциональность JavaScript для визуальных элементов, присущая визуальным элементам, а не визуальному типу, такому как Matrix или Card)
Вот документация Microsoft по доступным REST API и https://learn.microsoft.com/en-us/rest/api/power-bi
Вот несколько хороших ресурсов, чтобы узнать больше о внедрении
https://learn.microsoft.com/en-us/power-bi/developer/embedded/register-app
https://learn.microsoft.com/en-us/power-bi/developer/embedded/embedding
Если вам нужно детализировать иерархии возможностей, отличный вариант
Комментарии:
1. могу ли я иметь по одному отчету на пользователя и просто матрицу для каждого отчета? Тогда мне не нужно выполнять очистку, только воссоздавать матрицу каждый раз, когда пользователь загружает страницу
2. Одна вещь, которая не ясна, заключается в том, почему
user will have to drag the fields generated from their DAX query
означает ли это, что процесс будет состоять из двух этапов (1) обновление источника данных и (2) выбор отображаемых полей? Нет Javascript API для управления матрицей?3. Спасибо, есть ли ссылка на Javascript API, которые специально управляют матрицей? Я не могу ее найти.
4. По крайней мере, могу ли я очистить матрицу, когда пользователь запускает новую инструкцию DAX, и удалить старые поля?
5. Последний вопрос, подтверждаете ли вы, что это будет работать в Azure Power BI?