Power BI JS API — проблемы интеграции со срезом/фильтромJquery

Программирование на jquery
Ответить Пред. темаСлед. тема
Anonymous
 Power BI JS API — проблемы интеграции со срезом/фильтром

Сообщение Anonymous »

Я новичок в Powerbi, работаю над веб-сайтом и успешно интегрирую Powerbi с помощью API-интерфейса embed-token и JavaScript, который можно найти на Powerbi Playground.
Ниже приведены шаги по интеграции Powerbi и взаимодействию с конечным пользователем:
Изображение
  • Клиент уже авторизован в своей учетной записи Powerbi, поэтому у меня есть токен доступа на предъявителя и токен обновления
  • Используя токен, я получил список рабочих областей с помощью Rest API и создал для него раскрывающийся список.
  • После выбора рабочей области я создаю еще один раскрывающийся список для отчетов о выбранной рабочей области с использованием Rest API li>
  • После выбора отчета я создаю еще один раскрывающийся список для вкладки/страницы выбранного отчета с помощью Rest API.
  • После этого, когда пользователь отправляет форму, я собираю отправленную информацию и визуализировать выбранный отчет
Все работает нормально, теперь клиент требует изменения в интеграции.
Поэтому всякий раз, когда он отображает отчет, он также должен сгенерировать другой HTML (вне отчета) для фильтров, доступных в подготовленном отчете. Таким образом, конечный пользователь может взаимодействовать с отчетом, а также мне нужно запомнить/сохранить выбор пользователя, поэтому в следующий раз, когда пользователь снова откроет тот же отчет, он должен автоматически выбрать ранее сохраненные данные в отчете.
Чтобы добиться этого, я провел несколько экспериментов с приведенным ниже кодом, используя срезы Powerbi:

Код: Выделить всё

function getvisuals(){
visSlicerArr = [];
visSlicerStateArr = [];
slicerContainer.empty();

try {
var pages = report.getPages();
// console.log('pagesPromise', pages);

pages.then(function(pagesArr){
$.each(pagesArr, function(index, page){
if(page.isActive){
activePage = page;
}
});

console.log('activePage', activePage);

// get all Visuals
var visuals = activePage.getVisuals();
// console.log('visualsPromise', visuals);

visuals.then(function(visualsArr){

$.each(visualsArr, function(index, vis){
if(vis.type == 'slicer'){
visSlicerArr.push(vis);
}
});

console.log('slicerArr (from Visuals)', visSlicerArr);

// get Visual State
$.each(visSlicerArr, function(index, visS){
var statePromise = visS.getSlicerState();
// console.log('visualStatePromise', statePromise);

statePromise.then(function(slicerState){
visSlicerStateArr.push(slicerState);
console.log('visualState', slicerState);

showSlicer(index, slicerState);

if((visSlicerArr.length - 1) == index){
slicerContainer.append('Redraw Report');
}
})
.catch (function (err) {
console.log('Promise Err 3', err);
});
});
})
.catch (function (err) {
console.log('Promise Err 2', err);
});
})
.catch (function (err) {
console.log('Promise Err 1', err);
});
}
catch (errors) {
console.log('Try Err 1', errors);
}
}

function showSlicer(index, slicerState) {
console.log('in', slicerState);

var slicerVal = '';
if(slicerState.filters.length){
slicerValues = slicerState.filters[0].values;  // Get current slicer values
slicerVal = slicerValues.join(', ');
console.log("slicerVal", JSON.stringify(slicerVal), index)
}

var target = '';
if(slicerState.targets.length){
slicerTargets = slicerState.targets;

$.each(slicerTargets, function(i, t){
if(t.table && t.column){
target += ' (' + t.table + ' / ' + t.column + ') ';
}
});
}

var slicerName = slicerState.displayName || 'Unnamed';
var slicerLabel = $('').text('Name: ' + slicerName);
slicerContainer.append(slicerLabel);
slicerContainer.append('
');

var slicerLabelT = $('').text('Target: ' + target);
slicerContainer.append(slicerLabelT);
slicerContainer.append('
');

var input = document.createElement('input')
input.id = 'slicer_' + index
input.type = 'text'
slicerContainer.append(input);
input.setAttribute('value', slicerVal);

slicerContainer.append('

');
slicerContainer.addClass('showBox');
}

function applyFilter(){
var updatedSlicers = [];

// Iterate through each slicer and collect the updated values
console.log('visSlicerStateArr', visSlicerStateArr, visSlicerStateArr.length);
$.each(visSlicerStateArr, function(index, slicerState) {
// Get the updated values entered by the user
var userInput = $('#slicer_' + index).val();
var selectedValues = userInput.split(',').map(function(value) {
return value.trim();   // Remove any leading/trailing spaces
});

if(selectedValues != ''){

// Create a new slicer state with updated values
var newSlicerState = {
...slicerState,
filters: [{
...slicerState.filters[0],
values: selectedValues  // Update with user-selected values
}]
};

// Add to the updated slicer array
updatedSlicers.push(newSlicerState);
}
});

// Apply the updated slicers to the report
if(updatedSlicers.length){
applySlicers(updatedSlicers);
slicerContainer.removeClass('showBox');
}
}

function applySlicers(updatedSlicers) {
$.each(updatedSlicers, function(index, slicerState) {
visSlicerArr[index].setSlicerState(slicerState)
.then(function() {
console.log('Slicer updated:', slicerState.displayName);
})
.catch(function(err) {
console.log('Error updating slicer:', err);
console.log(updatedSlicers);
});
});
}

Вывод выглядит следующим образом:
[img]https://i.sstatic. net/3zZdxTlD.png[/img]

Он тоже работает, но меня путают срезы Powerbi и фильтры. Когда я проверил на общем языке, срезы работают на стороне пользователя, а фильтры работают на стороне сервера.
Ниже приведены мои вопросы, помогите мне найти правильный:
  • Что для моего случая более полезно: срезы или фильтры?
  • Есть ли какой-либо Rest API для получения Срезы и фильтры отчета?
  • Как получить имя срезов, доступно ли оно в Powerbi или его можно получить, чтобы пользователь мог легко его идентифицировать?
    < li>Если в поле фильтра отчета не выбраны предварительные данные, значит объект JavaScript слайсера не тот. Могу ли я получить тот же объект в любом случае, если данные выбраны или нет?
[img]https: //i.sstatic.net/Iycu9FWk.png[/img]
  • Если есть какая-либо библиотека Powerbi или пример кода для достижения того же, пожалуйста, предложите мне.
Спасибо,

Подробнее здесь: https://stackoverflow.com/questions/790 ... cer-filter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Jquery»