从相对路径加载数据到Power BI

19

我正在寻找一种解决方案,可以从相对路径加载外部数据文件,这样当别人打开我的PBIX文件时,在他/她的计算机上仍然可以正常工作。

非常感谢。

6个回答

22

Power BI目前不支持相对路径。

power bi does not support relative paths


为了简化操作,您可以创建一个变量,包含文件所在路径,并使用该变量确定每个表格的路径。这样,您只需要更改一个地方(即变量),所有的表格就会自动指向新的位置。

创建空白查询并命名(例如dataFolderPath),然后键入文件所在路径(例如C:\Users\augustoproiete\Desktop

create Blank Query

type path for the files

创建变量后,在高级编辑器中编辑每个表格,并将变量与文件名连接起来。

例如,把"C:\Users\augustoproiete\Desktop\data.xlsx"改为dataFolderPath & "\data.xlsx"

enter image description here


您还可以投票/关注此功能请求,以便在实现时得到通知:


我真的不认为他们会实现它,因为这可能会损害他们销售PowerBI发布服务器许可证的商业模式。因为使用相对路径,pbix文件可以通过Nextcloud等方式轻松共享... - fpnick
我喜欢这个解决方案,尽管它有一个副作用,那就是它阻止用户使用“数据源设置”对话框及其浏览按钮来更新源文件。这样一来,在Power Query编辑器中的高级编辑器/源设置成为更新源文件的唯一方式,除非我弄错了。 - James N

7

您还可以使用“参数”功能。 1. 创建一个名为“PathExcelFiles”的新参数 参数截图

  1. 编辑您的“源”条目 源输入截图

完成!


只要使用的路径在用户之间不变,这个程序就能正常工作。只要将参数设置为静态值,路径也将保持完全相同。 - Rantanplan
参数可以通过 API 调用进行设置:https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/update-parameters - A.Rowan

3
我认为现在还不能做到这一点。
请支持 此建议,这样微软Power BI团队更有可能添加这个新功能。

四年过去了,1000多个赞之后,微软仍然说这个想法的状态是“需要投票”? - Shawn Eary

0

0

我无法忍受无法使用相对路径的事实,但最终我不得不...

因此,我尝试找到一个还算可以接受的解决方法。使用Python脚本,至少可以访问用户的%HOME%目录。

let
    PySource = Python.Execute("from pathlib import Path#(lf)import pandas as pd#(lf)dataset = pd.DataFrame([[str(Path.home())]], columns = [1])"),
    homeDir = Text.Trim(Lines.ToText(PySource{[Name="dataset"]}[Value][1])),
    ...

用 R-Script 应该也是可能的,但我没有这样做。

有人知道在“Power”查询中获取% HOME%目录的更好解决方案吗? 如果有一个,我会很高兴得到它。

然后我在我的工作目录中创建了两个脚本install.bat:

@ECHO OFF
if exist "%HOME%\.pbiTemplatePath\filepath.txt" GOTO :ERROR

#This is are the key commands
mkdir "%HOME%\.pbiTemplatePath"
echo|set /p="%cd%" > "%HOME%\.pbiTemplatePath\filepath.txt"

GOTO :END

#Just a little message box
:ERROR
SET msgboxTitle=There is already another working directory installed.
SET /p msgboxBody=<"%HOME%\.pbiTemplatePath\filepath.txt"
SET tmpmsgbox=%temp%\~tmpmsgbox.vbs
IF EXIST "%tmpmsgbox%" DEL /F /Q "%tmpmsgbox%"
ECHO msgbox "%msgboxBody%",0,"%msgboxTitle%">"%tmpmsgbox%"
WSCRIPT "%tmpmsgbox%"
:END

以及 uninstall_all.bat:

@ECHO OFF
if exist "%HOME%\.pbiTemplatePath\filepath.txt" RMDIR /S /Q "%HOME%\.pbiTemplatePath\"

所以在“Power” BI中,我做了这个:

let
    PySource = Python.Execute("from pathlib import Path#(lf)import pandas as pd#(lf)dataset = pd.DataFrame([[str(Path.home())]], columns = [1])"),
    homeDir = Text.Trim(Lines.ToText(PySource{[Name="dataset"]}[Value][1])),
    workingDirFile = Text.Combine({homeDir, ".PbiTemplatePath\filepath.txt"} , "\"),
    workingDir = Text.Trim(Lines.ToText(Csv.Document(File.Contents(workingDirFile),[Delimiter=";", Columns=1, QuoteStyle=QuoteStyle.None])[Column1])),
    ...

现在,如果我的Git存储库(包含一个“Power”BI模板文件和一些配置文件,说明模板从哪里加载数据以及安装/卸载脚本),则只需执行一次安装,无需复制和粘贴任何路径。

我很乐意听取任何改进建议。这并不是Gotham应得的解决方案…… Gotham应该有更好的解决方案。


0
嗯,我有点找到了一种方法来做到这一点。
在我的情况下,我只是想更改文件路径中的Windows用户名。
let
    MainFolder = "C:\\Users\\",
    FolderData = "\\Downloads\\",
    File = "teste.xlsx",
    SheetName = "Plan1",
    Users = {"Mateo.Tesla", "Carl.Smith", "Bruna.Dias", "John.Mayer"}, // Add Here the different People will access your data
    Paths = List.Transform(Users, each Text.Combine({MainFolder, _, FolderCBERS, File}, "")),
    Lists = try List.RemoveNulls(List.Transform(Paths, each try Excel.Workbook(File.Contents(_), null, true) otherwise null)) otherwise null,
    TheTable = Lists{0},
    Sales_Sheet = TheTable{[Item=SheetName ,Kind="Sheet"]}[Data]
in
    Sales_Sheet  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接