Đối với file và yêu cầu của chủ đề này, và làm với dữ liệu online bằng Power query trên excel hoặc Power BI, tôi có ý như sau:
- Thời gian tạo lập query, kiểm tra kết quả, ... không tính
- Thời gian nên tính là thời gian query đó liên kết lấy dữ liệu, tính toán và hiển thị ra kết quả. Nếu việc tính toán phải qua những query trung gian, thì khi hiển thị ra kết quả cuối cũng đã được tính rồi.
Vậy vấn đề là phương pháp test thời gian.
1. Nếu chỉ nhấn nút refresh thì cái action refresh của phần mềm có bao gồm việc load dữ liệu về hay không?
2. Nếu thay đổi tham số (ngày bắt đầu, ngày kết thúc) rồi nhấn nút refresh, thì có load lại dữ liệu không?
Tôi cho rằng query trong trường hợp này
CÓ load lại dữ liệu, vì khi refresh,
mặc định là dữ liệu nguồn có thể đã thay đổi, nên phải load dữ liệu mới về. Nếu không làm sao gọi là refresh?
Nếu so sánh với các ngôn ngữ lập trình khác như VBA, Python, Java, ... thì cứ so sánh thoải mái, vì công việc phải làm là như nhau.
1. Chạy SQL để JOIN các bảng có quan hệ và liên quan đến kết quả, từ đây ta có Recortset - Đây tạm coi là Data Model. Nếu các bạn không tính trên Power BI, thì cũng không tính phần này trên VBA. Tương tự nếu có các dataset khác cũng không tính.
2. Từ Recordset chạy vòng lặp với giải thuật Dictionary hay array thuần tùy. Bước này hãy tính thời gian cùng nhau. Chưa chắc chênh lệch nhau nhiều đâu.
Power query với dữ liệu ở bài 1 cũng phải merge 3 table (merge tương đương join của SQL *), và merge cả 1 hoặc 2 query trung gian (tùy thuật toán). Và khi refresh phải tính toán tuần tự như vậy chứ không phải thuần là lôi ra hiển thị.
(*) Bản chất của Merge là như vậy: cũng xác định trường khóa, trường liên kết, loại liên kết (left join, right join, full join, join)