簡道雲--公式與函數的使用教程


公式與函數

在制作表單時,可以設置控件與控件之間的數據聯動關系。給例如編輯完單價和數量后,自動計算總價等這樣的業務場景提供了支撐。

公式面板左側可以選擇當前表單控件所對應的,以及所有表單控件所對應的字段名。被選擇后,在公式面板中會以反引號包裹的形式顯示。

注意:函數在簡道雲里的設置是大寫,即在運用函數的時候,請用純大寫字母。

表單控件與其返回值的數據類型的對應關系如下表所示:

這里要說明的是,使用公式時,該字段一定要對應返回的數據類型。字符串或數字,不能混淆。

控件 返回數據類型
文本框 字符串
下拉框 字符串
單選按鈕組 字符串
下拉復選框 數組
多選按鈕組 數組
數字控件 數字
日期控件 時間戳(數字)

公式面板除了支持基本的運算操作符+-*/,還支持比較操作符 ><>=<===,同時也支持類似Excel中的部分函數公式,所有支持的函數公式如下:

邏輯函數

返回true或者false一類的函數方法。

AND

AND(logical1, [logical2], ...)

在參數組中,任何一個參數邏輯值為false,即返回false;只有當所有參數邏輯值為true,才返回true

即是說,AND函數,是求括號里兩個或多個邏輯式子共同滿足true(逗號隔開的邏輯式子都滿足)的時候,返回的結果為1,即true。

OR

OR(logical1,[logical2], ...)

在參數組中,任何一個參數邏輯值為true,即返回true;只有當所有邏輯參數值為false,才返回false

和AND函數一樣,不同的地方在於,括號里只要有1個邏輯式為true,返回的結果就是1,也就是true。

FALSE

FALSE()

返回邏輯值false

TRUE

TRUE()

返回邏輯值true

TRUE和FALSE一樣,都是強制括號中的邏輯式為1或0。

IF

IF(判斷條件結果為true的返回值, 結果為false的返回值)

判斷一個條件能否滿足;如果滿足返回一個值,如果不滿足則返回另外一個值。

在這個圖里表示,如果數字1>0,那么返回1,否則返回0。可以寫成IF(a,b,c),表示如果a,那么b,否則c。函數支持嵌套,IF函數多層嵌套也是很常用的,如下圖:

如果數字1>0,那么返回1,如果數字1<=0並且數字2>0,返回2,否則返回3。

NOT

NOT(logical)

對參數邏輯值求反。

NOT比較簡單,就是把括號里為true的值變成false,括號里為false的值變為true。

XOR

XOR(logical1,[logical2], ...)

返回所有參數的異或值。

異或的含義是,兩個值相同,返回0,兩個值不同,返回1。

文本函數

處理字符串文本的一系列函數方法。

CONCATENATE

CONCATENATE(text1,[text2], ...)

將多個文本字符串合並成一個文本字符串。示例:

EXACT

EXACT(text1,text2)

比較兩個字符串是否完全相同(區分大小寫)。完全相同則返回true,否則返回false。示例:

LEFT

LEFT(text,[num_chars])

從一個文本字符串的第一個字符開始返回指定個數的字符。示例:

含義為,取字符串第1位開始的后面3位字符,即字符串1的第1到第3個字符。

LEN

LEN(text)

返回文本字符串中的字符個數。示例:

LOWER

LOWER(text)

將一個文本字符串中的所有大寫字母轉換為小寫字母。

REPLACE

REPLACE(old_text, start_num, num_chars, new_text)

根據指定的字符數,將部分文本字符串替換為不同的文本字符串。

  • old_text: 必需。要替換其部分字符的文本。
  • start_num: 必需。old_text 中要替換為 new_text 的字符位置。
  • num_chars: 必需。old_text 中希望使用 new_text 來進行替換的字符數。
  • new_text: 必需。將替換 old_text 中字符的文本。

示例:

意義為:將字符串1中的第2位之后的4位,用字符串2來替換。

REPT

REPT(text, number_times)

將文本重復一定次數。

  • text: 必需。需要重復顯示的文本。
  • Number_times: 必需。用於指定文本重復次數的正數。
SEARCH(find_text,within_text,[start_num])

在第二個文本字符串中查找第一個文本字符串,並返回第一個文本字符串的起始位置的編號,該編號從第二個文本字符串的第一個字符算起。返回0則表示未查找到。

  • find_text: 必需。要查找的文本。
  • within_text: 必需。要在其中搜索 find_text 參數的值的文本。
  • start_num: 可選。within_text 參數中從之開始搜索的字符編號。

示例:

表示從字符串2中的第1位開始搜索字符串1。

RIGHT(text,[num_chars])

返回文本值中最右邊的字符。

  • text: 必需。包含要提取字符的文本字符串。
  • num_chars: 可選。指定希望提取的字符數。

SPLIT

SPLIT(text, text_separator)

將文本按指定字符串分割成數組。

TRIM

TRIM(text)

刪除文本中的空格。

UPPER

UPPER(text)

將一個文本字符串中的所有小寫字母轉換為大寫字母。

MID

