進階函數
GETUSERNAME
GETUSERNAME 函數用於取得當前使用者的暱稱。
函數用法:
GETUSERNAME()
函數範例:如,利用暱稱的唯一性,限制每人每天只能填報一筆資料。
INDEX
INDEX 函數可用於取得陣列中指定位置的值。
函數用法:
INDEX(陣列, 位置)
其中各參數的含義如下:
陣列:可設定為複選、下拉複選框等欄位,或自訂的陣列等;
位置:指定陣列中第幾個值,必須為整數;當該參數為負數時,則傳回陣列中的倒數第幾個值。
函數範例:如設定公式為INDEX(複選,指定位置),則當指定位置為 1 時,傳回複選中勾選的第一個選項;當指定位置為 -1 時,傳回複選中勾選的倒數第一個選項。
MAPX
MAPX 函數是一個“跨表單”函數。即其他所有函數都是在當前表單運算的函數,無法呼叫當前表單中已經送出的或其他表單中資料;而 MAPX 函數可以在一定程度上彌補這樣的不足。
函數用法:
MAPX(operation, map_value, map_field, result_field)
其中各參數的含義如下:
- operation: 聚合操作,必填;
- map_value: 條件欄位值,即檢索值,必填;
- map_field: 條件欄位名,即檢索範圍,必填;
- result_field:欄位傳回值,必填。
當指定表單的 map_field 列的值為 map_value 時,傳回 result_field 的所有值,然後根據指定的聚合操作operation 得到對應的傳回值。
可以理解為:在檢索範圍中,找到檢索值對應的傳回值,並對傳回值進行聚合操作。
MAPX("聚合操作",檢索值,檢索範圍,傳回值)
注意檢索值來自當前表單中(藍底),檢索範圍和傳回值來自所有表單欄位中的同一表單(灰底)。
具體操作步驟如下:
參數限制:
1. 聚合操作(operation)
operation 參數(聚合操作)為字串,可選值如下::
參數值 | 含義 |
first | 取得傳回值的第一個 |
last | 取得傳回值的最後一個 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
count | 取得傳回值的個數 |
2. 檢索值(map_value)、檢索範圍(map_field)
支援設定檢索值的欄位,及其對應支援的檢索範圍欄位如下表所示:
檢索值 | 檢索範圍 |
單行文字 | 單行文字、多行文字、單選、複選、下拉單選、下拉複選框、流水號、連結參數 |
數字 | 數字 |
多行正文 | 單行文字、多行文字、單選、複選、下拉單選、下拉複選框、流水號、連結參數 |
日期時間 | 日期時間、送出時間、更新時間 |
單選 | 單行文字、多行文字、單選、複選、下拉單選、下拉複選框、流水號、連結參數 |
複選 | 複選、下拉複選框(全等) |
下拉單選 | 單行文字、多行文字、單選、複選、下拉單選、下拉複選框、流水號、連結參數 |
下拉複選框 | 複選、下拉複選框(全等) |
連結參數 | 單行文字、多行文字、單選、複選、下拉單選、下拉複選框、流水號、連結參數 |
附註:
當檢索值為日期時間欄位時,需要設定為 DATE(檢索值),才能檢索成功,檢索範圍直接使用日期時間欄位即可;如:MAPX("COUNT",DATE(日期時間),日期時間,單行正文)。
3. 傳回值(result_field)
以 A 表設定 MAPX 公式,跨表取 B 表資料:MAPX(“聚合操作”,欄位1,欄位2,“傳回值”)為例,根據不同的聚合操作,支援設定傳回值的欄位如下:
聚合操作 | 支援的傳回值欄位 | 傳回值計算方法 |
first | 單行文字、多行文字、數字、日期時間、單選、複選、下拉單選、下拉複選框、流水號、送出時間、更新時間、連結參數 | 取「欄位 1=欄位2」時,B 表中第一條入庫的資料對應的傳回欄位值 |
last | 單行文字、多行文字、數字、日期時間、單選、複選、下拉單選、下拉複選框、流水號、送出時間、更新時間、連結參數 | 取「欄位 1=欄位2」時,B 表中最後入庫的資料對應的傳回欄位值 |
max | 數字 | 取「欄位 1=欄位2」時,B 表所有資料數字欄位的最大值 |
單行文字、多行文字、日期時間、單選、複選、下拉單選、下拉複選框、流水號、送出時間、更新時間、連結參數 | 取「欄位 1=欄位2」時,B 表所有資料按照字串比較,傳回對應字串最大值 | |
min | 數字 | 取「欄位 1=欄位2」時,B 表所有資料數字欄位的最小值 |
單行文字、多行文字、日期時間、單選、複選、下拉單選、下拉複選框、流水號、送出時間、更新時間、連結參數 | 取「欄位 1=欄位2」時,B 表所有資料按照字串比較,傳回對應字串最小值 | |
avg | 數字 | 取「欄位 1=欄位2」時,B 表所有資料數字欄位的平均值 |
sum | 數字 | 取「欄位 1=欄位2」時,B 表所有資料數字欄位的求和 |
count | 單行文字、多行文字、數字、日期時間、單選、複選、下拉單選、下拉複選框、流水號、送出人、送出時間、更新時間、連結參數 | 取「欄位 1=欄位2」時,B 表錄入了多少條匹配的資料 |
附註:
1. 檢索範圍和傳回值中的欄位不能選擇子表單欄位;
2. 檢索值不能為成員欄位,當需要以成員欄位計算時,可以先將成員欄位轉成正文欄位儲存編號,然後以正文欄位來計算,檢索範圍欄位也是一樣的設定。
注意檢索值來自當前表單中(藍底),檢索範圍和傳回值來自所有表單欄位中的同一表單(綠底)。
函數範例:
跨表有兩種情況:
1. 同 1 張表單,錄入資料時呼叫之前已經送出的資料;
2. 2 張表單,A 表錄入資料時,呼叫 B 表已經錄入的資料。
應用舉例:單條件
有一張選課表,在選擇課程時,需要計算出自己是第幾個報名的,即計算出某一課程的已報名人數,再+1。
可以看出,此處的檢索值為課程,選了哪門課程,就統計這門課程的已報名人數。則公式為:
MAPX("COUNT",課程,課程,姓名)
對“我是第幾個報名的”欄位進行編輯函數:
MAPX("COUNT",課程,課程,姓名)+1
對於這個例子,可理解為:在之前錄入的資料裡,尋找「課程」欄位選擇了“健身”的對應的姓名,並用COUNT 函數統計對應姓名的個數,得到已經報名的人數;最後加 1,得到“我是第幾個報名的”。
看一下效果:
- 選擇了健身課,就是在之前錄入的課程資料裡,尋找值為“健身”的,並對選擇健身的姓名進行計數,發現前面已經有 3 人報名,自己是第 4 個報名的。
- 同理,選擇了音樂,就是在之前錄入的課程資料裡,尋找值為“音樂”的,並對選擇音樂的姓名進行計數,發現前面已經有 1 人報名,自己是第 2 個報名的。
- 選擇了舞蹈,就是在之前錄入的課程資料裡,尋找值為“舞蹈”的,並對選擇舞蹈的姓名進行計數,發現前面已經有 2 人報名,自己是第 3 個報名的。
附註:
當設定欄位公式為 MAPX("COUNT",課程,課程,姓名) 時,如傳回值為 0,則欄位會顯示為空值。
RECNO
RECNO 函數用於累計計算當前表單被新開啟的次數,起始值為1。
函數用法:
RECNO()
函數範例:如,可結合CONCATENATE 函數新增固定前綴或後綴,對錶單查看人數進行計次,用於抽獎、排名等場景中。
CONCATENATE("恭喜您,您是第",RECNO(),"位查看錶單的使用者!")
TEXTDEPT
TEXTDEPT 函數可以取得部門名稱和部門編號。
函數用法:
1. 取得部門名稱:
TEXTDEPT(部門單選欄位, "name")
2. 取得部門編號:
TEXTDEPT(部門單選欄位, "deptno")
函數範例:如,透過 TEXTDEPT 函數取得通訊錄中的部門編號,可以對部門編號進行重複值校驗以及其他資料聯動等。
TEXTDEPT(部門,"deptno")
TEXTUSER
TEXTUSER 函數可以取得成員暱稱和成員編號。
函數用法:
1. 取得成員暱稱:
TEXTUSER(成员单选字段,"name")
2. 取得成員編號:
TEXTUSER(成员单选字段,"username")
函數範例:如,透過 TEXTUSER 函數取得通訊錄中的成員編號,可以對成員編號進行重複值校驗以及其他資料聯動等。
TEXTUSER(提交人,"username")
UUID
UUID 函數可以用於生成隨機碼,預設匯出格式為 32 位字串 4 個“-”,一共 36 位。
函數用法:
UUID()
函數範例:UUID 函數可用於製作隨機流水號等。如果需要從 36 位隨機碼中截取其中一部分,可以結合LEFT 函數一起使用。
LEFT(UUID(),15)