如何让PowerBI自动拉取SQL数据库中新增的月度表?
自动导入按月生成的SQL表到PowerBI
方法一:用Power Query动态加载合并表
拉取目标表名称列表
打开PowerBI,选择「获取数据」→「SQL Server数据库」,输入服务器和数据库名称后切换到「高级选项」,执行以下SQL查询获取所有符合命名规则的表:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME LIKE 'sqlt_1_202%'执行后就能得到所有需要的月份表名称列表。
动态加载单表数据
进入Power Query编辑器,给当前表添加自定义列,粘贴以下M代码(记得替换成你的服务器和数据库名称):= Sql.Database("你的服务器地址", "你的数据库名称", [Query="SELECT * FROM dbo." & [TABLE_NAME]])这个自定义列会自动加载对应表的全部数据。
合并所有表数据
点击自定义列右侧的展开箭头,选择「仅加载数据」,所有符合规则的表就会合并成一张完整的表。之后每次刷新PowerBI,新生成的月份表都会自动被加载进来。
方法二:在SQL中创建视图(更省心)
如果你有SQL数据库的修改权限,直接在SQL里创建视图统一合并所有目标表,PowerBI只需连接这个视图即可:
CREATE VIEW dbo.vw_sqlt_1_all_data AS SELECT * FROM dbo.sqlt_1_2020_01 UNION ALL SELECT * FROM dbo.sqlt_1_2020_02 -- 后续新增月份表时,在视图里追加一行UNION ALL即可;想要完全自动的话,用下面的动态视图
若你的SQL Server是2016及以上版本,可以用动态SQL创建视图,自动包含所有符合规则的表:
CREATE OR ALTER VIEW dbo.vw_sqlt_1_all_data AS WITH TableList AS ( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME LIKE 'sqlt_1_202%' ) SELECT * FROM TableList CROSS APPLY ( SELECT * FROM OPENROWSET( 'SQLNCLI', 'Server=' + @@SERVERNAME + ';Database=' + DB_NAME() + ';Trusted_Connection=yes;', 'SELECT * FROM dbo.' + TABLE_NAME ) ) AS Data;
注意:使用OPENROWSET需要开启Ad Hoc Distributed Queries,且需确保账号权限足够。之后PowerBI连接该视图,刷新时会自动同步新生成的表。
你之前的方法失效原因
你写的Source{[Schema="dbo",Item="sqlt_data_1_*"]}[Data]不生效,是因为Power Query的这种索引方式仅支持精确表名匹配,不支持通配符模糊匹配,必须通过动态获取表列表的方式实现自动加载。
内容的提问来源于stack exchange,提问作者trs11
相关产品推荐
相关产品推荐

