如何在Excel Power Query中添加基于原列计算的自定义列并解决报错?
Power Query 自定义列 calldelta/putdelta 正确写法
错误原因
你写的M代码沿用了Excel公式的语法,但Power Query的M语言是大小写敏感的函数式语言,和Excel公式语法差异很大:
- M语言的条件判断是小写的
if...then...else...结构,而非Excel的IF(条件, 结果, 备选)格式 - 原代码中
ISNUMBER(FIND(...))的逻辑,在M里可以用更简洁的字符串匹配方式实现 - 用空字符串
""会导致列同时存在数值和文本类型,建议用null保持类型统一
正确的M代码示例
1. 添加 calldelta 列
如果callput列是精确匹配"Call"(而非包含),用以下代码:
= Table.AddColumn(#"Expanded greeks", "calldelta", each if [callput] = "Call" then 100 * [openinterest] * [delta] else null)
如果callput列是包含"Call"字符串(比如值是"USDCALL"这类),改用Text.Contains:
= Table.AddColumn(#"Expanded greeks", "calldelta", each if Text.Contains([callput], "Call") then 100 * [openinterest] * [delta] else null)
2. 添加 putdelta 列
同理,精确匹配"Put"的代码:
= Table.AddColumn(#"Added calldelta", "putdelta", each if [callput] = "Put" then 100 * [openinterest] * [delta] else null)
包含"Put"的代码:
= Table.AddColumn(#"Added calldelta", "putdelta", each if Text.Contains([callput], "Put") then 100 * [openinterest] * [delta] else null)
操作步骤
- 打开Power Query编辑器,选中目标表格(即
#"Expanded greeks") - 点击「添加列」选项卡 → 「自定义列」
- 把上述对应代码粘贴到自定义列的公式框中,修改列名后确认
- 添加完
calldelta列后,重复操作添加putdelta列
内容的提问来源于stack exchange,提问作者reknirt
相关产品推荐
相关产品推荐

