新手必讀:輕鬆破解五大「子表格」障礙
如果要在 Ragic 的眾多功能裡,選一到兩個最重要、也最能代表 Ragic 特色的功能,「子表格」一定是其中之一。
如果你還不知道 Ragic 的子表格是什麼,這邊簡單做個解說。不論是日常生活或工作,我們管理資料時,常有要在一筆資料中,羅列出「細項」、「清單」的需求,例如,客人下了一筆訂單,在這一筆訂單中,很可能採購了多個商品,需要列出多筆「訂購細項」:
或者你要管理客戶資料,每個客戶是一間公司,公司裡可能有不只一位聯絡窗口:
又或者租借設備,填寫租借單時可能想在一張單子(一筆資料)上填寫多個租借品項:
這些「一筆訂購資訊包含的訂購商品清單」、「一個客戶底下的聯絡窗口名單」、「一筆租借單資訊裡包含的租借品項清單」,在 Ragic 上就會是用「子表格」來處理。
它的好處除了讓你的資料可以很方便的分層置放(一筆資料裡放附屬的多筆細項、一個類目裡放所屬的多筆資料),也能衍生一系列相關的進階功能(如子表格產生新表單、插入參照子表格/顯示從其他表單的連結等),可用以運作某些複雜的商業邏輯。
全球市場上,有許多和 Ragic 一樣主打「表格式介面」的線上工具,它們可以像 Ragic 一樣建立資料表、欄位、設定欄位種類、套用公式,有些也有資料庫功能,但許多工具都沒有 Ragic 這樣的子表格 + 表單連結搭配出各種功能的方法,使得它們不容易滿足某些在 Ragic 可以輕易做到的事。
子表格和一體兩面的表單頁/列表頁呈現方式,是 Ragic 非常重要的特色,也是我們推薦新手最需要搞懂的兩個核心功能。在 Ragic 設計手冊列出的各種功能之中,你可以不知道 Ragic 的簽核功能是什麼、可以不知道怎麼產報表、不知道怎麼做動作按鈕、不知道什麼是「內嵌表單」,這些都沒有關係,因為每個人需要的功能不一樣,你可以等到有實際需要時,再去學習使用那些功能。
但是,不管是哪一種需求的使用者,你都不可以不知道「子表格」和「表單頁/列表頁」這兩組概念。關於「表單頁/列表頁」的相關概念,之前我們寫過一篇文章:認識你的資料格式,已有詳細說明。而關於「子表格」,我們發現它雖然好用好上手,但可能還是藏了一點讓人沒注意到的「潛規則」。這篇文章就要詳細說明子表格的運作邏輯、破解從新手入門到老手進階時常遇到的五大障礙,讓你對子表格更加運用自如。
開始之前:子表格是什麼?
在 Ragic 的表單上,當你要建立欄位時,如同文件建立欄位的圖文教學中所示,預設狀態下/旁邊沒有其他欄位時,儲存格輸入後,系統會幫你建立好一個標準的欄位,包含左右相鄰的欄位標頭、欄位值(例如下圖,在 A1 輸入「訂單編號」後,淺藍的 A1 為欄位標頭,白色的 B1 為欄位值),一個欄位標頭對映一個欄位值。
建立第二個類似欄位時,也是如此,只要避開上面已建立的欄位標頭/欄位值位置(A1, B1),通常是直接在下方儲存格(A2)輸入資訊,就能再建立另一個這樣的欄位了;不同欄位標頭之間通常是像這樣垂直向下排列。(不一定非要在緊鄰的下一列建欄位, A3、C1、C2、D2... 只要避開 A1、B1,任何地方都可以)
但假如你建立欄位時,不避開先前已經做好的「欄位值」位置,而是直接在緊鄰已建立的欄位標頭、也就是原本別人「欄位值」(例如如圖中的 B4 )位置上輸入資訊:
那麼,你會發現在你輸入資訊後,原本「欄位值在欄位標頭右邊」的規則被改變了,現在 B4 的位置也成了欄位標頭,且在 A4, B4 這邊,欄位標頭變成「水平排列」,欄位標頭和欄位值從 A1, B1; A2, B2 的「左右相鄰」,變成「上下排列」,且一次就帶有三個白色的空格(欄位值),代表一個欄位標頭對映著多個欄位值。
在這裡,「訂單編號」、「訂單日期」這種欄位標頭與欄位值左右相鄰、一個標頭對映一個欄位值的,我們叫它「獨立欄位」或「一般欄位」(這是相對於子表格的稱呼);「項次」與「商品編號」欄位標頭水平排列、標頭與值上下排列、一個標頭對映多個欄位值的,我們就叫它「子表格欄位」,因為一個標頭可以對應/儲存多個欄位值,所以可以紀錄一筆訂單中的多個細項。
看到這裡,你或許會發現,表單頁中非子表格的「獨立欄位/一般欄位」跟我們先前提過的表單資料格式沒什麼差別,但同樣在表單頁中的「子表格欄位」格式更像 Ragic 「列表頁」、試算表格式 的樣子。
這是因為,子表格確實是「附屬於表單頁某筆資料底下的另外一組資料」(例如:附屬在一筆訂單底下的多個訂單細項),因此確實適合以列表的方式呈現。但也因為它被視作為「附屬於某筆資料的分支」,而不真的是獨立的一組(多筆)資料,子表格的一筆資料,和獨立一張表單一筆資料的地位仍然不同,只有後者的每筆資料,在資料庫中才被當作一個獨立個體看待。
這個概念,會影響「子表格欄位」的性質,使得在 Ragic 上有一些獨立欄位可以做的事情,子表格欄位不能做,反之亦然;後面會有詳細說明。
另外,針對子表格我們有完整的教學文件,有需要的話你可以參閱我們如何建立子表格與使用子表格的相關文件,以及專門針對子表格做說明的教學影片。
什麼時候該把資料放在子表格,什麼時候該把資料放在獨立欄位?
在某些情境(例如前面的訂單、租借單例子),哪些資料放在獨立欄位、哪些資料放在子表格欄位看起來很「順理成章」,但也有一些情境,你可以選擇把資料放在獨立欄位、也可以選擇放在子表格欄位,不一定 100% 有標準答案,端看你覺得怎麼做比較方便、符合你的整體需求。
例如:假如你的一筆資料之中,需要使用者上傳圖片放在資料中(例如安裝申請單、維修單,需要附上安裝現場圖、商品損壞圖、保固證書等),這時你要開很多個「圖片欄位」放在獨立欄位中(限定一個欄位只能放一張圖)、開一個「圖片欄位」放多張圖,還是建立一個對應的子表格,其實都可以。
註:Ragic 的「圖片欄位」和「檔案欄位」過去只支援一個欄位上傳一張圖片 / 單個檔案,因此過去要在一筆資料裡放多張圖片,只能選擇建立多個獨立欄位或建立子表格欄位。但現在 Ragic 的圖片 / 檔案上傳欄位已經支援一欄位多圖 / 多檔案功能,設定上更有彈性囉!
這時,思考要做成獨立欄位或子表格欄位時,可以注意:子表格欄位比較容易針對同性質資料「批次操作」、區分層次、分析資料;非子表格欄位比較能針對需要區隔出差異的欄位做處理,但就無法享有批次操作的便利。以下進一步解釋:
Ragic 針對各欄位的「欄位設定」都是統一針對「欄位標頭」的,意思是,在設計模式下,你只能把滑鼠游標放在表格的藍色「欄位標頭」位置(沒辦法放在白色的「欄位值」位置)。
如果是「獨立欄位」(一個欄位標頭對映一個欄位值),針對每一個欄位標頭(欄位值),你都可以做個別的欄位類型、公式、樣式設定。
但如果是「子表格欄位」(一個欄位標頭對映多個欄位值),同一個子表格欄位中,所有不同列的「欄位值」都是統一根據欄位標頭的設定走,因此同一欄位不同列的子表格不能有不同的欄位類型、不能有不同的預設值變數、不能套不同的公式、不能指定設成不同的樣式(因條件式格式而使得子表格不同列有不同顯示的不在此例)。
因此,假如你希望表單中放兩張圖片,但 A 圖片要顯示得大一點、 B 圖片要小一點,或者指定第一張上傳的圖片要標註是正面照、第二張要標註是側面照,那子表格 / 單一欄位就比較難達到一點,可能要考慮做兩個獨立欄位。
但假如你希望這些資料之後是可以做批次操作的,例如訂單中的「訂購商品」希望可以做個扣庫存按鈕(更新別張表單欄位值)整批扣庫存,那就最好把「訂購商品」項目做成子表格,才能只要做一個動作按鈕,就能執行整批「訂購商品」的庫存扣減。
如果大致弄清楚了子表格是什麼,我們就來一一破解新手常見的子表格(相關)障礙,並藉著這些說明讓你更深一層了解子表格是什麼、能做什麼!
障礙一:為什麼欄位標頭不能依我喜好橫著排(豎著排)?
常見障礙或誤解:Ragic 跟 Excel 長得一樣,Excel 的格子是隨便我排的,欄位值要排在欄位標頭的右邊還是下面都可以,為什麼在 Ragic 我不能把欄位值放在標頭的底下?或者:我覺得一般欄位的欄位值排在欄位標頭下面比較美觀,有沒有辦法做到?
障礙破解:首先,Ragic 雖然長得像 Excel、設計表單與編輯資料的模式也類似 Excel ,但 Ragic 畢竟是資料庫軟體,有自己的規矩,其中「欄位標頭和欄位值的相對位置」就是依據欄位類型規定好、不可妥協的規矩。
在 Ragic,只有「一般欄位」,欄位值會排在欄位標頭的右邊;只有「子表格欄位」,欄位值會排在欄位標頭的下方,這個排列方式是系統判定欄位類型的依據(建立欄位時,系統是依據你排列欄位標頭的邏輯,來決定你建立的是獨立欄位或子表格欄位的),而欄位的類型會影響後面許多行為的設定,因此這不只是排版、美觀的問題而已,無法妥協。
其實,即使在 Excel ,欄位標頭與欄位值的排列方式也不是 100% 能依使用者的喜好排的, Excel 提供的許多資料分析方式,如篩選、樞紐分析等,都預設你的欄位標頭是水平排列的第一行(試算表格式),假如你的欄位標頭不這樣放,就無法正確分析資料。
只是,Ragic 更「嚴格」一點,不管有沒有涉及某些「資料分析」的需求,都不能任意排列。這還有一個原因,因為 Excel 的許多行為(例如公式套用、儲存格格式設定),執行時都是以「個別的儲存格」為單位的,Excel 不會幫你指定誰是欄位標頭、誰是欄位值,「理論上」只要你自己找到儲存格並把設定弄對就好。
但在 Ragic ,做設定的單位是「由欄位標頭和欄位值組成的一整組欄位」,不管是設定欄位格式或套公式,都只能在欄位標頭設定,不能單獨設定欄位值(但結果會反映在欄位值)。因此,在建立欄位時,必須直接規定對應的欄位值儲存格位置,不讓使用者任選,系統後續才有判斷的依據。這樣的規範也減少出錯的機率。
一般而言,多筆資料用一筆資料一列的方法排序(第一列為欄位標頭),算是約定俗成且方便的資料擺放方式,比較少遇到有人有意見。而如果你非常希望獨立欄位的欄位標頭能在欄位值上方(類似 Google 表單那樣的排版),有另一個變通方式:你可以使用內嵌表單的功能,把 Ragic 表單內嵌在另一個網頁上。當你使用此功能、選擇「填寫表單」類型的介面時,在內嵌(而非 Ragic 表單)頁面上,欄位標頭就會在欄位值上方了:
另一個也算跟子表格、獨立欄位排序規則有關,也有人提出的需求是「子表格各項欄位值的加總結果,想要放在該欄位的正下方」。這個在目前的欄位排序邏輯裡無法直接達成,需要想一下變通方法來適用,有需要的人可以參考這篇文件的說明。
障礙二:我的子表格只能有三行資料嗎?
常見障礙或誤解:建立好子表格之後,每個欄位標頭下面會自動顯示出三個空白列,也就是畫面自動顯示了三行子表格資料的空格。有些人會問:可是我想要填的細項(子表格)資料超過三筆怎麼辦?或者,我只有兩行資料要填,沒有要填三列那麼多,怎麼辦?
正確答案:這三列只是代表預留給使用者的空間,是會向下延展的。只要你新增了三行資料,第四行的空行就會出現,以此類推。反之,如果你只新增一行或兩行也是可以的。這在我們「子表格輸入資料」的文件中有說明:
障礙三:想要子表格自動顯示相關資料/紀錄,怎麼實際上還需要我一個個點選?
常見誤解:我想利用「顯示從其他表單的連結」這個功能,讓我的客戶資料裡自動帶入相關的報價紀錄,我的子表格設計好了、連結也設計好了,為什麼資料還是沒有自動顯示,還是需要我自己一一點選帶入?好不方便!
正確答案:設計正確的話應該不需要手動點選,因此很有可能是你搞混了「顯示從其他表單的連結」(插入參照子表格)與「連結與載入(到子表格)」這兩項功能喔!
這兩項功能都可以建立讓兩張表單之間有連動關係,但運作機制並不同,在某張表單(假設稱為 A 表單)設定「連結與載入」,代表在這張表單 KEY 資料時,點選「連結欄位」時,系統會幫你自動帶入另一張表單(假設稱為 B 表單)「載入欄位」的資訊,但「自動帶入」的功能,是要透過你在 A 表單上手動點選來觸發的,系統無法幫你決定你要點選哪些資料來載入(細節)。
而「顯示從其他表單的連結」(插入參照子表格)可被視為比「連結與載入」更進階的功能,是在兩張已經建立好連結的表單(A 和 B)中,在「連結來源」這張表單(以上面例子來說是 B)的一筆資料中,把另一張表單(A)「曾選擇這筆資料當連結來源」的資料在不需要任何觸發/點選動作的情況下,自動顯示出來。
例如,我有一張客戶表單、一張報價單,我會需要先到「報價單」建立連結與載入關係,在「報價單」中連結與載入「客戶」資訊,接著才能回到「客戶」表單,不需要先建立子表格,只要選「顯示從其他表單的連結」>「報價單」,把「報價單」的欄位以子表格的形式拉進「客戶」表單中。
很多客戶在想要達成「顯示從其他表單的連結」效果時,並沒有按照上面的步驟操作,而是先自己在「客戶」表單底下建立了「報價紀錄」相關資訊的子表格欄位,接著四處搜尋可以把兩者「連結」在一起的工具,然後就用連結與載入工具,把這個「客戶」底下的「報價紀錄」子表格跟「報價單」的欄位連在一起(錯誤示範):
結果就是相關報價單的資訊都必須手動點選(因為連結與載入就是要你自己選要連哪一筆資料,再自動載入相關資訊)(錯誤示範):
但如果是正確的操作程序,不用手動點選,相關資料就會自動顯示出來(我們經常建議將這個自動顯示資訊的欄位設成唯讀欄位,以防誤改):
如果想檢查自己到底是正確設定了「顯示從其他表單的連結」還是其實設計的是「子表格連結與載入」,最簡單的方法是進入到設計模式,在表單工具 > 連結工具的介面上查看,系統會幫你將你已經做過設定的關聯表單列出來:
以上面的圖來說,有拉進來「自動顯示」的就是列在「顯示從其他表單的連結」裡的「個人訂購細項」表單。
障礙四:為什麼我不能在列表頁用 SUMIF公式?(子表格可以做,獨立欄位不能做的事情)
常見障礙:我想在 Ragic 的列表頁使用 SUM、COUNT、SUMIF、COUNTIF、VLOOKUP、UNIQUE、FIRST、LAST 等公式;我想要套一個公式來加總特定條件的資料/取出符合特定條件資料的值並且顯示在列表頁,有辦法嗎?
正確答案:因為 Ragic 的資料規則,這些公式在 Ragic 都是「子表格限定」的喔!意思是,這些公式的「參照欄位」(公式的來源資料)一定要是子表格欄位。(套公式的位置,也就是返回公式結果的地方則一定要是獨立欄位/一般欄位)
這是因為,這些公式基本上做的事,都是加總、判斷或比對多筆資料的值之後,返回一個結果。Ragic 的公式(和多數「設計模式」下要做的設定)基本上是在表單頁做設定的,表單頁的一個頁面(=一筆資料)上,只有子表格欄位會同時有(附屬的)多筆資料可以用來比對、加總、做其他操作。
例如:想要找出訂單中,訂購類別為「飲料」的訂購細項總金額:
參照的欄位(D5類別、G5小計)就得是子表格欄位(套公式的地方則是一般欄位)
又例如:想要找出婚宴一桌的賓客名單中,「親友類型(和新人的關係)」不重複的值:
參照的欄位(C8 和新人的關係)也得是子表格欄位(套公式的地方則是一般欄位)
而如果是想要根據一張表單的多筆資料,參照獨立欄位來得出這些公式的結果呢?例如,上面例子中的「訂購細項」如果是另一張表單的獨立欄位,一樣想要用公式算出訂購類別為「飲料」的訂購細項總金額,為什麼不行呢?
你會發現,雖然列表頁上有多筆資料,但是沒有一個獨立於這些表單資料之外的「欄位」可以套公式來取得 SUMIF 的結果。另外,Ragic 的列表頁功能偏向「縱覽表單頁的資料/摘要」,而非去做設計,因此除了少數例外,原則上,列表頁也不是我們應該用來設定公式的地方。因此,SUMIF 只能參照子表格欄位來運作;婚宴賓客名單的例子,如果不是子表格資料,而是獨立資料的話,道理也相同。
其他子表格欄位專屬(獨立欄位沒有)的功能,還包括子表格連選,因為連結與載入也是在表單頁上操作的,表單頁上獨立欄位只會有一筆資料,不會有連續點選多筆的需求;序列預設值 $SEQ(針對一筆資料中的一組子表格資料給予序號,不同資料間的序號不相關。如果是獨立欄位要產生流水號,會使用自動產生欄位)。
如果我需要參照獨立欄位使用這些「子表格專屬的公式」怎麼辦?
① 請善用「加總與分析」、「報表」功能達成需求
在 Ragic,許多您的需求可以用不只一種工具達成,因此如果您預設的某條路斷了,也許有其他方法可以達成,而且可能更方便。假設您希望用的是 COUNT 公式,代表您希望知道總共有幾筆資料,可以直接查看 Ragic 列表頁右上角的資料總數 數字;如果是特定條件下的 COUNIF 公式,您可以先以該條件篩選出需要的資料再查看。
同理,如果需要的是 SUM 或 SUMIF 公式,代表 您希望針對一批資料做加總(或套用特定條件加總),可使用加總與分析功能。許多其他需求也可以透過 Ragic 的報表功能來做到。
② 利用「顯示從其他表單的連結」(插入參照子表格)功能,將獨立欄位「變成」子表格欄位
如果既有的加總分析或報表工具不能滿足您的需求,或您希望將取得的結果儲存在某個特定的欄位中(而不是只是顯示出來),那麼還有一個方法,就是將獨立欄位「轉化」成子表格欄位,以便執行你希望的工作。
在 Ragic,可以「把某張表單中的獨立欄位,轉換成另一張表單的子表格欄位」的方法,就是前面提過的「顯示從其他表單的連結」(插入參照子表格)這個功能。
如前所述,這個功能的原意是:假如有兩張表單已經建立了連結關係,要可以自動在其中一張表單中,把另一張表單中相關的資料拉進來,以子表格的形式列出來。例如前面的例子,「報價單」表單中的客戶欄位連結自「客戶」表單,那麼要可以在「客戶」表單的子表格中自動列出與這個客戶有關的報價紀錄。主要用處是:只要連結關係建立好了,這些參照子表格的資料就會自動顯示,不需要到另一張表單去手動比對與紀錄。
但是,「把另一張表單中相關的資料拉進來,以子表格的形式列出來」這個動作,正好就是「把某張表單的獨立欄位,轉化成另一張表單的子表格欄位」的過程。因此,如果有特定需求的話,就也可以刻意設計出利用「顯示從其他表單的連結」(參照子表格)功能,將獨立欄位變成子表格欄位。我們先前的教學文章中,就曾以「每月薪資單、月報表、費用報支統計」為例,做過這樣的示範,實際操作案例與教學可以參考這裡。
障礙五:為什麼子表格不能拉到列表頁來顯示?怎麼匯入/匯出子表格資料?(獨立欄位可以做,子表格不能做的事)
常見障礙或疑問:為什麼不能把子表格欄位拿來當「顯示在列表頁的欄位」(例如將子表格「訂購商品」拉到訂單的列表頁)?要怎麼將資料匯入 Ragic 子表格欄位?
正確答案:這些的確沒辦法做,主要原因如同前面所說,因為獨立欄位和子表格欄位的運作機制不同。現階段,只有「獨立欄位」可以做、子表格不能做的事情包括:① 把表單頁欄位拉到列表頁顯示、② 作為「連結與載入」的來源、③ 直接匯出資料 [2019/11/21註:「直接匯入」子表格資料的部分目前已直接支援了,相關教學請見這裡]、④ 合併列印(Word 檔)、⑤ 以表單的子表格欄位為依據產生某些類型的報表。以下分別說明。
子表格的表單頁欄位無法拉到列表頁顯示的部分,是因為列表頁的一筆資料 = 一行,單筆資料一個欄位只能有一個欄位值,因此「一個欄位多個值」的子表格資料依這個原則是沒有辦法依這個邏輯顯示在列表頁上的,頂多只能想一個規則,另開一個欄位抓取特定的子表格資料放在獨立欄位上,再把獨立欄位顯示在列表頁。
子表格不能當連結與載入來源的部分,我們「連結與載入」的文件中有專章說明,請見連結與載入常見錯誤的第一項:(系統不允許你)「從其他表單的子表格欄位拉連結到表單中」。簡單來講,因為子表格欄位「一筆資料不止一個值」的特性,我們若把它當作連結的來源,選了來源(連結欄位)之後系統會無法判斷到底要載入該筆資料的哪一個值/哪一行子表格。因此目前標準功能無法做到將子表格當連結與載入的來源。
目前只有在 Ragic 寫客製化程式才能達到「某筆資料的子表格,直接透過連結載入帶入另一張表單對應資料的整個子表格」的功能,例如我們生產管理模組的工單上「展開 BOM 表」、「帶入生產流程」兩個動作按鈕就是寫客製化程式達到的。
匯出資料的部分,目前介面也是以列表頁/獨立資料為主來設計,尚未支援直接匯入子表格資料,不過你可以參照這裡的教學),先把子表格變成獨立表單之後再匯出。你可以透過新增原始表單的一般欄位功能,讓你匯出的每一個細項裡,都包含原本表單上的重要資訊(例如匯出訂購細項時,也可以看到每筆細項有標註訂購者、訂單編號、訂單狀態等)。
如果我想在子表格欄位做獨立欄位才能做的事,怎麼辦?
① 視情況利用公式將需要的子表格資料帶入到獨立欄位中
假如你希望特定的一筆子表格資料的某個欄位呈現在列表頁、或希望特定的一筆子表格資料某個欄位適用獨立欄位的運作方式,可以先分析看看你的需求是否有合適的公式可以套用,在獨立欄位取得某筆特定子表格的值。
例如:希望「聯絡紀錄」子表格裡最近一次的聯絡日期,可以顯示在獨立欄位「上次聯絡日期」,那就是用 LAST() 公式把這個子表格欄位值抓到「上次聯絡日期」。
前面「只能參照子表格欄位」的公式中,有許多其實就是可以扮演這種「將特定子表格資料抓到一般欄位」的功能。
② 視情況利用「子表格產生新表單」功能,將子表格欄位「變成」另一張表單的獨立欄位
從 Ragic 「子表格產生新表單」功能的文件說明,就可以看到這個功能基本上就是為了「子表格欄位」本身不是那麼方便的時候,能直接將子表格資料轉換為獨立資料而設的,因此直接利用此功能也是一個做法。(上面匯入匯出子表格資料的做法就是利用子表格產生新表單的機制)
① 2019/11/21 新增支援「直接匯入子表格」:現在你可以直接將子表格的資料匯入該張表單,不用「子表格產生新表單」,詳細教學請見這裡。
以上就是 Ragic 客戶入門子表格相關功能時,比較容易誤會/卡住的幾個部分。解開誤會之後,你就可以更輕鬆駕馭子表格的各種進階功能了!