Azure Synapse Dataflow:按Name列条件转换Price为绝对值的方法
Azure Synapse Dataflow 实现指定行的Price绝对值转换
适用的转换类型
应该使用**Derived Column(派生列)**转换,而非Alter Row转换——Alter Row主要用于定义行级的插入、更新、删除操作,修改列值是Derived Column的典型应用场景。
具体表达式
根据Price列的存储类型,分两种场景编写表达式:
场景1:Price为字符串类型(带逗号作为小数点分隔符)
如果Price是以字符串形式存储(如示例中的-21354,45),需要先转换为数值计算绝对值,再转回原格式:
iif( startsWith(Name, 'F-'), replace(toString(abs(toDecimal(replace(Price, ',', '.')))), '.', ','), Price )
表达式拆解:
startsWith(Name, 'F-'):判断当前行Name是否以F-开头replace(Price, ',', '.'):将字符串中的逗号替换为小数点,适配数值类型格式toDecimal(...):将处理后的字符串转为Decimal数值abs(...):计算数值的绝对值toString(...):将数值转回字符串replace(..., '.', ','):把小数点替换回逗号,保持原格式
场景2:Price已为数值类型(Decimal/Float等)
如果Price已经是数值类型(已完成逗号转小数点的格式处理),表达式可简化为:
iif(startsWith(Name, 'F-'), abs(Price), Price)
操作步骤
- 在数据流中添加Derived Column转换节点
- 在派生列设置面板中,选择Replace existing column,并选中
Price列 - 输入对应场景的表达式
- 运行数据流验证结果
示例验证
处理后数据与预期一致:
| Name | Price |
|---|---|
| P-12344 | -21354,45 |
| S-12335 | 12543,45 |
| F-13564 | 54,45 |
| F-112344 | 1254,45 |
内容的提问来源于stack exchange,提问作者Frank Lohfeld
相关产品推荐
相关产品推荐

