我创建了具有两个参数的SQL存储过程: DateFrom 和 DateTo (在我的sql过程中均为DATE类型)。
我想在Power Query Editor中编写本机查询,因此首先我在其中创建了两个日期参数(类型:日期/时间): StartDate 和 EndDate 。不幸的是,当我尝试编写本机查询时,会发生以下错误:“无法从记录类型转换为文本数据”。你知道这是怎么回事吗?
这是过程调用:
和我的M代码:
let
Source = Sql.Database("Server\12", "Base1"),
Query = Value.NativeQuery(
Source,
[Query="EXEC [dbo].[sp_Sales] @DateFrom = '" & Date.ToText(StartDate) & "', @DateTo = '" & Date.ToText(EndDate) & "'"])
in
Query
我还尝试了更多的“:
let
Source = Sql.Database("Server\12", "Base1"),
Query = Value.NativeQuery(
Source,
[Query="EXEC [dbo].[sp_Sales] @DateFrom = """ & Date.ToText(StartDate) & """, @DateTo = """ & Date.ToText(EndDate) & """"])
in
Query
问题出在哪里?
答案 0 :(得分:1)
我找到了解决方案。关键是在这里使用NativeQuery。步骤如下:
let
Source = Sql.Database("ServerName\12", "Base2"),
Query = Value.NativeQuery(
Source,
"EXEC [dbo].[storedProcedure_XYZ] @DateFrom = '" & Date.ToText(startDate) & "', @DateTo = '" & Date.ToText(endDate) & "'")
in
Query
@DateFrom 和 @DateTo 是SQL参数,必须按照我上面显示的方式将PQ参数(startDate和endDate)分配给它们。
重要的是,您不能将EXEC ....语句放在“ SQL语句字段”中以导入数据(当然,您需要填写服务器名称等)。 我的意思是,您可以先导入原始数据(请参见第1点),但此后此字段应保持为空。现在,整个工作由您的M代码使用本机查询完成。
在“高级编辑器”中单击“确定”(请参阅第3点),您的SQL查询将与参数一起执行。现在您可以在Power BI中看到刷新的数据。
转到Power BI中的可视化层。单击此小箭头向下的“转换数据”,然后选择“编辑参数”:
单击“确定”就可以了!现在将根据您从PBI可视化层传递的参数来刷新SQL查询,所有刷新的数据将被加载到PBI中的数据模型中-这意味着您的可视化将自动使用新数据进行更新。它不再是状态-现在是动态的:)
关于它的另一个好处是,从SQL导入到PQ的基表将不会更改为函数(通常是在对查询进行参数化时)-即使您在基查询中使用参数,它仍然保留在表中。将数据加载到PBI数据模型中所产生的问题更少,所有列都保留在原处,并且没有任何列被删除。它对我来说很完美。
我还关闭了本机查询批准(转到“选项”>“安全性”),因为PBI不会征求您执行查询的许可。当您使用本机查询时,这是一件好事(请记住安全性问题,在这里很重要)。