LAMBDA 函式(五):SCAN

閱讀時間約 6 分鐘

接下來介紹 LAMBDA 函式的第四個輔助函式,SCAN

「scan」在這邊可以翻成「掃描」,而 SCAN 的作用在於對範圍中的每個值進行「掃描」、累計運算,會回傳一個範圍,裡面的數字是每個計算步驟的中繼值;而它最常見的用法就是算「移動總計」(running total)

什麼是移動總計?舉個例子:

raw-image


我想讓 A 欄每列的值跟它上一列的相加,並把這個結果顯示在 B 欄,像是這樣:

raw-image


這就是 SCAN 可以派上用場的地方!

比起手動一個個算、或是「=A2 + A3」、「=A3 + A4」這樣的算式,SCAN 的做法更好管理、寫法也比較優雅一點,上面的例子只要短短一行:

=SCAN(0, A2:A11, LAMBDA(int, val, int + val))


接下來的教學會介紹幾項你能很快上手的 SCAN 應用。

歡迎來這邊複製一份試算表,跟我一起做做看!




SCAN 語法

=SCAN(初始值, 範圍, LAMBDA)
  • 初始值:在給 LAMBDA 計算前的初始值。
  • 範圍:要計算的陣列或範圍。
  • LAMBDA:要 SCAN 套用於範圍內每個值的自訂函式。

這邊我習慣用 int(initial,初始值的縮寫)和 val(value,值的縮寫)來當作等等寫 LAMBDA 時要用上的代號:

=SCAN(初始值, 範圍, LAMBDA(int, val, ...))


接下來實際用 SCAN 來算些東西吧。




倍倍儲蓄法

有部日本漫畫叫「烏龍派出所」,其中一個叫做「兩津勘吉」的主角,為了在短時間內存到錢,發明了一個叫做「倍倍儲蓄法」的存錢術。規則是先從很小的數目開始存錢(比如 10 塊),隔天存前一天的兩倍,不斷往下存,這麼一來就可以很快累積財富了。

用表格呈現的話:

raw-image


雖然這個理財方法在現實世界中感覺很有難度,不過我們還是試試看在 C 欄計算「當天存到的成果是多少」吧。我的意思是:

1 天存到 10
2 天存到 10+ 20= 30
3 天存到 10+ 20+ 40= 70
4 天存到 10+ 20+ 40+ 80= 150
...


這個就可以用 SCAN 來計算!先彙整一下需求:

  • 初始值:0,從 0 開始算。
  • 範圍B2B21
  • LAMBDA:就是初始值加上範圍內的值,讓它 LAMBDA 逐列計算。

組裝起來,我們就會得到:

=SCAN(0, B2:B21, LAMBDA(int, val, int + val))


放在 C2 上面,看看結果:

raw-image


SCAN 直接回傳了一組範圍,顯示了第 1 天到第 20 天存錢的各日總計分別是多少。這樣就算完囉!




年別移動總和

SCAN 遇到中間有空白的範圍也可以算,只要搭配 IF 就能輕鬆達成。

我們來看看這張表:

raw-image


我想計算移動總和,但要以年份分開、希望 SCAN 不要一路往下計算。

先來彙整一下需求:

  • 初始值:0,從 0 開始算。
  • 範圍B2B15
  • LAMBDA:就是初始值加上範圍內的值,讓它 LAMBDA 逐列計算。

要讓 SCAN 不要往下算,我們要在 LAMBDA 裡面放個 IFSCAN 在判斷的時候,遇到空值就不繼續累加、如果有數字就繼續累加:

=SCAN(0, B2:B15, LAMBDA(int, val, IF(val = "", val, int + val)))


我們在 C2 執行看看:

raw-image

這樣就成功了!




達成率計算(累計百分比)

最後用 SCAN 來算算看「達成率」。現在我有這張表,假設是某間公司每月的銷售額:

raw-image

B 欄有每月的銷售額,F2 則是今年年初設下的年度目標。我想在 C 欄計算當月份的目標達成率是多少,可以幫助我們了解當月的達成率距離目標還有多遠。

