如何实现Power BI从文件夹仅加载新增.txt文件且不刷新已有数据
Power BI 实现文件夹批量加载TXT文件时仅导入新增文件并保留历史数据
核心思路
通过维护一份已加载文件日志表,每次刷新时对比文件夹内的文件列表与日志表,筛选出未加载过的新增文件,仅加载这些文件的数据,同时更新日志表记录,实现自动化增量加载,避免重复导入历史数据。
具体实现步骤
1. 创建已加载文件日志表
首先建立一个用于记录已加载文件信息的日志表,保存为本地CSV文件(也可使用Excel或云端存储):
- 打开Power Query编辑器,新建空白查询,输入以下M代码:
#table({"FileName", "LoadDateTime"}, {}) - 将该查询保存为
LoadedFilesLog.csv,存储到固定路径(比如C:\PowerBI_Logs\LoadedFilesLog.csv)。
2. 获取文件夹内所有TXT文件列表
加载目标文件夹,筛选出所有.txt格式的文件,获取文件名、完整路径、修改时间等关键信息:
let Source = Folder.Files("C:\Your_TXT_Folder_Path"), FilterTXTFiles = Table.SelectRows(Source, each Text.EndsWith([Name], ".txt")) in FilterTXTFiles
3. 筛选未加载的新增文件
加载日志表,通过左反连接对比当前文件列表与已加载记录,得到仅新增的文件:
let // 加载已加载文件日志 LoadedLogSource = Csv.Document(File.Contents("C:\PowerBI_Logs\LoadedFilesLog.csv"), [Delimiter=",", Encoding=1252]), PromoteLogHeaders = Table.PromoteHeaders(LoadedLogSource, [PromoteAllScalars=true]), SetLogColumnTypes = Table.TransformColumnTypes(PromoteLogHeaders, {{"FileName", type text}, {"LoadDateTime", type datetime}}), // 获取当前文件夹TXT文件 CurrentTXTFiles = Folder.Files("C:\Your_TXT_Folder_Path"), FilterTXT = Table.SelectRows(CurrentTXTFiles, each Text.EndsWith([Name], ".txt")), // 左反连接筛选新增文件 NewUnloadedFiles = Table.NestedJoin(FilterTXT, {"Name"}, SetLogColumnTypes, {"FileName"}, "LoadedLog", JoinKind.LeftAnti), CleanUpColumns = Table.RemoveColumns(NewUnloadedFiles, {"LoadedLog"}) in CleanUpColumns
4. 加载新增TXT文件的数据
对筛选出的新增文件,添加自定义列加载文件内容,再展开数据(根据你的TXT文件分隔符和列名调整参数):
// 接上面的步骤继续 LoadFileContent = Table.AddColumn(CleanUpColumns, "FileData", each Table.FromRows(Csv.Document(File.Contents([FullPath]), [Delimiter="\t", Encoding=1252]))), ExpandFileData = Table.ExpandTableColumn(LoadFileContent, "FileData", {"Column1", "Column2", "Column3"}, {"ID", "Content", "CreateTime"}) // 替换为你的实际列名
5. 更新已加载文件日志
将本次加载的新增文件信息追加到日志表,覆盖原日志文件,确保下次刷新能识别这些已加载文件:
// 接上面的步骤继续 CreateNewLogEntries = Table.AddColumn(CleanUpColumns, "LoadDateTime", each DateTime.LocalNow()), SelectLogColumns = Table.SelectColumns(CreateNewLogEntries, {"Name", "LoadDateTime"}), RenameLogColumns = Table.RenameColumns(SelectLogColumns, {{"Name", "FileName"}}), CombineLogData = Table.Combine({SetLogColumnTypes, RenameLogColumns}), SaveUpdatedLog = File.Write("C:\PowerBI_Logs\LoadedFilesLog.csv", Table.ToCsv(CombineLogData, [Delimiter=",", Encoding=1252]))
6. 配置自动刷新
- 在Power BI Desktop中测试整个流程无误后,发布报表到Power BI服务。
- 在服务中配置计划刷新,指定刷新频率(比如每日、每周),同时确保日志文件的存储路径在服务中可访问(本地文件需配置数据网关,云端存储需授权访问)。
额外说明
- 如果需要处理修改过的旧文件,可在日志表中添加
FileModifiedTime字段,每次刷新时对比当前文件的修改时间与日志记录,决定是否重新加载该文件。 - 日志文件建议备份,避免丢失导致重复加载所有文件。
内容的提问来源于stack exchange,提问作者Andrés Quesada Cascante
相关产品推荐
相关产品推荐

