Tự động hóa quy trình xử lý dữ liệu với Power Automate

Tự động hóa quy trình xử lý dữ liệu với Power Automate: Tổng hợp, Phân tách và Gửi Email theo phòng ban

Ngày đăng: 27/06/2025

Bối cảnh và bài toán

Trong nhiều doanh nghiệp, việc thu thập, tổng hợp và gửi thông tin từ các chi nhánh là quy trình thường xuyên nhưng rất dễ gây sai sót nếu làm bằng tay. Để khắc phục điều đó, bài viết này giới thiệu Use Case tự động hóa bằng Power Automate: từ nhận file Excel, xử lý dữ liệu hàng loạt, phân tách theo chi nhánh và gửi email tự động theo từng phòng ban. Đây là một ví dụ điển hình của việc tự động hóa quy trình xử lý dữ liệu giúp tiết kiệm thời gian và giảm thiểu lỗi thủ công.

Ví dụ trên cũng là 1 tình huống thực tế của học viên trong khóa PL500 – Power Automate RPA Developer Associate của Datapot. Datapot đã cùng học viên nghiên cứu case này và hoàn thiện xây dựng một giải pháp tự động với Power Automate. Hãy cùng tìm hiểu về giải pháp đó trong bài viết này.

Giới thiệu về dữ liệu đầu vào

Giả sử ta có dữ liệu đầu vào là file Excel gồm Dữ liệu tổng hợp lỗiDanh sách chi nhánh.

File dữ liệu tổng hợp lỗi: là các yêu cầu rà soát hoặc điều chỉnh thông tin, mỗi dòng tương ứng với một lỗi cụ thể tại một chi nhánh. File này có cấu trúc cột gồm:

  • MACN: Mã chi nhánh.
  • MAKH, TENKH, CHITIEU, GIATRI, MOTALOI: Các thông tin chi tiết của lỗi cần rà soát.

MACN

MAKH

TENKH

CHITIEU

GIATRI

MOTALOI

1

5248109

LE THI KIM CHI

Address

ABC123

Địa chỉ không đầy đủ

3

6953721

PHAM VAN BINH

Date of birth

20100101

Ngày sinh không hợp lệ

1

6975606

NGUYEN HONG PHUC

Ngày sinh/số CCCD

20030512, 001234567890

Năm sinh khác với mã trên CCCD

3

6918477

TRAN THI LAN

Address

XYZ789

Thiếu tên đường, phường

1

2676709

DO VAN TUAN

Ngày sinh/số CCCD

19991231, 012345678901

Sai lệch giữa ngày sinh và số CCCD

File danh sách chi nhánh: chứa thông tin mã chi nhánh (MACN), tên chi nhánh, họ và tên và danh sách email tương ứng để gửi thông báo. Mỗi chi nhánh có thể có nhiều địa chỉ email.

MACN

TENCN

HOVATEN

EMAIL

1

SỞ GIAO DỊCH

Nguyen Van A

nguyen.van.a@gmail.com

1

SỞ GIAO DỊCH

Nguyen Thi B

nguyen.thi.b@gmail.com

2

HÀ NỘI

Nguyen Van D

nguyen.van.d@gmail.com

2

HÀ NỘI

Duong Van E

duong.van.e@gmail.com

3

HẢI PHÒNG

Le Van G

le.van.g@gmail.com

Mục Tiêu Của Giải Pháp

  • Tách dữ liệu lỗi thành các file riêng biệt theo từng chi nhánh dựa trên trường MACN.
  • Tự động gửi email đến đúng danh sách email của từng chi nhánh với nội dung thông báo kèm file lỗi tương ứng.
  • Nội dung email gồm lời chào, thông tin lỗi, và đề nghị chi nhánh rà soát, cập nhật. Mục tiêu là tự động hóa quy trình xử lý dữ liệu một cách chính xác và có thể kiểm soát.

Kiến trúc giải pháp tổng thể

Giải pháp gồm 3 Flow riêng biệt trong Power Automate, với sơ đồ giải pháp như bên dưới.

Flow 1 – Gộp dữ liệu lỗi từ các file Excel đính kèm thành một file tổng hợp

A diagram of a flowchartAI-generated content may be incorrect.

A diagram of a flowchartAI-generated content may be incorrect.

Flow 2 – Lọc dữ liệu từ file tổng hợp theo từng chi nhánh và tạo file riêng biệt

Flow 3 – Gửi email đến từng chi nhánh kèm file lỗi tương ứng.

A diagram of a diagramAI-generated content may be incorrect.

