NetSuite保存搜索中两公式相减报错及比较需求求助
NetSuite保存搜索:公式1与公式2运算报错解决方案
问题根源
公式1是行级公式,针对每一行明细返回数值;公式2使用MAX()聚合函数,属于组级公式,对整个搜索结果组返回单一值。行级与组级公式直接运算会因上下文不兼容报错。此外,公式2返回的是字符串类型(如'3000000'),与公式1的数值类型不匹配,也会导致运算失败。
需求1:实现公式1减公式2的结果
根据业务场景选择以下两种方案:
场景A:按销售订单分组汇总计算
若需按每个销售订单汇总后计算,将公式1改为聚合形式,同时把公式2的返回值转为数值类型:
SUM(CASE WHEN {item.csegccs_marcas} IN ('KARLUZ','JONI') THEN {custcol_ccs_importe_con_descuento} ELSE 0 END) - CASE WHEN MAX({custcol_ccs_porc_descuento_}) = '25%' THEN 3000000 WHEN MAX({custcol_ccs_porc_descuento_}) = '30%' THEN 6000000 ELSE 0 END
- 注意:需在保存搜索中设置分组依据为销售订单(如
{transaction.internalid}),确保聚合函数生效。
场景B:每行明细单独计算(基于当前订单的最大折扣值)
用子查询替代聚合函数,将公式2转换为行级可用逻辑:
CASE WHEN {item.csegccs_marcas} IN ('KARLUZ','JONI') THEN {custcol_ccs_importe_con_descuento} ELSE 0 END - CASE WHEN (SELECT MAX({custcol_ccs_porc_descuento_}) FROM transactionLine WHERE {transactionLine.transaction} = {transaction.internalid}) = '25%' THEN 3000000 WHEN (SELECT MAX({custcol_ccs_porc_descuento_}) FROM transactionLine WHERE {transactionLine.transaction} = {transaction.internalid}) = '30%' THEN 6000000 ELSE 0 END
需求2:判断公式1的值是否大于等于公式2
将运算符号替换为>=即可,同样分两种场景:
按订单分组的判断公式
SUM(CASE WHEN {item.csegccs_marcas} IN ('KARLUZ','JONI') THEN {custcol_ccs_importe_con_descuento} ELSE 0 END) >= CASE WHEN MAX({custcol_ccs_porc_descuento_}) = '25%' THEN 3000000 WHEN MAX({custcol_ccs_porc_descuento_}) = '30%' THEN 6000000 ELSE 0 END
返回结果为布尔值(TRUE/FALSE),可作为显示字段或过滤条件。
行级明细的判断公式
CASE WHEN {item.csegccs_marcas} IN ('KARLUZ','JONI') THEN {custcol_ccs_importe_con_descuento} ELSE 0 END >= CASE WHEN (SELECT MAX({custcol_ccs_porc_descuento_}) FROM transactionLine WHERE {transactionLine.transaction} = {transaction.internalid}) = '25%' THEN 3000000 WHEN (SELECT MAX({custcol_ccs_porc_descuento_}) FROM transactionLine WHERE {transactionLine.transaction} = {transaction.internalid}) = '30%' THEN 6000000 ELSE 0 END
内容的提问来源于stack exchange,提问作者Ruben Ruiz
相关产品推荐
相关产品推荐

