如何在产品 Feed 中计算自定义列(无需修改目录)

在 easySales 的 Dynamic feed 中构建计算列——最低价、第二货币价格、可用库存——使用一个特性、一个列和一个 Feed 规则公式。你的产品目录保持不变。

每个运行 Dynamic feed 的商家迟早都会撞上同一道墙:合作伙伴想要一个产品上不存在的列。一个重新定价的合作伙伴想要 min_price 作为底价。一个 B2B 分销商想要 eur_price 与本地货币并存。一个 3PL 想要 available_stock ——物理库存减去已经在未完成订单上预留的部分。这些列不在目录里,把这些数字存到每个产品上不值得,但合作伙伴没有这些列就不接受文件。

这就是 easySales 的 Dynamic feed 计算列 的用武之地。你在 feed 中定义列,写一个简短的公式,easySales 在每次重新生成时计算值。你的产品目录保持干净。任何东西都不会被保存到产品本身上。

商家为什么要构建计算列

「计算列」是一种值在 feed 生成时被计算出来的列——不在任何地方存储。它只为你发布的文件而存在,而且只为它存在。

三种模式反复出现:

  • 底价和上限。 重新定价合作伙伴想要你能接受的最低价格。你不想把它作为产品属性来存储(它会因渠道、活动、利润政策而变化)。一个公式在每次导出时从采购价 + 利润推导出它。
  • 跨货币 feed。 你本国市场之外的合作伙伴想要他们货币的价格。为每个市场存储平行的价格列不可扩展;动态转换可以。
  • 计算可用性。 合作伙伴需要看到真正可订购的,而不是货架上的。库存 - 预留库存 只需要一次列减法。

共同特征:值是其他产品值的函数,每次 feed 重新生成时都会重新计算。把它存储在每个产品上意味着每次输入变化时都要更新每个产品——你不需要的维护负担。

计算列在 easySales 中如何工作

三块部件,每块需要五秒钟工作:

  1. 一个特性 ——值所在的槽位。你创建它一次,给它命名,并在所有产品上保持空。
  2. 一个 Dynamic feed 列 ——把特性接入输出文件的接线。
  3. 一个带公式动作的 Feed 规则 ——在导出时填充槽位的计算。
显示 easySales 计算 feed 列的三个部分的图表:作为槽的特性、将槽连接到输出的 Dynamic feed 列、以及在渲染时填充槽的 Feed 规则公式。
三个部件,每个有一个明确定义的工作:特性作为槽、Dynamic feed 列作为接线、Feed 规则公式作为值。

槽位在你的目录中保持空。规则在导出期间填充它。列在文件中渲染填充的值。三个小部件,每个有一个明确定义的工作。添加规则、重新生成、值出现。删除规则、重新生成、值消失——任何产品都不会改变。

第 1 步:创建特性

打开 目录 → 特性 并创建新特性。给它一个清晰的名字——合作伙伴在文件中期望的名字是个好选择。

例子:最低价欧元价格可用库存

你不需要在任何产品上填写值。整个意义在于这个特性是公式的目的地,而不是真正的产品属性。保存并继续。

easySales 中目录 → 特性页面的截图,显示新创建的名为「最低价」的特性,尚无产品值。
创建特性,给它一个清晰的名字,保持空。公式将填充它。

几个命名提示:

  • 选择六个月后你能认出来的名字。最低销售价(CN)min_price_cn_v2 好。
  • 如果同一个值会在多个 feed 中使用,所有 feed 共用一个特性。计算值的作用域是每个 feed(规则存在于 feed 上),所以同一个特性可以在不同 feed 中保存不同的计算值而不冲突。
  • 避免已经有产品数据的特性。如果 电压 是真实的目录字段,不要重用它作为计算槽位——选另一个名字。计算值会在内存中覆盖现有的 pivot;你会在 feed 渲染期间失去真实值。

第 2 步:将其添加到 Dynamic feed

打开 Dynamic feed。在列构建器中,添加新行,从列下拉菜单中选择 特性,然后从级联选择器中选择刚创建的特性。

列将在输出文件中渲染。单元格值来自规则为每个产品计算的内容。

easySales 中 Dynamic feed 列构建器的截图,显示「最低价」的特性类型列,重命名字段设置为 min_price。
将特性作为列添加,然后使用重命名字段以匹配合作伙伴在文件中期望的内容。

如果合作伙伴期望该列有特定名称——min_price 而不是 最低价price_eur 而不是 欧元价格——使用列旁边的 重命名 字段。重命名的值会出现为 CSV 标题 / JSON 键 / XML 元素名;UI 中的其他部分保留你为自己写的内容。重命名适用于每个 Dynamic feed 列,无论是否计算——只要合作伙伴期望与 easySales 内部使用不同的名字,都用这个字段。

第 3 步:编写计算值的 Feed 规则

