excel - 具有空值处理的 Excel 参数化 PowerQuery
问题描述
尝试使用存储在工作表中的参数值( StartDate和EndDate )从 Excel 执行参数化 SQL 查询时遇到错误。当工作表中的EndDate参数留空时,我想将当前日期和时间用作默认值。相反,我收到一条奇怪的错误消息,尽管 Excel 生成的查询似乎有效。我创建了一个基本示例来演示此问题,并发现它是一个可重复的问题。
重现步骤:
- 创建一个新的 Excel 工作表
- 使用以下值创建一个名为Params的新表:
创建一个新的 SQL 查询(数据 -> 获取数据 -> 从数据库 -> 从 SQL Server 数据库)
输入如下基本查询(注意:对于服务器和数据库,我使用了一个已知良好的 SQL Server 2014 数据库,我已将它用于许多其他类似的查询 - 我相信这不是问题的根源)按下好的:
在下一个屏幕上按编辑按钮。转到高级编辑器并输入以下查询,它将用当前本地时间替换一个空的 EndDate 参数:
let Params = Excel.CurrentWorkbook(){[Name="Params"]}[Content]{0}, StartDate = Params[#"StartDate"], EndDate = if Params[#"EndDate"] is null then DateTime.LocalNow() else Params[#"EndDate"], Source = Sql.Database("N0049MF1", "Allmine", [Query="SELECT '" & DateTime.ToText(StartDate) & "' AS StartDate, '" & DateTime.ToText(EndDate) & "' AS EndDate"]) in Source
按完成返回查询编辑器。将出现以下横幅:
按下“编辑权限”按钮会弹出一个对话框,要求设置隐私级别 - 我使用了“组织。
单击保存按钮将显示以下对话框。您可以看到参数已正确添加到查询中。按运行继续:
- 至此,查询正常运行,返回如下结果:
- 接下来,我尝试删除Params表的 EndDate 单元格中的日期并刷新查询。这一次,当 Native Database Query 权限对话框出现时,EndDate 被正确设置为当前日期和时间,表明 M 代码工作正常:
按下运行按钮后,对话框消失,但立即重新出现,没有错误消息。反复按下“运行”按钮会关闭对话框,每次都会快速重新出现。
按取消按钮显示以下错误:
[权限错误] EvaluateNativeQueryUnpermitted 失败:查询 'SELECT '1/1/2018 12:00:00 AM' AS StartDate, '11/8/2018 5:07:56 PM' AS EndDate' 未被批准执行。
结论
该查询似乎是有效的,并且权限似乎设置正确。将 EndDate 更改回有效日期会导致查询恢复正常工作,但删除日期会导致再次失败。使用 SQL Server 分析器,我可以看到当StartDate和EndDate参数都存在时查询已成功执行,但如果EndDate参数为空,则甚至永远不会将查询发送到数据库。
这真的是一个权限问题吗?M码有问题?Excel中的错误?
解决方案
推荐阅读
- python - 给定特定元素时,列表列表会更新整个列
- javascript - 在 Javascript 中,当它们都迭代相同的次数时,为什么 'while(true' 比 'for(...)' 慢?
- arrays - 使用通配符过滤数组行
- arrays - 为什么在 For 循环中数组不填充值,其中每个数组元素 [i] 都分配有变量?
- python - Python 正则表达式美国电话号码 - 需要将 '6502221111' 拆分为 '650' '222' '1111'
- r - 使用R根据优先级分配资源
- azure - 如何将标志传递到 Azure Pipelines 中的 docker run 命令?
- r - 如何绘制条件条形图
- unity3d - 粒子或动画
- heroku - Discord bot:无法实例化基本 SlashCommand