2025年5月30日 星期五

AppSheet 教學:如何使用 List 相減找出「有上班打卡但未下班打卡」的人員

今天我們要來解決一個在製作出勤打卡系統時常遇到的問題:如何快速找出今天有哪些人已經打了上班卡,但還沒有打下班卡?這對於人事管理或主管即時掌握同仁狀況非常有用。

這個問題是一位網友提出的,他的情境是:

  • 有兩個獨立的資料表:一個記錄「上班打卡 (CheckIn)」,另一個記錄「下班打卡 (CheckOut)」。

  • 他希望能有一個列表,只顯示那些「今天有上班打卡,但還沒打下班卡」的人員。

解決這個問題的關鍵在於 AppSheet 的「List 相減」功能。我們的思路是:

  1. 取得今天所有「上班打卡」的人員ID列表。

  2. 取得今天所有「下班打卡」的人員ID列表。

  3. 將第一個列表減去第二個列表,剩下的就是我們需要的「有上班打卡但未下班打卡」的人員ID。

  4. 最後,我們使用這個結果ID列表來篩選我們的人員主資料表。

操作步驟:

假設我們有以下資料表:

  • People: 儲存所有人員的基本資料,包含 PeopleID (人員ID,Key值) 和 PeopleName (人員姓名)。

  • CheckIn: 儲存上班打卡紀錄,包含 PeopleID (關聯到 People 表) 和 CheckInDate (打卡日期)。

  • CheckOut: 儲存下班打卡紀錄,包含 PeopleID (關聯到 People 表) 和 CheckOutDate (打卡日期)。

我們要建立一個 Slice (資料表切片) 來顯示結果:

  1. 進入 Slice 設定

    • 在 AppSheet 編輯器中,到 Data > Slices

    • 點擊 New Slice

  2. 設定 Slice 基本資料

    • Slice Name:例如「有上班卡沒下班卡人員」

    • Source Table:選擇 People (因為我們最終要顯示的是人員列表)。

  3. 設定 Row filter condition (列篩選條件)
    這就是核心公式所在。請貼上以下公式:

    IN(
        [PeopleID],
        SELECT(CheckIn[PeopleID], [CheckInDate] = TODAY())
        -
        SELECT(CheckOut[PeopleID], [CheckOutDate] = TODAY())
    )
    Excel

    讓我們來解析這個公式:

    • SELECT(CheckIn[PeopleID], [CheckInDate] = TODAY()):

      • 這個部分會從 CheckIn 資料表中選出所有 PeopleID

      • 篩選條件是 [CheckInDate] = TODAY(),也就是只選取打卡日期為「今天」的紀錄。

      • 結果會是一個今天有上班打卡的人員ID列表 (List)。

    • SELECT(CheckOut[PeopleID], [CheckOutDate] = TODAY()):

      • 同理,這個部分會從 CheckOut 資料表中選出所有 PeopleID

      • 篩選條件是 [CheckOutDate] = TODAY(),只選取下班打卡日期為「今天」的紀錄。

      • 結果會是一個今天有下班打卡的人員ID列表 (List)。

    • - (減號):

      • 這是 AppSheet 中的 List subtraction (列表相減) 運算子。它會從第一個列表中移除所有同時也存在於第二個列表中的項目。

      • 所以,(今日上班打卡人員ID列表) - (今日下班打卡人員ID列表) 的結果,就是那些今天有上班打卡、但還沒有下班打卡的人員ID列表。

    • IN([PeopleID], ...):

      • [PeopleID] 是指目前 People 資料表 (Slice 的來源資料表) 中每一列的人員ID。

      • IN() 函數會檢查目前的 [PeopleID] 是否存在於後面經過相減運算後產生的人員ID列表中。

      • 如果存在,則該列人員資料就會顯示在這個 Slice 中。

  4. 儲存 Slice 與 App

    • 點擊 Slice 設定右下角的 Save

    • 再點擊 AppSheet 編輯器右上角的 Save 按鈕儲存整個 App 的變更。

驗證結果:

現在,你可以到 App 中查看名為「有上班卡沒下班卡人員」的視圖 (如果沒有自動產生,可以手動建立一個基於此 Slice 的 View)。

  • 當「蔡明和」和「一整天」今天都打了上班卡,但都還沒打下班卡時,這個列表會顯示他們兩人。

  • 如果「蔡明和」打了下班卡,列表中就只會剩下「一整天」。

  • 如果「一整天」也打了下班卡,列表就會變成空的。

如此一來,就能輕鬆掌握哪些同仁上班打了卡卻還沒打下班卡了!

相關官方說明:



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

【Excel 教學】如何使用 Power Query 快速比對兩份資料的差異?找出新增、刪除與共同項目

在日常的辦公室工作中,我們經常需要比對兩份清單的差異,例如:比較這個月和上個月的訂單清單、核對自己與廠商的帳目、或是找出兩份客戶名單的增減。傳統方法不僅耗時,還容易出錯。 今天,我們要介紹如何使用 Excel 內建的強大工具  Power Query ,只需要設定一次,未來就能一...