Power BI NativeQuery - 无法从类型转换为文本

穆斯卡

我创建了带有 2 个参数的 SQL 存储过程:DateFromDateTo(在我的 sql 过程中都是 DATE 类型)。

我想在 Power Query 编辑器中编写本机查询,因此首先我为日期(类型:日期/时间)创建了 2 个参数:StartDateEndDate不幸的是,当我尝试编写本机查询时,出现以下错误:“无法从数据类型记录转换为文本”。你知道它有什么问题吗?

这是过程调用:

在此处输入图片说明

和我的 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

问题出在哪儿?

穆斯卡

我找到了解决方案。这里的关键是使用NativeQuery。步骤如下:

  1. 创建带有参数的存储过程(例如DateFromDateTo)并将数据导入 Power BI
  2. 在 PowerQuery 编辑器中创建 2 个参数。假设startDateendDate设置一些默认值:

在此处输入图片说明

  1. 转到“高级编辑器”更改 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 代码使用 Native Query 完成。

在此处输入图片说明

  1. 在您的“高级编辑器”(参见第三点)中单击“确定”后,您的 SQL 查询将与参数一起执行。现在,您可以在 Power BI 中看到刷新的数据。

  2. 转到 Power BI 中的可视化层。单击“转换数据”的这个小箭头,然后选择“编辑参数”:

在此处输入图片说明

  1. 现在输入参数值。

在此处输入图片说明

Click OK and that's it! Your SQL query is being refreshed now based on parameters you passed from PBI Visualization layer and all refreshed data will be loaded into your data model in PBI - that means your visualizations will be updated automatically with new data. It's not statis any longer - it's dynamic now:)

Another good thing about it is that your base table which you imported to PQ from SQL won't change to function (as it usually is when you parametrize queries) - it still remain table even though you use parameters on your base query. It makes less problems with loading data into PBI data model, all columns remain on their place and none of them are removed. It works perfectly for me.

我还关闭了本机查询批准(转到选项>安全性),因为 PBI 不会要求您授予执行查询的权限。当您使用 Native Query 时,这是一件好事(请记住安全问题,这很重要)。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章