切换到同一 feed 上的 Feed 规则 选项卡。添加规则:

  • 如果总是(或一个条件——见下文)。
  • 那么:选择创建的特性作为属性,选择 公式 作为运算符,然后写公式。
easySales 中 Feed 规则编辑器的截图——属性设置为特性「最低价」,动作设置为公式,公式 round(acquisition_price * 1.15, 2)。
一个具有特性目标和公式动作的 Feed 规则。选择特性,写公式,保存。

公式编辑器有一个芯片调色板,包含你可以使用的变量:

  • ${product.product_sale_price}${product.product_full_price} ——列出价格,不含增值税。
  • ${product.product_acquisition_price} ——你的成本。
  • ${product.product_tax_rate} ——产品的增值税税率为整数(例如 13619)。除以 100 转换为乘数——1 + ${product.product_tax_rate} / 100 对 13% 税率返回 1.13,正是你乘以净价得到含税价的乘数。
  • ${product.product_characteristic:<名称>} ——按名称读取另一个特性(区分大小写)。链式使用很有用:用基础值写一个特性,从下一个特性的公式中引用它。
  • ${product.product_meta_field:<键>} ——按键读取自定义产品元字段。
  • ${product.product_price_group:<id>} ——读取此产品的合约价格组价格。
  • ${other.currency_rate:FROM:TO} ——两个 ISO 货币代码之间的实时汇率(例如 CNY:USDUSD:EUR)。
  • round(<表达式>, <小数位>) ——将结果四舍五入到固定精度。

运算符:+-*/,括号用于分组。标准算术。

某些列故意不作为公式变量暴露——库存预留库存重量 和各种非价格列。要从这些列计算值,请使用 Feed 规则的算术动作运算符(覆盖减去乘以加上)而不是 公式。下面的可用库存配方展示了这种模式。

保存规则。下次重新生成时,它会为每个产品运行,在内存中填充特性,并在文件中渲染值。产品目录从未被触及 ——你的特性页面保持你离开时的空状态。

如果你只想公式应用于某些产品(一个类别、有库存的产品、特定品牌的产品),在 如果 一侧添加条件:基于特性、基于列、基于类别——规则构建器支持的任何东西。

真实世界的配方

重新定价合作伙伴的最低销售价

重新定价合作伙伴需要一个底价——他们不应低于的价格。你不想把它存储在每个产品上(成本或利润政策变化时它会变化),所以你计算它。

  • 特性名称最低价
  • 列重命名min_price
  • 公式round(${product.product_acquisition_price} * 1.15, 2) ——采购 + 15% 利润。

通过在不同 feed 中编写不同规则来按渠道调整乘数。同一特性、不同公式、不同输出文件。目录从不看到这些。第 3 步中的截图显示了这个规则配置。

跨境合作伙伴的第二货币价格

你的合作伙伴在不同的市场,想要他们货币的价格。easySales 有内置的货币汇率函数,所以你不必维护平行的价格清单。

  • 特性名称欧元价格
  • 列重命名price_eur
  • 公式round(${product.product_sale_price} * ${other.currency_rate:CNY:USD}, 2) ——将 CNY:USD 替换为适合你情况的 FROM 和 TO 货币。

汇率每天自动刷新——easySales 从中央汇率源拉取,所以你不必维护平行的表。如果合作伙伴需要合约期内的稳定汇率(而不是实时的),请联系支持,我们会为你的情况找出正确的设置。

规则编辑器的截图——属性设置为特性「欧元价格」,动作公式,公式 sale_price * currency_rate(CNY:USD) 四舍五入到 2 位小数。
第二货币计算列:公式将销售价格乘以实时 CNY-USD 汇率,四舍五入到 2 位小数。

可用库存(物理减去预留)

合作伙伴看到你发布的库存;如果是货架上的数字而你有未完成订单,你会超卖。要发布的正确数字是 available-to-promise:物理库存减去未完成订单上预留的。

库存预留库存 不作为公式变量暴露,所以这个配方根本不使用 公式 运算符。相反,你在同一个特性上链接两个算术动作——第一个写基础,第二个调整它。

  • 特性名称可用库存
  • 列重命名available_stock
  • 动作 1:目标 = 可用库存,运算符 = 覆盖为,源 = 列 库存。(将特性设置为产品的库存值。)
  • 动作 2(添加在第一个下方,同一规则):目标 = 可用库存,运算符 = 减去,值源 = 字段,列 = 预留库存。(从运行值中减去预留库存列。)

两个动作,一个规则,从上到下。第一个写基础;第二个调整。如果你的履行数学需要固定的安全库存缓冲,可以链接第三个动作(针对字面数字的 / )。

easySales 中 Feed 规则编辑器的截图,在「可用库存」特性上有两个链式动作——用「库存」列覆盖,然后减去「预留库存」列。
两个链式动作,一个规则。第一个写基础;第二个减去预留数量。

重命名输出中的任何列

