求助:在ADF数据流中按条件对指定列执行乘法运算的方法
在ADF数据流中实现指定列的数值转换需求
问题原因分析
你之前的表达式失效,核心问题有两个:
- 第三列的数值用逗号作为小数点分隔符,ADF的
float()函数无法直接识别这种格式,转换会失败 - 就算转换成功,计算后的结果会以点号作为小数点,无法保留你需要的逗号格式
具体实现步骤
你可以通过派生列转换完成需求,以下是两种实现方式:
方式一:单表达式直接处理
直接在派生列中编写合并逻辑,替换原第三列(假设你的列名分别为Col1、Col2、Col3、Col4):
iif(Col2 == 50, replace(string(toDecimal(replace(Col3, ',', '.')) * -1), '.', ','), Col3)
表达式拆解:
replace(Col3, ',', '.'):把第三列的逗号替换为点号,让ADF能识别为数值toDecimal(...):将处理后的字符串转为数值类型* -1:满足条件时乘以-1string(...):将计算后的数值转回字符串replace(..., '.', ','):把点号替换回逗号,恢复原格式iif(Col2 == 50, ..., Col3):判断第二列是否为50,执行对应逻辑,否则保留原列值
方式二:分步处理(更清晰)
如果觉得单表达式太复杂,可以拆分为两步派生列:
第一步:生成临时数值列
- 派生列名:
TempCol3 - 表达式:
toDecimal(replace(Col3, ',', '.'))
作用:将第三列的逗号格式转为可计算的数值类型
- 派生列名:
第二步:生成最终第三列
- 派生列名:
NewCol3(或直接替换原Col3) - 表达式:
iif(Col2 == 50, replace(string(TempCol3 * -1), '.', ','), Col3)
作用:根据第二列的值判断是否反转数值,并恢复逗号格式
- 派生列名:
注意事项
- 如果你的
Col2是字符串类型,需要把判断条件改为Col2 == '50'(加单引号) - 确保
Col3的格式统一,都是X,XX这类逗号分隔的小数格式
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

