Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

v-stephen-msft

获取 Power BI 数据流刷新历史记录的三种方法

Power BI 数据流使您能够连接、转换、组合和分发数据以进行下游分析。一些用户希望监控数据流的刷新历史记录和状态,以便他们可以为使用这些数据流的数据集制定刷新计划。

在本文中,我将介绍三种获取 Power BI 数据流刷新历史记录的方法。

方法1

最简单的方法是查看数据流设置页面上的 刷新历史记录。

导航到 '设置' > '数据流' > '刷新历史记录'。您还可以在 '工作区' > '上下文菜单' (...) > '刷新历史记录'.

刷新历史记录提供了刷新的概述,包括运行时间、刷新类型、持续时间和运行状态。要以 CSV 文件的形式查看详细信息,你可以勾选需要查看的记录然后点击左上角的‘以CSV格式下载‘按钮。在此 CSV 文件中,有此数据流中包含的每个表(也称为实体)的详细刷新历史记录。如果刷新失败,它还包含表的错误消息。为了更好地理解 CSV 文件中的所有属性,请参阅了解和优化数据流刷新 - Power BI |Microsoft 文档

vstephenmsft_0-1730943163964.png

方法 2

如果您拥有高级 Power Automate 许可证,则可以创建自动化云端流来记录数据流的刷新历史记录。这在官方文档中已经很好地介绍了数据流连接器的 Power Automate 模板 |Microsoft 文档。它引入了以下三个模板。

 

vstephenmsft_1-1730943774309.png

方法 3 

 

第三种方法是使用 Power BI REST API 进行数据流。您可以使用数据流 - 获取数据流事务API 获取指定数据流的刷新事务列表。与前面的方法 2 类似,它返回整个数据流的刷新元数据,而不是数据流中的每个表的刷新元数据。它需要一个 GET 请求,如下所示。

GET

https://api.powerbi.com/v1.0/myorg/groups/{groupId}/dataflows/{dataflowId}/transactions

这种方法比其他两种方法更灵活。您可以将其与其他 Power BI REST API 结合使用,以根据您的需要获取数据。可以使用 Power Query 编辑器从这些 API 获取数据并转换返回的数据。然后,也可以使用它们创建自定义监控报告。

以下是有关如何获取新工作区中每个数据流的最新刷新历史记录的 M 代码示例。

1. 创建自定义函数 getRefreshHistory 以获取特定数据流的最新刷新记录。我向它添加了一个 duration 列。

 

(groupId as text, dataflowId as text) =>

let

Source = Json.Document(

Web.Contents(

"https://api.powerbi.com/v1.0/myorg/groups/" & groupId & "/dataflows/" & dataflowId & "/transactions",

[

Headers = [Authorization = "Bearer " & GetAccessToken()]

]

)

),

#"Converted to Table" = Record.ToTable(Source),

Value = #"Converted to Table"{1}[Value],

#"Converted to Table1" = Table.FromList(Value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

#"Expanded Column1" = Table.ExpandRecordColumn(

#"Converted to Table1",

"Column1",

{"id", "refreshType", "startTime", "endTime", "status"},

{"id", "refreshType", "startTime", "endTime", "status"}

),

#"Changed Type" = Table.TransformColumnTypes(

#"Expanded Column1",

{

{"id", type text},

{"refreshType", type text},

{"startTime", type datetime},

{"endTime", type datetime},

{"status", type text}

}

),

#"Added Custom" = Table.AddColumn(#"Changed Type", "duration", each [endTime] - [startTime]),

#"Changed Type1" = Table.TransformColumnTypes(#"Added Custom", {{"duration", type duration}}),

#"Filtered Rows" = Table.SelectRows(

#"Changed Type1", let latest = List.Max(#"Changed Type1"[startTime]) in each [startTime] = latest

)

in

#"Filtered Rows"

 

 

2. 使用数据流 - 获取数据流 API 获取工作区中的所有数据流,并调用函数 getRefreshHistory 以获取每个数据流的最新刷新历史记录。

 

let 

    groupId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 

    Source = Json.Document( 

        Web.Contents( 

            "https://api.powerbi.com/v1.0/myorg/groups/" & groupId & "/dataflows", 

            [ 

                Headers = [Authorization = "Bearer " & GetAccessToken()] 

            ] 

        ) 

    ), 

    #"Converted to Table" = Record.ToTable(Source), 

    Value = #"Converted to Table"{1}[Value], 

    #"Converted to Table1" = Table.FromList(Value, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 

    #"Expanded Column1" = Table.ExpandRecordColumn( 

        #"Converted to Table1", "Column1", {"objectId", "name"}, {"objectId", "name"} 

    ), 

    #"Renamed Columns" = Table.RenameColumns( 

        #"Expanded Column1", {{"objectId", "dataflowId"}, {"name", "dataflowName"}} 

    ), 

    #"Changed Type" = Table.TransformColumnTypes( 

        #"Renamed Columns", {{"dataflowId", type text}, {"dataflowName", type text}} 

    ), 

    #"Invoked Custom Function" = Table.AddColumn( 

        #"Changed Type", "refreshHistory", each getRefreshHistory(groupId, [dataflowId]) 

    ), 

    #"Expanded refreshHistory" = Table.ExpandTableColumn( 

        #"Invoked Custom Function", 

        "refreshHistory", 

        {"refreshType", "startTime", "endTime", "status", "duration"}, 

        {"refreshType", "startTime", "endTime", "status", "duration"} 

    ) 

in 

    #"Expanded refreshHistory" 

 

vstephenmsft_4-1730945008302.png

在这里,我使用自定义函数 GetAccessToken 从 Azure 服务获取访问令牌(不记名令牌)。下面的代码是实现此目的的一种方法。若要获取访问令牌,需要在 Azure 门户中注册 Azure Active Directory (Azure AD) 应用程序并为其授予相关权限。请参阅注册 Azure AD 应用程序以用于 Power BI - Power BI |Microsoft 文档

 

() => 

    let 

        apiUrl = "https://login.windows.net/common/oauth2/token", 

        body = [ 

            grant_type = "password", 

            resource = "https://analysis.windows.net/powerbi/api", 

            username = "your power bi account", 

            password = "your power bi password", 

            client_id = "your client id for registered application", 

            client_secret = " your client secret for registered application" 

        ], 

        Source = Json.Document(Web.Contents(apiUrl, [Content = Text.ToBinary(Uri.BuildQueryString(body))])), 

        access_token = Source[access_token] 

    in 

        access_token 

  

 

vstephenmsft_3-1730944995001.png

 

 

结论

 

如果要大致了解租户或工作区中数据流的刷新历史记录,可以使用 Power Automate 模板或 Power BI REST API 获取刷新数据并基于其构建监控报告。有关刷新失败时进行故障排除的详细信息,您可以从“设置”页面上的“刷新历史记录”下载 CSV 文件。

 

作者:Jing Zhang

审核:Kerry Wang & Ula Huang

翻译:Xiaoxin Sheng