Azure 数据资源管理器 (Kusto)

概要

Item Description
发布状态 一般可用性
Products Excel
Power BI (语义模型)
Power BI (数据流)
Fabric(Dataflow Gen2)
Power Apps(数据流)
Dynamics 365 Customer Insights
支持的身份验证类型 组织帐户
功能参考文档

注释

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

先决条件

支持的功能

  • Import
  • DirectQuery(Power BI 语义模型)
  • 高级选项
    • 限制查询结果记录编号
    • 以字节为单位限制查询结果数据大小
    • 禁用结果集的截断功能
    • 其他设置语句

从 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。

    导航器打开并包含 Samples 数据库中 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。

    “选择数据”页的屏幕截图,其中包含 Samples 数据库中 StormEvents 中的数据。

使用高级选项进行连接

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

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

高级选项 Description
限制查询结果记录编号 结果中要返回的最大记录数。
以字节为单位限制查询结果数据大小 结果中要返回的最大数据大小(以字节为单位)。
禁用结果集的截断功能 使用 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 查询中使用以下任一选项:

选项 Sample Description
MaxRows [MaxRows=300000] truncationmaxrecords set 语句添加到查询。 覆盖查询默认的最大记录数,使其可以返回给调用方,避免截断。
MaxSize(最大尺寸) [MaxSize=4194304] truncationmaxsize set 语句添加到查询。 重写默认设置,以覆盖允许查询返回给调用方的最大数据大小,从而导致截断。
NoTruncate [NoTruncate=true] notruncation set 语句添加到查询。 启用禁止对返回给调用方的查询结果进行截断。
附加设置语句 [AdditionalSetStatements="set query_datascope=hotcache"] 将提供的 set 语句添加到查询。 这些语句用于设置查询持续时间的查询选项。 查询选项控制查询的执行方式并返回结果。
不区分大小写 [CaseInsensitive=true] 使连接器生成不区分大小写的查询 - 查询在比较值时使用 =~ 运算符而不是 == 运算符。
强制使用包含 [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)连接窗口中的高级选项替代这些默认值:

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 列右侧的下拉菜单,选择 文本筛选器>等于,然后在 “在“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 导航器中,从对象列表中选择函数。 连接器分析参数,并将其呈现在导航器右侧的数据上方。

    屏幕截图显示了导航器中数据上方显示的“剪切”和“作”参数。

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

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

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

  6. 返回到 LargeOrSmallSales 查询,并在公式编辑栏中用查询参数替换值。

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

  7. 在编辑器中,创建两个静态表(Enter Data),以提供两个参数的选项。 对于临界值,您可以创建一个包含10、50、100、200、500、1000、2000等值的表格。 表 Op 包含两个 Text 值 <>

  8. 表中的两列需要使用Bind to parameter功能绑定到查询参数。

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

最终报告包括两个静态表的筛选器以及销售汇总中的任何可视化对象。

Power BI 中的屏幕截图,其中表旁显示了“截止”和“操作值”选项。

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

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

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

高级编辑器中:

  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 假定所有查询都是只读的。