Azure 数据资源管理器 (Kusto)

总结

项目 说明
发布状态 正式版
产品 Excel
Power BI(语义模型)
Power BI(数据流)
Fabric(数据流 Gen2)
Power Apps(数据流)
Dynamics 365 Customer Insights
支持的身份验证类型 组织帐户
功能参考文档

注意

由于部署计划和特定于主机的功能,某些功能可能只存在于一个产品中。

先决条件

支持的功能

  • 导入
  • DirectQuery(Power BI 语义模型)
  • 高级选项
    • 限制查询结果记录数
    • 限制查询结果数据大小(以字节为单位)
    • 禁用结果集截断
    • 附加的 set 语句

从 Power Query Desktop 连接到 Azure 数据资源管理器

要从 Power Query Desktop 连接到 Azure 数据资源管理器:

  1. 在“获取数据”体验中选择“Azure 数据资源管理器 (Kusto)”。 Power Query Desktop 中的“获取数据”体验因应用而异。 要详细了解适用于你的应用的 Power Query Desktop“获取数据”体验,请转到在何处获取数据

  2. Azure 数据资源管理器 (Kusto) 中,提供 Azure 数据资源管理器群集的名称。 对于此示例,使用 https://help.kusto.windows.net 访问示例帮助群集。 对于其他群集,URL 采用格式 https://<ClusterName>.<Region>.kusto.windows.net。

    还可以选择要连接到的群集上托管的数据库、数据库中的表之一或类似 StormEvents | take 1000 的查询。

  3. 如果要使用任何高级选项,请选择该选项并输入要与该选项一起使用的数据。 详细信息:使用高级选项进行连接

    注意

    可能需要向下滚动以显示所有高级选项和数据连接选择。

  4. 选择导入DirectQuery 数据连接模式(仅限 Power BI Desktop)。 详细信息:何时使用导入或直接查询模式

  5. 选择“确定”以继续。

    Azure 数据资源管理器 (Kusto) 对话框的屏幕截图,其中输入了群集的 URL。

  6. 如果尚未与群集建立连接,请选择登录。 使用组织帐户登录,然后选择“连接”。

    Azure 数据资源管理器的“登录”对话框的屏幕截图,其中机构帐户已准备好登录。

  7. 导航器中,选择所需的数据库信息,然后选择加载以加载数据,或是选择转换数据以继续在 Power Query 编辑器中转换数据。 在此示例中,在 Samples 数据库中选择了 StormEvents。

    导航器打开并在示例数据库中包含来自 StormEvents 的数据的屏幕截图。

从 Power Query Online 连接到 Azure 数据资源管理器

要从 Power Query Online 连接到 Azure 数据资源管理器:

  1. 在“获取数据”体验中选择“Azure 数据资源管理器 (Kusto)”选项。 不同的应用通过不同的方式来使用 Power Query Online“获取数据”体验。 要详细了解如果从你的应用访问 Power Query Online“获取数据”体验,请转到在何处获取数据

    突出显示了 Azure 数据资源管理器的“获取数据”窗口的屏幕截图。

  2. 连接到数据源中,提供 Azure 数据资源管理器群集的名称。 对于此示例,使用 https://help.kusto.windows.net 访问示例帮助群集。 对于其他群集,URL 采用格式 https://<ClusterName>.<Region>.kusto.windows.net。

    还可以选择要连接到的群集上托管的数据库、数据库中的表之一或类似 StormEvents | take 1000 的查询。

    Azure 数据资源管理器 (Kusto)“选择数据源”页的屏幕截图,其中输入了群集的 URL。

  3. 如果要使用任何高级选项,请选择该选项并输入要与该选项一起使用的数据。 详细信息:使用高级选项进行连接

  4. 如果需要,请在“数据网关”中选择本地数据网关。

  5. 如果尚未与群集建立连接,请选择登录。 使用组织帐户登录。

  6. 成功登录后,选择下一步

  7. 选择数据页面中,选择所需的数据库信息,然后选择转换数据下一步,以继续在 Power Query 编辑器中转换数据。 在此示例中,在 Samples 数据库中选择了 StormEvents。

    在示例数据库中包含来自 StormEvents 的数据的“选择数据”页的屏幕截图。

使用高级选项进行连接

Power Query Desktop 和 Power Query Online 都提供一组高级选项,可以根据需要将其添加到查询中。

下表列出了可以在 Power Query Desktop 和 Power Query Online 中设置的所有高级选项。

高级选项 说明
限制查询结果记录数 结果中返回的最大记录数。
限制查询结果数据大小(以字节为单位) 结果中返回的最大数据大小(以字节为单位)。
禁用结果集截断 可以通过使用notruncation请求选项来启用或禁用结果截断。
其他 Set 语句 为查询的持续时间设置查询选项。 查询选项控制查询的执行方式并返回结果。 多个 Set 语句可以用分号分隔。

有关 Power Query UI 中不可用的其他高级选项的信息,请转到在 M 查询中配置 Azure 数据资源管理器连接器选项

何时使用导入或直接查询模式

在导入模式下,数据将移到 Power BI。 在 DirectQuery 模式下,直接从群集查询数据。

在以下情况下使用导入模式:

  • 数据集很小。
  • 不需要接近实时的数据。
  • 数据已聚合,或在 Kusto 中执行聚合。

在以下情况下使用 DirectQuery 模式:

  • 数据集非常大。
  • 需要接近实时的数据。