Các Flow được kích hoạt thủ công với tham số đầu vào là ListFileCode (khóa chính của SharePoint List “Danh sách file lỗi”). Việc chia nhỏ theo bước giúp dễ quản lý và mở rộng tự động hóa quy trình xử lý dữ liệu trong tổ chức.

Danh sách tài nguyên & cấu trúc dữ liệu

Để dễ dang mở rộng cho sau này cũng như quản lý một cách hiệu quả, chúng sẽ bổ sung thiết kế thêm 2 danh sách SharePoint (SharePoint Lists) đóng vai trò như Cơ sở dữ liệu backend của hệ thống xử lý lỗi. Trong đó gồm bảng Danh sách file lỗi và Danh sách chi nhánh.

Danh sách file lỗi (SharePoint List)

Mục đích:

  • Cho phép người dùng tạo yêu cầu gửi lỗi bằng cách tạo dòng mới và đính kèm file.
  • Là nguồn dữ liệu lưu lại các thông tin để người dùng có thể đưa vào phần input kích hoạt trigger.
  • Ghi lại các thông tin liên quan như Mã danh sách file lỗi, File đính kèm, Đường dẫn của các file được tạo và các trường thông tin phụ phục vụ cho flow.

Cấu trúc List đề xuất:

Cột

Loại dữ liệu

Ghi chú

ListFileCode

Single line of text

Mã định danh cho danh sách file lỗi (VD DSLOI_T6_2025, DSLOI_KETOAN,…)

ListFileSendLink





Multiple lines of text




Trường giá trị được tự động cập nhật bởi flow, ghi danh sách đường dẫn các file đã gửi đến từng chi nhánh

Attachments (Có sẵn trong List)

File attachment

Đính kèm 1 hoặc nhiều file Excel lỗi

MergedFileID

Single line of text

Trường giá trị nội bộ được cập nhật tự động bởi flow. Lưu ID của file Excel tổng hợp (gộp tất cả các file đính kèm ban đầu), nhằm phục vụ cho bước lọc và tách dữ liệu trong Flow 2.

ListFileSendID

Single line of text

Trường giá trị nội bộ được cập nhật tự động bởi flow. Lưu chuỗi ID của các file lỗi đã được lọc và tạo ra theo từng chi nhánh (cách nhau bằng dấu “;”), nhằm phục vụ cho bước gửi email trong Flow 3.

A screenshot of a computerAI-generated content may be incorrect.

Danh sách chi nhánh (SharePoint List)

Mục đích:

  • Quản lý danh sách mã chi nhánh, tên chi nhánh và các địa chỉ email cần gửi.
  • Dễ dàng cập nhật định kỳ, mở rộng số chi nhánh mà không cần sửa lại flow.
  • Tách rời cấu hình khỏi logic xử lý giúp dễ bảo trì.

Cấu trúc đề xuất:

Cột

Loại dữ liệu

Ghi chú

MACN

Number

Mã chi nhánh (trùng với cột MACN trong file lỗi)

TENCN

Single line of text

Tên chi nhánh

Email

Multiple lines of text

Danh sách email phân cách bởi dấu “;”

A screenshot of a computerAI-generated content may be incorrect.

Excel template danh sách lỗi

Mục đích: Đây là file Excel mẫu (template) dùng làm khuôn định dạng dữ liệu lỗi trong toàn bộ hệ thống xử lý lỗi. File được sử dụng trong cả Flow 1 và Flow 2 với các vai trò sau:

  • Trong Flow 1: Dùng để khởi tạo file lỗi tổng hợp – nơi hệ thống sẽ đổ toàn bộ dữ liệu lỗi từ các file Excel người dùng gửi lên.
  • Trong Flow 2: Dùng để khởi tạo các file lỗi theo từng chi nhánh, sau khi hệ thống đã lọc dữ liệu từ file tổng hợp ra riêng cho mỗi chi nhánh.

Việc sử dụng một template chung giúp:

  • Đảm bảo định dạng dữ liệu thống nhất.
  • Hỗ trợ hệ thống dễ dàng tự động hóa quá trình chèn dữ liệu bằng Excel Script trong Power Automate.
  • Giảm thiểu lỗi xử lý do chênh lệch định dạng file.

Lưu ý: Cần format vùng dữ liệu trong file này thành định dạng bảng.

A screenshot of a computerAI-generated content may be incorrect.

Office Script

