PowerBI导入数据
let // 获取当前年份和前一年 CurrentYear = Date.Year(DateTime.LocalNow()), PreviousYear = CurrentYear - 1, // 定义起始年份 StartYear = 2022, // 生成需要读取的年份列表 YearRange = List.Numbers(StartYear, PreviousYear - StartYear + 1), // 构建完整文件路径列表 SourceFiles = List.Transform( YearRange, each "\\ccnnsvs115fls01\APP01\POWERBI\JL032_Sales_Flash\salesflash_" & Text.From(_) & ".xlsx" ), // 定义函数:尝试读取单个Excel文件 ImportExcel = (filePath as text) => let Result = try let // 读取Excel文件 Source = Excel.Workbook(File.Contents(filePath), null, true), // 尝试获取第一个工作表的数据(更通用的方式) SheetData = if Table.HasColumns(Source, "Item") then let FirstSheet = Table.First(Source), Data = if Record.HasFields(FirstSheet, "Data") then FirstSheet[Data] else null in Data else null, // 如果获取数据失败,尝试直接访问Sheet1 Data = if SheetData = null then try Source{[Item="Sheet1",Kind="Sheet"]}[Data] otherwise null else SheetData, // 检查数据是否为表格 ValidData = if Data is table then Data else null, // 从文件路径提取年份 Year = Text.BetweenDelimiters(filePath, "salesflash_", ".xlsx"), // 如果数据有效,添加年份列 WithYear = if ValidData <> null then Table.AddColumn(ValidData, "DataYear", each Year, type text) else null in WithYear otherwise // 如果文件不存在或读取失败,返回一个空表而不是null #table({"DataYear"}, {}) in Result, // 过滤掉空表 NonEmptyTables = List.Select(List.Transform(SourceFiles, ImportExcel), each _ <> null and Table.RowCount(_) > 0), // 读取所有文件并合并 CombinedData = if List.Count(NonEmptyTables) > 0 then Table.Combine(NonEmptyTables) else #table({"DataYear"}, {}), // 确保列类型一致(可选步骤) EnforcedTypes = Table.TransformColumnTypes( CombinedData, { // 示例:{"Column1", type text}, {"Column2", Int64.Type} // 根据你的实际列名和类型添加 } ) in EnforcedTypes