Ragic 与 Excel 一样都可以编写公式进行运算,但 Ragic 的公式都是自行开发的,因此支持的公式或写法不一定相同,尤其编写公式时是直接参照字段首部。
公式不只能运算数字,也能计算字符串及日期,系统会自动识别需要用什么类别的公式运算。但还是建议把要公式运算的字段设置成对应的字段种类,像是数值或是日期字段会比较好。
在表单页的设计模式下,点选字段首部后选择左侧列的公式,就可以输入公式。
例如在“销售订单”中的金额的公式为售价*数量,就在该空格中输入“C9*D9”。要注意公式要参照的单元格是首部所在的位置。
在有设置公式的字段右上方会显示 fx() 图符。
点击该图符的话,会将该公式的所有参照字段框选出来,以便快速查找。
更多公式可以查看支持的公式列表。注意:多选字段只能套用列表中的特定公式。
当不知道该输入什么公式时,可以在下方的公式小帮手输入你想要的规则和回传的数据,便可以藉由 AI 工具协助你写公式。
使用时请注意:
1. 请直接描述公式规则并描述这个字段要回传什么,如“回传今日日期”。
2. 如要表示字请在左右两边加上双引号,例如“"交易日"”。
3. 设置后请手动测试与重复验证结果是否符合需求。
点选下方的AI 帮我产公式。
便可以展开公式小帮手的接口,输入规则和回传的数据点击生成公式。
下方也有一些默认情境让你可以直接选择并根据你所设计的表单填入对应的字段。包含一般公式与签核公式。
例如:希望当“订单金额”大于“免运金额”时,“是否免运”的字段可以回传“是”,若没有大于则回传“否”时,可以先选择下方的如果“A1 大于 A2,传回 "Y",否则传回 "N"”,再修改成对应的字段以及回传值。
完成后点选生成公式,便会在下方生成对应的公式,点选公式旁的拷贝图符,系统会自动帮你把生成的公式填入上方的公式字段。
符号会决定如何运行运算。以一般运算来说,会遵循先乘除后加减的规则。但跟数学运算相同,你可以利用“括号 ()”来改变运算的顺序。但 Ragic 不能以冒号: 来加总单元格范围的值。
要运行基本的数学运算,像是加减乘除,请使用以下算数符号。
算数符号 | 意涵 | 例子 |
---|---|---|
+ (加号) | 加法 | 3+3 |
– (减号) | 减法 | 3–1 |
* (星号/米字号) | 乘法 | 3*3 |
/ (斜线) | 除法 | 3/3 |
^ (插入符号) | 次方 | 3^2 |
你可以利用以下符号来比较两个值。你也能在条件公式中用这些符号来判断是否符合逻辑,然后显示 TRUE 或 FALSE。
比较符号 | 意涵 | 例子 |
---|---|---|
= | 等于 | A1=B1 |
== | 等于 | A1==B1 |
> | 大于 | A1 > B1 |
< | 小于 | A1 < B1 |
> = | 大于等于 | A1 > =B1 |
< = | 小于等于 | A1 < =B1 |
!= | 不等于 | IF(A1!=B1,'yes','no') |
<> | 不等于 | IF(A1<>B1,'yes','no') |
你可以用“'单引号'”或“"双引号"”标注公式中的字符串。我们将使用“'单引号'”来解说,但两种格式 Ragic 都支持。
以下列出所有 Ragic 支持的公式以及类别。公式请一律用大写表示!
用于计算数值、金额相关的公式,例如获取总和、平均值、最大最小值等等…。
公式 | 描述 |
---|---|
SUM(value1,[value2],...) | 传回字段值的总和,也可以直接采用 value+value2+... 的形式来呈现 |
AVG(value1, value2,...) | 传回所有字段值的平均值,这个公式在子表格也可以使用,但是子表格的平均值包含所有字段值,并不只有子表格其中一列的字段值。 |
AVERAGE(value1, value2,...) | 传回所有字段值的平均值,这个公式在子表格也可以使用,但是子表格的平均值包含所有字段值,并不只有子表格其中一列的字段值。 |
MIN(value) | 传回所有的字段值中最小的值,这个公式在子表格也可以使用。 |
MAX(value) | 传回所有的字段值中最大的值,这个公式在子表格也可以使用。 |
MODE.SNGL(value1,[value2],...) | 传回所有字段值中最常见的值,这个公式在一般字段、子表格及全域常量都可以使用。 |
MODE.MULT(value1,[value2],...) | 传回所有字段值中最常见的值,当有多个众数时,可以回传多个结果,这个公式在一般字段、子表格及全域常量都可以使用。 |
ABS(value) | 传回绝对值 |
CEILING(value,[significance]) | 传回进位后的数字,到最接近之指定基数的倍数。significance 为选择性的,未指定则进位到最接近的整数值。范例:CEILING(2.5) 会传回 3;CEILING(1.5, 0.1) 则会回传 1.5。 |
FLOOR(value,[significance]) | 传回舍去后的数字,到最接近之指定基数的倍数。significance 为选择性的,未指定则舍去到最接近的整数值。范例:FLOOR(2.5) 会传回 2;FLOOR(1.58, 0.1) 则会回传 1.5。 |
ROUND(value) | 传回四舍五入后最接近的整数值 |
ROUND(value,N) | 传回四舍五入到小数点第 N 位的数值 |
ROUNDUP(value,N) | 传回无条件进位到小数点第 N 位的数值 |
ROUNDDOWN(value,N) | 传回无条件舍去到小数点第 N 位的数值 |
MROUND(value,multiple) | 传回四舍五入到最接近的 multiple 的倍数 |
SQRT(value) | 传回该值的平方根 |
COUNT(value1,value2,...) | 传回字段值的总数,用于一般字段时不会计入空值;用于子表格字段时则会计入空值 |
PI() | 传回圆周率,约略等于 3.14159 |
RAND() | 传回介于 0 到 1 之间的随机数值 |
POWER(value,power) | 传回该值的次方值 |
MOD(value,divisor) | 传回该值除以除数后的余数,此结果会跟除数带有相同的符号 |
GCD(value1,[value2],...) | 传回这些数值的最大公因子,最大公因子是指能够整除这些值的最大整数 |
LCM(value1,[value2],...) | 传回这些数值的最小公倍数,最小公倍数是指这些数值共通的最小整数倍正整数,使用这个公式来协助计算带有不同分母的分数 |
PRODUCT() | 会乘上所有指定字段的数值并且忽略空值及非数字的值,除了可以指定一般字段相乘外,参照子表格字段则可以将该字段的所有数值相乘。 |
PMT(rate, nper, pv, [fv], [type]) | 此公式用来计算贷款每期需要投入的金额。
rate (必填):利率 |
用于获取日期与时间相关数据的公式,例如传回年月日、时间、指定工作日等等…,部分公式说明与应用方式请参阅此章节。
公式 | 描述 |
---|---|
TODAY() | 传回目前日期。如需做为每日公式重算的参照字段,建议使用 TODAYTZ() 代替 TODAY() |
TODAYTZ() | 传回根据帐号设置中公司所在时区的目前日期 |
NOW() | 传回目前日期和时间 |
NOWTZ() | 传回根据帐号设置中公司所在时区的目前日期和时间 |
EDATE(start_date, months) | 传回代表日期的连续数字,为指定时间(start_date)之前或之后几个月份(months)该日期的数字 |
EOMONTH(start_date, months) | 传回代表指定日期(start_date)之前或之后月份(months)最后一天日期的连续数字 |
YEAR() | 传回日期字段的年份 |
MONTH() | 传回日期字段的月份 |
DAY() | 传回日期字段的日 |
DATE(year,month,day) | 结合三个参照数字字段的值,回传一个日期。为避免混淆,年份的字段请使用四位数的值 |
WEEKDAY() | 传回一周内的第几天,以数字显示从第 1 天(星期天)到第 7 天(星期六) |
WORKDAY(start_date,days,["holidays"], [makeup_workdays]) | 会传回代表日期 (起始日期) 不包含周末及指定假日(以及指定哪几天是工作日)之前或之后指定工作日数的日期。查看详细内容 |
WORKDAY.INTL(start_date,days,[weekend_no],["holidays"], [makeup_workdays]) | 使用参数指出哪几天和多少天是周末(及指定哪几天是工作日),以传回代表日期 (起始日期) 之前或之后指定工作日数的日期。查看详细内容 |
NETWORKDAYS(start_date,end_date,["holidays"], [makeup_workdays])) | 会传回 start_date 与 end_date 间不包含假日(周末、指定假日)以及指定哪几天是工作日的全部工作日数。查看详细内容 |
NETWORKDAYS.INTL(start_date,end_date,[weekend_no],["holidays"], [makeup_workdays]) | 使用参数指出哪几天和多少天是周末(及指定哪几天是工作日),以传回两个日期之间的所有工作日数。查看详细内容 |
ISOWEEKNUM(date) | 计算该日期为该年的第几周,星期一为该周第一天。 |
WEEKNUM(serial_number,[return_type]) | 计算该日期为该年的第几周,每周起始日可以自订。详细的写法可以参阅这篇 |
DATEVALUE(date_text, date_format) | 套用在日期(时间)字段,将参照的字符串转成日期(时间)值回传,“date_text”要是固定的日期字符串或参照的字符串字段,“date_format”要是参照的日期字符串格式。例如 A1 字符串的字段值是“2019/02/01”,希望可以将此转成日期字段值的话,可在日字段套用公式“DATEVALUE(A1,"yyyy/MM/dd")”来获取转换后的结果 |
HOUR() | 此公式支持三种用法: 1. 参数带入 0-1,传回 24 小时的比例。例如:HOUR(0.5)=12。 2. 参数带入日期字段,传回该字段的小时。例如:A9 字段值为 18:11:19,HOUR(A9)=18。 3. 参数带入日期字符串,传回字符串中的小时。例如:HOUR("2020/10/13 17:34:56")=17 |
MINUTE() | 此公式支持三种用法: 1. 参数带入 0-1,传回 60 分钟的比例。例如:MINUTE(0.5)=30。 2. 参数带入日期字段,传回该字段的分钟。例如:A9 字段值为 18:11:19,MINUTE(A9)=11。 3. 参数带入日期字符串,传回字符串中的分钟。例如:MINUTE("2020/10/13 17:34:56")=34 |
SECOND() | 此公式支持三种用法: 1. 参数带入 0-1,传回 60 秒的比例。例如:SECOND(0.75)=45。 2. 参数带入日期字段,传回该字段的秒。例如:A9 字段值为18:11:19,SECOND(A9)=19。 3. 参数带入日期字符串,传回字符串中的秒。例如:SECOND("2020/10/13 17:34:56")=56。 |
TIME(hour, minute, second) | 传回特定时间的小数,所传回的小数点数字是介于 0 到 0.99988426 之间的值,代表自 0:00:00 到 23:59:59 的时间。
Hour 代表小时的数字,范围从 0 到 32767。任何比 23 大的值将会除于 24,且余数视为小时值。例如:TIME(27,0,0) = TIME(3,0,0) = 0.125 或 3:00 AM。 Minute 代表分钟的数字,范围从 0 到 32767。任何大于 59 的值将会转换成小时和分钟。例如:TIME(0,750,0) = TIME(12,30,0) = 0.520833 或 12:30 PM。 Second 代表秒钟的数字,范围从 0 到 32767。任何大于 59 的值将会转换成小时、分钟和秒钟。例如:TIME(0,0,2000) = TIME(0,33,22) = 0.023148 或 12:33:20 AM。 |
用于获取字段值字符串或是查阅检查字段内容的公式,例如获取字符串的字符、替换大小写、确认空值等等…,字符串公式说明请参阅此章节。
公式 | 描述 |
---|---|
LEFT(value,length) | 取出某一字符串由左往右的字符,若长度为 3,则会取出由左往右的 3 个字符 |
RIGHT(value,length) | 取出某一字符串由右往左的字符,若长度为 3,则会取出由右往左的 3 个字符 |
MID(value,start,[length]) | 取出某一字符串的指定字符数,起始字符为 0。例如:字段 A1 的值为 ABCD,另一字段套用 MID(A1,1,2),回传的结果为 BC |
FIND(find_text,within_text,[start_num]) | 在某个字字符串内找到另一个字字符串,并传回该字字符串在第一个字字符串中的起始位置 |
LEN(value) | 取出某一字符串的长度(字符数) |
UPPER(value)/TOUPPERCASE(value) | 在不更动源值的情况下,用大写字母传回该值 |
LOWER(value)/TOLOWERCASE(value) | 在不更动源值的情况下,用小写字母传回该值 |
PROPER(value) | 将英文首字母转换为大写,并将非首字母改为小写 |
SUBSTITUTE(text,old_text,new_text,[instance_num]) | 将字字符串中的 old_text 部分以 new_text 替换 |
TEXT() | 以格式代码来套用格式,藉此变更数字显示的方式。详细请参阅这篇 |
REPT(value,number_times) | 回传以指定次数重复的值。 |
SPELLNUMBER(number, [lang], [option]) | 在正式的文档中或是某些情况下会有使用一般字的数字来代替阿拉伯数字的情况。例如:以“壹佰”来表示 100。
如有这样的需求即可使用 SPELLNUMBER 公式来转换。详细的写法可以参阅这篇 |
TRIM() | 移除字段值首尾的全角、半角空格,同时中间如果有连续的全角、半角空格,只保留第一个空格。范例:TRIM(" a c") 会得到 "a c"(半a全半半半c,仅保留a全c) |
CHAR(number) | 使用 CHAR 将您从其他类型计算机上所获取之文件的字码页代码转换成字符。例如 CHAR(10) 会回传换行,CHAR(32) 会回传空格 |
ISBLANK() | 检查参照的字段是否为空值,可以直接参照指定字段或用于条件公式中,例如:ISBLANK(A2) 或 IF(ISBLANK(A2), 'Y', 'N') |
用于设置符合条件下回传字段值的公式,详细说明请参阅此章节。
公式 | 描述 |
---|---|
IF(value==condition,[value_if_true],[value_if_false]) | 依据条件回传值,符合某一个情况回传 TRUE,如果不是此情况则回传 FALSE。查看详细内容 |
IFS() | 检查多个条件符合,并传回第一个为 TRUE 的条件的对应值。查看详细内容 |
LOOKUP(value,lookup_list,[result_list]) | 在 lookup_list 搜索值,然后传回值所在 result_list 的位置。查看详细内容 |
AND(logical1, [logical2], ...) | 当条件全部满足时传回 TRUE,在一个或多个条件不满足时传回 FALSE。查看详细内容 |
OR(logical1, [logical2], ...) | 当任一个条件满足时传回 TRUE,在全部条件都不满足时传回 FLASE。查看详细内容 |
NOT(logical) | 当条件不满足时传回 TRUE,条件满足时则传回 FALSE。查看详细内容 |
COUNTIF(criterai_range,criteria) | 回传计算子表格中每一列符合判定标准的值总(次)数。查看详细内容 |
COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2]...) | 回传计算附加的范围内符合其相关标准的值总(次)数。查看详细内容 |
SUMIF(range,criteria,[sum_range]) | 回传计算子表格中每一列符合判定标准的值总和。查看详细内容 |
SUMIFS(sum_range,criteria_range1,criteria1,[criteria_range2, criteria2],...) | 回传计算每一列符合多个判定标准的值总和。查看详细内容 |
UPDATEIF(condition,value_if_true) | 只有当条件符合的时候才更新字段值。查看详细内容 |
MAXIFS(max_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) | 根据指定的一组条件或准则传回指定之单元格范围的最大值 |
MINIFS(min_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) | 根据指定的一组条件或准则传回指定之单元格范围的最小值 |
可用于获取子表格字段相关数据的公式,例如传回子表格第几笔数据、获取不重复或是非空值的子表格列数等等…,请参阅此章节。
公式 | 描述 |
---|---|
FIRST(value) | 传回子表格此字段中的第一笔数据 |
FIRSTA(value) | 传回子表格此字段中非空值的第一笔数据 |
LAST(value) | 传回子表格此字段中的最后一笔数据 |
LASTA(value) | 传回子表格此字段中非空值的最后一笔数据 |
COUNTA(value) | 回传计算子表格中每列中指定字段不是空值的总(次)数。当公式指定字段非空值时即会计算,即使该列其他字段有空值时也会计算,不需要整列都非空值。 |
SUBTABLEROW(value,nth_row) | 只能套用在一般独立字段,回传子表格中指定之第几笔数据的值。 |
RUNNINGBALANCE(value, [allow_backend_formula_recalculation=false]) | 回传子表格中指定栏中该列与前面数据列加总的值,如果填 true 则该公式能被后端公式重算。(子表格数据需照顺序新增) |
LARGE(arg, nth, ["arg2"]) | 指定查询子表格中某一栏的数值之指定的序数大小相对应值,并回传符合条件子表格列数据之指定字段值。例如 LARGE(C1,1,D1) 会查询子表格数据 C1 字段中第一大的数值,并回传同一列子表格数据之 D1 的字段值。此公式没有众数的概念,即如果有同样大小的值,将会照顺序排序而不会被列为同等大小。如需回传子表格中的最小值,可以归并使用 COUNT()。例如 LARGE(C1,COUNT(C1),D1),意即查询子表格 C1 字段最小的数值,并回传同列 D1 的字段值 |
UNIQUE() | 列出参照子表格字段中所有不重复的字段值。查看详细内容 |
UNIQUE().length | 计算参照子表格字段中不重复的值的数量。查看详细内容 |
VLOOKUP() | 回传子表格中符合指定条件的值。查看详细内容 |
用于多选字段的公式,详细说明请参阅此章节。
公式 | 描述 |
---|---|
INCLUDES_ALL(多选/多图片/多文件字段, value1, value2,...) | 所有选项值中都包含列出的每一个 value(可以是任何字段型态或值),则回传 true。使用范例可以参阅这篇。 |
NOT_INCLUDES_ALL(多选/多图片/多文件字段, value1, value2,..) | 所有选项值中都没有包含列出的每一个 value(可以是任何字段型态或值),则回传 true,结果等同于 INCLUDES_ANY 的相反值。使用范例可以参阅这篇。 |
INCLUDES_ANY(多选/多图片/多文件字段, value1, value2,...) | 所有选项值中至少包含其中一个列出的 value(可以是任何字段型态或值),则回传 true。使用范例可以参阅这篇 |
NOT_INCLUDES_ANY(多选/多图片/多文件字段, value1, value2,...) | 所有选项值中只要没有包含其中一个列出的 value(可以是任何字段型态或值),则回传 true,结果等同于 INCLUDES_ALL 的相反值。使用范例可以参阅这篇。 |
ITEMS_COUNT(多选/多图片/多文件字段) | 回传多选字段值的数量。例如:多选字段选了三个选项,则回传 3;文件上载字段若有两个文件,则回传 2。 |
Ragic 的公式是直接参照字段首部的,让公式套用更为简单。特别是在子表格就不需要编写复杂的公式。
下列为“销售订单”的演算范例。子表格列出商品的售价(C9)与数量(D9),透过乘法运算可以得知顾客每项商品所需要付的总额(C9*D9);
小计(D13)的数值是由 E9 加总而来的。
除了上述的例子,也有其他能应用于子表格的公式。假设要计算子表格中有多少笔数据,可以新增一个字段并利用子表格的字段首部来写 COUNT() 公式。
如果需要其他进阶条件公式来计算或加总子表格字段值,请参阅 COUNTIF 函数、COUNTIFS 函数、SUMIF 函数或 SUMIFS 函数。
在子表格中计算不重复的值,可以使用 UNIQUE() 以及 UNIQUE().length 。
UNIQUE():列出参照字段中所有不重复的字段值。如没有设置分隔符号的话默认分隔符号为",",结果如下图的 UNIQUE() 字段,也可以自订分隔符号,写法就必须改成 UNIQUE(字段,"分隔符号")。例如 UNIQUE(A1,"/") 或 UNIQUE(A1,", ")。产出的结果分别就会是:Angie/Lillian/Amy/Rex 或 Angie, Lillian, Amy, Rex。
UNIQUE().length:计算参照字段中不重复的值的数量。
如需回传子表格中符合指定条件的值,可以使用 VLOOKUP。
公式 | 句法 |
---|---|
VLOOKUP | VLOOKUP(value, queryField, returnField, [approximateMatch=true], [findMultiple=false]) |
VLOOKUP 公式需要包含下列几项参数:
value:是必要的,此为检查的值,可以为指定的值,也可以直接参照字段。
queryField:是必要的,此为子表格中用于比对的字段。
returnField:是必要的,此为子表格中当条件符合时回传的字段。
[approximateMatch=true]:是选择性的,不一定要输入,此参数表示是否要精准比对,默认是关闭,如果你希望系统精准比对,请在此参数输入 false。
[findMultiple=false]:是选择性的,不一定要输入,此参数表示是否要列出多个符合条件的值,默认是关闭,如果你需要回传的条件值可能不只一个,请在此参数输入 true。
例如想在子表格中查询星期三的教师名称。
可以新增一个自由输入字段给用户输入查询日期,并于另外一个字段中套用“VLOOKUP(A9, A4, B4, false, false)”或是“VLOOKUP(A9, A4, B4)”,系统即可依据用户输入的查询日期自动回传“王老师”。
如果你希望是模糊比对而且可以回传多个符合条件的值的话可以套用“VLOOKUP(A9, A4, B4, true, true)”。
会以天数作为日期的增减:如果 A1 是日期字段,A1+7 的日期则为 A1 的后七天。
另一个常用的日期公式是计算年龄:如果 A1 为出生年月日,你可以设置公式“(TODAY()-A1)/365.25”,来显示目前年龄,年龄的字段种类记得选择数值,才能够正确用数值来做公式运算。
会需要都是时间字段(格式 HH:mm) 或搭配数字字段来做运算。
例如 A1 为开始时间(格式 HH:mm),A2 为结束时间(格式 HH:mm),计算开始到结束的时间有两种作法:
A3 时间计算字段(格式 HH:MM)可套用公式“A2-A1” ; 或是 A3 如果为数字字段(格式 0.0),则可套用公式“(A2-A1)/60”。
注意:
(1) 公式所参照的时间字段皆不可为空值,否则公式将无法触发(无法用一个时间加上或减去空值来计算时间)。若计算字段会有空值的情况,建议将字段格式改为数字字段,这样字段为空值的情况下,也可以顺利触发公式。
范例: A1 为开始时间(格式 HH:mm), A2 为耗费时间(格式 HH:mm),想要透过公式 A2+A1 计算出 A3 结束时间(格式 HH:mm),但如果 A2 在数据中有可能为空值,则 A3 的公式会无法触发导致字段也变成空值。若将 A2 的耗费时间改为数字字段(代表计算耗费几分钟),即使 A2 为空值的情况下, A3 也可以显示字段内容。
(2) 以上时间计算方式只适用于同一天内的时间计算,如果有跨日,例如晚上 10 点到早上 4 点,就必须用下面的方法:
时间字段必须是包含日期的格式(例如 yyyy/MM/dd HH:mm),计算字段要是数字字段(格式 0.0),A1 为开始日及时间(yyyy/MM/dd HH:mm),A2 为结束日及时间(yyyy/MM/dd HH:mm),则时间计算字段 A3(数字格式0.0) 套用公式“(A2-A1)*24”。
套用在日期字段,会传回代表日期(起始日期)之前或之后指定工作日数的日期。工作日不包含周末、周日以及假日(但包含指定的工作日)。 您可以在计算发票到期日、预期递送时间或工作日数时,使用 WORKDAY 来排除周末或假日,但包含指定的工作日。
公式 | 句法 |
---|---|
WORKDAY | WORKDAY(start_date,days,["holidays"], ["makeup_workdays"]) |
WORKDAY 需要包含下列参数:
Start_date:是必要的,代表开始日期的日期。
Days:是必要的,代表 start_date 之前或之后的非周末和非假日的天数。正值代表未来的日期;负值代表过去的日期。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例 1:
日期字段套用公式“WORKDAY(A1,A2,["2017/06/16","2017/06/19"])”
假设 A1 的日期值为 2017/06/15,A2 的数字为 9,指定不计算在内的日期为 “2017/06/16” 跟 “2017/06/19”,则从开始日期之后不包括周末以及指定的假日的第九天计算出来的结果会是“2017/06/30”。
范例 2:
日期字段套用公式“WORKDAY(A1,A2,["2017/06/16","2017/06/19"],["2017/06/24"])”
假设 A1 的日期值为 2017/06/15,A2 的数字为 9,指定不计算在内的日期为 “2017/06/16” 跟 “2017/06/19”,但指定“2017/06/24”这个礼拜六为工作日,则从开始日期之后不包括周末以及指定的假日,但是包括指定工作日的第九天计算结果会是“2017/06/29”。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
套用在日期字段,使用参数指出哪几天和多少天是周末及指定哪几天是工作日,会传回起始日期之前或之后指定工作日数的日期。工作日不包含周末、假日,但包含指定工作日。可以用于计算发票到期日、预期递送时间或工作日数时。
公式 | 句法 |
---|---|
WORKDAY.INTL | WORKDAY.INTL(start_date,days,[weekend_no],["holidays"], ["makeup_workdays"]) |
WORKDAY.INTL 需要包含下列参数:
Start_date:是必要的,代表开始日期的日期。
Days:是必要的,代表 start_date 之前或之后的非周末和非假日的天数。 正值代表未来的日期;负值代表过去的日期。
Weekend_no:是选择性的,若周末日为非周六及周日时,可参阅下方表格来带入相对应 Weekend 数字。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例 1:
日期字段套用公式“WORKDAY.INTL(A1,A2,2,["2017/06/16","2017/06/19"])”
假设 A1 的日期值为 2017/06/15,A2 的数字为 9,以星期日及星期一作为周末,指定不计算在内的日期为“2017/06/16”跟“2017/06/19”,则从开始日期之后不包括周末及指定假日的第九天计算结果会是“2017/06/29”。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
套用在数字字段,会传回 start_date 与 end_date 间的全部工作日数。工作日不包括周末与任何指定的假日,但包含指定工作日。使用 NETWORKDAYS,来根据某段期间内的工作天数计算员工薪资。
公式 | 句法 |
---|---|
NETWORKDAYS | NETWORKDAYS(start_date, end_date, ["holidays"], ["makeup_workdays"]) |
NETWORKDAYS 需要包含下列参数:
Start_date:是必要的,代表开始日期的日期。
End_date:是必要的,代表结束日期的日期。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例 1:
数字字段套用公式“NETWORKDAYS(E1,E2,['2017/10/04','2017/10/09','2017/10/10'])”
假设 E1 的日期值为 2017/10/01,E2 的日期值为 2017/10/31,指定不计算在内的日期为“2017/10/04、2017/10/09、2017/10/10”,则从开始日期至结束日其不包括周末以及指定的三天假日所计算出来的工作日数会是“19”天。
范例2:
数字字段套用公式“NETWORKDAYS(E1,E2,['2017/10/04','2017/10/09','2017/10/10'],['2017/10/28','2017/10/29'])”
假设 E1 的日期值为 2017/10/01,E2 的日期值为 2017/10/31,指定不计算在内的日期为“2017/10/04、2017/10/09、2017/10/10”,并指定“2017/10/28 (六)、2017/10/29 (日)”为工作日,则从开始日期至结束日其不包括周末以及指定的三天假日,但是包括指定工作日所计算出来的工作日数会是“21”天。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
套用在数字字段,使用参数指出哪几天和多少天是周末,以传回两个日期之间的所有工作日数。 工作日不包括周末与任何指定的假日,但包含指定的工作日。
公式 | 句法 |
---|---|
NETWORKDAYS.INTL | NETWORKDAYS.INTL(start_date,end_date,[weekend_no],["holidays"], ["makeup_workdays"]) |
NETWORKDAYS.INTL 需要包含下列参数:
Start_date和End_date:是必要的, 这是要计算差距的日期。 Start_date 可以早于、等于或晚于 end_date。
Weekend_no:是选择性的,若周末日为非周六及周日时,可参阅下方表格来带入相对应Weekend数字。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例:
数字字段套用公式“NETWORKDAYS.INTL(E1,E2,11,['2017/06/16'])”
假设 E1 的日期值为 2017/06/01,E2 的日期值为 2017/06/30,指定周末日为星期日一天而已,并指定不计算在内的日期为“2017/06/16”,则从开始日期至结束日期,不包括周末(仅星期日)及指定不计算的日期,所计算出来的工作日数会是“25”天。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
Weekend 参数对应表:
Weekend数字 | 代表周末日 |
---|---|
1或省略 | 星期六、星期日 |
2 | 星期日、星期一 |
3 | 星期一、星期二 |
4 | 星期二、星期三 |
5 | 星期三、星期四 |
6 | 星期四、星期五 |
7 | 星期五、星期六 |
11 | 仅星期日 |
12 | 仅星期一 |
13 | 仅星期二 |
14 | 仅星期三 |
15 | 仅星期四 |
16 | 仅星期五 |
17 | 仅星期六 |
使用字符串公式十分简单:如果 A6 的值为“台北市”,而 A7 的值为“士林区福林路 1 号”,若希望把这两个字符串起来,则可以将公式写为“ A6+A7”,结果则会回传“台北市士林区福林路 1 号”。如果希望两个字符串间要有空格则可以写成 “ A6+" "+A7”。
想要了解更多字符串类型的公式应用,可以参阅这篇说明。
备注:如果在公式中要表示“\”的话需要写成“\\”。
Ragic也支持条件公式。要特别注意字段种类可能会改变公式在某些情况下的计算方式。
有两种情况公式中条件的参照字段后面需要加上 .RAW:
1. 当条件式公式的条件是参照两个字段,并且用运算符号“=”来判断两个字段值是否相等时,需要在设置条件时将这两个参照字段后面加上 .RAW,如果是只参照一个字段,并利用运算符号“=”来判断等于一个固定的值,则不需要。
2. 当套用公式的字段是数字字段,要做数字运算,但是条件是参照字符串字段(字、选项、日期等),并用运算符号“=”来判断等于一个固定的字符串时,设置条件时参照的字符串字段要加上 .RAW。
何时要加上 .RAW 的详细内容可以参阅这篇。
日期字段会被以天数来计算。
你也可以利用多层的条件判断来写出 IF 公式。
IF 公式依据条件情况回传值,例如如果符合某一个情况则回传 TRUE,如果不是此情况则回传 FALSE。
公式 | 句法 |
---|---|
IF | IF(value==condition,[value_if_true],[value_if_false]) |
范例:
IF(A2==10,10,0),如果 A2 等于 10,这个值在这个字段将会是 10。若 A2 出现其他的值,则会回传 0。
IF(A1==1,'true','false'),如果 A1 等于 1,则会回传“true”。若 A1 出现其他的值,则回传“false”。
IF(A2>=60,'yes','no'),如果 A1 等于或大于 60,则会回传“Yes”,否则回传“No”。
备注:
Ragic仍然支持IF功能的旧句法。
Value=='condition'?'[value_if_true]':'[value_if_false]'
范例: A1=='open'?'O':'C'
如果 A1 是 open, 则出现 O,如果不是则出现 C。
如果你的条件是利用“=”的运算符号来判断两个字段是否相等的话,请在填写条件的地方,将这两个参照字段后面加上.RAW。
句法 |
---|
IF(field1.RAW=field2.RAW,[value_if_true],[value_if_false]) |
范例:
IF(A1.RAW=A2.RAW,1,0),如果 A1 的字段值等于 A2 的字段值,回传 1;否则回传 0。
IF(A1.RAW=A2.RAW,'Open','Closed'),如果 A1 的字段值等于 A2 的字段值,回传“Open”;否则回传“Closed”。
句法 |
---|
IF(string_field1.RAW="string",[numeric_value_if_true],[numeric_value_if_false]) |
范例:
IF(A1.RAW="Yes",1,0),如果 A1 的字段值等于字符串“Yes”,回传 1;否则回传 0。
如果你只参照一个数字字段,并利用运算符号“=”来判断是否等于一个固定的值,不需要另外加上 .RAW。
范例:
IF(A1=1,"YES","NO"),如果 A1 的字段值等于 1,回传“YES”;否则回传“NO”。
例如公式为 IF(A8.RAW='',"TRUE","FALSE"),需判断某个字段是不是空的,而且那个字段值可能会是 0 的时候,应加上 .RAW。
例如 A1“号码” 是自由输入字段,值是 10001,A2“会员编号”是链接字段,希望透过公式带入 A1 的值,则可以在 A2 设置公式 IF(A1!="",A1.RAW) 。
如想要在 IF() 公式中抽取其他字段的字符串,像是公式 LEFT() 、 RIGHT() 、 MID () 等, 你必须先转换该字段为字符串形式,系统才能正确抽取。转换方式为在参照字段后方加上“+""”。
范例:
假设你想要参照 A5 字段的前两位字进行判断,可以使用如下公式:IF(A1="Yes",A5,LEFT(A5+"",2)),如果字段 A1 为 Yes ,则带入 A5 字段值;若 字段 A1 不是 Yes ,则显示 A5 字段的首两位字。
目前因为系统限制,不支持将 TODAY() 或 NOW() 直接加入至 IF() 进行运算,你必须要另外新增一个字段先获取 TODAY() 或 NOW() 的值后再进行运算。
范例:
假设要将 A1 作为判断依据,评估数据是否还有效,那么你可以将 TODAY() 放在 A2 字段,并套用公式:IF(A1>A2,"Valid","Expired"),如果字段 A1 的值大于 TODAY() ,则显示“Valid”;若字段 A1 的值小于 TODAY() ,则显示“Expired”。
假设要将 A1 与 TODAY() 比较,可以将整个运算,例如 A1-TODAY() 放在 A2 字段,并套用公式:IF(A2>0,"Valid","Expired"),如果字段 A2 的值大于 0,则显示“Valid”;若字段 A1 的值小于 TODAY() ,则显示“Expired”。
注意:TODAY() 或 NOW() 并不会每日自动重算,因此遗留数据的 TODAY() 或 NOW() 字段会显示为上次更新纪录的时间。如果你希望可以每日自动重算以显示最新的数据状态,可以考虑写程序让公式每天重新计算。
1. 可以在非日期字段套用 IF 比较日期字段大小
例如 A1、A2 为日期字段,A2 套用 TODAY(),A4 选项字段套用 IF(A1>A2,"已逾期","未逾期")
2. 不能在非日期字段套用 IF 来运算日期字段值,必须另建数字字段来做加减运算
同上例,但 A4 的公式改为 IF(A1-1>A2,"已逾期,"未逾期") 会运行错误,在这情况下要另外创建两个数字字段: C1、C2,C1 套用 A1-1,C2 套用 A2,A4 公式改为 IF(C1>C2,"已逾期","未逾期")
你也可以使用 LOOKUP 公式在你希望附加条件的字段上,增加针对各个特殊条件的处理。
公式 | 句法 |
---|---|
LOOKUP | LOOKUP(value,[lookup_list],[result_list]) |
在 lookup_list 搜索值,然后传回值所在 result_list 的位置。
值是在 lookup_list 内搜索的值。
lookup_list是一个数组,如[0,100,500],LOOKUP 功能在这清单内搜索值。
result_list是自选的,它和 lookup_list 相同,如['Small','Medium','Large']。如果 result_list 参数被省略,LOOKUP 功能会传回在 lookup_list 的值。如果 LOOKUP 功能不能找到确切符合的值,它会选择回传在 result_list 内,小于或等于值之中最大的值。如果值小于所有在 result_list 里的值,则 LOOKUP 功能会传回空的条件。
范例:
LOOKUP(A1,[0,45,65],['Small','Medium','Large']),如果该字段 A1 的值在 0~44 之间,则该字段值就会是 Small,若值在 45~64 之间则会是 Medium,若值大于等于 65 则会是 Large。
多字段范例:
LOOKUP(A1,[0,45,65],[A3+A4,B5,B6]),如果 A1 在 0~44 之间,值是 A3+A4;在 45~64 之间值是B5;等于或超过 65,则值将会是 B6。
当条件全部满足时传回 TRUE,在一个或多个条件不满足时传回 FALSE。
公式 | 句法 |
---|---|
AND | AND(logical1,[logical2],...) |
AND 包含下列参数:
logical1:是必要的,这是第一项需要判断回传值为 TRUE 或 FALSE 的条件。
logical2:是非必要的,其他条件在被判断时,也会影响回传值为 TRUE 或 FALSE。
当任一个条件满足时传回 TRUE,在全部条件都不满足时传回 FALSE。
公式 | 句法 |
---|---|
OR | OR(logical1,[logical2],...) |
OR 包含下列参数:
logical1:是必要的,其他逻辑条件像是logical2则非必要,这是第一项需要判断回传值为 TRUE 或 FALSE 的条件。
当条件不满足时传回 TRUE,条件满足时则传回 FALSE。
公式 | 句法 |
---|---|
NOT | NOT(logical) |
范例:
NOT(A2>10),如果 A2 字段值小于或等于 10 的时候,系统会回传“true”。字段值大于 10 的时候,系统则会回传“false”。
利用 COUNTIF 来计算子表格中每一列符合判定标准的总数。例如,算出收据上的特定一项物品的总数。
公式 | 句法 |
---|---|
COUNTIF | COUNTIF(criteria_range,criteria) |
COUNTIF 有下列参数:
criteria_range:是必要的,范围必须是在子表格内的字段并确认其值是否符合相关的标准。
criteria:是必要的,此标准会定义出哪些在 criteria_range 内的单元格会被加入。可以一个数字、表达式、参阅其他字段的值,或是字串来决定哪些单元格会被列入计算。参阅下表:
应用范例 | 输入范例 |
---|---|
指定数字 | "8" |
数字比较式 | "> 8"、"< 8"、"!= 8" |
指定字符串 | "apple" |
字符串不等式 | "!='apple'"(外面引号与里面引号要为不同引号,例如外面一组双引号里面一组单引号) |
指定子表格字段 | A4 (不用加上一组双引号或是加上“=”,直接写该字段即可) |
指定与子表格字段比较 | "> A4"、"< A4"、"!=A4" |
COUNTIF 只能参阅单一个子表格的内容,并被设在独立的字段中。
COUNTIF 只能设一个标准。如果你有多个标准,可以使用COUNTIFS。
范例:
设在 A9 的公式 COUNTIF(A4,'苹果') 会回传子表格内每一行 A4 字段下产品名称是“苹果”的总数。
公式 | 句法 |
---|---|
COUNTIFS | COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2]...) |
COUNTIFS 有下列参数:
criteria_range1:是必要的,范围必须是在子表格内的字段并确认其值是否符合相关的标准。
criteria1:是必要的,此标准会定义出哪些在 criteria_range1 内的单元格会被加入。可以一个数字、表达式、参阅其他字段的值,或是字串来决定哪些单元格会被列入计算。参阅下表:
应用范例 | 输入范例 |
---|---|
指定数字 | "8" |
数字比较式 | "> 8"、"< 8"、"!= 8" |
指定字符串 | "apple" |
字符串不等式 | "!='apple'"(外面引号与里面引号要为不同引号,例如外面一组双引号里面一组单引号) |
指定子表格字段 | A4 (不用加上一组双引号或是加上“=”,直接写该字段即可) |
指定与子表格字段比较 | "> A4"、"< A4"、"!=A4" |
criteria_range2, criteria2,...:是选择性的,计算附加的范围内符合其相关标准的值。
COUNTIFS 只能参阅单一个子表格的内容,并被设在独立的字段中。
利用 SUMIF 来算子表格中每一列符合判定标准的值其总和。例如,算出收据上的特定商品的总金额。
公式 | 句法 |
---|---|
SUMIF | SUMIF(range,criteria[sum_range]) |
SUMIF 有下列参数:
range:是必要的,范围必须是在子表格内的字段并确认其值是否符合相关的标准。
criteria:是必要的,此标准会定义出哪些在 range 内的单元格会被加入。可以一个数字、表达式、参阅其他字段的值,或是字串来决定哪些单元格会被列入计算。参阅下表:
应用范例 | 输入范例 |
---|---|
指定数字 | "8" |
数字比较式 | "> 8"、"< 8"、"!= 8" |
指定字符串 | "apple" |
字符串不等式 | "!='apple'"(外面引号与里面引号要为不同引号,例如外面一组双引号里面一组单引号) |
指定子表格字段 | A4 (不用加上一组双引号或是加上“=”,直接写该字段即可) |
指定与子表格字段比较 | "> A4"、"< A4"、"!=A4" |
sum_range:是选择性的,如果您要加总的不是 range引数中指定的单元格,这便是要加总的实际单元格。如果省略 sum_range 引数,便会加总 range 引数中所指定的单元格 (即是套用准则的相同单元格)。
SUMIF 只能参阅单一个子表格的内容,并被设在独立的字段中。
SUMIF 只能设一个标准。如果你有多个标准,可以使用 SUMIFS。
范例:
在 A9 套用 SUMIF(A4,'苹果',B4),会回传子表格内每一行如果 A4 字段下产品名称是“苹果”时,其 B4 值的总和。
利用 SUMIFS 来算子表格中每一列符合多个判定标准的值其总和。例如,算出收据上在特定存货位置的特定商品的总金额。
公式 | 句法 |
---|---|
SUMIFS | SUMIFS(sum_range,criteria_range1,criteria1,criteria_range2, criteria2,...) |
SUMIFS 有下列参数:
sum_range:是必要的,范围必须是在子表格内的字段并确认其值是否符合相关的标准。
criteria_range1:是必要的,criteria_range1 和 criteria1 设置了其中范围内的特定查找标准。一旦范围内的项目被找出,其相对应的值就会在 sum_range 被加进去。
criteria1:是必要的,此标准会定义出哪些在 criteria_range1 内的单元格会被加入。可以一个数字、表达式、参阅其他字段的值,或是字串来决定哪些单元格会被列入计算。参阅下表:
应用范例 | 输入范例 |
---|---|
指定数字 | "8" |
数字比较式 | "> 8"、"< 8"、"!= 8" |
指定字符串 | "apple" |
字符串不等式 | "!='apple'"(外面引号与里面引号要为不同引号,例如外面一组双引号里面一组单引号) |
指定子表格字段 | A4 (不用加上一组双引号或是加上“=”,直接写该字段即可) |
指定与子表格字段比较 | "> A4"、"< A4"、"!=A4" |
criteria_range2,criteria2,...:是选择性的,计算附加的范围内符合其相关标准的值。 需特别留意的是,在 SUMIFS 中,条件(criteria)必须下在不同的字段。如果您是需要将条件下在同一字段中,例如加总当该字段等于 a 或是等于 b 的情况时,您必须要使用多个 SUMIF() 相加。另外,SUMIFS 只能参阅单一个子表格的内容,并被设在独立的字段中。
范例:在 A52 设置公式 SUMIFS(C45, B45, " > A50 ", B45 ," < A51 ") 会将子表格中订单日(B45)大于起始日(A50)以及小于结束日(A51)的数据的金额做加总算出日期区间内订单金额的总和。
可以利用 UPDATEIF 的条件公式,让该字段在条件不成立的情况下保有原本的字段值,并只在条件成立的情况下更新字段值。
公式 | 句法 |
---|---|
UPDATEIF | UPDATEIF(条件,字段值_如果_成立) |
范例
UPDATEIF(A2==10,10),如果A2等于10的时候,套有此公式的字段值会被更新成10。 如果 A2 的字段值不是 10 的任何情况下,,套有此公式的字段会保有之前所保存的值,并不会改变。
UPDATEIF(A2=='同住家地址',A1),如果 A2 的字段值为“同住家地址”的话,此字段(送货地址)的值则会是 A1 的值(住家地址),其他情况下,该字段值会维持原本的字段值,例如空值或之前保存的值。
如果是在你有多个条件的情况下,条件公式可以分层写出。
范例:
IF(A1==1,'Bad',IF(A1==2,'Good',IF(A1==3,'Excellent','No Valid Score')))
上面这个公式代表:
如果A1的值为 1, 回传结果"Bad"
如果A1的值为 2, 回传结果"Good"
如果A1的值为 3, 回传结果"Excellent"
如果A1的值为非上情况,则为"No Valid Score"。
范例:
IF( AND(A1.RAW=='YES',A2.RAW=='Jimmy'), C3*C7, IF( AND(A1.RAW=='YES',A2.RAW=='John'), C3*C8, IF( AND(A1.RAW=='YES',A2.RAW=='Jane'), C3*C9, C3*C10 ) ) )
上面这个公式代表:
如果A1的值为"YES",A2的值为"Jimmy",回传的结果为C3*C7
如果A1的值为"YES",A2的值为"John",回传的结果为C3*C8
如果A1的值为"YES",A2的值为"Jane",回传的结果为C3*C9
如果A1的值为非上述情况,则为C3*C10。
除了上述的嵌套状公式外,你也可以使用 IFS() 来编写多个条件的条件公式
公式 | 句法 |
---|---|
IFS() | IFS(value=condition1,value_if_true1,value=condition2,value_if_true2,...,
true,default value) |
IFS 公式需要包含下列几项参数:
value=condition1 是必要的,此为第一个检查条件
value_if_true1 是必要的,此为当符合第一个检查条件时回传的值
value=condition2 是必要的,此为第二个检查条件
value_if_true2 是必要的,此为当符合第二个检查条件时回传的值
*检查条件最少为两组,可依实际需求增加数量
true 是选择性的,若你需要设置默认值,则必须输入此参数,若无此需求则可省略
default value 是选择性的,此为若没有任何符合的检查条件时,系统必须回传的默认值
范例:
IFS(A1=1,"Bad",A1=2,"Good",A1=3,"Excellent",true,"No Valid Score")
上面这个公式同样代表:
如果A1的值为 1, 回传结果"Bad"
如果A1的值为 2, 回传结果"Good"
如果A1的值为 3, 回传结果"Excellent"
如果A1的值为非以上情况,则为"No Valid Score"。
公式 | 句法 |
---|---|
INCLUDES_ALL | INCLUDES_ALL(多选/多图片/多文件字段, value1, value2,...) |
NOT_INCLUDES_ALL | NOT_INCLUDES_ALL(多选/多图片/多文件字段, value1, value2,...) |
INCLUDES_ANY | INCLUDES_ANY(多选/多图片/多文件字段, value1, value2,...) |
NOT_INCLUDES_ANY | NOT_INCLUDES_ANY(多选/多图片/多文件字段, value1, value2,...) |
ITEMS_COUNT | ITEMS_COUNT(多选/多图片/多文件字段) |
以 INCLUDES_ALL 为例:
首先在 D2 套用 INCLUDES_ALL(D1,A1,A2,B4)
A1 = 自由输入字段,值为 “A”
A2 = 多选字段,值为 B、C
B4 = 子表格的自由输入字段,有两笔数据,第一笔的值为“D”,第二笔为 “E”
D1 = 多选字段,值为 A、B、C、D、E
则 D2 回传“true”
在 Ragic 中公式是在参照字段被编辑时触发,并将运算结果保存下来。如果改变了公式,但没有重新编辑参照字段,新公式就不会被触发,既存的数据也不会依据新公式重新计算。这样设计的原因是先前根据旧公式所计算出来的数据还是有效的,不应该因为更新了公式而自动更改已经保存的数据。像是一张计算税收的表单,因为最近税率改变而更改公式,但先前保存的税收数据还是应该要以旧税率来计算没错。
某些情况下可能会需要用最新的公式将旧数据都重算一遍。你可以进入设计模式,到想要重新运行的公式中,看到两个选项:“套用这个公式到所有数据(重算单一公式)”、“套用表单上所有公式到所有数据(重算所有公式)”,根据需求选择想要重算的方式。如果你是在设计模式下修改、新增公式,记得要先保存设计再单击公式重算喔!
除了透过手动套用公式重算,也可以透过自己写程序来运行公式重算。另外如果需要常常更改特定公式或是有用到 TODAY(),可以考虑透过 Daily Workflow 来运行公式每天重新计算。
注意:透过 Workflow 公式重算,会有以下两种情况不计入数据修改纪录。
1. 公式重算后,没有任何一个字段的字段值被修改。
2. 因效能考量,系统会自动判断运算笔数,如超过 3500 笔,就不会写入修改纪录(实际上数据有正常运行重算,只是不会显示于修改纪录)。
在输入数据并保存时,若希望能触发有相关链接的表单公式重算的话,你可以在表单页设计模式左侧工具条中的表单设置 下的表单设置勾选保存时触发源表单(默认已勾选)或相关表单的全部公式重算。
关于源表单及相关表单的说明,请参阅下图范例:
源表单:A、B为 C 的源表单。任何表单只要有子表格生成新表单,它们即为新表单的源表单;任何表单只要有显示从其他表单的链接,它们即为其他表单的源表单。
相关表单:B、C为 A 的相关表单;A、C 为 B 的相关表单。两张表单若不是多版本表单且共享同样的子表格,它们即为相关表单;而子表格生成的新表单也是属于它们的相关表单。
注意:目前相关表单公式重算上限为 1000 笔数据,若需重算的数据超过系统限制,则会自动跳过运行,所有相关表单数据都不会进行公式重算。
以下是针对 源表单(母表单)、子表单、相关表单的设计概念示意图:
公式同样能在描述字段使用,但该字段只会显示出计算的结果,其值不会存进系统里面。
这对每次点进表单页都需要看到公式实时重算结果的人相当有用,可以参照 BBCode [formula]。
例如:要利用一个人的生日来计算年龄,只需要在字段描述中使用公式 [formula](TODAY() - A1)/365.25[/formula],如此一来他的年龄就会依据今天的日期重算了!
关于 Ragic 支持的 Math 物件,请参阅这篇。
如果新增公式的建议,欢迎来信至 Ragic Support 。