今天介绍的还是从Power Query访问Power BI Desktop数据模型。今天这篇主要是两个目的: 主要介绍一种将Power Query从Excel分离地访问Power BI数据模型的方法。
顺便解决之前的各种从Excel连接Power BI Desktop数据模型的场景中,需要使用那个Excel模板的问题。
什么是将Power Query从Excel分离呢?就是在不打开Excel的情况下,从数据模型返回DAX查询结果。 当然,并不是不需要Excel了,查询结果还是要返回到Excel中。
这个问题的主要场景在于我们在Excel中做了一个Power Query查询,返回结果后,Excel文件就变大了。如果结果表太大,每次打开这个文件就会很慢。
能够将查询从Excel中分离出来呢?
Excel是支持这种方式的。不过因为每次都需要更新端口和数据库,所以需要额外的操作。
准备工作还是要在Excel中进行。
回忆一下我们之前用Excel直连Power BI Desktop数据模型的方法。(详细操作见这篇文章)。 在模板文件中,我们可以使用查询返回数据库端口和名称,
然后我们修改上图中访问数据模型的查询,将端口号和数据库名称关联到Excel的超级表中。 现在,我们修改一下这个做法。
在上面的查询中将端口号和数据库名称都作为Power Query查询的一部分,形成一个大的查询。
新建一个Excel文件。 创建空查询, 在Power Query编辑器中,点击高级编辑器,
在其中输入下面的代码: let Source = Folder.Files("C:\Users\Administrator\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces"), //db #"Filtered Rows" = Table.SelectRows(Source, each ([Name] = "msmdsrv.port.txt")), #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Content"}), #"Combined Binaries" = Binary.Combine(#"Removed Other Columns"[Content]), #"Imported Text" = Table.FromColumns({Lines.FromBinary(#"Combined Binaries",null,null,1252)}), #"Renamed Columns" = Table.RenameColumns(#"Imported Text",{{"Column1", "Port Number"}}), #"Cleaned Text" = Table.TransformColumns(#"Renamed Columns",{},Text.Clean), Custom1 = Source, #"Filtered Rows1" = Table.SelectRows(Custom1, each Text.Contains([Name], ".db.")), #"Removed Other Columns1" = Table.SelectColumns(#"Filtered Rows1",{"Name"}), #"Split Column by Delimiter" = Table.SplitColumn(#"Removed Other Columns1","Name",Splitter.SplitTextByEachDelimiter({"."}, QuoteStyle.Csv, false),{"Name.1", "Name.2"}), #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Name.1", type text}, {"Name.2", type text}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Name.2"}), #"Renamed Columns1" = Table.RenameColumns(#"Removed Columns",{{"Name.1", "Value"}}), #"Added Custom" = Table.AddColumn(#"Renamed Columns1", "Parameter", each "DB"), #"DBTbl" = Table.ReorderColumns(#"Added Custom",{"Parameter", "Value"}), //------------------
//port #"Filtered Rows 1" = Table.SelectRows(Source, each ([Name] = "msmdsrv.port.txt")), #"Removed Other Columns 1" = Table.SelectColumns(#"Filtered Rows 1",{"Content"}), #"Combined Binaries 1" = Binary.Combine(#"Removed Other Columns 1"[Content]), #"Imported Text 1" = Table.FromColumns({Lines.FromBinary(#"Combined Binaries 1",null,null,1252)}), #"Renamed Columns 1" = Table.RenameColumns(#"Imported Text 1",{{"Column1", "Value"}}), #"Added Custom 1" = Table.AddColumn(#"Renamed Columns 1", "Parameter", each "Port"), #"Reordered Columns 1" = Table.ReorderColumns(#"Added Custom 1",{"Parameter", "Value"}), #"PortTbl" = Table.TransformColumns(#"Reordered Columns 1",{{"Value", Text.Clean}}), //-------------------------------- port = Text.From(PortTbl[Value]{0}), db=Text.From(DBTbl[Value]{0}), 源 = OleDb.Query( "Provider=MSOLAP.5;Data Source=localhost:"& port &"; Initial Catalog=" &db , "EVALUATE var regionCountry = filter(VALUES(Geography[RegionCountryName]),Geography[RegionCountryName]<> BLANK()) var statByRegionTbl = SELECTCOLUMNS( regionCountry, ""地区或国家"", [RegionCountryName], ""产品数量"", CALCULATE(DISTINCTCOUNT(ProductSubcategory[ProductSubcategory])), ""销量"", CALCULATE(SUM(Sales[SalesQuantity])), ""销售额"", CALCULATE(SUM(Sales[SalesAmount])) ) return statByRegionTbl" ), 重命名的列 = Table.RenameColumns(源,{{"[地区或国家]", "地区或国家"}, {"[产品数量]", "产品数量"}, {"[销量]", "销量"}, {"[销售额]", "销售额"}}) in 重命名的列
代码分四段,下面依次介绍一下: 其中,第一部分的文件夹名称中的用户名“Administrator”需要修改为你自己的用户名。 点击完成, 如果这一步遇到了问题,提示你关于隐私级别的问题,就在Power Query的文件选项卡中,选择查询选项, 将其中的全局,隐私修改为: 关闭Power Query编辑器,上载到Excel中。在Excel右侧查询&连接面板中,右键点击刚才的查询, 选择属性, 在定义选项卡中,点击导出连接文件, 点击保存。 关闭这个Excel文件。
在资源管理器中,找到刚才保存的连接文件(.odc),
双击。 将自动打开一个新的Excel文件,并把查询结果返回到Excel中。
回到资源管理器中,选择用记事本打开这个连接文件,
可以看到这个查询的定义, 红色方框内就是Power Query查询的定义。如果是简单的修改,并入用户名,就可以在这个文件中修改橙色加亮的部分。如果要修改查询的DAX代码,最好不在这里修改。双击这个文件,打开一个Excel,再修改查询并重新导出连接文件即可。 视频已在视频号和B站同时更新 详情咨询客服(底部菜单-知识库-客服) Excel+Power Query+Power Pivot+Power BI Power Excel 知识库 按照以下方式进入知识库学习Excel函数 底部菜单:知识库->Excel函数自定义函数 底部菜单:知识库->自定义函数 Excel如何做 底部菜单:知识库->Excel如何做面授培训 底部菜单:培训学习->面授培训 Excel企业应用 底部菜单:企业应用 也可以在历史文章中学习Excel,Power Query,Power Pivot,Power BI,Power Automate各种技巧。
|