要了解有关使用 DirectQuery 的详细信息,请转到关于在 Power BI 中使用 DirectQuery

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

以下部分包括有关将 Kusto 查询语言与 Power Query 配合使用的提示和技巧。

Power BI 中的复杂查询

与 Power Query 相比,使用 Kusto 表示复杂查询更轻松。 它们应作为 Kusto 函数实现,并在 Power BI 中调用。 在 Kusto 查询中将 DirectQuerylet 语句一起使用时需要此方法。 由于 Power BI 联接两个查询,并且 let 语句不能与 join 运算符一起使用,因此可能会出现语法错误。 因此,将联接的每个部分保存为 Kusto 函数,并允许 Power BI 将这两个函数联接在一起。

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

Power Query 不包含相对日期时间运算符,例如 ago()。 要模拟 ago(),请使用 DateTime.FixedLocalNow#duration Power Query M 函数的组合。

而不是此使用 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 查询语言从 Power Query 高级编辑器配置 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) 连接窗口中的“高级选项”替代这些默认值

高级选项。

这些选项会对查询发出 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"

使用查询参数

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

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

可以在支持查询参数的任何查询步骤中使用查询参数。 例如,根据参数的值筛选结果。 在此示例中,选择 Power Query 编辑器中 State 列右侧的下拉菜单,选择文本筛选器>等于,然后在保留“状态”的行下选择 ALABAMA

使用参数筛选结果。

向 Azure 数据资源管理器函数提供参数

Kusto 函数是维护复杂 Kusto 查询语言 (KQL) 查询的好方法。 建议使用函数,而不是在 Power Query 中嵌入 KQL。 使用函数的主要优点是,在易于创建和测试的环境中维护逻辑一次。

函数还可以接收参数,因此让 Power BI 用户拥有充分的灵活性。 Power BI 有很多方法可用于数据切片。 但是,所有筛选器和切片器都是在原始 KQL 之后添加的,在许多情况下,需要在查询的早期阶段使用筛选。 使用函数和动态参数是一种自定义最终查询的有效方法。

创建函数

可以在有权访问的任何 Azure 数据资源管理器群集(包括免费群集)中创建以下函数。 该函数从帮助群集中返回表 SalesTable,该表已针对大于或小于报表用户提供的数字的销售事务进行筛选。

.create-or-alter  function LargeOrSmallSales(Cutoff:long,Op:string=">")
{
    cluster("help").database("ContosoSales").SalesTable
    | where  (Op==">" and SalesAmount >= Cutoff) or (Op=="<"  and SalesAmount <= Cutoff)
}

创建函数后,可以使用以下项进行测试:

LargeOrSmallSales(2000,">")
| summarize Sales=tolong(sum(SalesAmount)) by Country

还可以使用以下项进行测试:

LargeOrSmallSales(20,"<")
| summarize Sales=tolong(sum(SalesAmount)) by Country
在 Power BI 中使用函数
  1. 连接到在其中创建了函数的群集。

  2. 在 Power Query 导航器中,从对象列表中选择函数。 连接器分析参数,并将其呈现在导航器右侧的数据上方。

    在导航器中数据上方显示 Cutoff 和 Op 参数的屏幕截图。

  3. 将值添加到参数,然后选择应用

  4. 预览显示后,选择转换数据

  5. 在 Power Query 编辑器中,创建两个参数,一个用于截止值,一个用于运算符。

  6. 返回到 LargeOrSmallSales 查询,并将值替换为编辑栏中的查询参数。

    LargeOrSmallSales 函数的屏幕截图,重点介绍编辑栏中的 Cutoff_Param 和 Op_Param 参数。

  7. 从编辑器中,创建两个静态表(输入数据),以提供两个参数的选项。 对于截止,可以创建包含值(如 10、50、100、200、500、1000、2000)的表。 对于表 Op,包含两个文本值 <> 的表。

  8. 需要使用绑定到参数选择将表中的两列绑定到查询参数。

    将 Op 绑定到 Op_Param 参数的屏幕截图。

最终报表将包括两个静态表的切片器,以及汇总销售额中的任何视觉对象。

Power BI 中的屏幕截图,其在表旁边显示了 Cutoff 和 Op 值选项。

首先筛选基表,然后进行聚合。

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

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

高级编辑器中:

  1. 查找查询的以下部分:

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

    例如:

    Source = AzureDataExplorer.Contents("Help", "Samples", "StormEvents | where State == 'ALABAMA' | take 100", [])
    
  2. 将查询参数插入到 Kusto 查询语言 (KQL) 查询中。

    如果直接在连接对话框中粘贴 KQL 查询,查询将是 Power Query 中源步骤的一部分。 可以使用高级编辑器或在编辑栏中编辑源语句时嵌入参数作为查询的一部分。 一个示例查询可以是 StormEvents | where State == ' " & State & " ' | take 100State 是一个参数,在运行时查询将是:

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

  3. 如果查询包含引号,请正确对其进行编码。 例如,KQL 中的以下查询:

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

    将按如下所示显示在高级编辑器中,并带有两个引号:

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

    如果使用参数,例如 State,应将其替换为以下查询,其中包含三个引号:

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

将 Value.NativeQuery 用于 Azure 数据资源管理器功能

要使用 Power Query 中不支持的 Azure 数据资源管理器功能,请使用 Power Query 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 假定所有查询都为只读。