Pentaho Spoon实现日期列取上一条日期减1的技术咨询
数据流新增列解决方案
先明确需求逻辑(从示例推导):
- 第一条记录的新增列值等于自身AuditDate
- 中间每条记录的新增列值为下一条记录的AuditDate减1天
- 最后一条记录的新增列值显示
Latest Date
方法一:用Power Query公式(适用于Power BI/Excel数据流)
- 添加索引列:在数据流编辑器中,选择
添加列→索引列→从0开始 - 新增自定义列:输入以下公式,替换
AuditDate为你的列名:
if [索引] = 0 then [AuditDate] else if [索引] = List.Count(#"添加的索引列") - 1 then "Latest Date" else Date.AddDays(List.Range(#"添加的索引列"[AuditDate], [索引]+1, 1){0}, -1)
- 调整日期格式:如果需要和示例一致的格式,可通过
转换→日期→更改类型设置为短日期格式
方法二:用JavaScript脚本(适用于Azure Data Factory等支持脚本的数据流)
在派生列或脚本组件中,使用以下逻辑:
- 先保留数据流的输入顺序(若有排序需求先处理)
- 脚本中先收集所有日期,再遍历计算每条记录的新增列:
// 收集所有AuditDate到数组 var auditDates = []; for (var i = 0; i < $records.length; i++) { auditDates.push(new Date($records[i].AuditDate)); } // 遍历处理每条记录 for (var i = 0; i < $records.length; i++) { if (i === 0) { $records[i]["Date -1 column"] = $records[i].AuditDate; } else if (i === $records.length - 1) { $records[i]["Date -1 column"] = "Latest Date"; } else { // 取下一条日期减1天 var nextDate = new Date(auditDates[i+1]); nextDate.setDate(nextDate.getDate() - 1); // 格式化为MM/DD/YYYY,补零处理匹配示例格式 var month = (nextDate.getMonth() + 1).toString().padStart(2, '0'); var day = nextDate.getDate().toString().padStart(2, '0'); var year = nextDate.getFullYear(); $records[i]["Date -1 column"] = `${month}/${day}/${year}`; } }
注意:如果你的数据流工具对日期解析格式有特殊要求,需调整脚本中的日期转换逻辑,确保和输入格式匹配。
内容的提问来源于stack exchange,提问作者Jayven Javier
相关产品推荐
相关产品推荐