MID(text, start_num, num_chars)

返回文本字符串中從指定位置開始的特定數目的字符,該數目由用戶指定。

  • text: 必需。 包含要提取字符的文本字符串。
  • start_num: 必需。 文本中要提取的第一個字符的位置。 文本中第一個字符的start_num為 1,以此類推。
  • num_chars: 必需。 指定希望從文本中返回字符的個數。

這個函數將用的比較多,舉一個在身份證號中提取生日的例子:

這個函數用了一個嵌套,用了前面說的CONCATENATE連接字符串的函數。提取身份證號的第7到10位,后面接“-”,提取身份證號的11、12位,接“-”,最后提取身份證號的13、14位。我們看下結果:

完美展現。

字符串函數綜合運用舉例

這里給出一個,根據身份證號碼自動算性別的函數,筆者水平有限,無法把各種函數的綜合運用一一例舉,這里用一個典型的函數來給大家啟發。

在這個表單里我要輸入身份證號碼,自動生成生日和性別。單行文本“性別”字段的函數為:

需要解釋的是,身份證號碼第17位為性別位,奇數為男性,偶數為女性。很多朋友提出為何不用MOD()函數(求余數的函數)來直接判斷奇偶,而是要用這么復雜的一個IF()語句。因為身份證最后一位可能是X,也就是說用數字格式是不滿足條件的。而且MID()取位函數只對字符串有效果,所以身份證號碼本身是一個字符串,也就是單行文本控件,這是不支持數字運算的。所以MOD()函數不能用。

那么我們用OR()語句(或語句),就是說第17位為1,3,5,7,9的時候,返回“男”,否則返回“女”。我們看看效果:

第17位為2,性別“女”,生日為1980-01-01,完美展現。

數學函數

處理數字的一系列函數方法。

數學函數比較簡單,下面羅列出了每個數學函數的功能,理解起來也比較方便,就不再舉例說明。

AVERAGE

AVERAGE(number1, [number2], ...)

返回參數的平均值(算術平均值)。

COUNT

COUNT(value1, [value2], ...)

統計參數個數。

LARGE

LARGE(array,k)

返回數據集中第k個最大值。

  • Array: 必需。 需要確定第 k 個最大值的數組或數據區域。
  • k: 必需。 返回值在數組中的位置(從大到小排)。

MAX

MAX(number1, [number2], ...)

返回一組值中的最大值。

MIN

MIN(number1, [number2], ...)

返回一組值中的最小值。

SMALL

SMALL(array,k)

返回數據集中第k個最小值。

  • Array: 必需。 需要確定第 k 個最小值的數組或數據區域。
  • k: 必需。 返回值在數組中的位置(從小到大排)。

ABS

ABS(number)

返回數字的絕對值。

ROUND

ROUND(number, num_digits)

將數字四舍五入到指定的位數。

  • number: 必需。 要四舍五入的數字。
  • num_digits: 必需。 要進行四舍五入運算的位數。

CEILING

CEILING(number, significance)

返回將參數 number 向上舍入(沿絕對值增大的方向)為最接近的指定基數的倍數。

  • Number: 必需。 要舍入的值。
  • significance: 必需。 要舍入到的倍數。

FLOOR

FLOOR(number, significance)

將參數 number 向下舍入(沿絕對值減小的方向)為最接近的 significance 的倍數。

  • number: 必需。 要舍入的數值。
  • significance: 必需。 要舍入到的倍數。

INT

INT(number)

將數字向下舍入到最接近的整數。

LOG

LOG(number, [base])

根據指定底數返回數字的對數。

  • number: 必需。 想要計算其對數的正實數。
  • base: 可選。 對數的底數。 如果省略 base,則假定其值為 10。

MOD

MOD(number, divisor)

返回兩數相除的余數。 結果的符號與除數相同。

  • number: 必需。 要計算余數的被除數。
  • divisor: 必需。 除數。

POWER

POWER(number, power)

返回數字乘冪的結果。

  • number: 必需。 基數。 可為任意實數。
  • power: 必需。 基數乘冪運算的指數。

PRODUCT

PRODUCT(number1, [number2], ...)

函數使所有以參數形式給出的數字相乘並返回乘積。

SQRT

SQRT(number)

返回正的平方根。

SUM

SUM(number1, [number2], ...)

函數使所有以參數形式給出的數字相加並返回和。

FIXED

FIXED(number, [decimals])

將數字舍入到指定的小數位數,以十進制數格式對該數進行格式設置,並以文本形式返回結果。

  • number: 必需。 要進行舍入並轉換為文本的數字。
  • decimals: 可選。 小數點右邊的位數。

日期與時間函數

用於處理日期和時間的一系列函數方法。

注意:日期控件的返回值為時間戳,單位是毫秒。而以下函數方法的參數大都是日期對象。所以可以用DATE函數處理成日期對象。

時間戳:時間戳是計算機記錄時間的一種格式。通常是一個字符序列,唯一地標識某一刻的時間。數字時間戳技術是數字簽名技術一種變種的應用。在簡道雲表單中,“日期時間”控件便是由這樣的序列來存儲的,因此在進行公式運算的時候要進行轉換。