Mục đích: Script này được sử dụng để ghi hàng loạt dữ liệu lỗi vào file Excel theo đúng định dạng bảng đã được định nghĩa sẵn trong file Template. Script được dùng trong cả:

  • Flow 1: Ghi toàn bộ dữ liệu từ các file lỗi đính kèm vào file tổng hợp.
  • Flow 2: Ghi dữ liệu đã lọc riêng cho từng chi nhánh vào các file lỗi theo chi nhánh.

Việc sử dụng Office Script giúp:

  • Ghi dữ liệu nhanh chóng, hiệu quả hơn nhiều so với việc lặp qua từng dòng khi sử dụng action Add a row into a table của Excel Online.
  • Duy trì đúng định dạng bảng, không bị sai cột, trôi dữ liệu.
  • Tăng tốc độ xử lý khi làm việc với dữ liệu lớn.

Chi tiết các flow xử lý

Flow 1: gộp các file lỗi thành một file tổng hợp

Bước 1: Nhập thông tin file dữ liệu lỗi vào SharePoint List

  • Người dùng thực hiện thao tác nhập dữ liệu ban đầu lên List “Danh sách file lỗi” trên SharePoint với mục đích cung cấp thông tin đầu vào cho toàn bộ quy trình xử lý lỗi sau này. Các trường cần nhập bao gồm:
    • ListFileCode: Đây là mã định danh duy nhất cho đợt soát lỗi/danh sách file lỗi, Nên đặt theo cú pháp dễ nhận diện như DSLOI_T6_2025, DSLOI_KETOAN_Q2 và không được trùng với các mã trước đó.
    • Attachments: Đính kèm một hoặc nhiều file Excel lỗi. Các file Excel được đính kèm tại trường Attachments sẽ được hệ thống lấy dữ liệu trong Flow 1 và xử lý tập trung vào một file tổng hợp.
A screenshot of a computerAI-generated content may be incorrect.

Bước 2 – Khởi tạo trigger kích hoạt thủ công và truy xuất item trong SharePoint List

  • Vào Power Automate
  • Chọn Create > Instant cloud flow.
  • Đặt tên flow (VD: Tạo ra file tổng hợp dựa trên danh sách file người dùng gửi).
  • Trong phần Trigger, chọn: Manually trigger a flow.
A screenshot of a computerAI-generated content may be incorrect.
  • Cấu hình Trigger:
  • Click chọn add an input, chọn “Text” để thêm một trường dữ liệu đầu vào nơi người dùng có thể nhập mã danh sách file lỗi (ListFileCode) từ bước trước.
  • Đặt tên và mô tả cho trường dữ liệu đầu vào.
A screenshot of a computerAI-generated content may be incorrect.
  • Thêm action “Get items” của SharePoint để truy xuất item vừa được tạo từ bước trước. Cấu hình action như sau:
    • Đổi tên action thành: Retrieve item from the Error File List where the ID equals the ID user enters.
    • Site Address: Chọn site chứa SharePoint List Danh sách file lỗi.
    • List Name: Trỏ đến List Danh sách file lỗi.
    • Filter query: Dùng công thức sau để lọc ra item cần tìm (Thay “Title” thành “ListFileCode” nếu trong lúc tạo SharePoint List người dùng tạo một cột ListFileCode mới, nếu chỉ đổi tên cột Title có sẵn thành ListFileCode thì sử dụng “Title”):
Title eq ‘<Giá trị động mã danh sách file lỗi người dùng vừa nhập ở trigger thủ công>’
A screenshot of a computerAI-generated content may be incorrect.

Bước 3 – Khởi tạo file tổng hợp lỗi từ các file người dùng đính kèm

  • Sử dụng action Compose hoặc Initialize Variable để khởi tạo một biến lưu tên của file tổng hợp lỗi, ở phần Value (hoặc Inputs) có thể đặt tên file tùy ý hoặc theo công thức sau:
ErrorList_Merged_@{formatDateTime(convertTimeZone(utcNow(), 'UTC', 'SE Asia Standard Time'), 'dd/MM/yyyy HH:mm:ss')}.xlsx
  • Sử dụng action Get file content của SharePoint để lấy nội dung của file Template Danh sách lỗi, cấu hình action như sau:
    • Site Address: Trỏ đến site chứa file template.
    • File Indentifier: Trỏ đến file template lỗi.
  • Sử dụng action Create file (SharePoint) để tạo file tổng hợp dựa trên file template lỗi vừa được lấy nội dung. Cấu hình action như sau:
    • Site Address: Trỏ đến site có folder người dùng muốn lưu file tổng hợp vào.
    • Folder Path: Trỏ đến folder người dùng muốn lưu file tổng hợp vào.
    • File Name: Lấy giá trị động “Outputs” của bước khởi tạo biến tên file từ trước.
    • File Content: Lấy giá trị động “File Content” của bước lấy nội dung từ file template.
    • Đổi tên action thành “Create the Merged File and Save to the SharePoint Folder”.
