2025年11月6日 星期四

AppSheet 教學:解決 RowNumber 警告,使用 UNIQUEID() 產生安全可靠的唯一主鍵

前言

在使用 AppSheet 開發應用程式時,我們經常需要為每一筆新紀錄產生一個獨一無二的編號,類似資料庫中的「自動流水號」。許多初學者會直覺地使用系統內建的 RowNumber  作為主鍵(KEY),但很快就會發現 AppSheet 跳出一個警告訊息,這不僅影響開發心情,更潛藏著資料遺失的風險。

本文將詳細解釋為什麼不該使用 RowNumber 當作主鍵,並提供一個更安全、更專業的解決方案:使用 UNIQUEID() 函數來自動產生唯一的文字主鍵。

問題點:為什麼不該用 RowNumber 當主鍵?

當您將 RowNumber 設為主鍵時,AppSheet 會在編輯器中顯示以下警告訊息:

Table '表格名稱' has an implicit  key -- if multiple users insert or delete entries concurrently, data loss can occur. Updates may apply to the wrong record or could fail entirely on some data sources.

警告訊息翻譯與解析:

這段警告的核心意思是:

  1. 非穩定鍵值RowNumber 是一個「隱含」的鍵值,它會隨著資料的刪除或重新排序而改變。
  2. 多人協作風險:當多位使用者同時新增或刪除資料時,RowNumber 的對應關係會變得混亂。
  3. 資料錯誤風險:系統可能會因為找不到正確的 RowNumber 而更新到錯誤的紀錄,甚至導致資料遺失或更新失敗。

簡單來說,RowNumber 就像是排隊的號碼牌,有人離開隊伍後,後面的人號碼會往前遞補。這種不固定的特性,完全不適合作為辨識特定資料的「身分證號」(主鍵)。

解決方案:使用 UNIQUEID 函數

AppSheet 官方推薦的最佳實踐是使用 UNIQUEID() 函數來產生主鍵。

UNIQUEID() 的特性:

  • 它會自動產生一個獨一無二的 8 位數亂數字串(例如:"4f1b8e7")。
  • 這個字串是文字  格式。
  • 它能確保在高併發(多人同時操作)的環境下,每一筆新紀錄都能獲得一個絕對不會重複的 ID。

接下來,讓我們一步步實作如何設定它。

實作步驟

步驟一:準備主鍵欄位

首先,請確保您的資料來源(如 Google Sheet)中有一個專門用來存放主鍵的欄位,例如「銷售紀錄編號」。

接著,在 AppSheet 編輯器中,進入 Data -> Columns,找到該欄位,並將其 TYPE  設定為 Text

步驟二:設定為主鍵 

將您準備好的「銷售紀錄編號」欄位勾選為 KEY。同時,請務必取消 RowNumber 欄位的 KEY 勾選。一個資料表中只能有一個主鍵。

步驟三:設定初始值 

這是最關鍵的一步。找到「銷售紀錄編號」欄位,在其設定中找到 Initial Value  欄位,並填入以下公式:

=UNIQUEID()

這個設定告訴 AppSheet:每當使用者要新增一筆資料時,請自動執行 UNIQUEID() 函數,並將產生的唯一值填入此欄位。

步驟四:(選用)隱藏欄位,提升使用者體驗

UNIQUEID() 產生的亂數字串對系統來說很重要,但對使用者來說通常沒有意義且不美觀。為了讓輸入表單更簡潔,我們可以將它隱藏起來。

取消勾選該欄位的 SHOW? 選項。

如此一來,使用者在新增資料的表單中將看不到這個欄位,但 AppSheet 會在背景自動產生並儲存這個唯一的 ID。

步驟五:儲存變更

點擊右上角的 Save 按鈕儲存您的設定。

現在,當您新增一筆紀錄時,系統就會在您看不見的地方,為這筆資料賦予一個安全、可靠且獨一無二的主鍵,徹底解決 RowNumber 帶來的潛在問題。

總結

雖然使用 RowNumber 作為主鍵看似簡單,但它會為您的應用程式帶來嚴重的穩定性風險,尤其是在多人使用的情境下。養成使用 UNIQUEID() 來建立主鍵的好習慣,是開發一個健壯、可擴展 AppSheet 應用的基礎。透過本文的步驟,您不僅能消除惱人的警告,更能確保每一筆資料都擁有一個穩固的「身分」,讓您的 App 運行得更順暢、更安全。



Google 試算表教學:利用 QUERY 函數自訂表單查詢欄位,並只顯示最新 10 筆資料

