如何以编程方式将Excel Power查询中的连接string更改为SQL Server?

我试图创build基于Microsoftdynamic导航数据库中的数据的Excel数据透视表。

诀窍是我需要Excel直接从SQL Server数据库中用权限查询访问数据,而且还必须能够从具有不同名称和表名的多个数据库中的相同表中访问数据。

有没有人有任何关于这个问题的经验或build议?

任何事情将不胜感激。

谢谢!

步骤1.首先,您应该创build一个可以传递服务器名称,数据库名称和要查询的表的函数。 就像是

 let getData =(servername,dbname,tablename)=> let Source = Sql.Database(Servername, dbname, [Query="select abc , def from" & tablename & " where condition etc etc"]), #"CustomStep1" = some action on Source, in . . #"CustomStepn" = some action on Added CustomStepn-1 in #"Added CustomStepn" in getData 

您可以使用一个表格来创build自定义列。

第2步。现在使用参数表的方法。 在正常的Excel区创build一个表

 Server Name|DatabaseName | Table_to_be_used 

现在使用在powerquery选项(或Excel 16中的数据选项卡)中使用菜单选项fromtable。在powerquery步骤中使用上一步中创build的函数getdata在此表中添加自定义列。 执行任何其他“扩展”(默认情况下,第一个函数将返回一个表,如果你没有做任何其他转换),“总结”,重命名操作。

然而,powerquery公式防火墙会给你带来困难,因为powerquery不信任本机SQL查询,你将不得不批准每一个本地sql查询。 您可以尝试在查询选项中取消选中“要求用户批准新的本地数据库查询”checkbox。

希望你能明白这一点,并帮助你。

也许值得研究一下创buildQuery对象并通过oData暴露它们,这是Excel可以读取的东西。 这样做的好处是,它可以本地处理表关系,并可以将在直接SQL查询中看不到的stream场暴露给表。

除了用于pipe理不同表名的存储过程之外,没有一种简单的方法可以查询特定的表,而不需要在某种程度上对名称进行硬编码。

公司表格会给你前缀$,表格名称在公司之间是静态的。 你可以写一些奇特的Excel逻辑来循环它们。