React嵌入Power BI报表:如何导出表格视觉对象完整数据至CSV/Excel
解决Power BI嵌入报表中表格视觉对象完整数据导出问题
我在React应用中嵌入了Power BI报表,页面内包含一个表格视觉对象,希望将其完整数据导出为CSV/Excel格式。
当前实现方式如下:
const pages = await report.getPages(); let page = pages.filter(function (page) { return page.isActive; })[0]; const visuals = await page.getVisuals(); for (let index = 0; index < visuals.length; index++) { if (visuals[index].title === "Extra Col") { let result = await visuals[index].exportData( models.ExportDataType.Summarized ); console.log("result data", result); } }
获取结果后,将数据转换为如下格式并通过react-csv实现下载:
const csvArray = result.data.split("\r\n").map((row) => row.split(","));
但目前仅能获取前1500至1600行数据,想了解是否有办法获取完整数据,或直接导出为CSV/Excel格式。
解决办法
切换导出数据类型
当前使用的models.ExportDataType.Summarized会返回报表中分页显示的汇总数据,受限于视觉对象的分页设置。换成models.ExportDataType.Underlying可获取视觉对象对应的底层完整数据集,前提是报表数据集权限允许导出底层数据。修改后的导出代码:
let result = await visuals[index].exportData( models.ExportDataType.Underlying );分页循环获取全量数据
如果底层数据量极大,exportData仍可能返回分页数据,此时可通过指定页码和每页行数,循环拉取所有数据:let allData = []; let currentPage = 0; const pageSize = 10000; // 可根据需求调整每页行数 let exportResult; do { exportResult = await visuals[index].exportData( models.ExportDataType.Underlying, currentPage, pageSize ); const rows = exportResult.data.split("\r\n").map(row => row.split(",")); // 跳过后续页的表头 if (currentPage > 0) rows.shift(); allData = allData.concat(rows); currentPage++; } while (rows.length === pageSize); // 判断是否还有剩余数据 // 将allData传入react-csv进行下载调用Power BI原生导出功能
若无需自行处理数据,可直接调用视觉对象的原生导出方法,绕过前端数据限制,从服务端获取完整数据并直接生成Excel/CSV文件:// 导出为Excel await visuals[index].exportVisual(models.ExportVisualOptions.ExportToExcel); // 导出为CSV await visuals[index].exportVisual(models.ExportVisualOptions.ExportToCSV);注意:需要在嵌入配置中开启导出权限,例如在
EmbedConfig里设置permissions: models.Permissions.Export或models.Permissions.All。
内容的提问来源于stack exchange,提问作者Ravishankar Chatterjee
相关产品推荐
相关产品推荐

