Chuyển đổi từ Excel lên SQL, nên hay không nên?
Trong bài viết này mình sẽ giới thiệu và phân tích điểm mạnh, điểm yếu cũng như cách làm báo cáo bằng Excel thuần tuý và bằng SQL ngay trên nền Excel.
CHUYỂN ĐỔI TỪ EXCEL LÊN SQL, NÊN HAY KHÔNG NÊN?
Nếu bạn sử dụng Excel ở nơi làm việc, có lẽ bạn đã quen với hộp thoại này.
Thậm chí đôi khi bạn còn không thấy hộp thoại này mà chỉ thấy Excel của bạn treo cứng rồi phụt tắt. Qua đó tất cả những công sức mà bạn làm đã tan thành mây khói.
Lý do cho điều này là gì? Mình tin đây là việc mà rất nhiều bạn muốn biết.
Trong thực tế, mình tin nhiều bạn đang đọc bài viết này cũng đã từng làm việc với một bảng tính và chỉnh sửa rất chậm. Mỗi lần bạn nhấp chuột hay nhập thêm dữ liệu vào bảng tính thì màn hình của bạn lại đóng băng, sau đó bạn lại thấy con trỏ chuột đang xoay 1 cách vô vọng trong 10 giây, thậm chí lâu hơn nữa. Mình nghĩ đây không phải là 1 trải nghiệm tốt đẹp khi làm việc vì nó không những khiến cho bạn cảm thấy khó chịu mà còn khiến cho công việc của bạn mất nhiều thời gian để hoàn thành hơn. Mà đáng buồn là thời gian để hoàn thành lại mất nhiều nhất vào thời gian đợi và chờ Excel xử lý.
Thông thường khi bạn sử dụng Excel và File Excel của các bạn chứa rất nhiều công thức. Đúng là với Excel bạn có thể xử lý với 1,048,576 dòng và 16,384 cột nhưng bạn đã thử tưởng tượng là nếu File Excel của bạn trong từng ô của 1 trang tính đều có chứa 1 công thức.
Khi đó thì dù máy bạn có sử dụng chipset hay có nhiều Ram tới đâu thì bạn cũng sẽ thấy 1 thông báo như ở trên. Thậm chí bạn còn thấy thông báo này thường xuyên và nó thực sự ảnh hưởng đến công việc của bạn.
Mình đang lấy ví dụ là bạn làm trong 1 trang tính. Nhưng 1 File Excel thì sẽ có rất nhiều trang tính, bạn sẽ còn tạo ra Pivot Table, tạo công thức link với nhiều trang tính và nhiều File khác nữa. Khi bạn làm như vậy thì dung lượng File của bạn sẽ càng ngày càng nặng lên. Và tin mình đi mình đã cầm trong tay 1 File được bàn giao nặng tới 2 GB. Trên File đó người làm trước của mình link tới File trên Google Drive, link tới File trên Sharepoint của họ và đủ thứ nữa. Tất cả điều này khiến cho mỗi lần mở file của mình là 1 cơn ác mộng. Khi mở File đó mình không thể mở được các File khác và mất ít nhất 15 đến 20 phút để mở cái File đó.
Mình không phủ nhận Excel đang là công cụ bảng tính tốt nhất trên thế giới hiện tại. Nó có rất nhiều công thức và các công thức này lại có vô vàn cách kết hợp để có thể phân tích, thống kê và giải quyết nhiều bài toán của các bạn. Nhưng như mình đã nói ở trên là khi dữ liệu của bạn trở nên quá nhiều, trên 10000 dòng thì việc sử dụng Excel thuần tuý lại làm chậm chính công việc của bạn. Đây là hạn chế không thể phủ nhận được của phần mềm Microsoft Excel.
Ngoài điểm này ra thì Excel còn có 1 điểm yếu khác có thể dẫn đến kém hiệu quả, đó là cấu trúc của nó quá linh hoạt. Điều này nghe có vẻ không đúng lắm nhỉ - vì tính linh hoạt chính là một trong những lý do khiến mọi người yêu thích Excel. Vì mỗi ô là một thực thể của chính nó, bạn có rất nhiều quyền tự do để thêm chú thích cuối trang, hợp nhất các ô với nhau bằng Merge, thậm chí bạn có thể chuyển đổi Custom Format để đổi định dạng của các ô đó trên bảng tính.
Tuy nhiên, nếu một ô có thể được thao tác quá dễ dàng thì bạn càng khó tin tưởng vào tính toàn vẹn của toàn bộ bảng tính. Tính linh hoạt của Excel làm cho việc thực thi tính nhất quán và độ chính xác trong các tập dữ liệu lớn gần như không thể. Cho dù bạn có cảnh giác đến đâu, cho dù bạn xem lại bảng tính bao nhiêu lần vì lỗi chính tả và công thức bị lỗi thì chắc chắn bạn vẫn có thể bỏ sót điều gì đó.
Thường có một công cụ tốt hơn để có thể xử lý với dữ liệu lớn và điểm đặc biệt của nó là bạn không cần cài thêm bất cứ phần mềm nào mà sẽ chạy trực tiếp trên Excel. Ngoài ra khi bạn muốn truy vấn và lấy dữ liệu từ 1 File Excel nào đó thì bạn thậm chí không cần mở File đó ra vẫn có thể lấy dữ liệu về được. Đó chính là sử dụng SQL ngay trên nền Excel của bạn.
Vậy SQL (viết tắt của Structure Query Language tạm dịch là ngôn ngữ truy vấn có cấu trúc) có khó học hay không? Sao nghe kiểu như lập trình và cao siêu quá vậy? Mình tin đây là câu hỏi mà rất nhiều người sẽ nghĩ tới ngay khi nghe thấy 3 chữ này.
Tuy nhiên thực tế lại hoàn toàn khác. SQL là 1 ngôn ngữ truy vấn được sử dụng để làm việc với dữ liệu và nó rất dễ học.
Ví dụ giờ chúng ta đang muốn lấy ra toàn bộ dữ liệu từ File Data.xlsx nằm trong cùng Folder với File chúng ta đang làm báo cáo. Và chúng ta sẽ lấy ra toàn bộ dữ liệu từ Sheet SalesOrderHeader. Trong bài toán này chúng ta sẽ làm như thế nào? Chúng ta cùng mở File SQL_UserForm Training.xlsm lên và cùng thực hành nhé.
Bạn hãy gõ như trên vào khung TextBox rồi hãy ấn vào nút Run Command và xem kết quả nhé.
Bạn sẽ chỉ mất 2.39 giây để lấy ra toàn bộ dữ liệu từ Sheet SalesOrderHeader.
Trên Sheet này có 31465 dòng dữ liệu và 26 cột. Và bạn thấy bạn chỉ cần có hơn 2 giây để lấy toàn bộ dữ liệu từ 1 File có rất nhiều dữ liệu như vậy. Nhưng điều đặc biệt nhất ở đây đó là bạn không cần phải mở File Data.xlsx lên.
Nhưng nhiều bạn sẽ nói là nếu không dùng SQL thì mình chỉ cần mở File lên rồi Copy Paste về thôi là xong mà? Tại sao phải thông qua SQL?
Vậy giờ mình sẽ nâng cấp bài toán hơn 1 chút đi. Mình chỉ muốn lấy ra các đơn hàng được đặt trong năm 2011 (Dựa vào cột OrderDate) và đơn hàng đó phải được mua Online (OnlineOrderFlag = 1)
Trong trường hợp này thì nếu bạn sử dụng Excel thì bạn sẽ cần phải mở File lên rồi Filter dữ liệu theo điều kiện bạn muốn. Sau đó mới Copy Paste về để bạn có thể làm báo cáo.
Nếu bạn sử dụng SQL thì sao? Viết có khó hay không? Câu trả lời vẫn là không. Bạn sẽ viết như hình dưới đây.
Chú ý là bạn sẽ xuống dòng bằng phím tắt là Shift Enter nhé.
Ở đây bạn có thể hiểu đơn giản như sau.
SELECT * => tương đương với lấy hết tất cả các cột.
FROM [SalesOrderHeader$] => Bạn sẽ chọn lấy từ Sheet nào. Ở đây mình sẽ lấy từ Sheet SalesOrderHeader. Vì nguồn dữ liệu là File Excel nên bạn sẽ thêm dấu $ ở cuối.
WHERE … => Đây là các điều kiện lọc của bạn.
Bạn sẽ lấy ra các dữ liệu OrderDate thuộc năm 2011 thông qua cấu trúc YEAR(OrderDate) = 2011. Bạn có thể thấy hàm YEAR ở đây rất quen thuộc đúng không? Cấu trúc của hàm YEAR trong SQL và Excel giống y hệt nhau. Vì thế có 1 điểm lợi ở đây là nếu bạn nắm bắt được các hàm Excel thì đây sẽ là 1 điểm lợi thế khi bạn học và sử dụng SQL trong thực tế.
Cuối cùng là điều kiện OnlineOrderFlag = 1. Đơn giản là bạn đang muốn lọc ra các đơn hàng bán Online theo điều kiện đầu bài ra thôi đúng không nào.
Giờ ta sẽ thử chạy Run Command và xem kết quả nhé.
Và ở đây mình chỉ mất đúng 1.29 giây để có thể lọc ra được 1201 kết quả.
Nhưng kể cả đến đây thì nhiều bạn vẫn nói bạn có thể dùng Excel Copy Paste được mà. Tại sao tôi phải học SQL?
Chính xác là như vậy, nhưng giờ mình sẽ đổi đề bài 1 chút như sau. Ta sẽ không lấy ra toàn bộ các cột mà sẽ lấy ra các cột ở vị trí không liền nhau, thậm chí thứ tự lọc ra cũng sẽ không theo thứ tự luôn.
Ở đây chúng ta cần lấy ra các cột SalesOrderID, OrderDate, OnlineOrderFlag, SubTotal, TaxAmt, Freight, TotalDue và ShipMethodID.
Điều kiện lọc vẫn tương tự như trên thì chúng ta sẽ viết thế nào? Bạn hãy cùng thử như hình dưới đây nhé.
Và giờ thì bạn có thể thấy bạn chỉ cần có 1.05 giây.
Tựu chung lại nếu dữ liệu lấy ra càng ít thì thời gian sẽ càng nhanh.
Tóm lại ở đây bạn cần lấy dữ liệu cột nào thì chỉ cần viết tên cột đó trong phần SELECT là xong. Ví dụ như dưới đây.
SELECT SalesOrderID, OrderDate, OnlineOrderFlag, SubTotal, TaxAmt, Freight, TotalDue, ShipMethodID
Vì thế 1 lần nữa mình khẳng định là ngôn ngữ SQL rất dễ học vì nó rất gần với ngôn ngữ của con người chúng ta. Bạn muốn SELECT cột nào FROM bảng nào với điều kiện WHERE là gì.
Mọi thứ đều rất đơn giản, thậm chí còn đơn giản hơn việc bạn kết hợp các hàm trong Excel rất nhiều.
Giờ để chứng minh tính hữu dụng của SQL trong công việc thực tế thì chúng ta sẽ cùng giải quyết 1 ví dụ như sau.
Câu hỏi đặt ra ở đây đó là bạn hãy tạo ra 1 báo cáo tổng hợp doanh thu theo năm dựa vào dữ liệu ở Sheet SalesOrderHeader. Lưu ý bạn sẽ lấy tổng doanh thu là cột TotalDue vì đây là tổng của giá bán, thuế và phí vận chuyển.
Để trả lời câu hỏi này thì ta sẽ viết như sau.
Như bạn thấy chúng ta chỉ mất có 0.96 giây và đây là kết quả.
Bạn có thể thấy là tốc độ truy vấn không những rất nhanh mà bạn còn không cần mở File Data ra nữa.
Và qua đây mình sẽ lần cuối cùng khẳng định SQL trong Excel không hề khó học. Nó phù hợp với mọi đối tượng, mọi công việc.
Trong thời điểm hiện tại thì nhu cầu phân tích dữ liệu đang là nhu cầu cấp thiết trong công việc của các bạn. Dữ liệu của các bạn sẽ càng ngày càng nhiều hơn và sẽ đạt tới giới hạn của Excel trong thời gian rất sớm thôi.
Thông qua bài viết này mình không hề có ý nói mọi người sẽ bỏ qua Excel không học nữa. Excel vẫn sẽ là 1 công cụ phân tích và trực quan dữ liệu tuyệt vời. Vì thế lời khuyên của mình là bạn nên học cách kết hợp 2 công cụ Excel và SQL này lại với nhau để có thể tạo ra 1 công cụ báo cáo tự động nhanh, mạnh và hiệu quả.
Link download File đính kèm: https://erx.vn/Media/trunghoang/SQL_UserForm.rar