達成率的算法是:

=累計銷售額 / 年度目標

舉例來說,一月當月的銷售額約 800 萬,達成率就是:

=7906659 / 100000000

二月當月的銷售額已經累計到約 1500 萬,是一月和二月的總和,達成率就是:

=(7906659 + 7004159) / 100000000

三月的達成率就是一月、二月和三月的總和,達成率就是:

=(7906659 + 7004159 + 2014572) / 100000000

以此類推。

一樣先來彙整需求:

  • 初始值:0,從 0 開始算。
  • 範圍B2B13
  • LAMBDA:就是初始值加上範圍內的值,讓它 LAMBDA 逐列計算後,除以年度目標所在的 F2

好囉!我把這些需求寫成 SCAN 的算式,寫在 C2 上:

=SCAN(0, B2:B13, LAMBDA(int, val, int + val / F2))


來看看結果:

raw-image

這邊的達成率就算好囉!


另外,你還可以搭配剛介紹的 BYROWSPARKLINE 函式,簡單製作每月的進度條:

=BYROW(C2:C, LAMBDA(val, SPARKLINE(val, {"charttype", "bar"; "max", 1})))

D2 上執行:

raw-image

這樣就可以輕易追蹤進度了。

如果不確定怎麼操作 BYROWSPARKLINE,可以來這看看:




以上就是 SCAN 的分享!

相較於其他輔助函式,坦白說我覺得 SCAN 的應用場景比較受限,大部分都是用在計算這類的移動總和,頂多有些在分組跟計算累計百分比上的變化。如果你有想到任何可以用 SCAN 函式的其他可能性,歡迎你留言分享給我知道,我會再研究研究!✨




如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

我是喜特先生,Mr. Sheet,我們下個教學見!



11.5K會員
147內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
Google 試算表有個叫做 SPARKLINE 的函式,可以讓你在一個儲存格內生成一張迷你圖表。我寫了一篇系列文提供了教學,歡迎來看看唷!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
這是「按條件算OO」系列文的第五篇教學!今天會來聊聊 MINIFS。
這是「按條件算OO」系列文的第四篇教學!今天會來聊聊 MAXIFS。
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 COUNTIF、COUNTIFS 和 COUNTUNIQUEIFS。
Google 試算表有個叫做 SPARKLINE 的函式,可以讓你在一個儲存格內生成一張迷你圖表。我寫了一篇系列文提供了教學,歡迎來看看唷!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
這是「按條件算OO」系列文的第五篇教學!今天會來聊聊 MINIFS。
這是「按條件算OO」系列文的第四篇教學!今天會來聊聊 MAXIFS。
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 COUNTIF、COUNTIFS 和 COUNTUNIQUEIFS。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
Thumbnail
Continue from here Prerequisites Create an IAM role with access to Bedrock Create an "IAM Role" that defines the permissions needed to call Bed
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
A lambda function is a small anonymous function and can only have one expression.
Thumbnail
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
最近公司寫的系統要上線 , EFS 的存取點套用開發時設定出問題 背景是這樣的 開發 : 存取點 path 設 /xxx , 使用者和群組 id 設 1000 , 目錄使用者和群組 id 也設 1000 , 權限開 0600 (owner 可讀可寫) 上線 : 設定如同開發 神奇的事情出現了 , 開
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
Thumbnail
Continue from here Prerequisites Create an IAM role with access to Bedrock Create an "IAM Role" that defines the permissions needed to call Bed
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
A lambda function is a small anonymous function and can only have one expression.
Thumbnail
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
最近公司寫的系統要上線 , EFS 的存取點套用開發時設定出問題 背景是這樣的 開發 : 存取點 path 設 /xxx , 使用者和群組 id 設 1000 , 目錄使用者和群組 id 也設 1000 , 權限開 0600 (owner 可讀可寫) 上線 : 設定如同開發 神奇的事情出現了 , 開