Power BI桌面查询参数,第1部分,简介

Power BI查询参数

Power BI桌面于2016年4月版中添加的最酷的功能之一是“查询参数”。现在,借助查询参数,我们可以在Power BI Desktop中创建参数,并在各种情况下使用它们。例如,我们现在可以定义一个引用参数的查询以检索不同的数据集。或者,我们可以通过“筛选器行”引用参数。一般来说,我们可以通过以下方式引用参数:

  • 数据源
  • 筛选行
  • 保持行
  • 删除行
  • 替换行

此外,可以将参数加载到数据模型,以便我们可以从度量,计算列,计算表和报表元素中引用它们。

在“ Power BI桌面查询参数”系列文章中,我向您展示如何在不同方案中使用查询参数。

情境

在本文中,我将根据以下几种情况向您展示查询参数的一些用例:

  1. 参数化数据源
  2. 在过滤器行中使用查询参数

在下一篇文章中,您将了解有关查询参数的更多信息:Power BI桌面查询参数,第2部分,SQL Server动态数据屏蔽用例”和“Power BI查询参数,第3部分,列表输出

要求

您需要满足以下要求才能关注此帖子:

  1. 最新版本 Power BI桌面 (版本:2.34.4372.322 64位(2016年4月)或更高版本)

注意: 由于动态数据屏蔽(DDM)是SQL Server 2016的新功能,并且在以前版本的SQL Server中不可用,因此您需要安装最新版本的SQL Server 2016。仅当您要使用SQL Server 2016和Adventure Works CTP3时, 动态数据屏蔽(DDM)顶部的查询参数.

方案1:参数化数据源

参数化数据源可用于许多不同的用例中。从连接到查询参数中定义的不同数据源以加载列的不同组合。为了更加清楚,我将方案分解为一些更具体的用例。

用例1:参数化数据源以连接到不同的服务器和不同的数据库

假设您有不同的客户使用相同的数据库架构。但是,托管在不同SQL Server实例中的数据库以及数据库名称也不同。使用查询参数,我们可以轻松地在不同的数据源之间切换,然后将报告发布到每个客户的Power BI服务。

  • 打开Power BI桌面
  • 点击获取数据
  • 从“其他”中选择“空白查询”,然后单击“连接”Power BI桌面创建空白查询
  • 在查询编辑器窗口中,单击功能区中的“管理参数”

Power BI桌面管理参数

一键点击“新建”

2输入参数名称

3-您也可以写说明

4-选择文字类型

5-从“允许的值”中选择“值列表”。这将打开一个列表,您可以为该参数键入不同的值。如果您不想为参数输入ant预定义值,请为“允许的值”选择“任何值”

6-用一些有效值填充列表。在我们的例子中将是实例名称

7、8、9-选择“默认值”和“当前值”,然后单击“确定”

Power BI桌面管理参数02

  • 现在,您可以在“查询”窗格中看到该参数Power BI桌面查询参数
  • 为数据库名称创建另一个参数。您可以通过单击功能区中的“管理参数”来执行此操作,也可以右键单击“查询”窗格,然后单击“新建参数”Power BI桌面创建查询参数
  • 再次重复上述9个步骤,但是这次是为数据库名称定义参数Power BI桌面管理参数03
  • 现在,您应该在“查询”窗格中看到两个参数
  • 您可以删除“ Query1”,因为我们想在“数据源”对话框中使用以上参数
  • 单击功能区中的“新来源”
  • 单击“ SQL服务器数据库”,然后单击“连接”
  • 为“服务器”选择“参数”,然后从列表中选择适当的参数
  • 对“数据库”执行相同的操作,然后单击“确定”。Power BI桌面数据源查询参数
  • 选择“ FactInternetSales”
  • 单击“选择相关表”,然后单击“确定”。Power BI桌面获取数据
  • 点击“关闭”& Apply”Power BI桌面查询编辑器
  • 到目前为止,我们已将数据从“ AdventureWorksDW2016CTP3”加载到模型中。现在该创建一个简单的报告,然后切换参数以查看其工作方式。
  • 如您所见,我添加了一个柱形图,显示按日历年的销售额,还显示一个表,显示产品和销售额。 (只需保持简单)Power BI桌面
  • 要切换服务器/数据库,我们只需要更改参数的值
  • 点击“编辑查询”,然后点击“编辑参数”Power BI桌面 编辑参数s
  • 如您所见,您现在可以简单地更改“实例名称”和“数据库”名称以切换到另一个服务器和数据库,而无需进行其他操作,然后单击“确定”。

Power BI桌面 输入参数

  • 数据源刷新以从新服务器/数据库加载数据Power BI桌面刷新数据Power BI桌面报告

