如何检查Power BI数据集表是否刷新并新增数据?
方案一:基于Power BI REST API实现(无需Premium)
核心流程
- 获取API权限:注册Azure AD应用,授予
Dataset.Read.All和Report.Read.All权限(根据场景选委托或应用权限),通过客户端凭据流获取访问令牌。 - 拉取刷新历史:调用
GET https://api.powerbi.com/v1.0/myorg/groups/{group-id}/datasets/{dataset-id}/refreshes,获取每个数据集的刷新状态(成功/失败)和时间戳。 - 追踪数据变化:
- 在目标数据集里添加隐藏计算表,用DAX记录各业务表的行数和当前时间:
TableRowTracker = UNION( ROW("TableName", "Sales", "RowCount", COUNTROWS(Sales), "RefreshTime", NOW()), ROW("TableName", "Customers", "RowCount", COUNTROWS(Customers), "RefreshTime", NOW()) ) - 通过API调用
GET https://api.powerbi.com/v1.0/myorg/groups/{group-id}/datasets/{dataset-id}/tables/{table-name}/rows,拉取TableRowTracker的历史数据。 - 对比同一表相邻两次记录的
RowCount:当前行数大于上一次标记为有新数据,否则标记为无数据变化。
- 在目标数据集里添加隐藏计算表,用DAX记录各业务表的行数和当前时间:
- 构建监控报表:用Power Query将API返回的所有数据整合,用矩阵可视化展示——行放数据集/报表名称,列放表名,单元格按状态设置条件格式(绿色=有新数据,红色=无变化,灰色=刷新失败)。
方案二:Spark源端自动映射+批量监控
核心流程
- 自动生成映射关系:在Spark端编写脚本,从Power BI网关配置或数据集连接字符串中提取关联的Spark表信息,生成元数据表
powerbi_dataset_mapping,包含DatasetName、DatasetID、SparkTableName字段。 - 定期采集行数数据:用Spark调度任务(如Airflow)定期执行
SELECT COUNT(*) FROM table,将表名、行数、时间戳存入监控表table_row_monitor。 - Power BI整合展示:在Power BI中连接Spark的元数据和监控表,通过
DatasetName关联数据集与对应表,计算行数差异后标记状态,最终用矩阵呈现。
方案三:轻量内置方案(适合小规模场景)
核心流程
- 启用刷新日志:确保目标数据集的“刷新历史记录”处于开启状态(Power BI服务默认开启)。
- 添加行变化度量值:在数据集中手动添加度量值,对比当前与上一次刷新的行数:
注:需手动维护SalesRowChange = VAR CurrentCount = COUNTROWS(Sales) VAR LastRefreshCount = CALCULATE(COUNTROWS(Sales), LASTDATE(RefreshLog[RefreshTime])) RETURN IF(CurrentCount > LastRefreshCount, 1, 0)RefreshLog表,通过Power Query定时导入数据集的刷新历史记录 - 构建监控报表:新建Power BI报表,连接所有需监控的数据集,用矩阵展示数据集、表名称,基于度量值设置条件格式。
内容的提问来源于stack exchange,提问作者coding
相关产品推荐
相关产品推荐

