Power BI 嵌入报表中的过滤器
Filters in Power BI embed report
我几个月前开发了一个 NodeJS
API 来从 Power BI 获取嵌入报告(使用租户)。我从一个 Angular 应用中使用这个 API。现在我想过滤报告,但我不知道我的实际代码是否可行。
我使用了 PowerBI rest API to get the embed report. Reading the docs of microsoft, I see lots of docs like this one,其中说我应该使用我想要的过滤器创建一个对象。这不是问题,但我不知道这是否与 mi 实际 Node API 兼容,或者我应该开发一个新的解决方案。
我的API沿用了微软提供的sample,代码为:
async function getEmbedParamsForSingleReport(
workspaceId,
reportId,
additionalDatasetId
) {
const reportInGroupApi = `https://api.powerbi.com/v1.0/myorg/groups/${workspaceId}/reports/${reportId}`;
const headers = await getRequestHeader();
// Get report info by calling the PowerBI REST API
const result = await axios.get(reportInGroupApi, { headers });
if (result.status !== 200) {
throw result;
}
// Convert result in json to retrieve values
const resultJson = result.data;
// Add report data for embedding
const reportDetails = new PowerBiReportDetails(
resultJson.id,
resultJson.name,
resultJson.embedUrl
);
const reportEmbedConfig = new EmbedConfig();
// Create mapping for report and Embed URL
reportEmbedConfig.reportsDetail = [reportDetails];
// Create list of datasets
let datasetIds = [resultJson.datasetId];
// Append additional dataset to the list to achieve dynamic binding later
if (additionalDatasetId) {
datasetIds.push(additionalDatasetId);
}
// Get Embed token multiple resources
reportEmbedConfig.embedToken =
await getEmbedTokenForSingleReportSingleWorkspace(
reportId,
datasetIds,
workspaceId
);
return reportEmbedConfig;
}
有了这个,我获得了嵌入报告并发回我的应用程序。此解决方案与过滤器兼容吗?
提前致谢!
最后,我想出了一个解决办法。在 mi Angular 应用程序中,我使用了库 powerbi-client-angular
。这允许我在嵌入报告中定义一些配置:
basicFilter: models.IBasicFilter = {
$schema: 'http://powerbi.com/product/schema#basic',
target: {
table: 'items',
column: 'id',
},
operator: 'In',
values: [1,2,3],
filterType: models.FilterType.Basic,
requireSingleSelection: true,
displaySettings: {
/** Hiding filter pane */
isLockedInViewMode: true,
isHiddenInViewMode: true,
},
};
reportConfig: IReportEmbedConfiguration = {
type: 'report',
id: cuantitativeReportID,
embedUrl: undefined,
tokenType: models.TokenType.Embed,
filters: [this.basicFilter],
accessToken: undefined,
settings: undefined,
};
有了这个,我可以避免将信息传递给 NodeJS
API
是的,这个解决方案可以正常工作。请在下面找到相关代码:
- 创建过滤器对象:
const filter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Geo",
column: "Region"
},
operator: "In",
values: ["West", "Central"]
};
- 将过滤器添加到报告的过滤器中:
await report.updateFilters(models.FiltersOperations.Add, [filter]);
您可以参考示例 NodeJS 应用程序以从 Power BI 获取嵌入报告。
请在此处找到参考资料:
https://github.com/microsoft/PowerBI-Developer-Samples/tree/master/NodeJS
我几个月前开发了一个 NodeJS
API 来从 Power BI 获取嵌入报告(使用租户)。我从一个 Angular 应用中使用这个 API。现在我想过滤报告,但我不知道我的实际代码是否可行。
我使用了 PowerBI rest API to get the embed report. Reading the docs of microsoft, I see lots of docs like this one,其中说我应该使用我想要的过滤器创建一个对象。这不是问题,但我不知道这是否与 mi 实际 Node API 兼容,或者我应该开发一个新的解决方案。
我的API沿用了微软提供的sample,代码为:
async function getEmbedParamsForSingleReport(
workspaceId,
reportId,
additionalDatasetId
) {
const reportInGroupApi = `https://api.powerbi.com/v1.0/myorg/groups/${workspaceId}/reports/${reportId}`;
const headers = await getRequestHeader();
// Get report info by calling the PowerBI REST API
const result = await axios.get(reportInGroupApi, { headers });
if (result.status !== 200) {
throw result;
}
// Convert result in json to retrieve values
const resultJson = result.data;
// Add report data for embedding
const reportDetails = new PowerBiReportDetails(
resultJson.id,
resultJson.name,
resultJson.embedUrl
);
const reportEmbedConfig = new EmbedConfig();
// Create mapping for report and Embed URL
reportEmbedConfig.reportsDetail = [reportDetails];
// Create list of datasets
let datasetIds = [resultJson.datasetId];
// Append additional dataset to the list to achieve dynamic binding later
if (additionalDatasetId) {
datasetIds.push(additionalDatasetId);
}
// Get Embed token multiple resources
reportEmbedConfig.embedToken =
await getEmbedTokenForSingleReportSingleWorkspace(
reportId,
datasetIds,
workspaceId
);
return reportEmbedConfig;
}
有了这个,我获得了嵌入报告并发回我的应用程序。此解决方案与过滤器兼容吗?
提前致谢!
最后,我想出了一个解决办法。在 mi Angular 应用程序中,我使用了库 powerbi-client-angular
。这允许我在嵌入报告中定义一些配置:
basicFilter: models.IBasicFilter = {
$schema: 'http://powerbi.com/product/schema#basic',
target: {
table: 'items',
column: 'id',
},
operator: 'In',
values: [1,2,3],
filterType: models.FilterType.Basic,
requireSingleSelection: true,
displaySettings: {
/** Hiding filter pane */
isLockedInViewMode: true,
isHiddenInViewMode: true,
},
};
reportConfig: IReportEmbedConfiguration = {
type: 'report',
id: cuantitativeReportID,
embedUrl: undefined,
tokenType: models.TokenType.Embed,
filters: [this.basicFilter],
accessToken: undefined,
settings: undefined,
};
有了这个,我可以避免将信息传递给 NodeJS
API
是的,这个解决方案可以正常工作。请在下面找到相关代码:
- 创建过滤器对象:
const filter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Geo",
column: "Region"
},
operator: "In",
values: ["West", "Central"]
};
- 将过滤器添加到报告的过滤器中:
await report.updateFilters(models.FiltersOperations.Add, [filter]);
您可以参考示例 NodeJS 应用程序以从 Power BI 获取嵌入报告。 请在此处找到参考资料: https://github.com/microsoft/PowerBI-Developer-Samples/tree/master/NodeJS