此系列文章用于講解如何使用Excel或PowerBI中的Power Query功能,讀取文件夾中的特定文件。
文章分為以下幾篇:
一、默認功能讀取修改日期最新的文件
二、一步讀取修改日期最新的文件
三、一步讀取文件名包含特定日期的文件
四、一步讀取文件名日期最新的文件
此系列文章主要用于解決日常會持續(xù)收到更新的數(shù)據(jù)源,且每日的文件命名會產(chǎn)生變化,我們需要用到此數(shù)據(jù)源做報表,又不想每日打開文件復制粘貼的情況。
本文內(nèi)容為:一步讀取修改日期最新的文件
一、背景描述
上一篇使用了默認方法,讀取文件夾中修改日期最新的文件。
好處是直接可以通過點擊操作就完成數(shù)據(jù)的導入設置;壞處是自動生成的查詢內(nèi)容太多,如果我們連接的數(shù)據(jù)源也比較多,會造成管理困難,因此今天來看如何將查詢簡化為只保留1個。

二、實現(xiàn)步驟
1、首先,仍然新建一個Excel文檔。然后使用“數(shù)據(jù)→獲取數(shù)據(jù)→自其他源→空白查詢”,打開Power Query編輯器

2、然后,在出來的PQ編輯器中,點擊“主頁→高級編輯器”打開M語言編輯器,然后粘貼上后面的代碼(注意修改圖中截圖紅色字體部分的內(nèi)容,文件夾路徑需注意第一個最后有反斜杠,后面兩個沒有;倒數(shù)第三行的“Item=”的對象是要獲取的表格名稱,Kind是表格類型),點擊完成即可獲得數(shù)據(jù)

let
源= Excel.Workbook(
File.Contents(
"E:\07 數(shù)據(jù)項目匯總\項目005-PBI讀取最新文件\原始數(shù)據(jù)\" & List.First(
Table.SelectRows(
Folder.Files("E:\07 數(shù)據(jù)項目匯總\項目005-PBI讀取最新文件\原始數(shù)據(jù)"),
let latest = List.Max(
Folder.Files("E:\07 數(shù)據(jù)項目匯總\項目005-PBI讀取最新文件\原始數(shù)據(jù)")[Date modified]) in each [Date modified] = latest)[Name])
), null, true),
導航= 源{[Item="示例數(shù)據(jù)",Kind="Sheet"]}[Data]
in
導航
3、這是獲取到的數(shù)據(jù),可以看到左側的查詢列表就很簡潔,只保留了一個查詢。然后我們通過“將第一行用作標題”等功能,設置正確的標題后,就可以關閉上載到Excel了。

三、M語言代碼的解析
PQ的界面操作,可以滿足我們80%以上的日常數(shù)據(jù)處理需求;剩下的,我們可以通過調整M代碼來實現(xiàn)(我們的界面操作也會被PQ自動轉換成M代碼)。
我們來看調整后的代碼的解析,思路是可以通過PQ的讀取文件夾功能Folder.Files。
(1)通過Folder.Files("E:\07 數(shù)據(jù)項目匯總\項目005-PBI讀取最新文件\原始數(shù)據(jù)")讀取文件夾的文件列表
(2)通過Table.SelectRows,配合let latest = List.Max(Folder.Files("E:\07 數(shù)據(jù)項目匯總\項目005-PBI讀取最新文件\原始數(shù)據(jù)")[Date modified]) in each [Date modified] = latest 的參數(shù),獲取[[Date modified]即修改日期為最后的文件行,然后通過[Name]獲取到文件名
(3)上述操作本身獲取到的是一個list,所以再通過外包一層List.First函數(shù)獲取到list的第一個值,即文檔名
(4)組裝上路徑即是需要讀取的文件。上述步驟獲得的是當前需要的文件對象(我們給它命名為“源”),實際我們要的是文件里面的某一個表
(5)最后, 通過:導航= 源{[Item="示例數(shù)據(jù)",Kind="Sheet"]}[Data],來獲取最終需要的表格。其中Item的參數(shù)就是表名(sheet的名稱),如果是命名表(即Excel表中通過ctrl+T或ctrl+L創(chuàng)建的超級表,這個名稱就是超級表的名稱,可以通過名稱管理器查看到表名);Kind參數(shù),有“Sheet”和“Talbe”兩個,普通表格使用“Sheet”,命名表使用“Table”。