為什麼在appasheet這個公式算出來是1?
COUNT(LIST([動作1類型],[動作2類型],[動作3類型])-LIST(""))
[動作1類型]:"postback"
[動作2類型]:"postback"
[動作3類型]:"-"
為什麼在appasheet這個公式算出來是1?
COUNT(LIST([動作1類型],[動作2類型],[動作3類型])-LIST(""))
[動作1類型]:"postback"
[動作2類型]:"postback"
[動作3類型]:"-"
哈哈!恭喜你,你踩到了 AppSheet 裡面最經典、也最常讓人崩潰的**「隱藏陷阱」**之一!
答案很簡單:在 AppSheet 中,當你對兩個 List(陣列)使用減號 - 運算子時,它會自動把結果「去重複(Deduplicate)」!
讓我幫你把 AppSheet 腦海裡的運算步驟一步步拆解出來,你就全明白了:
🕵️♂️ AppSheet 的運算大解密
假設你的 [動作3類型] 是空的(空值),AppSheet 運算這個公式 LIST([動作1類型],[動作2類型],[動作3類型]) - LIST("") 的過程如下:
第一步(組裝原始陣列):
它把三個欄位包成一個 List:
LIST("postback", "postback", "")
第二步(陣列相減):
你要減去 LIST(""),所以它把空值拿掉了。
這時候照理說應該剩下 LIST("postback", "postback") 對吧?
第三步(致命的自動去重複):
在 AppSheet 的底層邏輯裡,陣列相減(List Subtraction)使用的是「集合(Set)」的概念。集合的特性就是不允許重複的值!
所以它發現裡面有兩個 "postback",就自作主張地幫你刪掉了一個,最後只剩下:
LIST("postback")
第四步(計算數量):
COUNT( LIST("postback") ) 的結果理所當然就是 1 了!
(💡 換句話說:你這個寫法算出來的,其實是「有幾種不同的動作類型」,而不是「總共有幾個動作」!)
✅ 正確的解法:如何精準算出「有幾個動作」?
如果你希望結果是 2(因為有兩個 postback),你不能使用陣列相減。在 AppSheet 裡面要計算「特定幾個欄位中有幾個填了值」,最穩定的標準寫法是使用 IF 或 ISNOTBLANK 來做數學加總:
程式碼片段
(
IF(ISNOTBLANK([動作1類型]), 1, 0) +
IF(ISNOTBLANK([動作2類型]), 1, 0) +
IF(ISNOTBLANK([動作3類型]), 1, 0)
)