重命名 字段出现在 Dynamic feed 构建器中每列的旁边,不仅仅是计算列。每当合作伙伴期望与 easySales 内部使用不同的名字时使用它——price 而不是 full_pricecost 而不是 sale_priceinventory 而不是 stock

两点说明:

  • 重命名应用于文件输出:CSV 标题、JSON 键和 XML 元素名。UI 中的其他部分继续使用 easySales 的名字,这样你和你的团队不会迷路。
  • XML 元素名比 CSV 或 JSON 有更严格的规则。如果你的重命名包含空格或标点,easySales 会自动为 XML 进行清理——Min 价格 (CNY)<min_jia_ge_cny_> 标签中变为 min_jia_ge_cny_。CSV 标题和 JSON 键完全保留你输入的内容。

如果两个列重命名为相同的输出名,feed 构建器会阻止保存并显示哪个冲突。选择一个唯一的名字,它就会保存。

何时不使用计算列

  • 真实的产品属性。 如果数据自然属于产品(颜色、尺寸、电压、EAN),使用普通特性并存储它。计算列用于属于目录的值。
  • 每个渠道的类别映射。 如果合作伙伴需要 Google Shopping 类别 ID、Skroutz 代码或任何从你的类别到他们的类别的映射,使用渠道特定的 feed 构建器——它经过预验证,节省你的映射工作。Dynamic feed 是我们没有专用构建器的合作伙伴的开放选项。请参阅 什么是产品 Feed? 了解渠道 feed 入门。
  • 静态固定值。 如果每个产品都获得相同的值(condition: newavailability: in_stock),在普通列上使用 设置为值 动作,而不是合成特性——少一个移动部件。

如果你不确定列应该是计算的、存储的还是固定的,支持可以查看你的具体情况。一旦你勾勒出用例,大多数「计算还是存储?」问题在两分钟内解决。

无需信用卡
14 天免费
您可以随时取消

构建合作伙伴真正想要的列

在 easySales 中打开 Feed → Dynamic,几分钟内提供带有计算列的合作伙伴就绪文件。新来这里?免费试用 easySales 14 天,无需信用卡。

常见问题

不会。计算列在 feed 渲染时在内存中评估,然后被丢弃。在 feed 重新生成后打开产品页面,你会看到与之前相同的特性值——在典型设置中是空的。目录从不改变。这是设计如此:让你能够在多个不同 feed 中发布多个不同的计算列,而不会让产品数据变成一团糟。

不需要。特性只是公式在渲染时写入的槽。大多数计算列设置创建一个全新的特性,从不在任何产品上为其赋值。如果特性在某些产品上有值,并且你写一条规则覆盖它,规则获胜——对于那一次 feed 渲染——并且原始值在目录中保持不变。

产品字段:sale_price、full_price、acquisition_price、tax_rate。按名称引用其他特性:${product.product_characteristic:&lt;名称&gt;}。货币转换:${other.currency_rate:FROM:TO} 返回两个货币代码之间的实时汇率。round() 函数将表达式四舍五入到给定的小数精度。标准算术运算符(+、-、*、/)和括号用于分组。公式编辑器将所有这些作为可点击插入的芯片公开,所以你不必记住确切的语法。注意:tax_rate 是整数(例如 13、19)——作为乘数使用时除以 100。

默认节奏是每小时,文件仅在合作伙伴读取时才重新生成(所以休眠的 feed 不会浪费资源)。每次重新生成时,公式会针对当前产品数据重新评估——产品上的价格变化会自动流入下次渲染时的计算列。对于 ERP 目录导出,你可以请支持将其降低到每日;对于快速移动的合作伙伴同步,支持可以提高它。

可以。Feed 规则有「如果」一侧和「那么」一侧。在「如果」一侧放置任何条件——特性 X 等于 Y、类别包含 Z、品牌为 W、库存大于 0——公式只会对匹配的产品运行。其他产品跳过规则,输出中计算列对它们显示为空。组合多个规则以使用不同的公式处理不同的产品组。

在 Dynamic feed 列构建器中,每个列行旁边都有一个重命名字段。输入合作伙伴期望的名字(「price」、「min_price」、「cost」,任何东西),该名字会作为生成文件中的 CSV 标题 / JSON 键 / XML 元素名出现。重命名适用于每一列,无论是否计算。如果重命名包含空格或标点,XML 元素名会自动清理;CSV 和 JSON 完全保留你输入的内容。

可以。最简单的方法是直接将 sale_price_including_tax 或 full_price_including_tax 添加为 Dynamic feed 列——它们是列下拉菜单中的普通列,并且已经包含含增值税的值。不需要公式。如果你需要自定义形状(销售价格加增值税加利润,或在第二货币中含增值税),用公式:round(${product.product_sale_price} * (1 + ${product.product_tax_rate} / 100), 2) 手动重现含税数学。注意:${product.product_tax_rate} 返回像 13 或 19 这样的整数——加 1 之前先除以 100,得到正确的乘数。

本指南对你有帮助吗?