添加公式

公式,顾名思义是您在Zoho Reports能够定义的计算,以帮助您创建所需报表。Zoho Reports提供了一个强大的公式引擎来创建所需任意类型的计算,进而创建所需报表。公式是您创建的数学公式,是包含数字,引用的表列,运算符和函数等的任意组合。函数是被设计用来执行特定著名计算的预定义数学公式。

Zoho Reports支持不同风格的公式。下面是Zoho Reports中所支持的各种类型公式的总结:

  • 自定义公式列: 您可以使用这些公式类型添加一个新列 到您数据表,它们的值是基于定义的计算/公式而来。您可以使用表列结合运算符以及内置函数定义任意强大的数学公式。公式的输出添加作为表中的一个新列,被称之为一个公式列
    • 内置公式: Zoho Reports提供一系列有用的、默认可用的内置自定义公式,以轻松地执行常见的计算。这些公式仅适用于单一列。计算(公式)结果将会被添加为基表的另一列。
  • 聚合公式: 聚合公式是您在计算中应使用聚合函数(SUM, AVG..)的公式。聚合公式的结果不会被添加为基表的另一列。它们将仅被关联到基于创建的表,可以像其他表列一样被用来创建报表(图表, 数据透视表以及摘要视图)。

自定义公式

Zoho Reports允许您定义您自己的强大公式来满足您的特定报告需求。这使您能够轻松地执行从简单的计算如加法和减法到复杂的内置函数组合。公式输出添加作为表中的一个新列,被称之为一个公式列。您能够以使用表中其他列的相同方式来使用这些公式列创建报表。

Zoho Reports为您提供各种各样的 内置函数,即设计用来轻松执行特定著名计算的预定义数学公式。这些内置函数能够结合表列和基本的算术运算符如+, -, / 以及 *使用,来创建您的公式列。

创建和使用自定义公式列:

  • 在报表数据库的资源管理器标签,选择您想要添加公式列的表。
  • 从工具栏选择添加 > 自定义公司选项或选择表中的一个列,然后从右键弹出菜单中点击添加公式列 > 自定义公式
  • 将会打开如下所示的添加自定义公式对话框。该对话框提供了表列名称和许多用于创建公式的 内置函数 的方便访问。当您鼠标悬停在一个函数时,在对话框的底部将会列出包含函数语法和一个例子的函数简要描述。

  • 添加公式列对话框,从点击插入列列表和点击插入函数框选择您想要插入的列和函数。

例如,构建一个为给定日期添加特定天数的自定义公式:

  • 点击插入函数框选择 Add Date 函数。您将会注意到 公式 文本框中出现 adddate() 语法。
  • 公式文本框,括号之间光标的位置,使用点击插入列选项选择您想要添加日期的日期列。
  • 输入您想要添加的天数(比如说10),用逗号分开。

要使用此表达式创建一个公式列,在公式列名称文本框输入列名称后点击确定。表中将会创建如下所示的一个新的公式列。

您可以在任何时候通过右击表中列出的公式列来编辑公式列并点击弹出菜单中的编辑自定义公式。另请参照 查看/编辑公式 来了解如何查看,编辑或删除所有在表上定义的公式。

公式列快速添加选项

Zoho Reports提供了一个简单又方便,基于一系列有限、广泛使用的函数的添加公式列方法。您可以按照如下方法找到这个快速添加选项。

  • 选择一个您想要基于其添加公式列的列。
  • 点击工具栏中的添加 > 添加公式列选项。
  • Zoho Reports会自动地确定选中列的数据类型并列出适用于如下截图所示,广泛使用地预定义公式的列表。
  • 一旦从列表中选择了所需要的公式,Zoho Report会将公式应用于相应列并在表的最右边添加一个新的公式列。

Zoho Reports提供的内置函数

Zoho Reports为您提供各种预定义数学公式的内置函数,设计其以轻松地执行特定知名计算。下表给出了Zoho Reports提供的可以用来创建任何公式的内置函数列表。基于函数类型来对内置公式进行分类/分组。

日期函数

