Я новичок в Powerbi, работаю над веб-сайтом и успешно интегрирую Powerbi с помощью API-интерфейса embed-token и JavaScript, который можно найти на Powerbi Playground.
Ниже приведены шаги по интеграции Powerbi и взаимодействию с конечным пользователем:
Клиент уже авторизован с помощью своей учетной записи Powerbi, поэтому у меня есть токен доступа на предъявителя и токен обновления.
Использование токен Я получил список рабочих областей с помощью Rest API и создал для него раскрывающийся список.
После выбора рабочей области я создаю еще один раскрывающийся список для отчетов о выбранной рабочей области с использованием Rest API.
Выбрав отчет, я генерирует еще один раскрывающийся список для вкладки/страницы выбранного отчета с использованием 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 или пример кода для достижения того же, пожалуйста, предложите мне.
Я новичок в Powerbi, работаю над веб-сайтом и успешно интегрирую Powerbi с помощью API-интерфейса embed-token и JavaScript, который можно найти на Powerbi Playground. Ниже приведены шаги по интеграции Powerbi и взаимодействию с конечным пользователем: [img]https://i.sstatic.net/ traCOdZy.png[/img]
[list] [*]Клиент уже авторизован с помощью своей учетной записи Powerbi, поэтому у меня есть токен доступа на предъявителя и токен обновления. [*]Использование токен Я получил список рабочих областей с помощью Rest API и создал для него раскрывающийся список. [*]После выбора рабочей области я создаю еще один раскрывающийся список для отчетов о выбранной рабочей области с использованием Rest API. [*]Выбрав отчет, я генерирует еще один раскрывающийся список для вкладки/страницы выбранного отчета с использованием Rest API [*]После этого, когда пользователь отправляет форму, я собираю отправленную информацию и отображаю выбранный отчет [/list] Все работает нормально, теперь клиент требует изменения в интеграции. Поэтому всякий раз, когда он отображает отчет, он также должен генерировать другой HTML (вне отчета) для фильтры, доступные в подготовленном отчете. Таким образом, конечный пользователь может взаимодействовать с отчетом, а также мне нужно запомнить/сохранить выбор пользователя, поэтому в следующий раз, когда пользователь снова откроет тот же отчет, он должен автоматически выбрать ранее сохраненные данные в отчете. Чтобы добиться этого, я провел несколько экспериментов с приведенным ниже кодом, используя срезы Powerbi: [code] function getvisuals(){ visSlicerArr = []; visSlicerStateArr = []; slicerContainer.empty();
try { var pages = report.getPages(); // console.log('pagesPromise', pages);
// get Visual State $.each(visSlicerArr, function(index, visS){ var statePromise = visS.getSlicerState(); // console.log('visualStatePromise', statePromise);
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'); } }
[/code] Вывод выглядит следующим образом: [img]https://i.sstatic. net/3zZdxTlD.png[/img]
Он тоже работает, но меня путают срезы Powerbi и фильтры. Когда я проверил на общем языке, срезы работают на стороне пользователя, а фильтры работают на стороне сервера. Ниже приведены мои вопросы, помогите мне найти правильный: [list] [*]Что для моего варианта использования более полезно: срезы или фильтры? [*]Существует ли какой-либо Rest API для получения Срезы и фильтры отчета? [*]Как получить имя срезов, доступно ли оно в Powerbi или его можно получить, чтобы пользователь мог легко его идентифицировать? < li>Если в поле фильтра отчета не выбраны предварительные данные, значит, объект JavaScript слайсера не тот. Могу ли я получить тот же объект в любом случае, если данные выбраны или нет? [/list] [img]https: //i.sstatic.net/Iycu9FWk.png[/img]
[list] [*]Если есть какая-либо библиотека Powerbi или пример кода для достижения того же, пожалуйста, предложите мне. [/list] Спасибо,
Я новичок в Powerbi, работаю над веб-сайтом и успешно интегрирую Powerbi с помощью API-интерфейса embed-token и JavaScript, который можно найти на Powerbi Playground.
Ниже приведены шаги по интеграции Powerbi и взаимодействию с конечным...
Сейчас я работаю над проектом, в котором мне нужно извлекать ежедневные отчеты из VICIdial для загрузки в Power BI.
У меня есть доступ только к интерфейсу администратора VICIdial, но не к базовой базе данных.
Я хочу автоматизировать процесс...
Сейчас я работаю над проектом, в котором мне нужно извлекать ежедневные отчеты из VICIdial для загрузки в Power BI.
У меня есть доступ только к интерфейсу администратора VICIdial, но не к базовой базе данных.
Я хочу автоматизировать процесс...
У меня довольно сложная физика-модель (модель Thomas Hopfield от Сначала я просто хочу графически построить его и уже сталкиваюсь с трудностями. Модель реагирует очень разумно на изменения в пределе интеграции, и я не уверен, создает ли...