首页 > 解决方案 > 为 Power BI Desktop ODBC 数据源动态生成 SQL 语句(由打开时刷新或按钮触发)?

问题描述

Microsoft Power BI Desktop ODBC 数据源是否有在线生成 SQL 语句的机制?我可能 Power BI 有一些附加到数据源的事件,例如 beforeOpen、beforeRefresh,我可以在这些事件的处理程序中编写 Visual Basic VBA(DAX?M?)代码,并且我可以使用此代码修改 SQL 语句?

我的问题与如何在定义 Power BI Desktop 的 ODBC 数据源的 SQL 语句(可选)中使用参数(例如 Firebird)有关- 使用 ODBC 和 Firebird 使用参数非常困难,因此这是我的想法完全避免参数,而是完全生成 SQL 代码,然后这个代码生成 VB 代码可以读取参数(当前日期,来自用户输入)并相应地调整生成的 SQL。

附加信息我可以从静态查询中导入数据,然后 Power BI 在“模型”窗格中创建查询组件。当我选择“编辑查询”菜单项/命令时,Power Query 编辑器打开,我有机会更新 M 代码,即:

= Odbc.Query("dsn=MY_ODBC_SOURCE", "select s.sale_date, s.amount from sales s where s.sale_date>='01.07.2021'")

我可以在那里编辑销售日期参数并刷新查询数据。

所以,我的问题归结为另一个问题:我可以在 Power BI 中创建按钮,它可以做这两件事:1)以编程方式编辑Odbc.Query("")源代码(通过传递来自 Power BI 表单控件的参数值);2)以编程方式刷新数据?

附加信息文章https://powerbi.microsoft.com/en-us/blog/deep-dive-into-query-parameters-and-power-bi-templates/详细介绍了 Power BI 参数的定义。也许这些参数可以从定义 ODBC 查询/数据源的 DAX/M 表达式中访问,并且可以从 Power Query 编辑器中编辑?这些参数可以是简单的数值,但自定义 SQL 的整个部分可能都可以通过这些参数或派生进行编码。不过,目前我看不到如何在 Power Query 中使用参数。

标签: vbapowerbi

解决方案


绝大多数PowerBI 报告会在加载到 DataSet 后简单地导入所有数据并对其进行过滤/排序。

您可以通过创建Power Query 参数并将参数值粘贴到 SQL 语句中来操作 M 中的 SQL 语句

但是您必须刷新数据集才能使参数值的任何更改生效,因为 SQL 查询仅在数据刷新期间运行。这就是为什么通常的做法是导入所有数据并在 DataSet 中对其进行过滤。

如果您的数据集处于 DirectQuery 模式,您可以交互筛选源数据,但您必须使用支持 DirectQuery 的数据源


推荐阅读