将动态 M 查询参数与 Azure 数据资源管理器一起用于 Power BI

Azure 数据资源管理器是一项快速且高度可缩放的数据探索服务,适用于日志和遥测数据。 Power BI 是一种业务分析解决方案,可以用来可视化数据,并在组织内共享结果。 使用动态 M 参数,可以创建 Power BI 报表,使查看者能够使用筛选器或切片器来设置 KQL 查询参数的值。

本文将以一个新的 Power BI 项目开始,并使用示例数据创建一个报表,该报表使用切片器筛选链接到 KQL 函数的动态 M 查询中的数据。

先决条件

若要完成本文,需要满足以下条件:

向 KQL 函数添加直接查询连接

首先,为 Power BI 设置一个连接器。

  1. 在 Power BI Desktop 的“主页”选项卡上选择“获取数据”,然后选择“更多”。

    “获取数据”菜单的屏幕截图,其中显示了“获取更多”选项。

  2. 搜索“Azure 数据资源管理器”,选择“Azure 数据资源管理器”,然后选择“连接”。

    搜索屏幕的屏幕截图,其中显示了连接器的选项。

  3. 在连接器屏幕上,使用以下信息填写窗体。

    连接屏幕的屏幕截图,其中显示了群集、数据库和表选项。

    设置 “值” 字段说明
    群集 https://help.chinaeast2.kusto.chinacloudapi.cn 帮助群集的 URL。 其他群集的 URL 采用 https://<ClusterName>.<Region>.kusto.chinacloudapi.cn 格式。
    数据库 留空 托管在要连接到的群集上的数据库。 我们会在后面的步骤中选择此项。
    表名称 留空 数据库中的一个表,或者类似 StormEvents | take 1000 的查询。 我们会在后面的步骤中选择此项。
    高级选项 留空 查询选项,例如结果集大小。
    数据连接模式 DirectQuery 确定 Power BI 是导入数据还是直接连接到动态 M 查询。

    备注

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

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

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

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

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

    高级选项

    设置 示例值 字段说明
    限制查询结果记录数 300000 结果中返回的最大记录数
    限制查询结果数据大小 4194304 结果中返回的最大数据大小(以字节为单位)
    禁用结果集截断 true 可以通过使用 notruncation 请求选项来启用/禁用结果截断
    附加的 set 语句 set query_datascope=hotcache 设置查询持续时间的请求属性。 请求属性控制查询的执行方式并返回结果。
  4. 如果还没有连接到帮助群集,请登录。 使用组织帐户登录,然后选择“连接”。

    身份验证屏幕的屏幕截图,其中显示了登录选项。

  5. 在“导航器”屏幕上,执行以下操作:

    1. 展开 Samples 数据库。
    2. 选择 EventsByStates 函数。
    3. 对于 EventTypeParam,输入 High Wind,然后选择“应用”以预览数据。
    4. 选择“转换数据”。

    “导航”屏幕的屏幕截图,其中显示了某函数选项。

    函数在 Power Query 编辑器中作为动态 M 查询打开,我们将在其中继续创建用于动态 M 查询的参数。

    备注

    EventsByStates 函数是一个只读示例函数,可用于测试动态 M 查询参数的功能。 它定义支持多个并选择参数的所有值的最终版本。 如果要在你自己的群集中测试单一选择功能并逐步测试该功能,那么可以从以下函数的单一选择定义开始。

    .create-or-alter function EventsByStates (EventTypeParam:string)
    {
      StormEvents
      | where EventType == EventTypeParam
      | summarize Events=count() by EventType, State
    }
    
  6. 在 Power Query 编辑器中,执行以下操作:

    1. 选择“管理参数”>“新建参数”。

    2. 填写以下信息,然后选择“确定”。

      设置 建议值 说明
      名称 Type_Param 参数的名称。 建议添加后缀(如 _Param),以便轻松识别该后缀,并将其与你可能创建的其他参数区别开来。
      类型 文本 参数的类型。 参数的类型必须与 KQL 函数中声明的类型匹配。 Power BI 中的文本等效于 KQL 中的字符串。
      当前值 High Wind 参数值。 必须为此字段提供默认值。

    “管理参数”屏幕的屏幕截图,其中显示了新参数的创建。

  7. 返回“导航”屏幕,将 M 函数的参数值替换为新参数。

    “导航”屏幕的屏幕截图,其中显示了 M 函数参数的替换。

  8. (可选)重复这些步骤以创建更多参数,并将其替换为动态 M 查询中的参数。

  9. 创建包含报表切片器值的表。

    备注

    该表将列出要筛选的事件类型。 可以导入表或创建新表并手动输入数据。

    1. 在“主页”选项卡上,选择“最近使用的源”,然后选择帮助群集。

      “主页”屏幕的屏幕截图,其中显示了“帮助群集”选项。

    2. 在“导航器”屏幕上,展开 Samples 数据库,选择“StormEvents”,然后选择“确定”。

      “导航”屏幕的屏幕截图,其中显示了某表选项。

    3. 在“连接设置”对话框中,选择“导入”,然后选择“确定”。

      “连接设置”对话框的屏幕截图,其中显示了“导入选项”选项。

    4. 右键单击 EventType 列,然后选择“删除其他列”。

    5. 再次右键单击 EventType 列,然后选择“删除重复项”。

    6. (可选)添加另一列以定义切片器值的排序顺序

    7. 将表重命名为 SlicerValues

      表的屏幕截图,其中显示了“切片器值”表格。

  10. 在“主页”选项卡上,选择“关闭并应用”

    备注

    出现有关安全风险的对话框警告。 单击 “确定” 继续。 显示对话框的原因是 Power BI 正在添加第二个数据源。 有关详细信息,请参阅 Power BI Desktop 隐私级别。 但是,此示例中的数据源使用方式是绝对安全的。

  11. SlicerValues 表中的 EventType 列绑定到参数。

    1. 选择左侧的“模型”视图。
    2. SlicerValues 表中,选择 EventType 列。
    3. 在“属性”窗格中,展开“高级”。
    4. 在“绑定到参数”下,选择 Type_Param。 这会将 EventType 列绑定到参数。

    备注

    出现有关安全风险的对话框警告。 单击“继续”以继续。 显示对话框的原因是 Power BI 源正在向另一个源发送数据。 有关详细信息,请参阅 Power BI Desktop 隐私级别。 但是,此示例中的参数使用方式是绝对安全的。

    “模型视图”的屏幕截图,其中显示了 EventType 列与参数的绑定。

