Power Query动态列按参考日期列条件转0-1值的语法问题求助
错误定位
你遇到的报错是Table.TransformColumns的执行上下文限制导致的:该函数的列转换逻辑仅能获取当前列的单个单元格值,无法直接访问同一行的其他字段。你在转换函数中使用[Start Date]/[End Date]属于行字段访问操作,而当前上下文的_是单个日期/数值,对非记录类型的值执行字段访问自然会抛出类型不匹配错误。
正确实现方案
推荐使用List.Accumulate遍历动态列结合Table.ReplaceValue完成转换,该方案可以直接访问行上下文,代码简洁且适配动态列数量的需求:
// 获取所有需要转换的动态日期列名 DynamicDateColumns = FunctionToReturnListOfColumnNames(), // 逐列完成0/1转换 Transformation = List.Accumulate( DynamicDateColumns, #"Previous step", (state, currentCol) => Table.ReplaceValue( state, each Record.Field(_, currentCol), each if [Start Date] <= _ and ([End Date] = null or [End Date] > _) then 1 else 0, Replacer.ReplaceValue, {currentCol} ) )
额外说明
如果你的动态日期列目前还是dd.MM.yyyy格式的文本,没有转换为日期类型,需要先加一步批量类型转换,避免比较逻辑出错:
// 批量将动态文本日期列转为date类型,指定de-DE区域适配dd.MM.yyyy格式 ConvertDateType = Table.TransformColumns( #"Previous step", List.Transform(FunctionToReturnListOfColumnNames(), each {_, (v) => Date.From(v, "de-DE"), type date}) )
内容的提问来源于stack exchange,提问作者Katarzyna
相关产品推荐
相关产品推荐

