此系列文章用于讲解如何使用Excel或PowerBI中的Power Query功能,读取文件夹中的特定文件。
文章分为以下几篇:
一、默认功能读取修改日期最新的文件
二、一步读取修改日期最新的文件
三、一步读取文件名包含特定日期的文件
四、一步读取文件名日期最新的文件
此系列文章主要用于解决日常会持续收到更新的数据源,且每日的文件命名会产生变化,我们需要用到此数据源做报表,又不想每日打开文件复制粘贴的情况。
本文内容为:一步读取文件名包含特定日期的文件
一、背景描述
上一篇介绍了如何简要的读取修改日期为最新日期的方法,这一篇将介绍如何读取文件夹中包含特定日期/关键词文档的方法。
同样,假设我们每天收到一个包含历史数据的文档,然后文档包含“file1”关键词,同时文档会以“yyyyMMdd”的形式加上对应日期进行命名;如图我们需要读取获得命名包含“20220808”的最新的文档。
二、实现步骤
1、首先我们仍然是打开PQ编辑器(具体方法可以参考:第二篇“PowerQuery一步读取修改日期最新的文件”),然后使用以下代码
let
源 = Excel.Workbook(
File.Contents(
"E:\07 数据项目汇总\项目005-PBI读取最新文件\原始数据\file1-" & Date.ToText(
DateTime.Date(DateTime.LocalNow()-#duration(1,0,0,0)), "yyyyMMdd"
) & ".xlsx"
), null, true
),
导航 = 源{[Item="示例数据",Kind="Sheet"]}[Data]
in
导航
2、然后,我们就获得了结果
三、M语言代码的解析
这里我们的需求其实变化为:
每天报表将读取某个文件夹下,名称包含“file1-”关键词,加上“昨日”日期(注意这里的昨日是动态变化的,是相对“今日”而言的)的文档。
代码拆分思路如下:
(1)报表命名日期通常为昨日:所以我们通过DateTime.LocalNow()获取当天的日期;并通过-#duration(1,0,0,0)函数减去1天,获得昨日的日期
(2)然后再通过Date.ToText函数进行格式化处理,就可以得到我们想要读取的文件名(yyyyMMdd格式)
(3)导航= 源{[Item="示例数据",Kind="Sheet"]}[Data],来获取最终需要的表格。其中Item的参数就是表名(sheet的名称),如果是命名表(即Excel表中通过ctrl+T或ctrl+L创建的超级表,这个名称就是超级表的名称,可以通过名称管理器查看到表名);Kind参数,有“Sheet”和“Talbe”两个,普通表格使用“Sheet”,命名表使用“Table”。
四、方法缺点
把日期设定为昨日的方法会导致一个问题:“昨天”的源数据没有的时候会导致数据更新失败报错,所以下一篇我们讲采用其他判定方式来读取文件名日期最新的文件。