【问题标题】:Power BI NativeQuery - cannot convert from Type to TextPower BI NativeQuery - 无法从类型转换为文本
【发布时间】:2020-08-20 15:06:06
【问题描述】:

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

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

这是过程调用:

还有我的 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

问题出在哪里?

【问题讨论】:

  • 您可以先尝试使用不带参数的存储过程,以确保服务器和power bi之间的通信正常。之后尝试传递参数。这里我建议将参数值作为文本,然后在程序开始时将它们转换为 DateTime。
  • 我按照你的建议做了。我从过程中删除了参数并尝试使用 NativeQuery 但它失败了。我还在设置中关闭了本机查询权限。同样的错误又出现了,怎么回事?
  • 我做到了!最后!我已经花了几个星期的时间,没人知道怎么做:)现在我可以将参数从可视化传递到 SQL 存储过程并刷新所有数据:)我对此非常满意!
  • 嗨@Muska,很高兴看到您的问题得到解决。您可以在此处发布自己的答案,以便其他人也了解和了解该解决方案。

标签: sql sql-server powerbi


【解决方案1】:

我找到了解决方案。关键是在这里使用 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. 在“高级编辑器”中单击“确定”后(参见第 3 点),您的 SQL 查询将与参数一起执行。现在您可以在 Power BI 中看到刷新的数据。

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

  1. 现在输入参数值。

点击确定,就是这样!您的 SQL 查询现在正在根据您从 PBI 可视化层传递的参数刷新,所有刷新的数据都将加载到 PBI 中的数据模型中 - 这意味着您的可视化将使用新数据自动更新。它不再是统计数据——它现在是动态的:)

关于它的另一个好处是,您从 SQL 导入到 PQ 的基表不会更改为函数(因为它通常是在您参数化查询时) - 即使您在基本查询中使用参数,它仍然是表.它减少了将数据加载到 PBI 数据模型中的问题,所有列都保留在它们的位置,并且没有一个被删除。它非常适合我。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2017-07-15
    • 2022-11-28
    • 2017-12-21
    • 2022-01-09
    • 2023-02-06
    相关资源
    最近更新 更多