在报表中将数据可视化

Power BI Desktop 中有了数据以后,即可创建基于该数据的报表。 你将创建一个简单的报表,其中包含一个表和一个切片器,前者按状态显示事件摘要,后者用于按事件类型筛选表。

  1. 选择左侧的“报表”视图。

  2. 将表添加到报表中。

    1. 在“可视化效果”窗格中,选择“表”。 向报表画布添加一个空白表。
    2. 在“字段”窗格中,展开 EventsByStates,然后选择“状态”和“事件”。 现在,你有一个表,其中按状态显示事件摘要。
  3. 将切片器添加到报表。

    1. 在“可视化效果”窗格中,选择“切片器”。 向报表画布添加一个空白切片器。
    2. 在“字段”窗格中,展开 SlicerValues,然后选择 EventType。 现在,你有一个显示事件类型的切片器。

    “报表视图”的屏幕截图,其中显示了表和相关的切片器。

    报表现已准备就绪,可供查看。 请注意,在切片器中选择事件类型值时,基于 M 查询的表将按绑定到 M 查询参数的事件类型进行筛选。

  4. 保存报告。

接受多个参数值

如果要筛选切片器中的多个参数值,可通过调整 EventType 列的属性并修改 KQL 函数来实现此目的,如下所示:

  1. 调整 SlicerValues 表中的 EventType 列的属性。

    1. 选择左侧的“模型”视图。
    2. SlicerValues 表中,选择 EventType 列。
    3. 在“属性”窗格中,展开“高级”,然后打开“多选”设置。

    “模型视图”的屏幕截图,其中显示了多选设置。

  2. 修改 KQL 函数,将参数类型设置为动态,并更改条件 where 以检查参数值列表。

    .create-or-alter function EventsByStates (EventTypeParam:dynamic)
    {
      StormEvents
      | where EventType in (EventTypeParam)
      | summarize Events=count() by EventType, State
    }
    

现在可返回到报表,在切片器中选择多个事件类型。

接受所有参数值

如果要筛选切片器中的所有参数值,可通过调整 EventType 列的属性,修改 KQL 函数并更新切片器控制来实现此目的,如下所示:

  1. 调整 SlicerValues 表中的 EventType 列的属性。

    1. 选择左侧的“模型”视图。
    2. SlicerValues 表中,选择 EventType 列。
    3. 在“属性”窗格中,展开“高级”,然后打开“全选”设置。
    4. (可选)更改“选择所有值”设置。 在此示例中,需要使用默认值“全选”

    “模型视图”的屏幕截图,其中显示了“全选”设置。

  2. 更新切片器控制以显示“全选”选项。

    1. 选择左侧的“报表”视图。
    2. 选择 EventType 切片器。
    3. 在“可视化效果”窗格中,选择“格式”,展开“选择控制”,然后开启“显示‘全选’选项”设置。 事件类型切片器在列表顶部显示“全选”选项。
  3. 修改 KQL 函数,将参数类型设置为动态,并更改 where 条件以检查“全选”值或参数值列表

    .create-or-alter function EventsByStates (EventTypeParam:dynamic)
    {
      StormEvents
      | where ("__SelectAll__" in (EventTypeParam)) or (EventType in (EventTypeParam))
      | summarize Events=count() by EventType, State
    }
    

现在可返回到报表,在切片器中选择所有事件类型。

“报表视图”的屏幕截图,其中显示了具有“全选”选项的切片器。

注意事项和限制

使用动态 M 查询参数时,需要考虑以下注意事项和限制:

  • 单个参数不能绑定到多个字段,反之亦然。
  • 不支持以下参数类型:
    • 任意
    • Duration
    • True/False
    • 二进制
  • 不支持以下筛选器:
    • 相对时间切片器或筛选器
    • 相对日期
    • 层次结构切片器
    • 多字段包含筛选器
    • 排除筛选器/非筛选器
    • 交叉突出显示
    • 向下钻取筛选器
    • 交叉钻取筛选器
    • 前 N 个筛选器

清理资源

如果不再需要为本文创建的报表,请删除 Power BI Desktop (.pbix) 文件。