用例2:从数据源加载动态列

记住前面的用例。我们有不同的客户在不同的服务器上拥有不同的数据库。我们的客户也有不同的报告需求。例如,他们需要查看不同形状的客户名称。客户数据存储在DimCustomer中。我们应在“客户名称”列中介绍以下组合:

1-客户名称= DimCustomer中的姓氏

2-客户名称= DimCustomer中的名字+姓氏

3-客户名称=姓氏 + DimCustomer的名字

4-客户名称=来自DimCustomer的名字+中间名+姓氏

为此,我们可以创建一个包含上述“客户名称”所有组合的参数。

  • 从我们为上一个用例创建的模型中删除DimCustomer
  • 创建一个新参数,并将所有需要的组合添加到值列表中。您可以通过右键单击“查询”窗格,然后单击“新参数”或单击功能区中的“管理参数”来执行此操作

注意: 您应该使用T-SQL语法在值列表中创建不同的组合,因为这些值将用作数据源查询中的列。Power BI桌面查询参数中的T-SQL

  • 现在,我们需要再次将DimCustomer导入模型。 (请记住,我们在以前的步骤中删除了DimCustomer)
  • 在“查询编辑器”窗口中的功能区上单击“新建源”
  • 单击“ SQL服务器数据库”,然后单击“连接”
  • 选择“服务器”和“数据库”参数
  • 点击“高级选项”
  • 放下面的SQL语句

选择 客户密钥,

       地理钥匙,

       客户备用键,

       标题,

       –firstname,

       –middlename,

       ,

       名字样式,

       生日,

       婚姻状况,

       后缀,

       性别,

       电子邮件地址,

       年收入,

       全部孩子,

       儿童在家,

       英语教育,

       西班牙语教育,

       法国教育,

       英语职业,

       西班牙职业,

       法国占领,

       房主标志,

       车号,

       地址第一行,

       地址行2,

       电话,

       优先购买,

       通勤

   消费者

注意: 我从查询中删除了“名字”和“中间名”。在后续步骤中,“姓氏”列将替换为“客户名称”参数。从SQL Server参数导入数据

  • 点击确定资料汇入
  • 将“ Query1”重命名为DimCustomer重命名查询
  • 单击功能区中的“高级编辑器”
  • 向右滚动以找到“姓氏”列
  • 将“ 姓”列替换为“ 顾客姓名”参数。为此,您只需将“ 姓”替换为以下内容:

                  “&CustomerName&” as 顾客姓名

    Power BI桌面高级编辑器

    • 点击完成
    • 您会收到一条警告消息,单击“编辑权限”

    Power BI桌面编辑权限

    • 点击“运行”

    Power BI桌面本机数据库查询

    • 运行查询后,您将看到CustomerName

    Power BI桌面动态列

    • 点击“关闭”& Apply”
    • 在报表中添加一个新的矩阵,并从FactInternetSales输入“ SalesAmount”,并从DimCustomer输入“ 顾客姓名”

    Power BI桌面报告

    • 现在我们要切换“ 顾客姓名”参数值以查看会发生什么
    • 单击功能区中的“编辑查询”,然后单击“编辑参数”

    Power BI桌面 编辑参数s

    • 仅更改“ 顾客姓名”的值,然后单击“确定”

    Power BI桌面交换机参数

    • 我们通过修改列来修改查询,因此我们需要确认运行查询,因此请单击“运行”。

    Power BI桌面本机数据库查询

    • 如您所见,我们现在在“客户名称”列中有了新的组合

    Power BI桌面矩阵

    • 如果要在服务器/数据库和客户名称之间切换,我们只需要切换参数的值

    Power BI桌面 输入参数

    Power BI桌面报告

    以上情况可能不是在数据源上使用参数的最佳示例,但是您可能已经知道了此新功能的强大功能。

    方案2:在过滤器行中使用查询参数

    如前所述,除数据源外,我们目前还可以通过过滤器行,保留行,删除行和替换值来引用参数。在本节中,我将说明如何在“筛选器行”中使用参数。

    • 在之前部分中创建的模型中,单击功能区中的“编辑查询”
    • 在查询编辑器窗口中创建一个新的查询参数

    Power BI桌面创建新参数

    • 从“查询”窗格中选择DimSalesTerritory

    Power BI桌面查询编辑器

    • 在“ SalesTerritoryCountry”列上添加行过滤器

    Power BI桌面过滤器行

    • 选择“参数”作为过滤器类型,然后从下拉列表中选择“国家”参数,然后单击“确定”

    Power BI桌面过滤器行参数

    • 如您所见,DimSalesTerritory会针对其SalesTerritoryCountry等于“美国”的行进行过滤

    Power BI桌面过滤查询

    • 现在切换参数值将更改“过滤器行”
    • 在“查询”窗格中单击“国家”参数,然后将“当前值”更改为“加拿大”

    Power BI桌面参数开关的当前值

    • 再次选择DimSalesTerritory,您会看到更改了

    Power BI桌面过滤查询

    • 参数化过滤器行已完成!

