Nhờ hỗ trợ cú pháp truy vấn trong ADODB
Em đang có vướng mắc xin nhờ mọi người giúp.
Dữ liệu giả định và kết quả cần có em đã để trong file đính kèm.
Em đang mắc về cú pháp truy vấn
– JoinText dữ liệu từ nhiều dòng về 1 dòng (có loại trùng)
– Tính tổng doanh thu theo từng KH (cần quy đổi giá trị đối với trường hợp Currency là USD).Rất mong nhận được sự giúp đỡ của mọi người.
Đối với bài toán của bạn thì tôi vẫn phải dùng thêm một hàm "gộp dòng thành cột" rồi chạy câu lệnh SQL kết hợp hàm đó. Nói chung là cũng dài dòng. Không biết nếu dữ liệu lớn thì nó chạy như thế nào.
Tôi chưa biết cách nào khác.
s = "SELECT ID FROM [" & sRngName & "] GROUP BY ID"
Set oRst = GetADORecordset(s)
oRst.MoveFirst
i = 2
Do Until oRst.EOF
s1 = "SELECT ID, Name, 'VND','" & LienKetDong(oRst!ID) & "' AS Product2 , Sum(IIf([Currency]='USD',[Revenue]*23000,[Revenue])) AS Rev " & _
"FROM [" & sRngName & "] " & _
"GROUP BY ID, Name HAVING [ID]='" & oRst!ID & "'"
'Debug.Print s1
Set oRst2 = GetADORecordset(s1)
Sheet1.Range("H" & i).CopyFromRecordset oRst2
oRst2.Close
i = i + 1
oRst.MoveNext
Loop
www.giaiphapexcel.com/diendan/threads/nh%E1%BB%9D-h%E1%BB%97-tr%E1%BB%A3-c%C3%BA-ph%C3%A1p-truy-v%E1%BA%A5n-trong-adodb.152660/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
ADODB không có bổn phận phải hỗ trợ lệnh SQL. Nó chỉ gởi câu truy vấn qua giao diện với CSDL thôi.
Bổn phận này thuộc về cỗ máy dùng để kết nối. Vì CSDL ở đây là bảng tính Excel cho nên cỗ máy dùng là Access. Và câu SQL phải tuân theo cú pháp của Access.
Nếu CSDL là SQL Server thì câu SQL sẽ theo cú pháp T-SQL. Nếu từ Oracle thì sẽ theo cú pháp SQL-Plus.
Trong code này tôi còn quên một phương thức Filter để giảm việc mở Recordset nhiều lần. Thứ 2 là giảm tương tác nhiều lần với sheet bằng việc gán kết quả vào mảng rồi gán một lần xuống sheet. Tôi rảnh xem lại như thế nào.
Chơi thử Dictionary được không @vanthinh3101
Tôi có chế thêm bảng tỷ giá, vì giả sử có EUR/JPG/GPB….
Mỗi cái đoạn mã sản phẩm trùng nhau (trường Product tôi chưa nghĩ ra cách loại trùng,
hoá ra múa rìu qua mắt thợ, sori sori… cảm ơn @vanthinh nhé
Bạn đã nghĩ đến dùng power query chưa? Chắc ăn được ADO (tôi nghĩ vậy)
Dữ liệu nhiều bạn có thể dùng các tool của excel, Power query hay power pivot đều được
Cho bạn cách làm của 2 tool trên, thay đổi dữ liệu bấm refresh trong pivot là được
Vậy bạn chạy thử 2 cách (Dictionary và ADODB) thì thấy thời gian xử lý như thế nào đối với CSDL của bạn?
Trong giai đoạn phát triển Power Query và Power Pivot, MS đã có dự định dùng chúng cho Data Mining (qua Data Model). Vì vậy cỗ máy sau lưng bọn 'Power' này rất hiệu quả.
Nếu tôi không lầm thì cỗ máy sau lưng Data Model dựa trên kỹ thuật của SQL Server.
Vì vậy, nhiều người trong ngành của tôi (ngành phân tích dữ liệu) cho rằng khi dữ liệu nhiều thì bọn 'Power' sẽ tỏ rõ hiệu quả của chúng.
Túm lại, theo tôi thì nếu chơi với dữ liệu cỡ chục ngàn dòng trở lên mà không chịu học Power Query, cứ bám vào ADO là tự mình lỗi thời.
Chắc mới và cách viết khác với VBA nên bạn chưa quen, tôi thấy nó cũng không khó, cứ sử dụng các công cụ có sẵn của nó , mỗi cái nó đều có code bạn không cần viết lại làm gì, chỉ cần sửa lại theo ý mình, vì nó lập trình theo từng bước nên nó debug rất dễ, làm nhiều case bạn sẽ quen thôi
Tôi để hàm dưới in nên nó không show từng step, tôi gửi lại
Theo đúng thì khi connect dữ liệu xong dùng power query để chỉnh sửa dữ liệu cho đúng chuẩn rồi add vào Data model viết các Measure để thực hiện insight và analysis , rồi dùng power pivot để tạo các báo cáo BI.
Power query có thể trả kết quả được nhưng như vậy như VBA chỉ trả 1 kết quả không phải báo cáo BI (không thể kéo thả), muốn kết quả khác là phải code lạị
Excel nhờ có 2 công cụ này mà nó là một trong những tool BI tốt nhất bên cạnh power BI, Tableau, Qlikview…Các chứng chỉ thi data analytics ban đầu của Micrsoft đều có Excel là Power pivot, Power query chứ không phải hàm excel hay VBA, xu hướng giờ là business intelligence, business analyst, data analytics nên các báo cáo phải automactic hết đưa lên web, cloud… có thể xem real time mọi nơi, các doanh nghiệp có ERP gần như phải có thêm các tool BI này, thế giới đã đi trước cái này lâu rồi mà Việt Nam giờ mới bắt đầu
Hai công cụ trên excel là miễn phí và nó căn bản để bước vào data analytics, diễn dàn bây giờ tập chung vào hàm excel và VBA quá mà cái mảng BI thì gần như chưa có chỉ có lác đác mấy bài cơ bản của thầy Ptm, diễn đàn nên đầu tư thêm vào mảng này vì chắc chắn xu hướng tới nó sẽ phát triển rất mạnh (một buổi học trung bình power BI có giá 2 triệu là thấy nó hot cỡ nào)
Tôi nói thật từ lúc chuyển sang các tool BI giá trị nó mang lại cho tôi rất nhiều so với trước về thời gian cũng như giá trị, chẳng phải ngồi làm số liệu hàng tháng, chẳng phải code cho từng case hay report, hạn chế được cái sai sót trong quá trình tính toán, chỉ mất thời gian thiết lập ban đầu, các tháng sau chỉ cần lên lịch refresh là xong. Các báo cáo của Công ty tôi chuyển sang dùng các tool này hết , connect trực tiếp vơi DB hay Cloud (sharepoint, onedrive..), các báo chi tiết thì dùng Power query power pivot, các dashborad, summary report thì dùng power BI pubilc lên Web, điện thoại. Lúc trước dùng mail để gửi báo cáo thì giờ các BOD, BOM có thể xem trực tiếp qua Web, điện thoại luôn
Một cái hấp dẫn nữa trong power pivot là Dax language, các hàm trong Dax phần nhiều giống hàm bên excel, nó xử lý trên mảng và là dynamic array, nó trả các kết quả khác nhau phụ thuộc vào ngữ cảnh vì vậy nó có thể tạo được rất nhiều báo cáo chứ không phải trả một kết quả như bên excel, các bạn nào thích mảng bên excel qua Dax sẽ thấy nó thú vị hơn nhiều , đến một lúc nào đó các bạn sẽ có suy nghĩ "sao không tìm hiểu cái này sớm hơn" như tôi, một điểm lưu ý là M và Dax thì không cần thiết phải học cả 2 nhưng để làm báo cáo BI thì phải học Dax, M giống như công cụ hỗ trợ cho Dax ( Dax không có loop, đệ quy) giống như VBA và hàm excel, vì vậy chỉ cần học Dax , Power query biết các tool có sẵn nó là đủ
Chỗ này thêm RPA (Robotic Process Automation), có thể dùng luôn Microsoft Power Automate (hoặc UiPath Orchestrator) thì không phải động gì tới luôn. 🙂
Thường thường các bạn trên đây làm việc theo kiểu tổng hợp dữ liệu thành báo cáo cho nên coi trọng cái vụ "tự động". Vì nó đỡ bước nào hay bước nấy.
Tôi làm việc theo kiểu phân tích dữ liệu để hổ trợ quản lý cho nên không thích cái vụ "tự động". Một vài bước "refresh" chúng tôi chẳng coi vào đâu.
Từ mấy năm trước tôi đã nhắc nhở rằng ở diễn đàn này (GPE) người ta chỉ biết chạy theo dữ liệu chứ chưa hề biết vượt qua và dẫn đầu chúng.
Để đền bù vào chỗ này, người ta chú tâm vào VBA, có những lúc đi vượt ra ngoài, dùng mấy công cụ COM và API để làm đủ mọi thứ người ta tưởng rằng mình đã có khả năng làm chủ.
Sự thật thì "ra ngoài" hoàn toàn khác với "vượt lên trước". Làm chủ là dùng cái nhìn tổng thể, nhìn khối dữ liệu và tự biết những gì có thể rút được gì từ đấy. Chạy theo dữ liệu là cứ dùng những khuôn mẫu sẵn có và sử dụng những kỹ thuật để dồn dữ liệu vào các khuôn mẫu ấy.
Cảm ơn anh, các Step đã rất rõ ràng rồi a.
Tài liệu của thầy @ptm0412 về Power Query cho Beginners, nhưng e thấy đã rất hữu ích rồi. Trước việc tổng hợp dữ liệu bằng VBA cỡ vài chục nghìn dòng, từ vài file thì được. Mà khi chơi đến vài chục file, từ vài Folder là thấy bất cập ngay.
Nếu có tài liệu, kinh nghiệm hay với Dax, mong anh chia sẻ để anh/em diễn đàn cùng phát triển.
Vâng ạ, đúng là so sánh thì hơi khập khiễng, dùng VBA thì cơ động, chỉ là cần phải suy nghĩ nhiều hơn, làm sao thuật toán phải tối ưu (từ khâu nhỏ nhất là khai báo biến) để code chạy nhanh nhất.
Với Power Query thì không cần nghĩ ngợi gì, cứ để cho nó tự thân làm, thôi thì thời gian suy nghĩ tối ưu code thì để thời gian đó làm việc khác.
Ta chỉ cần nữa Power Query – không phải chìa khóa vạn năng
Cũng vậy thôi bạn, Tôi không phủ định bài toán với đối tượng xử lý là trường (filed) hay bảng (table) thì Power query xử lý tốt (dù trước đó phải Clean Data – có chuẩn hay không chuẩn thì cũng phải là theo dạng cơ sở dữ liệu (dù chưa chuẩn)
Còn VBA thì linh động hơn: ở các bài toán đa dạng và nhiều dạng không chỉ kiểu cơ sở dữ liệu.
Nên không có gì hiểu lầm ở đây cả. Sử dụng đúng công cụ với dữ liệu mới là điều cần làm.
Dữ liệu nạp vào Power query không nhất thiết là table , filed mà là dạng any có thể là String, html…kết quả trả về cũng không nhất thiết là Table, filed (trừ khi phải nạp vào Data model)
Ví dụ như bài sắp xếp chuỗi tăng dần (dữ liệu là String) : A1,A5,A4,A3,A2,A2,A1=>A1,A2,A3,A4,A5 nếu viết VBA thì phải split dùng vòng lặp loại trùng , sau đó viết thêm hàm sắp xếp, hoặc dùng array list…
Còn trong power query thì đơn giản như vầy, các hàm trong M gần như loại bỏ việc phải dùng vòng lặp như trong VBA nó rất mạnh trong việc xử lý mảng, trường hợp đặc biệt lắm mới phải dùng loop, nó chỉ kém VBA các vấn đề liên quan đến window như cut, copy file, folder….Như bạn nói, các case đặc biệt thì dùng VBA , còn riêng về xử lý số liệu thì nên dùng các tool này, vì nó là gốc của các báo cáo BI2696
ah, Bác VietMini ah, Viết trên là muốn nói ngôn ngữ lập trình nói chung thôi, còn nếu nói rộng ra nữa thì cái gì chả làm được, lại lạc lối vào việc là dùng 1 công cụ giải quyết mọi thứ. Vì dù là gì thì cuối cùng cũng là xử lý vấn đề một cái hệ thống.
Nên VBA hay Power Query cũng chỉ là một phần rất nhỏ của xử lý dữ liệu thôi.
ah, Bác VietMini ah, Viết trên là muốn nói ngôn ngữ lập trình nói chung thôi, còn nếu nói rộng ra nữa thì cái gì chả làm được, lại lạc lối vào việc là dùng 1 công cụ giải quyết mọi thứ. Vì dù là gì thì cuối cùng cũng là xử lý vấn đề một cái hệ thống.
Nên VBA hay Power Query cũng chỉ là một phần rất nhỏ của xử lý dữ liệu thôi.
Bạn lôi cả python và R nữa thì là hết rồi
Các bài viết tôi chỉ muốn nói, không nên lạm dụng hay tôn thờ 1 công cụ xử lý hết các vấn đề, Thậm chí cả Python và R cũng vậy vẫn có những hạn chế của nó. Hay cả Excel sẽ có đến lúc cũng phải thay đổi lớn.
Khi xử lý các bài toán lớn thiên về tổ chức cấu trúc cơ sở dữ liệu thì nên dùng các tool (công cụ) như bạn nói – còn trái lại chỉ là cố gắng sử dụng các tiểu xảo mà thôi, vì Clean Data không phải là mục đích chính , bước chính của các tool này – nếu cố ép chỉ là gượng gạo.
Tôi không đồng ý với bài #40. Trước khi cỡi xe Dream thì cả thế hệ tôi đã trải qua Honda Dame (C50, chế biến lại từ CUB để xuất cảng sang VN) và SS50 (về sau này các bạn gọi là Honda 67). Honda 67 chỉ có thể xoáy nòng đến độ nào thôi. Cuối cùng thì Dream vẫn thắng.
Hầu hết những gì ta cần ở ADO (*) đều có thể dùng PowerQuery để xử lý.
Học M (**) cũng đâu có khó hơn SQL?
Chung quy chỉ do cái tư tưởng nghĩ rằng lập trình (VBA) là xịn, thêm SQL nghe như lân thấy pháo.
Trên thực tế, đồ cổ thì nên bắt đầu nghĩ tới thay thế chúng là vừa. Và đó là lý do tôi xen vào thớt này.
(*) ở đây ta chỉ nói ADO trong ngữ cảnh VBA. Thực tế ADO chỉ là một COM, ngôn ngữ khác cũng có thể gọi được.
(**) M nó có 007 làm việc cho nó hữu hiệu lắm :p
(***) M có nhiều cải tiến học từ sự thất bại của LINQ. Nếu luyện đến trình độ thì lambda của các ngôn ngữ mới có thể thay thế rất nhiều vòng lặp.
Ngoài Delphi ra, có thể nói tôi đã trải nghiệm qua gần hết những frameworks và ngôn ngữ. Cho nên lúc nói chuyện, tôi có chú ý đến các ngôn ngữ lập trình nói chung – thế hệ 1, 2, 3, 4, 5.