函数 描述 例子
Absolute Month - absmonth(date_column)此函数将会从给定日期值以格式(Month, yyyy)返回月和年。absmonth('2011/8/7') = August, 2011
Absolute Quarter - absquarter(date_column)此函数将会从给定日期值以格式(Quarter, yyyy)返回季度和年。absquarter('2011/8/7') = Q3, 2011
Add Date -
adddate(date_column, num_of_days)
此函数将会添加指定天数(num_of_days) 到给定日期值。adddate('2011/8/7',10) = 2011/8/17
Add Time - addtime(data_column, time)通过添加时间到给定日期列来返回某日。addtime
('2002/02/21 18:23:26', '01:20:10') = 2002/02/21 19:43:36
Current Date - currentdate()此函数将会返回计算机或服务器的当前日期。currentdate() = 15 Sep, 2011 10:06:18
Date and Time Dif - dateand
timediff(Unit, From Date, To Date[optional]
此函数将会基于指定的单位返回两个日期列的日期时间差。支持的单位是秒,分,小时,天,周,月,季度,年。dateandtimediff(DAY, '2015-01-01', '2015-05-01')=120
上面的例子以天返回给定日期的差值。
Date Diff - datediff(date_column1, date_column2)此函数将返回给定两个日期列的差值。datediff('2011/8/11','2010/9/11') = 334
Day - day(date_column)此函数将返回给定日期值的那一天。day( '2011/9/9') = 9
Day of Week - dayofweek(date_column)此函数将返回给定日期值那星期那天的数字号(星期日 = 1, 星期一 = 2,...)。dayofweek('2011/9/9') = 6
Day of Year - dayofyear(date_column)此函数将返回给定日期值那年那天的数字号(0到365)。dayofyear('2011/9/2') = 245
From Unixtime - fromunixtime(seconds)此函数将返回给定秒值的unix时间。fromunixtime('1000') = 1970/01/01 05:46:40
Hour - hour(date_column)此函数返回给定日期值的那小时。hour('2011/8/7 10:35:23') = 10
Last Day - lastday(date_column)此函数将返回给定日期值那月的最后一天。lastday('2011/9/7') = 2011/9/30
Make Date - makedate(year,num_of_days)此函数返回给定年和天值数字号(0到365)的日期值makedate('2011','23') = 2011/1/23
Minute - minute(date_column)此函数返回给定日期值的分钟数。minute('2011/8/7 10:35:23') = 35
Modified Time -modifiedtime()    此函数返回记录(如果记录是新添加的)的创建时间或者记录的最后修改时间。当您应用这个函数时,最初它将返回公式的创建时间。随后它将只返回记录的修改时间。 
Month - month(date_column)此函数返回给定日期值的那月。month('2011/9/7') = September
Month Num - monthnum(date_column)此函数返回给定日期值那月的数字号。monthnum('2011/9/7') = 9
Quarter - quarter(date_column)此函数返回给定日期值的那一季度。quarter('2011/8/7') = Q3
Second - second(date_column)此函数返回给定日期/时间值的秒数。second('2011/9/7 10:35:23') = 23
Sub Date - subdate(date_column,num_of_days)此函数返回给定日期值减去天数(num_of_days)后的日期。subdate('2011/9/15','6') = 1990/9/9
Sub Time - subtime(date_column,time)此函数返回给定日期时间值减去时间后的日期。subtime('2011/02/21 18:23:26','01:20:10') = 2011/02/21 17:03:16
Week Day - weekday(date_column)此函数返回给定日期值那星期中天的名称(星期日,星期一...)。weekday('2011/9/14') = Wednesday
Year - year(date_column)此函数返回给定日期值的那一年。year('2011/9/7') = 2011

数值函数

函数描述例子
Abs - abs(numeric_column)此函数返回'numeric_column'的绝对值(没有正负号的数字)pi() = 3.14159265358979
Acos - acos(numeric_column)此函数返回指定'numeric_column'的反余弦值。如果'numeric_column'不在-1到1的范围内则返回NULL。pow(2,3) = 8
Asin - asin(numeric_column)此函数返回指定'numeric_column'的反正弦值。如果'numeric_column'不在-1到1的范围内则返回NULL。rand() = 0.282164005825449
Atan - atan(numeric_column)此函数返回指定'numeric_column'的反正切值。atan(2) = 1.107149
Atan2 - atan2(numeric_column1, numeric_column2)此函数返回指定列'numeric_column1' / 'numeric_column2的反正切。atan2(0.8, 0.6) = 0.927295
Ceil - ceil(numeric_column)此函数将'numeric_column'四舍五入到大于'numeric_column'的最接近的整数ceil(11.56) = 12
Cos - cos(numeric_column)此函数返回指定'numeric_column'的余弦值cos(0) = 1
Cot - cot(numeric_column)此函数返回指定'numeric_column'的余切值cot(0.25) = 3.916317
Degrees - degrees(numeric_column)此函数返回与给定弧度等值的度degrees(1) = 57.2957795
Exp - exp(numeric_column)此函数返回'numeric_column'的指数数值exp(2) = 7.389056
Floor - floor(numeric_column)将'numeric_column'四舍五入到小于'numeric_column'的最接近的整数floor(11.56) = 11
Greatest - greatest(numeric_column,..., numeric_column)给出给定参数中的最大值。greatest(10,20,5) = 20
Least - least(numeric_column,..., numeric_column)给出给定参数中的最小值。log10(3) = 0.477121
Ln - ln(numeric_column)此函数返回指定'numeric_column'的自然对数ln(5) = 1.609438
Log10 - log10(numeric_column)此函数返回指定'numeric_column'的以10为底的对数log10(3) = 0.477121
Log2 - log2(numeric_column)此函数返回'numeric_column'的以2为底的对数log2(32) = 5
Mod - mod(numeric_column1, numeric_column2)返回'numeric_column1'除以'numeric_column2'的余数mod(10,3) = 1
Pi - pi()此函数返回pi(π)的数值。pi() = 3.14159265358979
Power - pow(numeric_column1, numeric_column2)此函数返回'numeric_column1'的'numeric_column2'次方值。pow(2,3) = 8
Random - rand()返回0和1之间的一个随机数。rand() = 0.9233482386203
Radians - radians(numeric_column)返回与给定度等值的角弧度radians(180) = 3.1415926
Round - round(numeric_column)返回'numeric_column'四舍五入后的整数值。round(10.67) = 11
Sign - sign(numeric_column)如果'numeric_column'是负数,零或正数,则返回-1, 0,或1。sign(-23) =-1
Sin - sin(numeric_column)返回'numeric_column'的正弦值。sin(0) = 0
Square - square(numeric_column)返回指定'numeric_column'的平方。square(10) = 100
Square Root - sqrt(numeric_column)指定'numeric_column'的平方根。sqrt(16) = 4
Tan - tan(numeric_column)返回指定'numeric_column'的正切值。tan(0.5) = 0.546302

字符串函数

函数描述例子
Concat - concat(string_column,...,string_column)返回给定参数的连接字符串。如果任意一个参数是null,则返回null。concat('abcd','ef','db') = abcdefdbd
Concat_WS - concat_ws(separator,string_column1
,....,string_columnN)
返回给定参数的连接字符串并由给定的分隔符分开。如果分隔符是null,则返回null。concat_ws('-','abcd','ef','db') = abcd-ef-db
Insert - insert(string_column, start_pos, len, new_string)返回字符串'string_column',其子字符串开始位置在'start_pos'并由字符串'new_string'替代'len'个字符的长度。'start_pos'应该大于0。当len是零时,将'new_string'插入到位置'start_pos'之前。insert('abcddb', 3, 2, 'efgh') = abefghdb
Index of - indexof(string_column, sub_string)返回字符串'sub_string'在字符串'string_column'中第一次出现时的索引。indexof('abcddb','db') = 5
Left - left(string_column, len)返回字符串'string_column'左边的'len'个字符。left('abcdef',3) = abc
Length - length(string_column)返回字符串的字符长度。length('abcddb') = 6
Lowercase - lowercase(string_column)返回将所有字符改为小写后的字符串'string_column'。lowercase('AbCD') = abcd
Locate - locate(sub_string, string_column, start_pos)c从字符串'string_column'中位置'start_pos'开始,返回字符串'sub_string'在其中第一次出现时的索引。locate('db','zohodbdb',6) = 7
Lpad - lpad(string_column, len, pad_string)使用字符串'pad_string'将字符串'string_column'左补至'len'个字符长度后返回。如果字符串'string_column'的长度大于'len',则返回'string_column'的前'len'个字符。lpad('DB',5,'a') = aaaDB
Ltrim - ltrim(string_column)将字符串'string_column'前面的空格移除后返回。ltrim(' abcd') = abcd
Repeat - repeat(string_column,count)repeat('Abcd',3) = 'AbcdAbcdAbcd' 
Replace - replace(string_column, from_string, to_string)用字符串'to_str'替代所有出现的字符串'from_str',然后返回。replace('abcdac','ac','db') = abcddb
Reverse - reverse(string_column)返回'string_column'的反向字符串。reverse('abcd') = dcba
Right - right(string_column, len)返回字符串'string_column'右边的'len'个字符right('abcdef',4) = cdef
Rpad - rpad(string_column, len, pad_string)使用字符串'pad_string'将字符串'string_column'右补到'len'个字符长度后返回。如果字符串'string_column'的长度大于'len',则返回'string_column'的前'len'个字符。rpad('DB',5,'a') = DBaaa
Rtrim - rtrim(string_column)将字符串'string_column'的尾空格移除后返回。rtrim('abcd ') = abcd
Strcmp - strcmp(string_column1, string_column2)如果'string_column1'小于'string_column2'则返回-1,如果两个字符串相同则返回0,然后如果'string_column1'大于'string_column2'则返回1。strcmp('abcd', 'abcde') =-1
Substring - substring(string_column, start_pos, string_len)如果'string_column1'小于'string_column2'则返回-1,如果两个字符串相同则返回0,然后如果'string_column1'大于'string_column2'则返回1。substring('abcddb', 1, 4) = abcd
Trim - trim(string_column)将字符串前缀和后缀中所有空格后移除后返回。trim(' abcd ') = abcd
Uppercase - uppercase(string_column)  将字符串'string_column'中所有字符改为大写后返回。uppercase('abcD') = ABCD

统计函数

函数描述 
Mean - mean(numeric_column)返回'numeric_column'的平均值 
Median - (numeric_column)返回'numeric_column'中的中间值 
Mode - mode(numeric_column)返回'numeric_column中的最常用值 

逻辑函数

函数描述例子
IF - if(expr1,expr2,expr3)如果expr1为真则返回expr2,否则返回expr3if(5> 10,100,50) = 50
Ifnull - ifnull(expr1,expr2)如果expr1不是null则返回expr1,否则返回expr2ifnull(null,10) = 10
isnull( ) - isnull(expr1)如果expr1是null则返回1,否则返回0。isnull(null)- 1

常规函数

函数描述 例子
Coalesce - coalesce(null,null,1,...)如果expr1是null则返回1,否则返回0。coalesce(null,null,4) = 4

通过公式列创建公式

公式列类似于表中的其他列。像您处理表中其他列一样,您可以利用现有的公式列创建一个新的公式列。重复使用现有公式列来创建新的公式列有助于您创建强大的公式组合,也简化了您数据库中这些公式结构的维护。参照 上面的部分 来了解如何创建公式列。

使用自定义公式列创建报表

当您想要使用表列创建报表时,可以使用自定义公式列。当您使用添加了自定义公式列的表创建一个新报表时,所有这些公式列都将会被列在左侧可拖拽创建报表的列列表窗格中。您可以像对其他列一样,通过使用报表设计区域中基于列列出的组合框来对公式列应用函数。

下面的屏幕截图显示了列列表页面中列出的付款日期公式列:

共享自定义公式

一旦创建了一个自定义公式列,它会如同表中其它列一样。当您共享一个表时,所有现有的自定义公式列也将会被共享给用户。

注意:

  • 共享用户将无法编辑,删除或格式化共享公式。共享用户也无法使用共享表来添加他自己的公式列,除非共享用户是一个 数据库所有者.

聚合公式

报告最常见的数据分析过程中,我们需要对数据应用聚合函数(如SUM, AVG, COUNT等.,) 并进行分析。在这样的计算中要处理的重要方面是计算上下文中的聚合,应用提供准确结果的函数。Zoho Reports中的聚合公式正是为了解决这一需求。

聚合公式是您在Zoho Reports中定义且计算中至少使用一个聚合函数(SUM, AVG..)的公式。这样计算的输出通常是一个数值(度量标准)。聚合公式主要用于创建强大的报表。这些公式能够在Zoho Reports的图表,数据透视表以及摘要视图报表中使用。

  • 一个聚合公式的结果通常是一个数值。
  • 聚合公式无法被添加为另一列,它是关联的,像自定义公式一样。但是当您通过表(作为列列表的一部分列出)创建一个报表时,它可用于创建报表。
  • 将会为报表中列出的每个数据点计算所使用的聚合公式的值(即,结果不单单是一个值)。这使它非常的强大。
  • 可以以类似自定义公式的方式构建聚合公式。

Zoho Reports提供一系列能够被用作部分聚合公式的 内置聚合函数。您可以结合基础运算符例如+, -, / 以及 * 来使用这些内置聚合函数构建公式。

创建聚合公式

要创建一个聚合公式:

  • 从工具栏选择 添加 > 聚合公式 选项,如下所示。

  • 将会打开如下所示添加聚合公式对话框。此对话框提供您表中列名称和所有可用于创建公式的 内置函数 的快捷访问。当您鼠标悬停在一个函数时,在对话框的底部将会列出包含函数语法和一个例子的函数简要描述。
  • 公式名称文本框,输入您想要赋予的公式名称。
  • 使用数据类型下拉菜单选择公式聚合结果的数据类型。数据类型只能是数值,因此可能的类型是数字,正数,小数,货币和百分比。
  • 关联表字段提供该公式关联表的名称。自动设置为您创建此聚合公式的基表的名称。
  • 公式文本区域提供了实际的公式。您可以从点击插入列点击插入函数框列表选择您想要插入公式的列和函数。

    注意: 您也可以在由引用列连接的相关表中插入列。下拉列表的所有父表与基本表相关联。选择所需表,这个表中的列将会在下面被列出来。您可以通过点击将其插入到公式中。
  • 例如,要应用一个聚合公式来计算 % 利润 这个公式可以类似于 (SUM("SALE")- SUM("COST"))/SUM("COST")*100 如下面屏幕截图所示。

  • 点击确认

聚合公式结果无法被添加为基表中的一个列。当 创建报表 时,它将会被列在列面板中。您可以通过点击工具栏中的添加 > 编辑公式来对其进行访问(查看)或者编辑。会在下一部分讨论 查看 & 编辑公式

内置聚合函数

当您创建一个聚合公式时,您可以使用Zoho Reports支持的许多各种不同的强大内置函数。当您创建自定义公式,甚至满足一个聚合公式所需条件而当您创建一个聚合公式时,您都可以使用内置函数。 也有与创建聚合公式更相关&适用的特定函数。下面的表描述了这些函数:

函数描述
Sum - sum(numeric_column)返回'numeric_column'的总和
Avg - avg(numeric_column)返回'numeric_column'的平均值
Min - Min(numberic_column)返回'numeric column'的最小值
Max - max(numeric_column)返回'numeric_column'的最大值
Count - count(column)返回给定列中的行(值)数
Stddev - stddev(numeric_column)返回'numeric_column'的标准差
Variance - variance(numeric_column)返回'numeric_column'的方差
Distinct Count - count(distinct(column))返回给定列中不同值(行)的个数。
SumIf - sumif(condition, expr1, expr2)如果条件为真,返回expr1的总和。否则返回expr 2的总和。expr1和expr2可以是一个表达式或者仅是一个数字列。expr2是一个可选参数。例如:sumif(Region = 'East, Sales, 0) 将返回所有Region列值为East的记录的sales列值的总和。否则返回0。
AvgIf - avgif(condition, expr1, expr2)如果条件为真则返回expr1的平均值。否则将返回expr 2的平均值。expr1和expr2可以是一个表达式或者仅是一个数字列。expr2是一个可选参数。例如: avgif(Region = 'East, Sales, 0) 将返回所有Region列值为East的记录的sales列值的平均值。否则返回0。
CountIf- countif(condition)返回满足条件的行(记录)数。例如: countif(Region='East') 将返回满足表中Region列为East值的行(记录)数。
YTD -YTD(AggExpr,Date_Col)Year-to-date是一个时间段,始于今年的开始并结束于今天。

参数:
AggExpr - 应该是一个聚合表达式(使用聚合函数如SUM, AVG, ... )并为此计算Year to date的值
Date_Col - 应该是一个日期列并基于其来计算Year to Date。

例子: YTD(Sum(sales), OrderDate) 将会返回sales从今年直到今天,基于日期列'OrderDat的总和
QTD - QTD(AggExpr,Date_Col)Quarter-to-date是一个时间段,始于当前季度的开始并结束于今天。

参数:
AggExpr - 应该是一个聚合表达式(使用聚合函数如SUM, AVG, ... )并为此计算Quarter to date的值
Date_Col - 应该是一个日期列并基于其来计算Quarter to Date。

例子: QTD(Sum(sales), OrderDate) 将会返回sales从当前季度直到今天的,基于日期列'OrderDate'的总和。
MTD - MTD(AggExpr,Date_Col)Month-to-date是一个时间段,始于当前月的开始并结束于今天。

Arguments:
AggExpr - 应该是一个聚合表达式(使用聚合函数如SUM, AVG, ... )并为此计算Month to date的值
Date_Col - 应该是一个日期列并基于其来计算Month to Date。

例子: MTD(Sum(sales), OrderDate)将返回sales从当前月直到今天,基于日期列'OrderDate'的总和。

通过现有聚合公式创建聚合公式

Zoho Reports使您能够使用现有聚合公式构建聚合公式。重新利用现有公式创建新的聚合公式有助于您创建强大的公式组合并简化了您数据库中这些公式结构的维护。

当您创建一个新的聚合公式时,现有的公式将会连同其他列一起被列在点击插入列框中。所有的聚合公式将会用符号表示。就像您处理表中其他列一样,您可以通过点击来将这些公式插入到您新的公式定义中。

例如,让我们假设你已经计算出了利润百分比和总成本并且您想要计算出获得的总利润。那么您可以使用现有的聚合公式来计算获得的总利润。这个公式可以类似于("总成本" * "利润百分比") / 100。

使用聚合公式创建报表

当您使用表中列创建所有报表(图表,数据透视表以及摘要视图) 时,您都可以使用聚合公式。当您使用已添加了聚合公式的表创建一个新的报表时,所有的公式都将会会被列在左侧可拖&拽创建报表的列列表窗格中。

下面的屏幕截图显示了我们添加的,列在列列表页面中的%Profit聚合公式。所有聚合公式将会用一个包含符号的图标来显示。

在报表数据库的资源管理器标签下,选择您想要添加聚合公式的表。

您可以像使用其他任何表数据列一样在报表中使用聚合公式。会为报表中列出的每个数据点计算所使用的聚合公式的值(即,结果不单单是一个值)。如下截图所示的图表中,利润百分比(%Profit)是沿着年展开,计算每年的利润百分比值并绘制在图中。

当您在一个报表中使用一个聚合公式时,您将无法应用其他公式函数(如您对其他列一样)。函数通常将会被选择为'实际的'并且无法修改。

共享聚合公式

关于共享和协作,聚合公式的作用类似于列在一个表中的作用。当您共享一个表时,所有通过表创建的聚合公式也将会共享给您共享表的用户。因此当被共享的用户使用数据表创建任何报表的时候,都将能够使用这些公式。

注意:

  • 被共享的用户将无法编辑,删除或者格式化共享的聚合公式,但是在创建报表时可以使用它。另外,除非被共享的用户是数据库所有者,否则将无法基于共享的表添加他自己的聚合公式。

查看/编辑公式

Zoho Reports允许您通过编辑公式选项来查看,编辑,格式化以及删除所有为表定义的公式。您可以使用此选项查看 & 编辑自定义公式和聚合公式。要查看/编辑现有的自定义或聚合公式:

  • 选择所需的表。
  • 从工具栏选择添加 > 编辑公式选项。
  • 将会打开包含表关联所有公式的列表的编辑公式对话框,如下所示:

  • 点击您所想要编辑的公式旁边的编辑链接。
  • 将会打开编辑聚合公式/自定义公式(根据公式的类型) 对话框,您可以使用创建一个新公式的方法来修改现有的公式。
    • 编辑公式: 您可以使用相应公式旁边的编辑链接来编辑构造公式。
    • 删除公式: 您可以在任何时候使用相应公式旁边的删除链接来删除表中的一个现有的公式。
    • 格式化公式: 您可以使用提供的格式链接并根据公式的数据类型来更改公式结果的格式,例如精度,小数位,日期格式,货币符号等。类似于您如何格式化一个数据列。参照 这里 了解如何格式化一个列。
x