有关使用 Power BI 查询和可视化 Azure 数据资源管理器数据的最佳做法

Azure 数据资源管理器是一项快速且高度可缩放的数据探索服务,适用于日志和遥测数据。 Power BI 是一种业务分析解决方案,可以用来可视化数据,并在组织内共享结果。 Azure 数据资源管理器提供三个选项用于连接到 Power BI 中的数据。 使用内置连接器将 Azure 数据资源管理器中的查询导入 Power BI,或使用 SQL 查询。 本文提供有关使用 Power BI 来查询和可视化 Azure 数据资源管理器数据的提示。

有关使用 Power BI 的最佳做法

在处理 TB 量级的全新原始数据时,请遵循以下准则,使 Power BI 仪表板和报表保持简洁并包含最新的数据:

  • 轻便 - 只在 Power BI 中引入报表所需的数据。 若要进行深入的交互式分析,请使用 Azure 数据资源管理器 Web UI,此界面已经过优化,适合通过 Kusto 查询语言进行即席浏览。

  • 复合模型 - 使用复合模型将顶级仪表板的聚合数据与筛选的操作原始数据合并到一起。 可以明确定义何时使用原始数据,何时使用聚合视图。

  • 导入模式与 DirectQuery 模式 - 将导入模式用于较小型数据集的交互。 对于频繁更新的大型数据集,请使用“DirectQuery”模式。 例如,使用“导入”模式创建维度表,因为这些表较小且不经常更改。 根据预期的数据更新频率设置刷新间隔。 使用“DirectQuery”模式创建事实数据表,因为这些表较大且包含原始数据。 使用这些表可以通过 Power BI 钻取呈现筛选的数据。 使用 DirectQuery 时,可以使用查询缩减来防止报表在你准备就绪之前加载数据。

  • 并行度 - Azure 数据资源管理器是可线性缩放的数据平台,因此,可以通过提高端到端流的并行度来改善仪表板的呈现性能,如下所示:

  • 有效切片器 - 使用同步切片器来防止报表在你准备就绪之前加载数据。 构建数据集、放置所有视觉对象并标记所有切片器之后,可以选择同步切片器,以便仅加载所需的数据。

  • 使用筛选器 - 尽量使用最多的 Power BI 筛选器,以便在 Azure 数据资源管理器中重点搜索相关的数据分片。

  • 有效视觉对象 - 为数据选择性能最高的视觉对象。

有关使用 Power BI 的 Azure 数据资源管理器连接器查询数据的提示

以下部分包含有关在 Power BI 中使用 Kusto 查询语言的提示和技巧。 使用 Power BI 的 Azure 数据资源管理器连接器可视化数据

Power BI 中的复杂查询

与 Power Query 相比,在 Kusto 中可以更轻松地表达复杂查询。 这些查询应作为 Kusto 函数实现,并在 Power BI 中调用。 在 Kusto 查询中结合 let 语句使用 DirectQuery 时,必须采用此方法。 由于 Power BI 联接两个查询,而 let 语句不能与 join 运算符结合使用,因此可能会出现语法错误。 请将每个联接部分保存为 Kusto 函数,并允许 Power BI 将这两个函数联接在一起。

如何模拟相对日期时间运算符

Power BI 不包含 ago() 之类的相对日期时间运算符。 若要模拟 ago(),请结合使用 DateTime.FixedLocalNow()#duration Power BI 函数。

不要编写如下所示的使用 ago() 运算符的查询:

    StormEvents | where StartTime > (now()-5d)
    StormEvents | where StartTime > ago(5d)

使用以下等效查询:

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", []),
    #"Filtered Rows" = Table.SelectRows(Source, each [StartTime] > (DateTime.FixedLocalNow()-#duration(5,0,0,0)))
in
    #"Filtered Rows"

在 M 查询中配置 Azure 数据资源管理器连接器选项

可以从使用 M 查询语言的 PBI 高级编辑器配置 Azure 数据资源管理器连接器的选项。 借助这些选项,便可以控制要发送到 Azure 数据资源管理器群集的已生成查询。

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", [<options>])
in
    Source

可以在 M 查询中使用以下任意选项:

