Actual 怎么添加 Formula card 在报表仪表盘运行 Excel 公式
【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual
本文的目标是在 Actual Budget 的 Reports 仪表盘上添加一个 Formula card(公式卡片),让它按照你的 Excel 风格公式计算并展示结果,比如收入减支出的差值、两个账户的余额合计、或某个时间段内预算类别的支出总额。Formula card 属于Excel formula mode这一实验特性的一部分,它底层使用 HyperFormula 求值,公式必须以=开头。由于该功能仍在实验阶段,最新稳定版中可能没有此项,文档建议使用nightly版本获取最新实现;启用任何实验特性时文档也建议保持定期备份的习惯。
先开启 Excel formula mode 实验特性
Formula card 的入口在实验特性开关后面,按 实验特性说明 的路径操作:
- 进入
Settings -> Show advanced settings -> Experimental features。 - 先同意免责声明(agree to the disclaimer),之后才能看到可启用的实验特性列表。
- 勾选Excel formula mode (Formula cards & Rule formulas)。
未开启该开关时,后面添加小部件的选择列表里不会出现 Formula card 选项。
在 Reports 仪表盘上添加 Formula card
开关生效后,按以下步骤添加卡片(步骤来自 formulas 文档):
- 进入Reports页面(即报表仪表盘,仪表盘本身支持自由定制,见 报表仪表盘说明)。
- 点击Edit dashboard。
- 点击Add widget。
- 在可选类型中选择Formula card。
添加后点击卡片即可打开编辑器,公式、命名查询和卡片样式都在编辑器里配置并保存。
在编辑器里编写公式
Formula card 编辑器包含几个区域,从上到下依次是:
- Result:公式的当前求值结果,修改公式时会随之更新;
- Formula:公式输入区。内置自动补全和悬停帮助(autocomplete and hover help),可从中查看函数用法;
- Font size:结果文字的字号模式,可选 Dynamic 或 Static(Static 时可指定像素值);
- Query Definitions:右侧面板,用于定义可被
QUERY(...)引用的命名查询。
写公式的第一条硬性要求:以=开头。文档给出的基础示例:
=SUM(1, 2, 3)编辑器右侧有Query Definitions面板,可以按报表过滤器的方式定义数据范围。Formula card 还能对数字做格式化,FORMATNUMBER/FORMATCURRENCY在省略可选参数时会沿用应用内的格式设置,也可以按单次公式覆盖分隔符和货币符号,例如:
=FORMATCURRENCY(1234.5, "€", 2, ".", ",", "after", TRUE())其中symbolPosition参数接受"before"或"after",spaceBetweenAmountAndSymbol参数接受TRUE()或FALSE()。
用命名查询和 BALANCE_OF 引用真实数据
纯常数公式只能验证环境,真正有用的是引用账目数据。文档支持两类引用方式:
方式一:命名查询QUERY("name")
在编辑器的Query Definitions面板中定义命名查询,步骤是:
- 点击Add Query并给它起名——这个名字就是公式里
QUERY("...")引用的字符串; - 设置日期范围:Live(范围随时间移动,例如“最近 3 个月”)或Static(固定起止日期);
- 添加Filters,过滤条件与报表过滤器风格相同。
然后在公式中引用:
=QUERY("income") - QUERY("expenses")规则如下(income、expenses替换为你在 Query Definitions 里实际定义的查询名):
QUERY("myQuery")返回该查询过滤条件和日期范围内交易金额的总和,单位是普通“金额”单位(例如-123.45);- 查询名不存在时结果为 0——这是文档明确的行为,公式不会报错,因此拼错查询名时卡片会静默显示 0,需要回查 Query Definitions 里的名字;
QUERY_COUNT("name")则返回匹配行数,可用于和QUERY配合算平均金额。
方式二:账户余额BALANCE_OF("name")
不想建命名查询时,可以直接引用账户当前余额:
=BALANCE_OF("Checking") + BALANCE_OF("Savings")- 参数是带引号的账户 id(确定性匹配)或带引号的账户名(精确名称匹配),把示例中的账户名替换成你自己预算中的账户名即可;
- 返回值是该账户当前余额,单位与普通金额相同(例如
-123.45); - 账户找不到时结果为 0,同样是静默行为。
可选:预算查询BUDGET_QUERY
如果你使用信封式预算(envelope budget),还可以直接查询预算维度的数字,语法为:
=BUDGET_QUERY("dimension", categories, startMonth, endMonth)dimension取值为budgeted、spent、balance_start、balance_end、goal之一,分别对应区间内预算总额、支出总额、首月期初结余、末月滚动结余(预算 + 支出 + 结转)和目标总额;categories推荐用QUERY_EXTRACT_CATEGORIES("queryName")从命名查询的过滤条件中提取类别集合;若该查询没有类别过滤条件,则包含全部非收入、非隐藏类别;startMonth/endMonth是YYYY-MM格式,或分别用QUERY_EXTRACT_TIMEFRAME_START("queryName")/QUERY_EXTRACT_TIMEFRAME_END("queryName")复用查询的日期范围。
文档给出的示例——统计与命名查询expenses相同类别、相同时间段的总支出:
=BUDGET_QUERY("spent", QUERY_EXTRACT_CATEGORIES("expenses"), QUERY_EXTRACT_TIMEFRAME_START("expenses"), QUERY_EXTRACT_TIMEFRAME_END("expenses"))结果单位与QUERY()一致。函数完整清单(含各函数是否可用于 Formula card,文档表格中的 “Query” 列)见 formulas 文档的 Function reference 一节;文档也说明,未列出的函数不一定不可用,可参考 HyperFormula 的内置函数列表。
可选:条件颜色公式
Formula card 支持一行可选的Conditional color公式,返回值是red或#ff0000这类颜色字符串。用RESULT变量引用主公式的计算结果,例如根据主公式结果是否为负来决定卡片文字颜色。留空则使用默认样式。
保存并验证卡片
编辑器右上角有Save widget按钮,保存后应用会弹出Dashboard widget successfully saved.通知;卡片标题可在编辑器顶部的标题处直接编辑保存。验证是否配置成功的路径:
- 编辑器中 Result 区域显示出公式的计算值(而非错误信息);
- 保存后回到 Reports 页面,新卡片上展示同样的数值;
- 若引用了命名查询或
BALANCE_OF,结果为 0 时先核对查询名/账户名是否拼写正确——按前文说明,不存在的名字不报错而是返回 0。
限制与前提
- 实验特性:文档明确提示该功能可能不在最新稳定版中,需要使用
nightly镜像/版本才能拿到最新实现;启用实验特性前建议定期备份预算文件。 - Rule formulas 不在本文范围:同一个实验开关同时启用规则公式(Rules 编辑器中用 ƒ 按钮开启),那是给规则“set field”动作用的,变量单位是“分”(cents),与 Formula card 的金额单位不同,不要混用两套变量说明。
- 静默返回 0:
QUERY查询名不存在、BALANCE_OF账户找不到,都返回 0 而不是报错,这是公式排错时最需要留意的行为。 - 编辑器中公式支持多行;自动补全与悬停提示只覆盖文档列出的函数子集,未列出的函数仍可能可用。
【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考