ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 16061|回复: 16

[分享] PowerQuery(PowerBI Desktop)查询加载到数据库----以SQL数据库为例

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-8-8 23:17 | 显示全部楼层 |阅读模式
本帖最后由 张文洲 于 2017-8-8 23:17 编辑

我们知道PowerQuery和PowerBI Desktop可以使用M语言创建查询,并将数据加载到Excel工作表或者数据模型。

那么,我们有没有可能将查询直接加载到数据库呢?

答案是肯定的。

下面为大家提供一个使用M语言调用SQL存储过程,将查询数据写入SQL数据库的案例,希望对大家有所帮助。
1.回顾旧版Excel传统的导入外部数据界面,我们可以导入SQL数据库,并使用Select查询语句

幻灯片1.JPG

除了使用SELECT查询语句,我们还可以调用SQL存储过程,并传递参数
幻灯片2.JPG

但我们调用以下三种形式的存储过程,为了能顺利得到结果,我们需要按图示在存储过程首尾稍作修改。
幻灯片3.JPG


为了将PQ查询加载到SQL数据库,我们首先了解一下SQL语句写入多行数据的语法

幻灯片4.JPG

SQL2008及以后的版本支出VALUES多行语法结果
幻灯片5.JPG

接下来我们看看PowerQuery中M语言调用SQL查询的主要语法

幻灯片6.JPG

以上都是单行的示例,那么该如何将PQ中的查询表结果传递给数据库查询语句呢?
比如实现类似于下面的结果

幻灯片7.JPG

方法1,我们可以使用XML格式,将PQ中的表转为xml二进制文件,传递给存储过程

幻灯片8.JPG

幻灯片9.JPG

幻灯片10.JPG


方法2,自SQL2016起,支持JSON。我们可以将PQ查询表数据转换为JSON文本,传递给SQL查询语句。

幻灯片11.JPG

幻灯片12.JPG

幻灯片13.JPG


最后,为了规避PQ查询的重复刷新,我们稍微进行一些设置。

幻灯片14.JPG


注意:使用上面的方法,不仅可以将PQ查询表数据写入数据库,也可以对数据库数据进行查询、更新、删除等操作。
如果不是数据库管理员,请谨慎执行以上测试,实在要测试,请新建模拟数据库。

幻灯片15.JPG


以下是我的PowerQuery部分代码效果,使用的是XML二进制传递方法。

QQ截图20170808224502.jpg


最后是演示视频和测试文件。

PowerQuery查询加载到SQL数据库.part1.rar (1.5 MB, 下载次数: 217)

PowerQuery查询加载到SQL数据库.part2.rar (771.45 KB, 下载次数: 282)

PowerQuery查询加载到数据库.rar (1.05 MB, 下载次数: 311)

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-8-8 23:20 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-8-8 23:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-8-9 08:54 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-9 09:24 | 显示全部楼层
在和弦处等你 发表于 2017-8-9 08:54
Power BI Desktop用R导入;Excel应该2019版本会支持R

M语言与其他语言的距离越近,我们获益越多。

TA的精华主题

TA的得分主题

发表于 2017-9-7 10:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
厉害,一直在学习

TA的精华主题

TA的得分主题

发表于 2019-5-6 09:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-7-2 17:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大哥还在吗,遇到这个问题不会操作,怎样将pq查询的数据上传到sqlserver数据库

TA的精华主题

TA的得分主题

发表于 2020-10-25 07:33 | 显示全部楼层
专家,按照您的提示做完操作后,提示This native database query isn't currently supported. 请给些建议如何解决,多谢!

代码如下:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"KeyValue", type text}, {"NumberValue", Int64.Type}, {"DateValue", type datetime}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Changed Type",{{"NumberValue", type text}, {"DateValue", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "binary", each Text.Format("<row><KeyValue>#[KeyValue]</KeyValue><NumberValue>#[NumberValue]</NumberValue><DateValue>#[DateValue]</DateValue></row>",[KeyValue=[KeyValue], NumberValue=[NumberValue], DateValue=[DateValue]])),
    XmlBinary = Text.ToBinary("<table>" & Text.Combine(#"Added Custom"[binary]) & "</table>"),
    insertrows=Value.NativeQuery(Sql.Database("tin031app","test1",[CreateNavigationProperties= true]),"InsertRows @xmlBin",[xmlBin=XmlBinary])
in
    insertrows

TA的精华主题

TA的得分主题

发表于 2020-10-30 10:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

厉害,一直在学习
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 23:06 , Processed in 0.054056 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表