在使用 Google 表單(Google Forms)收集資料時,回應的資料會自動記錄在 Google 試算表中。隨著時間推移,資料會越來越多,每次要查看最新的回應都必須不斷往下滑動頁面,非常不方便。如果想將資料分享給他人查看,對方也得面臨同樣的困擾。 今天這篇教學要分享如何利用 Google 試算表強大的 `QUERY` 函數,在一個新的工作表中建立一個「儀表板」,讓你能夠: 1. **自訂想顯示的欄位**(不用顯示全部雜亂的資料)。 2. **自動排序**(讓最新的資料顯示在最上方)。 3. **限制顯示筆數**(例如只顯示最新的 10 筆)。 4. **更改欄位標題名稱**(讓報表更易讀)。 #### 為什麼要用 QUERY 函數? `QUERY` 函數允許我們使用類似 SQL 的語法來查詢表格資料。它的基本結構是: `=QUERY(資料範圍, "查詢語句", 標題列數)` 我們將會用到以下幾個關鍵字: * **SELECT**:選擇要顯示的欄位(例如 A、B、C)。 * **ORDER BY**:排序資料(`asc` 為遞增,`desc` 為遞減)。 * **LIMIT**:限制回傳的資料筆數。 * **LABEL**:更改欄位的顯示名稱。 * **WHERE**:設定篩選條件。 #### 實作步驟教學 **步驟一:建立新工作表並輸入基本 QUERY 函數** 首先,在你的試算表中建立一個新的工作表(Tab)。在 A1 儲存格輸入以下公式,選取「表單回應」工作表的資料範圍: ```excel =QUERY('表單回應 1'!A:G, "SELECT *") ``` * `'表單回應 1'!A:G`:這是你的資料來源範圍。 * `SELECT *`:代表顯示所有欄位。 **步驟二:自訂要顯示的欄位 (SELECT)** 通常我們不需要顯示所有欄位。假設我們只想看「時間戳記 (A)」、「產品名稱 (B)」、「數量 (C)」與「總價 (G)」,我們可以修改公式: ```excel =QUERY('表單回應 1'!A:G, "SELECT A, B, C, G") ``` > **重要提醒**:在 `QUERY` 語法中,欄位代號一定要用 **大寫字母** (A, B, C...)。如果寫成小寫 (a, b, c),會出現 `#VALUE!` 錯誤。 **步驟三:讓最新資料排在最上面 (ORDER BY)** 預設排序是舊資料在上面。要讓最新的資料排在最上方,我們需要依據「時間戳記 (A欄)」進行降序排列 (`desc`): ```excel =QUERY('表單回應 1'!A:G, "SELECT A, B, C, G ORDER BY A DESC") ``` **步驟四:解決空白列置頂的問題 (WHERE)** 當你使用 `ORDER BY DESC` 時,試算表可能會把下方大量的空白列排在最上面,導致你看不到資料。這時需要加上 `WHERE` 條件來排除空白列: ```excel =QUERY('表單回應 1'!A:G, "SELECT A, B, C, G WHERE A IS NOT NULL ORDER BY A DESC") ``` * `WHERE A IS NOT NULL`:告訴公式只選取 A 欄 (時間) 不為空的列。 **步驟五:只顯示最新的 10 筆資料 (LIMIT)** 如果你只想專注在最近的幾筆交易,可以使用 `LIMIT`: ```excel =QUERY('表單回應 1'!A:G, "SELECT A, B, C, G WHERE A IS NOT NULL ORDER BY A DESC LIMIT 10") ``` **步驟六:更改欄位顯示名稱 (LABEL)** 原本 A 欄的標題是「時間戳記」,我們想把它改成「訂購時間」。可以使用 `LABEL` 關鍵字,記得新名稱要用單引號 `'` 包起來: ```excel =QUERY('表單回應 1'!A:G, "SELECT A, B, C, G WHERE A IS NOT NULL ORDER BY A DESC LIMIT 10 LABEL A '訂購時間'") ``` #### 完整公式範例 綜合以上步驟,你最終的公式會長得像這樣: ```excel =QUERY('表單回應 1'!A:G, "SELECT A, B, C, G WHERE A IS NOT NULL ORDER BY A DESC LIMIT 10 LABEL A '訂購時間' LABEL G '總金額'", 1) ``` *(註:最後面的 `1` 代表資料範圍的第一列是標題列)* #### 進階小技巧 如果你有使用 Google Apps Script 撰寫程式來抓取試算表資料,通常程式預設會抓取「第一個」工作表。你可以將這個整理好的 QUERY 工作表拖曳到最左邊(變成第一個分頁),這樣你的程式就會直接抓取這個已經整理、排序好的乾淨數據,而不需要修改程式碼。  

透過這個方式,你就能輕鬆打造一個自動更新、簡潔易讀的即時報表了!


 


AppSheet 教學:解決 RowNumber 警告,使用 UNIQUEID() 產生安全可靠的唯一主鍵

前言 在使用 AppSheet 開發應用程式時,我們經常需要為每一筆新紀錄產生一個獨一無二的編號,類似資料庫中的「自動流水號」。許多初學者會直覺地使用系統內建的  RowNumber   列 號  作為主鍵(KEY),但很快就會發現 AppSheet 跳出一個警告訊息,這不僅影響...