如何解决Power BI NativeQuery-无法从类型转换为文本
我创建了具有两个参数的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",[Query="EXEC [dbo].[sp_Sales] @DateFrom = """ & Date.ToText(StartDate) & """,@DateTo = """ & Date.ToText(EndDate) & """"])
in
Query
问题出在哪里?
解决方法
我找到了解决方案。关键是在这里使用NativeQuery。步骤如下:
- 使用参数(例如 DateFrom 和 DateTo )创建存储过程,并将数据导入Power BI
- 在PowerQuery编辑器中创建2个参数。假设 startDate 和 endDate 。设置一些默认值:
- 转到“高级编辑器”以更改M代码。正确的方法如下:
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不会征求您执行查询的许可。当您使用本机查询时,这是一件好事(请记住安全性问题,在这里很重要)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。