A screenshot of a computerAI-generated content may be incorrect.
  • (Tùy chọn) Thêm action Delay khoảng 5s để hệ thống kịp ghi nhận file vừa được tạo.
  • Sử dụng action Get tables (Excel Online Business) để lấy thông tin bảng Danh sách lỗi trong file tổng hợp vừa được tạo, nhằm phục vụ việc bổ sung dữ liệu từ các file người dùng đính kèm trong các bước tiếp theo. Cấu hình action như sau:
    • Location: Trỏ đến site lưu file Danh sách lỗi tổng hợp vừa được tạo.
    • Document Library: Tài liệu (hoặc Documents).
    • File: Lấy giá trị động “body/Id” của bước “Create the Merged File and Save to the SharePoint Folder”. Việc này giúp hệ thống tìm được đến file vừa được tạo thông qua ID của file đó.
    • Đổi tên action thành “Get tables of the Merged File”.
A screenshot of a computerAI-generated content may be incorrect.

Cấu hình flow sau bước 3:

A screenshot of a computerAI-generated content may be incorrect.

Bước 4: Lặp qua từng file lỗi

  • Sử dụng action Get attachments của SharePoint để lấy danh sách một hoặc nhiều file đính kèm trong item vừa được tạo trong danh sách Danh sách file lỗi. Cấu hình action như sau:
    • Site Address: chọn địa chỉ site chứa danh sách Danh sách file lỗi.
    • List Name: chọn Danh sách file lỗi.
    • Id: Lấy giá trị động “ID” từ bước Retrieve item from the Error File List where the ID equals the ID user enters bằng cách sử dụng công thức:
first(outputs('Retrieve_item_from_the_Error_File_List_where_the_ID_equals_the_ID_user_enters')?['body/value'])?['ID']
  • Thêm control Apply to Each để lặp qua từng file lỗi đính kèm. Với trường “Select an output from previous steps” chọn giá trị động “Body” từ bước Get attachments.
A screenshot of a computerAI-generated content may be incorrect.
  • Bên trong control Apply to Each, thêm action Condition nhằm phân loại xem liệu file được đính kèm có phải là file định dạng Excel (đuôi xlsx) hay không. Điều kiện để chia nhánh là: (Chú ý thay thế ‘For_each_attachment_in_the_item’ bằng tên action đặt cho vòng lặp Apply to Each.).
last(split(items('For_each_attachment_in_the_item')?['DisplayName'],'.')) is equal to xlsx.
A screenshot of a computer programAI-generated content may be incorrect.

Tất cả các action dưới đây sẽ được thêm trong nhánh True của Condition:

  • Sử dụng action Get attachment content để lấy nội dung thật của từng file Excel đính kèm. Cấu hình action như sau:
    • Site Address: chọn địa chỉ site chứa danh sách Danh sách file lỗi.
    • List Name: chọn Danh sách file lỗi.
    • Id: Lấy giá trị động “ID” từ trigger ban đầu.
    • File Identifier: Lấy giá trị động “Id” từ bước Get attachments.
  • Sử dụng action Compose hoặc Initialize Variable để khởi tạo một biến lưu tên của file lỗi người dùng đính kèm trong item, ở phần Value (hoặc Inputs) có thể đặt tên file theo công thức sau (hoặc sử dụng chính tên của file người dùng đính kèm):
<Giá trị động Display Name của bước Get attachments (Tên gốc của file)> _@{formatDateTime(convertTimeZone(utcNow(), 'UTC', 'SE Asia Standard Time'), 'yyyy-MM-dd HHmmss')}.xlsx
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng action Create file (SharePoint) để lưu file lỗi người dùng đính kèm vào một folder SharePoint. Cấu hình action như sau:
    • Site Address: Trỏ đến site có folder người dùng muốn lưu file được đính kèm vào.
    • Folder Path: Trỏ đến folder người dùng muốn lưu file được đính kèm vào.
    • File Name: Lấy giá trị động “Outputs” của bước khởi tạo biến tên file từ trước.
    • File Content: Lấy giá trị động “File Content” của bước “Get attachment content”.
    • Đổi tên action thành “Save the Attachment File to the SharePoint Folder”.
  • (Tùy chọn) Thêm action Delay khoảng 5s để hệ thống kịp ghi nhận file vừa được tạo.
  • Sử dụng action Get tables (Excel Online Business) để lấy thông tin bảng Danh sách lỗi trong file vừa lưu, nhằm phục vụ việc làm input đầu vào cho bước bổ sung (append) thông tin lỗi vào file tổng hợp. Cấu hình action như sau:
    • Location: Trỏ đến site lưu file Danh sách lỗi đính kèm vừa lưu.
    • Document Library: Tài liệu (hoặc Documents).
    • File: Lấy giá trị động “body/Id” của bước “Save the Attachment File to the SharePoint Folder”. Việc này giúp hệ thống tìm được đến file vừa được tạo thông qua ID của file đó.
  • Sử dụng action List rows present in a table của Excel Online nhằm mục đích lấy toàn bộ dữ liệu lỗi từ bảng trong file Excel vừa lưu. Cấu hình action như sau:
    • Location: Trỏ đến site lưu file Danh sách lỗi đính kèm vừa lưu.
    • Document Library: Tài liệu (hoặc Documents).
    • File: Lấy giá trị động “body/Id” của bước “Save the Attachment File to the SharePoint Folder”.
    • Table: Lấy giá trị động Id từ bước Get tables trước đó. Vì file vừa được tạo từ template chỉ có một bảng, cho nên để không sinh ra vòng lặp for each làm rối flow thì sẽ sử dụng công thức (lưu ý thay Get_tables_in_the_Attachment_File bằng tên action đặt cho bước Get tables).
First(outputs(‘Get_tables_in_the_Attachment_File’)?[‘body/value’])?[‘Id’]
Screens screenshot of a computer screenAI-generated content may be incorrect.
  • Vì số lượng trường dữ liệu trả ra cho từng dòng ở output bước List rows sẽ nhiều hơn số lượng trường dữ liệu gốc nên cần sử dụng thêm action Select nhằm rút trích dữ liệu theo đúng cấu trúc đã định nghĩa (MACN, MAKH, …) để chuẩn bị append. Cấu hình action như sau:
    • From: Lấy giá trị động “body/value” từ bước List rows present in the table.
    • Map: Mapping từng cột trong bảng gốc với từng giá trị trường dữ liệu trả về của bước List rows present in the table. (như ảnh)
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng action Run script của Excel Online để append dữ liệu lỗi vào file tổng hợp đã tạo từ bước 2.
A screenshot of a computerAI-generated content may be incorrect.

  • Workbook Location: Trỏ đến site lưu file Danh sách lỗi đính kèm vừa lưu.
  • Workbook Library: Tài liệu (hoặc Documents).
  • Workbook: Lấy giá trị động “body/Id” của bước “Create the Merged File and Save to the SharePoint Folder”.
  • Script Location: Trỏ đến site chứa script sẽ sử dụng.
  • Script Library: Tài liệu (hoặc Documents).
  • Script: Trỏ đến script sẽ sử dụng.
  • ScriptParameters/sheetName: Điền tên sheet chứa bảng muốn append dữ liệu vào, VD Gui ra soat (Đây là tên sheet chứa danh sách lỗi trong file template).
  • ScriptParameters/tableName: Điền tên table muốn append dữ liệu vào, VD DSLOI (Đây là tên table chứa danh sách lỗi trong file template).
  • ScriptParameters/jsonData: Lấy giá trị động “Output” từ bước Select.

Cấu hình flow của bước 4:

A screenshot of a phoneAI-generated content may be incorrect.

Bước 5 – Update giá trị vào item trong SharePoint List

A screenshot of a computerAI-generated content may be incorrect.
  • Sau khi đã tạo thành công file Excel tổng hợp từ các file lỗi người dùng gửi, ta sẽ cập nhật thông tin về file này vào lại dòng dữ liệu gốc trong SharePoint List “Danh sách file lỗi” bằng action Update item (SharePoint). Cấu hình action như sau:
    • Site Address và List Name: Điền thông tin tương tự các bước trước để trỏ đến List Danh sách file lỗi.
    • Id: Dùng công thức sau để truy xuất đúng item tương ứng trong danh sách (Lấy giá trị động body/value từ bước truy xuất item trong List, sau đó trích xuất giá trị ID của item).
first(outputs('Retrieve_item_from_the_Error_File_List_where_the_ID_equals_the_ID_user_enters')?['body/value'])?['ID']

MergedFileID: nhận giá trị động ItemID từ bước tạo file tổng hợp (Create the Merged File and Save to the SharePoint Folder).

Flow 2: lọc file tổng hợp cho từng chi nhánh

Bước 1: Kích hoạt flow thủ công và tra cứu thông tin File tổng hợp

  • Bước này giống với bước 2 của flow 1, chỉ thêm một action Get files (Properties only) của SharePoint để truy xuất đến File tổng hợp đã tạo ở flow 1. Cấu hình action như sau:
    • Site Address: Chọn site chứa file tổng hợp.
    • Library Name: Documents hoặc Tài liệu.
    • Filter Query: Sử dụng công thức sau để tìm ra file tổng hợp dựa vào giá trị cột MergedFileID:
ID eq ‘@first(outputs('Retrieve_item_from_the_Error_File_List_where_the_ID_equals_the_ID_user_enters')?['body/value'])?['MergedFileID']’
  • Limit Entries to Folder: Dùng để giới hạn Folder hệ thống sẽ quét để tìm file.
A screenshot of a computerAI-generated content may be incorrect.
  • Trước khi sang bước tiếp theo, ta cũng cần thêm lại các action sau giống với các action đã tạo ở flow 1 nhằm phục vụ cho các bước tiếp theo:
    • Action Get tables of the merged file (Sử dụng action Get tables (Excel Online Business)).
    • Action Get content Template file Error List (Sử dụng action Get file content của SharePoint).
  • Đồng thời tạo thêm hai biến string ListFileSendLink và ListFileSendID sử dụng Initialize Variable. Hai biến này sẽ sử dụng để lưu giá trị Link và ID của các file Excel lỗi cho từng chi nhánh sẽ được tạo ra ở bước sau.
A screenshot of a computerAI-generated content may be incorrect.

Bước 2 – Lặp qua từng chi nhánh

  • Sử dụng action Get items để lấy toàn bộ chi nhánh và thông tin email tương ứng từ danh sách SharePoint Danh sách chi nhánh. Cấu hình action như sau:
    • Site Address: Trỏ đến site chứa SharePoint List “Danh sách chi nhánh”.
    • List Name: chọn “Danh sách chi nhánh”.
A screenshot of a computerAI-generated content may be incorrect.
  • Thêm control Apply to each, lặp qua từng chi nhánh để xử lý dữ liệu riêng biệt và gửi email từng đơn vị. Ở trường “Select an output from previous steps” chọn giá trị động “body/value” từ bước Get items.
  • Trong vòng lặp Apply to each, sử dụng action List rows present in table (Excel Online) để lọc dữ liệu từ file tổng hợp (đã merge ở các bước trước) tương ứng với chi nhánh hiện tại. Cấu hình flow như sau:
    • Đổi tên action thành “Filter the rows in the Merged File that match the corresponding branch code”.
    • Location: Trỏ đến site lưu file Danh sách lỗi tổng hợp.
    • Document Library: Tài liệu (hoặc Documents).
    • File: Lấy giá trị động “body/Id” của bước Create the Merged File and Save to the SharePoint Folder
    • Table: Lấy giá trị động Id từ bước Get tables of the Merged File. Vì file vừa được tạo từ template chỉ có một bảng, cho nên để không sinh ra vòng lặp for each làm rối flow thì sẽ sử dụng công thức:
First(outputs(‘Get_tables_of_the_Merged_File)?[‘body/value’])?[‘Id’]
  • Filter query: Sử dụng Odata để lọc ra các dòng có mã chi nhánh bằng với mã chi nhánh đang được lặp. Công thức:
MACN eq ‘<Giá trị động “MACN” của bước “Get items>’
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng thêm action Select nhằm rút trích dữ liệu theo đúng cấu trúc đã định nghĩa (MACN, MAKH, …). Cấu hình giống với action Select trước, chỉ thay trường From là giá trị động “body/value” từ bước “Filter the rows in the Merged File that match the corresponding branch code”.
  • Sử dụng action Create file (SharePoint) nhằm tạo file mới dựa trên file mẫu, dùng để chứa dữ liệu riêng cho chi nhánh hiện tại. Nội dung file này sẽ sử dụng để gửi email cho từng chi nhánh. Cấu hình action như sau:
    • Đổi tên action thành “Create a new Excel file from the Error List template file”.
    • Side Address: Chọn site chứa folder người dùng muốn lưu các file gửi cho từng chi nhánh.
    • Folder Path: Trỏ đến folder người dùng muốn lưu các file gửi cho từng chi nhánh.
    • File Name: Đặt tên file tùy ý hoặc theo định dạng Danh sách lỗi_MACN_Ngày tháng năm tạo file.xlsx
    • File Content: Lấy giá trị động “File Content” của bước lấy nội dung từ file template.
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng action Run script của Excel Online để fill dữ liệu hang loạt từ file tổng hợp đã lọc đến file lỗi của riêng chi nhánh vừa được tạo. Cấu hình tương tự như action Run script trước.
  • Sử dụng action Get files (Properties only) để lấy ra đường dẫn link và ID cho file lỗi của riêng chi nhánh vừa được tạo. Trường Id của action này sẽ lấy giá trị động “body/ItemId” từ bước “Create a new Excel file from the Error List template file”.
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng hai action Append to string variable nhằm cộng dồn đường dẫn và ID đã gửi cho chi nhánh để lưu và theo dõi sau này.
    • Name: Chọn biến ListFileSendLink và ListFileSendID.
    • Value: Lấy giá trị động “Link to item” và “ID” từ bước Get files (Properties only), theo sau bởi dấu “;”.
A screenshot of a computerAI-generated content may be incorrect.
A screenshot of a computerAI-generated content may be incorrect.
  • Sau khi append xong, biến ListFileSendID sẽ bị thừa một kí tự “;” ở cuối, để bỏ đi, ta cần thêm một action Compose bên ngoài vòng lặp với inputs sử dụng công thức sau:
substring(variables('ListFileSendID'), 0, sub(length(variables('ListFileSendID')), 1))

Bước 3 – Update giá trị vào item trong SharePoint List

  • Bước này giống với bước 5 của flow 1, tuy nhiên thay vì cập nhật giá trị cho trường MergedFileID, ta sẽ cập nhật giá trị cho 2 trường ListFileLinkSend và ListFileSendID:
    • Trường ListFileSendLink: Lấy giá trị động của biến ListFileSendLink.
    • Trường ListFileSendID: Lấy giá trị động “Outputs” của bước loại bỏ kí tự “;” thừa trong biến ListFileIDSend trước đó.
A screenshot of a computerAI-generated content may be incorrect.

Flow 3: Gửi Email Thông Báo Đến Các Chi Nhánh

Bước 1: Kích hoạt flow thủ công (Giống bước 2 của Flow 1)

Bước 2 – Tách danh sách ID file

  • Sử dụng action Compose để viết công thức tách chuỗi ID trong cột ListFileIDSend đã cập nhật ở flow 2 thành dạng mảng để lặp. Công thức như sau:
split(first(outputs('Retrieve_item_from_the_Error_File_List_where_the_ID_equals_the_ID_user_enters')?['body/value'])?['ListFileIDSend'],';')
A screenshot of a computerAI-generated content may be incorrect.

Bước 3 – Lặp qua từng ID File

  • Thêm control Apply to each, lặp qua từng mã ID File để truy xuất file cần gửi và gửi email từng đơn vị. Ở trường “Select an output from previous steps” chọn giá trị động “Outputs” từ bước Compose.
  • Trong vòng lặp Apply to each, sử dụng action Get files (Properties only) kết hợp với filter query để truy xuất ra đúng file lỗi có ID đang xét. Cấu hình action như sau:
    • Site Address: Chọn Site chứa các file lỗi riêng của từng chi nhánh.
    • Library Name: Documents hoặc Tài liệu.
    • Filter Query: Sử dụng công thức ID eq ‘<Current Item>’, với Current Item là giá trị ID đang được lặp.
    • Limit Entries to Folder: Dùng để giới hạn Folder hệ thống sẽ quét để tìm file.
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng action Get file content của SharePoint để lấy nội dung của file lỗi vừa truy xuất. Cấu hình action như sau:
    • Site Address: Chọn site chứa file lỗi vừa được truy xuất.
    • File Identifier: Lấy giá trị thuộc tính Identifier của file lỗi vừa được truy xuất bằng cách sử dụng công thức:
first(outputs('Get_files_(properties_only)_from_the_"Folder_sent_to_branches"_folder')?['body/value'])?['{Identifier}']
A screenshot of a computerAI-generated content may be incorrect.
  • Sử dụng action Get items của SharePoint nhằm tìm ra chi nhánh tương ứng để gửi file, dựa vào tên file lỗi của các chi nhánh. Cấu hình action như sau:
    • Site Address: Chọn site chứa List Danh sách chi nhánh.
    • List Name: Chọn Danh sách chi nhánh.
    • Filter query: Sử dụng công thức sau:
MACN eq ‘@split(first(outputs('Get_files_(properties_only)_from_the_"Folder_sent_to_branches"_folder')?['body/value'])['{Name}'], '_')[1]’
  • Giải thích: Công thức này nhằm mục đích tách mã chi nhánh từ tên file. Như ở flow trước ta đã giả sử tên các file lỗi cho từng chi nhánh sẽ có định dạng “Danh sách lỗi_MACN_Ngày tháng năm tạo file.xlsx”. Giả sử file có tên Loi_CN001_12_04_2025 thì hệ thống sẽ tách được “CN001” là mã chi nhánh bằng cách chia tên file theo dấu _ và lấy phần tử thứ hai trong mảng. Mã này sau đó sẽ được dùng để truy vấn bảng danh sách chi nhánh nhằm tìm đúng email người nhận tương ứng.
A screenshot of a computerAI-generated content may be incorrect.
  • Gửi mail cho từng chi nhánh thông qua action “Send email (V2)”
    • To: lấy giá trị động “Email” từ bước Get items trên qua công thức:
first(outputs('Get_the_branch_to_send_email')?['body/value'])?['Email]
  • Subject: abc
  • Body: Điền nội dung như mẫu. Chú ý để lấy tên chi nhánh cần lấy giá trị động “TENCN” từ Get items qua công thức:
first(outputs('Get_the_branch_to_send_email')?['body/value'])?['TENCN']
  • Attachments:
    • Ở mục Name lấy giá trị trường File Name With Extension ở action truy xuất ra file lỗi với công thức:
first(outputs('Get_files_(properties_only)_from_the_"Folder_sent_to_branches"_folder')?['body/value'])?['{FilenameWithExtension}']
  • Mục ContentBytes lấy giá trị động “File content” từ bước “Get file content”.
A screenshot of a computerAI-generated content may be incorrect.
  • Ví dụ nội dung email:
To: Email chi nhánh sau kết nối
Subject: abc

Body:
Kính gửi: Chi nhánh <Tên chi nhánh>

Kính đề nghị chi nhánh kiểm tra với những thông tin sau:
(File đính kèm lỗi của chi nhánh đó)

Trân trọng,

Lợi ích & khả năng mở rộng

Đoạn giải pháp này không chỉ giải quyết triệt để bài toán tổng hợp, phân tách và gửi dữ liệu lỗi mà còn loại bỏ hoàn toàn nguy cơ gửi nhầm file cho chi nhánh, giảm thời gian xử lý từ hàng giờ xuống chỉ còn vài phút. Quan trọng hơn, nó giúp quy trình kiểm soát lỗi trở nên minh bạch và dễ dàng kiểm tra lại khi cần.

  • Tự động hóa hoàn toàn quy trình xử lý dữ liệu lỗi.
  • Giảm thao tác tay, tăng tính chính xác.
  • Không cần viết code.
  • Dễ bảo trì, dễ mở rộng cho các đơn vị, hệ thống khác.
  • Áp dụng hiệu quả trong nhiều kịch bản tương tự cần tự động hóa quy trình xử lý dữ liệu.

Tạm kết

Đây là một Use Case tiêu biểu ứng dụng Power Automate để xử lý dữ liệu Excel hàng loạt, phân tách dữ liệu có điều kiện và gửi email thông báo tự động. Tất cả đều nằm trong một hệ thống tự động hóa quy trình xử lý dữ liệu dễ kiểm soát, giúp tiết kiệm thời gian cho công việc thủ công và quan trọng hơn, đảm bảo tính chính xác của dữ liệu.

Hãy tận dụng Power Automate để tự động hóa các quy trình báo cáo định kỳ của bạn – không chỉ tiết kiệm thời gian mà còn chuyên nghiệp hóa hoạt động doanh nghiệp.

Với các bạn mới bắt đầu tìm hiểu Power Automate, Power Apps & mong muốn ứng dụng các công cụ này trong công việc, hãy tham khảo khóa học BOPA – OPTIMIZE BUSINESS PROCESS USING POWER AUTOMATE & POWER APPS của Datapot.

Khóa học của Datapot được thiết kế và giảng dạy bởi các chuyên gia giàu kinh nghiệm làm việc và đào tạo trong ngành dữ liệu, được triển khai tại các doanh nghiệp như Hòa Phát, Techcombank, Unilever, SHB, MB Life Ageas,.., khóa học sẽ mang đến cho bạn những kiến thức và kỹ năng thực tiễn nhất.

Chia sẻ bài viết này

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

This site uses Akismet to reduce spam. Learn how your comment data is processed.