24 thoughts on “Power BI桌面查询参数,第1部分,简介

  1. 这是非常好的文章。最终用户是否可以使用过滤器从可以作为参数输入的一组值中进行选择,因为最终用户无权使用或单击‘Edit Parameter’主页上的选择。

    作为Power BI开发人员,我能够在参数中选择一组值,但是如何使最终用户能够从值列表中设置参数呢?

    1. 库玛
      You can access the parameters outside of the 功率查询 Editor by going to 首页 tab in the ribbon, then click the drop down arrow of the Edit Queries and select 编辑参数s. But I’m不确定是否可以编辑已发布报告的参数。

  2. 很棒的文章。我想知道是否有可能像在SSRS中那样,正在访问报表的用户将其用户名动态传递给存储过程,以便他们正在访问仅应由该用户查看的信息”(使用表达式:= mid(User!UserID,InStr(User!UserID,”\”)+1))”,如果可以在高级编辑器中的Power BI中这样做。

  3. 你好
    我有一个获取数据的问题
    1.我可以从Power BI连接到Hana上的SAP BW
    2.我正在尝试使用直接查询从SAP BW中提取数据。
    3.我有参数来提取数据,数据结构的预览不显示,即使我从搜索按钮中选择了选项,我也选择了两个技术名称&启用预览功能,但仍无法获得预览功能
    4.一旦我填写了参数详细信息,然后只选择了必填项,就可以得到预览,
    5.预览后,我有加载按钮来加载数据结构。
    6.当我拉动Display的关键指标时,它显示为空白。
    7.源有数据,当我使用SAP GUI作为RSRT T代码时,我正在获取数据。
    8.我已经检查了BeX外部使用查询,选中了OLE DB连接复选框
    9,关键指标未隐藏
    我已经在Power BI桌面中选中了“选项”,所有所需的选项均已选中。
    我将SAP BW的数据和结构加载到Power BI时为什么不显示关键指标?

  4. 我正在使用SAP hana直接查询,并希望在这样的直接查询中传递参数。
    选择*从“Schema1”.”FN_2019″();

    我希望Schema1作为查询中的参数,因此当我更改参数值时;所有查询均按结果显示结果。
    谢谢,
    库尔

  5. 不错的文章,但我有另一种情况。
    我在桌面上有一个日期切片器,我创建了一个日期参数,并使用@date参数查询以根据参数值查找记录,并且我将date参数的当前值设置为’10/22/2019′而且即使我更改了slicer的值,它也只获取一天的记录。我已经加载了用于建模的参数并将切片器值设置为此参数,但是没有运气。

    1. 嗨,苏希尔,

      欢迎来到BIInsight.com。
      这是我根据您的解释所读的内容,在Power Query中定义了日期参数,报表上还具有切片器,并且希望该日期根据在切片器中选择的值而变化。
      如果说’是正确的,那么我必须澄清一下。
      Power BI包括Power Query(M)层,Model层和Report层。
      –Power Query(M)是您的数据准备层(包括查询参数)
      –另一方面,模型保留所有关系,度量,计算列和计算表
      –在“报告”层中,您可以使用折线图,条形图,切片器等可用的不同可视化效果来可视化数据…
      在数据准备层中,使用Power Query(M)表达式语言,在模型中,使用DAX。
      以下是Power BI中不同层之间数据的流动方式:

      功率查询 (M) => Model => Report

      在较高层进行更改不会传播到较低层,因此,当您在切片器中更改值时,它不会’在您的Power Query中进行任何更改。
      希望现在更加清楚(如果我正确理解了您的问题)。

      干杯。

  6. 感谢您的介绍。如何使用文本过滤器更新Power BI中创建的参数值并过滤视觉图像上的数据?  

    1. 嗨Adeshina,

      欢迎来到BIInsight.com。
      我对您的问题的理解是,您在Power Query中有一个查询参数,报表上也有一些视觉效果,您的期望是,每当更改参数时’您的报告视觉效果体现了变化。好吧,这是查询参数的正常行为。但是,如果您希望查询参数像报表上的切片器一样工作,例如我们在SSRS报表中如何使用参数,那么我必须澄清一些概念。
      Power BI具有3层; 功率查询(M)层,Model层和Report层。
      – 功率查询(M)是您的数据准备层(包括查询参数)
      –另一方面,模型保留所有关系,度量,计算列和计算表。这是您的语义层。
      –在“报告”层中,您可以使用折线图,条形图,切片器等各种可用视觉效果来可视化数据。
      在数据准备层中,您使用Power Query(M)表达式,而在模型中,您使用DAX。
      以下是Power BI中不同层之间数据的流动方式:

      功率查询 (M) => Model => Report

      在右侧的图层中进行更改,不会传播到左侧的图层,因此,当您在切片器中更改值时,Power Query中不会进行任何更改。
      希望现在更加清楚(如果我正确理解了您的问题)。

      干杯。

  7. 您能帮忙解决这个问题吗?
    我希望能够设置一个“在开始日期和结束日期之间”参数,以便提取两个自定义日期之间的数据。
    我创建了两个参数表;一个可以输入开始日期(tblStartDate),另一个可以输入结束日期(tblEndDate)。
    请帮忙,谢谢

  8. 我还需要使用参数更改SQL查询中的WHERE子句,但我需要动态计算EndDate参数为今天’s date.

    I’我们已经研究了场景,但仍然可以’t figure it out?

    1. 嗨亨德里克,

      欢迎来到BIInsight.com。
      不太确定你是什么’d想这样做,如果您再详细说明一下情况,那就太好了。
      但是说到SQL Server,您可以在WHERE子句中使用GETDATE()函数。
      如果你’d要在Power Query中处理此问题,则可以使用DateTime.LocalNow()函数。
      如果你 explain your scenario a bit more I probably can help more.

      干杯。

  9. 非常好的解释。但是,我可以知道是否可以传递用户参数’的输入到Powershell脚本中,考虑到数据源是API?

    先感谢您。

  10. 感谢这篇文章,我遵循了场景1(参数化数据源)的步骤。但是,我们有一个问题:我们正在使用此技术在SQL Server中配置两个不同的数据源,它们具有相同的表架构和数据,但连接字符串不同。其中一个供开发团队使用,它们位于不同的网络上,无法访问生产环境。我们希望他们使用开发连接参数从Power BI Desktop开发报告,然后更改参数以查询生产数据库并发布报告。当他们想要保存报告时会出现问题:由于与生产的连接失败,因此更改无法应用,并且他们永远无法发布指向生产环境的报告。

    先谢谢了!

    1. 嗨,西尔维亚,

      欢迎来到BIInsight.com。
      立即想到三种方法。
      1-开发团队成员可以将报告发布到生产环境,而报告仍指向开发数据库。然后,Power BI管理员通过Power BI Service中的数据集设置更改参数。这是有用的,因为开发人员可以轻松发布报告。但是报告显示开发数据,直到管理员更改参数值为止
      2-开发人员必须使用Dev数据完成工作,将参数值切换为Prod,保存文件而不应用更改。关闭文件,然后登录到Power BI Service并直接从该服务导入报告。
      3-开发人员不得在Prod环境中发布。他们甚至没有生产工作区的查看者权限。他们开发报告,然后将其交给有权将报告发布到Prod的PBI审核员/管理员。
      后者是我首选的方法,因为它更安全,更受控制。我建议您看一下有关Power BI Governance框架中版本控制的博客文章: //www.fo-bao.com/power-bi-governance-good-practices-part-2-version-control-with-onedrive-teams-and-sharepoint-online/

      希望能帮助到你。
      干杯

      1. 非常感谢Soheil,那太快了!

        我们正在尝试选项1,’看看与我们的开发团队如何合作。在这种情况下,我们的管理员没有’不想照顾这个项目,但是如果没有其他工作,我们’ll选择第三个选项。

        祝您有美好的一天,并再次感谢!

  11. 嗨Soheil,
    主题摘要非常有用!
    有一次,我’创建了一些参数,是否有办法更改它们在菜单中出现的顺序“Enter Parameters” window?
    并且有一种方法可以从“Enter Parameters”用于在Power Query Editor中创建函数的窗口?在刷新运行时调用函数时,这些参数会动态填充一个值,因此通常没有必要为它们输入值。不过,默认情况下,它们会出现在“Enter Parameters” 窗口。
    非常感谢你!
    最好的祝福,
    马丁

    1. 嗨,马丁,

      欢迎来到BIInsight.com。
      回覆。参数的顺序,它们的显示顺序与它们在 管理参数窗口。
      如果你不这样做’不需要输入值,那么您不需要’不需要参数。也许,您可以在禁用数据加载的查询中实现目标。

      希望有帮助。
      干杯。

有什么想法吗?在这里与我们分享:

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.