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

Posted

技术标签:

【中文标题】从相对路径将数据加载到 Power BI【英文标题】:load data into power BI from relative path 【发布时间】:2019-03-23 12:23:55 【问题描述】:

我正在尝试找到一种解决方案来加载外部数据文件,但从相对路径加载,因此当其他人打开我的 PBIX 时,它仍然可以在他/她的计算机上运行。

非常感谢。

【问题讨论】:

【参考方案1】:

我认为这还不可能。

请添加您对 this idea 的支持,以便 Microsoft Power BI 团队更有可能将此作为新功能添加。

【讨论】:

【参考方案2】:

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


为了减轻痛苦,您可以创建一个包含文件所在路径的变量,并使用该变量来确定每个表的路径。这样,您只需更改一个位置(该变量),所有表格都会自动指向新位置。

创建一个空白查询,为其命名(例如dataFolderPath)并输入文件所在的路径(例如C:\Users\augustoproiete\Desktop

创建变量后,编辑Advanced Editor 中的每个表,并将变量与文件名连接起来。

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


您还可以投票/观看此功能请求,以便在它实施时收到通知:

Support relative path to excel/csv sources

【讨论】:

老实说,我认为他们永远不会实施它,因为这可能会损害他们销售 PowerBI Publishing Server 许可证的商业模式。因为使用相对路径,pbix 文件可以通过 Nextcloud 等轻松共享... 我喜欢这个解决方案,尽管它有一个副作用,即它会阻止用户使用“数据源设置”对话框及其“浏览”按钮来更新源文件。这使得 Power Query 编辑器中的高级编辑器/源设置成为更新源文件的唯一方法,除非我弄错了。【参考方案3】:

您也可以使用“参数”功能。 1.创建一个新参数,如“PathExcelFiles” Parameter_ScreenShot

    编辑您的“来源”条目 SourceEntry_ScreenShot

完成!

【讨论】:

【参考方案4】:

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

所以我试图找到一个半体面的可接受的解决方法。 使用 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 值得更好的解决方案。

【讨论】:

以上是关于从相对路径将数据加载到 Power BI的主要内容,如果未能解决你的问题,请参考以下文章

在 Power BI 中拆分自定义字段

来自 Power Query 的 Power BI Desktop 增量表更新

将数据从 Power BI 导出到 SQL Server 突破了 150k 行的限制

Power Query 将表类型数据加载到单个 Excel 工作表

02.02.01 第1章 简介及基础操作(Power BI商业智能分析)

Power BI - LinkedIn广告连接器