选项 示例 说明
MaxRows [MaxRows=300000] truncationmaxrecords set 语句添加到查询中。 替代查询可以返回给调用方的默认最大记录数(截断)。
MaxSize [MaxSize=4194304] truncationmaxsize set 语句添加到查询中。 替代允许查询返回给调用方的默认最大数据大小(截断)。
NoTruncate [NoTruncate=true] notruncation set 语句添加到查询中。 启用禁止截断返回给调用方的查询结果的功能。
AdditionalSetStatements [AdditionalSetStatements="set query_datascope=hotcache"] 将提供的 set 语句添加到查询中。 这些语句用于设置查询持续时间的查询选项。 查询选项控制查询的执行方式并返回结果。
CaseInsensitive [CaseInsensitive=true] 使连接器生成不区分大小写的查询;在比较值时,查询将使用 =~ 运算符而不是 == 运算符。
ForceUseContains [ForceUseContains=true] 在使用文本字段时,使连接器生成使用 contains(而不是默认的 has)的查询。 虽然 has 的性能要高很多,但它不会处理子字符串。 若要详细了解这两个运算符之间的差异,请参阅字符串运算符
超时 [Timeout=#duration(0,10,0,0)] 将查询的客户端和服务器超时都配置为提供的持续时间。
ClientRequestIdPrefix [ClientRequestIdPrefix="MyReport"] 为连接器发送的所有查询配置 ClientRequestId 前缀。 这样,当查询来自特定报告和/或数据源,就可以在群集中识别它们。

注意

可将多种选项组合在一起来实现所需的行为:[NoTruncate=true, CaseInsensitive=true]

达到 Kusto 查询限制

默认情况下,如查询限制中所述,Kusto 查询最多返回 500,000 行或 64 MB 的结果。 可使用 Azure 数据资源管理器 (Kusto) 连接窗口中的“高级选项”替代这些默认值:

advanced options.

这些选项会连同查询一起发出 set 语句,以更改默认查询限制:

  • “限制查询结果记录数”生成 set truncationmaxrecords
  • “限制查询结果数据大小(字节)”生成 set truncationmaxsize
  • “禁用结果集截断”生成 set notruncation

事例敏感性

默认情况下,在比较字符串值时,连接器会生成使用区分大小写的 == 运算符的查询。 如果数据不区分大小写,则不是所需的行为。 若要更改生成的查询,请使用 CaseInsensitive 连接器选项:

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", [CaseInsensitive=true]),
    #"Filtered Rows" = Table.SelectRows(Source, each [State] == "aLaBama")
in
    #"Filtered Rows"

使用查询参数

可以使用查询参数来动态修改查询。

在连接详细信息中使用查询参数

使用查询参数来筛选查询中的信息并优化查询性能。

在“编辑查询”窗口中,选择“主页”>“高级编辑器”

  1. 找到以下查询节:

    Source = AzureDataExplorer.Contents("<Cluster>", "<Database>", "<Query>", [])
    

    例如:

    Source = AzureDataExplorer.Contents("Help", "Samples", "StormEvents | where State == 'ALABAMA' | take 100", [])
    
  2. 将查询的相关部分替换为你自己的参数。 将查询拆分为多个部分,并使用与号 (&) 和参数将它们连接回去。

    例如,在以上查询中,我们取 State == 'ALABAMA' 部分,将其拆分为 State == '',并在它们之间放置 State 参数:

    "StormEvents | where State == '" & State & "' | take 100"
    
  3. 如果查询包含引号,请正确对其编码。 例如,以下查询:

    "StormEvents | where State == "ALABAMA" | take 100"
    

    在“高级编辑器”中显示时包含两个引号,如下所示:

     "StormEvents | where State == ""ALABAMA"" | take 100"
    

    应将它替换为包含三个引号的查询,如下所示:

    "StormEvents | where State == """ & State & """ | take 100"
    

在查询步骤中使用查询参数

可以在支持查询参数的任何查询步骤中使用查询参数。 例如,根据某个参数的值筛选结果。

filter results using a parameter.

使用 Value.NativeQuery 获取 Azure 数据资源管理器功能

若要使用 Power BI 不支持的 Azure 数据资源管理器功能,请使用 M 中的 Value.NativeQuery() 方法。此方法用于在生成的查询中插入 Kusto 查询语言片段,还可用于更好地控制执行的查询。

以下示例演示如何在 Azure 数据资源管理器中使用 percentiles() 函数:

let
    StormEvents = AzureDataExplorer.Contents(DefaultCluster, DefaultDatabase){[Name = DefaultTable]}[Data],
    Percentiles = Value.NativeQuery(StormEvents, "| summarize percentiles(DamageProperty, 50, 90, 95) by State")
in
    Percentiles

不要使用 Power BI 数据刷新计划程序向 Kusto 发出控制命令。

Power BI 包含可以定期对数据源发出查询的数据刷新计划程序。 不应使用此机制在 Kusto 中计划控制命令,因为 Power BI 假设所有查询都是只读的。

后续步骤

使用 Power BI 的 Azure 数据资源管理器连接器直观显示数据