PowerQuery一步读取文件名包含特定日期的文件

此系列文章用于讲解如何使用Excel或PowerBI中的Power Query功能,读取文件夹中的特定文件。

文章分为以下几篇:

一、默认功能读取修改日期最新的文件

二、一步读取修改日期最新的文件

三、一步读取文件名包含特定日期的文件

四、一步读取文件名日期最新的文件

此系列文章主要用于解决日常会持续收到更新的数据源,且每日的文件命名会产生变化,我们需要用到此数据源做报表,又不想每日打开文件复制粘贴的情况。

本文内容为:一步读取文件名包含特定日期的文件

一、背景描述

上一篇介绍了如何简要的读取修改日期为最新日期的方法,这一篇将介绍如何读取文件夹中包含特定日期/关键词文档的方法。

同样,假设我们每天收到一个包含历史数据的文档,然后文档包含“file1”关键词,同时文档会以“yyyyMMdd”的形式加上对应日期进行命名;如图我们需要读取获得命名包含“20220808”的最新的文档。

image.png

二、实现步骤

1、首先我们仍然是打开PQ编辑器(具体方法可以参考:第二篇“PowerQuery一步读取修改日期最新的文件”),然后使用以下代码

image.png
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、然后,我们就获得了结果

image.png

三、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”。

四、方法缺点

把日期设定为昨日的方法会导致一个问题:“昨天”的源数据没有的时候会导致数据更新失败报错,所以下一篇我们讲采用其他判定方式来读取文件名日期最新的文件。

你可能感兴趣的:(PowerQuery一步读取文件名包含特定日期的文件)