首页 > 解决方案 > Power Query 中的相对源文件引用

问题描述

我一直在使用 Power Query 将两个 Excel 电子表格连接在一起。其中一个工作簿位于根文件夹中,而另一个位于根文件夹中的文件夹中。我注意到链接工作簿的源文件路径是绝对形式的。如果这些文件被移动,它们会移动,它总是会尝试引用原始源文件。如何在 M 脚本中使用相对源引用来避免此问题?我在下面包含了 M 脚本。相同的文件被复制到新的销售年度,我希望连接只查看相对位置而不是绝对位置。

任何帮助表示赞赏。

let
    Source = Excel.Workbook(File.Contents("X:\Sales-2021\Source\Tallys.xlsx"), null, true),
    #"Tally_Sheet" = Source{[Item="Tally",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(#"Tally_Sheet", [PromoteAllScalars=true]),
    #"Filter rows to FROM and TO dates" = Table.SelectRows(#"Promoted Headers", each [Date] >= from_date and [Date] <= to_date)
in
    #"Filter rows to FROM and TO dates" 

标签: excelpowerquery

解决方案


更多细节会很有用。

例如,如果您知道 Root 文件夹的路径以及文件的名称和/或路径的一部分,则可以使用文件夹连接器来获取该文件:

例如:

let
    root = "C:\Users\ron\Documents",
    subFolder="2020",
    fileName = "Profit and Loss",

    Source = Folder.Files(root),
    #"Filtered Rows" = Table.SelectRows(Source, each 
        Text.Contains([Folder Path], subFolder) 
        and Text.Contains([Name], fileName))
        
in
    #"Filtered Rows"

将返回所有包含“盈亏”的文件

"C:\Users\ron\Documents*\2020*"

您可以根据需要构建变量。

例如,如果您知道子文件夹将始终包含当前年份,则可以使用:
subFolder= Number.ToText(Date.Year(DateTime.LocalNow())),

鉴于您所写的内容,您可能会使用,例如:

   root = "X:\",
    subFolder= "Sales-" & Number.ToText(Date.Year(DateTime.LocalNow())),
    fileName = "Tallys",

获得正确的文件路径/名称后,您可以将其输入到您的工作查询中,而不是绝对路径。

如果您无法对文件名/路径进行足够的硬编码以使其唯一,则可以使用主工作簿中的参数或命名范围将其提供给查询,但如果可以,那么这可能只是一个问题在 PQ 中搜索文件夹连接器返回的数据。


推荐阅读