日期對象:日期對象的表示格式為“Sat Aug 01 2015 00:00:00 GMT+0800 (中國標准時間)”,即北京時間2015年8月1日00:00:00,這個日期對象可以進行各種運算,比如日期加減法等等。

DATE

DATE(timestamp)

將時間戳轉換為日期對象。

  • timestamp: 必需。時間戳。
DATE(year,month,day)
DATE(year,month,day,hour,minute,second)

將年月日時分秒轉換為日期對象。

  • year: 必需。年份。
  • month: 必需。月份。
  • day: 必需。天數。
  • hour: 必需。小時。
  • minute: 必需。分鍾。
  • second: 必需。秒。

例如,2015年12月1日的日期對象可以用如下表示:

DATE(2015,11,1)
DATE(1448899200000)
DATE(2015,11,1,0,0,0)
這三個都表示“Sun Nov 01 2015 00:00:00 GMT+0800 (中國標准時間)”

TIMESTAMP

TIMESTAMP(date)

將日期對象轉換成時間戳。

TIME

TIME(hour, minute, second)

返回特定時間的十進制數字。時間值為日期值的一部分,並用十進制數表示(例如 12:00 PM 可表示為 0.5,因為此時是一天的一半)。

  • hour: 必需。 0(零)到 32767 之間的數字,代表小時。 任何大於 23 的值都會除以 24,余數將作為小時值。 例如,TIME(27,0,0) = TIME(3,0,0) = .125
  • minute: 必需。 0 到 32767 之間的數字,代表分鍾。 任何大於 59 的值將轉換為小時和分鍾。 例如,TIME(0,750,0) = TIME(12,30,0) = .520833
  • second: 必需。 0 到 32767 之間的數字,代表秒。 任何大於 59 的值將轉換為小時、分鍾和秒。 例如,TIME(0,0,2000) = TIME(0,33,22) = .023148

TODAY

TODAY()

返回今天。

NOW

NOW()

返回當前時間。與TODAY函數相同。

DAY

DAY(date)

返回某日期的天數。 天數是介於 1 到 31 之間的整數。

MONTH

MONTH(date)

返回某日期的月份。 月份是介於 1 到 12 之間的整數。

YEAR

YEAR(date)

返回某日期的年份。

HOUR

HOUR(date)

返回某日期的小時數。

MINUTE

MINUTE(date)

返回某日期的分鍾數。

SECOND

SECOND(date)

返回某日期的秒數。

DAYS

DAYS(end_date, start_date)

返回兩個日期之間的天數。

  • end_date: 必需。結束日期。
  • start_date: 必需。起始日期。

DATEDELTA

DATEDELTA(date, deltadays)

將指定日期加/減指定天數。

  • date: 必需。初始日期。
  • deltadays: 必需。需要加減的天數。正數為增加,負數為減少。

日期格式綜合運用舉例:

例:根據生日計算年齡。

這里是表單,我想輸入日期,計算出實際年齡。這時候姓名和出生日期不用多說,年齡可以采用數字或單行文本格式。公式如下:

解析:TODAY()返回的是date,即日期對象;DATE('出生日期')返回的是date日期對象,然后都用YEAR()函數取年份,相減即可。

高級函數

用於獲取表數據的一系列高級函數方法。

MAP

MAP(map_value, map_field, result_field)

當指定表單的map_field列的值為map_value時,返回result_field的所有值,返回結果為數組。類似Excel的LOOKUP函數。

  • map_value: 必需。條件字段值。
  • map_field: 必需。條件字段名。
  • result_field: 必需。結果字段名。

MAP函數是一個“跨表單”函數。即上面的所有函數都是在當前表單運算的函數,無法讀取和調用已經提交的其他表單。MAP函數可以在一定程度上彌補這樣的不足。

這里要區分一個概念。表單,正在編輯的表單,也叫表單,這里的跨表單可能指的是2個模板,在同一個應用里實現不同功能的字段都不是完全相同的模板。其實表單還有另外一個意思,2次提交同一個表單,擁有相同字段不同內容的兩張表單。MAP函數應用的跨表單是后者,如果理解不了,只要記得MAP可以調用已填寫的數據即可。

下面我們舉例說明一下:

這里有一個選課表,課程信息字段里有幾個可選擇的課程,但是每個課程有人數限制,每當一個人報名,就要累加1個。

對“我是第幾個報名的”字段進行編輯函數:

根據MAP函數的定義,括號里的第一個值為需要檢索的值,第二個值為檢索范圍,第三個值為返回值。對於這個例子,可解釋為:在所有錄入過的“課程信息”字段里查找本次錄入的“課程信息”,每找到一個本次錄入的“課程信息”,就返回一個“我是第幾個報名”,最后用COUNT函數統計一下返回了幾個“我是第幾個報名的”,當然這里用來計數的字段可以選擇“請輸入學號”或“姓名”。看一下效果:


選擇了健身課,發現自己是第三個報名的,已經有2人報名。

簡道雲--專業的數據搜集管理工具
簡道雲用戶反饋QQ群:217568252


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM