Tạo báo cáo nhân sự siêu tốc bằng ngôn ngữ SQL trong Excel

Ngày tạo 12/05/2022

 -  2.089 Lượt xem

Ứng dụng ngôn ngữ SQL trong Excel để xây dựng hệ thống Báo cáo Nhân sự (HR Analytics) siêu tốc: tự động đối chiếu ngân sách lương kế hoạch (Planning) và chi phí thực tế (Actual) từ nhiều phòng ban.

Trong bài viết này mình sẽ giới thiệu đến mọi người một chương trình hỗ trợ cho các bạn HR làm báo cáo như sau.

Tình huống đưa ra ở đây đơn giản là đầu năm các bạn sẽ có 1 bảng lương planning cho từng bộ phận. Vậy giờ lúc này đã là tháng 5 rồi thì các bạn có đang theo planning hay không hay lại vượt quá dự định ban đầu của mình.

Thực tế việc so sánh này bạn luôn phải làm hàng tháng khi báo cáo bảng lương lên ban giám đốc. Và mình tin việc này là việc sẽ khiến các bạn mất rất nhiều thời gian hàng tháng đúng không nào?

Vậy nếu có 1 chương trình có thể giải quyết việc đó. Không những vậy còn có thể tuỳ biến báo cáo và cho tốc độ cực nhanh thì có ổn hay không?

Đó chính là thứ mà mình muốn giới thiệu đến các bạn ngày hôm nay.

Ở trong Dashboard đầu tiên, mình đang muốn giới thiệu đến các bạn các phân tích như số lượng nhân viên theo từng bộ phận, tỷ lệ % lương/doanh thu, Tổng chi phí lương theo bộ phận, So sánh số lượng nhân sự theo thực tế và kế hoạch, Tổng lương từng bộ phận theo thực tế và kế hoạch.

Vậy việc này có đơn giản không?

Nếu bạn chỉ làm 1 tháng thì bạn sẽ mất bao thời gian?

Và sau khi bạn làm báo cáo xong thì sếp bạn lại muốn báo cáo quý, rồi báo cáo của tháng trước, tháng trước nữa thì sao? Bạn sẽ liên tục phải làm các báo cáo manual và tin mình đi bạn sẽ chết chìm trong báo cáo và báo cáo mà thôi.

Đó là lý do mình đã viết chương trình này để tạo ra 1 Dashboard động trong Excel như sau…

Nhưng giờ bài toán đặt ra lại khác đi. Chúng ta muốn so sánh tháng báo cáo với tháng trước, quý báo cáo với quý trước thì chúng ta có làm được không?

Câu trả lời vẫn là có, vẫn các chỉ tiêu trên nhưng chúng ta sẽ đến với báo cáo ở Sheet Dashboard_SS_Thang_Quy.

Cuối cùng cũng tương tự như báo cáo so sánh tháng, quý hiện tại với tháng, quý trước. Giờ ta muốn mở rộng hơn là được tuỳ chọn các tháng và năm, quý và năm mà chúng ta muốn. Thậm chí gộp nhiều thời điểm với nhau và so sánh thì có khả thi không?

Câu trả lời lúc này vẫn là có. Và chúng ta sẽ đến với báo cáo ở Sheet Dashboard_TuyChon.

Tổng kết lại. Các bạn có thể thấy báo cáo bằng SQL trong Excel nó có khả năng tuỳ biến rất cao, cho tốc độ tính toán và tạo ra báo cáo mới khi Update dữ liệu chỉ trong phút chốc. Thậm chí bạn còn có thể kết nối đến các Database Online. Trong File này mình đã sử dụng Database PostgreSQL để demo tính năng này.

Vậy việc học cách tạo ra báo cáo bằng SQL trên nền Excel có khó không? Câu trả lời đương nhiên là không vì ngôn ngữ SQL rất dễ học. Bạn hoàn toàn có thể ứng dụng ngay vào công việc của bạn và tạo ra các báo cáo mà bạn muốn. Đó sẽ là những giá trị mà ERX Việt Nam sẽ mang tới cho bạn.

Các bạn có thể tham khảo video đã được ERX Việt Nam upload tại đây nhé.

 

Mẹo Tối ưu Truy vấn SQL trong Excel VBA & Xử lý Lỗi Thường gặp

Khi triển khai câu lệnh truy vấn SQL thông qua kết nối ADODB.Connection trên nền tảng Microsoft Excel, bạn cần lưu ý 3 quy tắc vàng sau để đảm bảo tốc độ và độ chính xác tuyệt đối:

CHUỖI KẾT NỐI & CÚ PHÁP CHUẨNMicrosoft ACE OLEDB 12.0
'' Chuỗi kết nối chuẩn hỗ trợ cả cột trộn kiểu dữ liệu Số và Văn bản (IMEX=1):
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & _
        ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"

'' Quy tắc bọc tên Sheet và tên Cột có khoảng trắng hoặc tiếng Việt:
strSQL = "SELECT [Mã Hàng], [Tên Sản Phẩm], SUM([Thành Tiền]) AS TongTien " & _
         "FROM [Data_BanHang$A1:G50000] " & _
         "WHERE [Thành Tiền] IS NOT NULL " & _
         "GROUP BY [Mã Hàng], [Tên Sản Phẩm]"
  • Luôn thêm tham số IMEX=1: Giúp trình điều khiển OLEDB không tự ý biến các mã hàng vừa có số vừa có chữ thành giá trị Null.
  • Giới hạn vùng dữ liệu khi Sheet có định dạng thừa: Thay vì gọi [Sheet1$], bạn có thể chỉ định rõ [Sheet1$A1:Z50000] để bỏ qua các dòng rác cuối bảng.
  • Đóng kết nối sau khi CopyFromRecordset: Luôn gọi rs.Close và cn.Close để giải phóng bộ nhớ RAM và tránh khóa file nguồn.
Web Admin

 
 
Gọi (028) 3514 2046