Câu hỏi về M-Code

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

doanlong49

Thành viên chính thức
Tham gia
12/7/13
Bài viết
60
Được thích
23
Giả sử tôi có file A có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A tên, B ngày, C mã, D là số lương, cột E là Tiền

1705022419425.png

File B có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A Ngày, B Mã, C số lượng, D là tiền, cột E là Tên

1705022480309.png

File C có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A Ngày, B Số lượng, C Tiền, D là Tên, cột E là Mã

1705022529364.png

Tôi muốn tổng hợp thành báo cáo có cấu trúc như sau

1705022672235.png

Vậy chúng ta phải viết M-Code thế nào để tối ưu nhất để ra được báo cáo như trên có tiêu đề các cột mong muốn. Hiện tại tôi cũng có 1 cách giải nhưng không chắc là tối ưu, nếu 2 ngày tới không có câu trả lời tôi sẽ đưa cách của tôi.

Chú thích: Các file A,B,C được lấy từng chương trình nên cấu trúc các cột không đổi.

Hiện tại tôi biết các vấn đề này các bạn cũng thường gặp khi tổng hợp các file lấy từ chương trình
 
Tối ưu nhất là làm cho cái bảng dữ liệu đúng chuẩn.

Chương trình/ phần mềm nào mà kỳ cục, lởm khởm thế cơ chứ.
Ah không có gì đâu bạn, có thể vào nhánh báo cáo nào đó thì người viết chương trình định dạng sẽ vào excel cột này. Người kia viết sẽ vào cột khác vì 1 chương trình lớn nhiều người viết sau đó tập hợp lại là chuyện thường.
Các bạn có cách viết M-code nào hay thì đưa lên mình chia sẻ kiến thức, với cấu trúc đó đừng hỏi tại sao chương trình nào xuất ra thế @befaint . Vì tôi đã nói như trên với cấu trúc đó tôi cũng viết được m-code để tổng hợp rồi. Ở đây chỉ tôi chỉ muốn biết có kiến thức mới để học thêm, cũng nhưng tìm hiểu thêm.
 
vào nhánh báo cáo nào đó thì người viết chương trình định dạng sẽ vào excel cột này. Người kia viết sẽ vào cột khác vì 1 chương trình lớn nhiều người viết sau đó tập hợp lại là chuyện thường.

Ở đâu mà toàn người tạo ra một đống rác to đùng thế bạn?
Rác thải thế mà cũng được gọi là báo cáo. Lại còn cái gì mà "chương trình lớn" để khè. =]]]]]

Đi hỏi bài thì cầu thị một chút nhé bạn.
 
Ah không có gì đâu bạn, có thể vào nhánh báo cáo nào đó thì người viết chương trình định dạng sẽ vào excel cột này. Người kia viết sẽ vào cột khác
Đó không phải là vấn đề. Data không đúng chuẩn ở chỗ không có tiêu đề.
Chỉ cần có tiêu đề (lấy tên column của table thì có gì khó) mà không có, thì không kể là phần mềm lớn.
Bài này tôi cố gắng thì cũng làm được, nhưng không làm vì nó là công việc dọn rác.
 
Giả sử tôi có file A có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A tên, B ngày, C mã, D là số lương, cột E là Tiền

View attachment 298356

File B có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A Ngày, B Mã, C số lượng, D là tiền, cột E là Tên

View attachment 298357

File C có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A Ngày, B Số lượng, C Tiền, D là Tên, cột E là Mã

View attachment 298358

Tôi muốn tổng hợp thành báo cáo có cấu trúc như sau

View attachment 298359

Vậy chúng ta phải viết M-Code thế nào để tối ưu nhất để ra được báo cáo như trên có tiêu đề các cột mong muốn. Hiện tại tôi cũng có 1 cách giải nhưng không chắc là tối ưu, nếu 2 ngày tới không có câu trả lời tôi sẽ đưa cách của tôi.

Chú thích: Các file A,B,C được lấy từng chương trình nên cấu trúc các cột không đổi.

Hiện tại tôi biết các vấn đề này các bạn cũng thường gặp khi tổng hợp các file lấy từ chương trình
Dữ liệu kỳ cục, mà Báo cáo cũng kỳ cục, ai lại báo cáo không nhóm lại như vậy. Còn bạn muốn cải tiến thì bạn nên gửi cái của bạn lên=> sau đó hỏi có giải pháp nào tối ưu hơn không? Bạn lo người khác xài mất hàm của bạn à
 
Dữ liệu kỳ cục, mà Báo cáo cũng kỳ cục, ai lại báo cáo không nhóm lại như vậy. Còn bạn muốn cải tiến thì bạn nên gửi cái của bạn lên=> sau đó hỏi có giải pháp nào tối ưu hơn không? Bạn lo người khác xài mất hàm của bạn à
Tôi nghĩ bạn cũng không biết cách làm. Tôi cũng có nói 2 ngày sau tôi đưa cách làm của tôi lên chứ không có nói là giấu. Bạn chưa xử lý qua nhiều chương trình sẽ không thấy việc đổ data từ các chương trình sẽ có nhiều trường hợp đặt biệt là những chương trình viết bằng Oracle từ 2010 trở về trước. Nên đừng nói là dữ liệu kỳ cục tại mình chưa thấy qua thôi, tôi nghĩ bác VietMini sẽ biết vấn đề đổ file từ chương trình về excel sẽ có những trường hợp này có tiêu đề cột 1 đường mà kết quả dữ liệu là một nẻo, mình phải nhìn trên chương trình hoặc file pdf để biết dữ liệu cột đó tên gì.
 
Data Migration Rules:
- Việc "tối đa" chỉ có thể thực hiện khi quy trình handshake có thể được chuẩn hóa.

Không làm chủ được đầu vào (Oracle gì đó) thì giao diện bắt buộc phải thay đổi liên tục. Quy trình xếp là "tối ưu" hôm nay có thể không xài được ngày mai.

Hiện tại thớt có sẵn cách làm, cứ nó ra được kết quả đúng, tin cậy thì coi như hiệu quả. Thay đổi làm chi.

Người khác nếu muốn đưa ra giải pháp nào thì cũng qua chu trình tìm hiểu, thử này nọ. Ngưới ta có ngồi vào vị trí ấy đâu mà biết hết các gút mắc của vấn đề. Ít nhất phải nhìn qua cách làm hiện tại của thớt mới đoán được vấn đề.
 
Tôi nghĩ bạn cũng không biết cách làm. Tôi cũng có nói 2 ngày sau tôi đưa cách làm của tôi lên chứ không có nói là giấu. Bạn chưa xử lý qua nhiều chương trình sẽ không thấy việc đổ data từ các chương trình sẽ có nhiều trường hợp đặt biệt là những chương trình viết bằng Oracle từ 2010 trở về trước. Nên đừng nói là dữ liệu kỳ cục tại mình chưa thấy qua thôi, tôi nghĩ bác VietMini sẽ biết vấn đề đổ file từ chương trình về excel sẽ có những trường hợp này có tiêu đề cột 1 đường mà kết quả dữ liệu là một nẻo, mình phải nhìn trên chương trình hoặc file pdf để biết dữ liệu cột đó tên gì.
Tôi nói thật với bạn, câu hỏi này của bạn chả có một tí khó nào đối với tôi cả. Dĩ nhiên bạn nói vậy nên người tham gia góp ý trả lời chắc chắn không có tôi rồi! Tôi nói nó kỳ cục, vì sao có phần mềm nào mà nó thiết kế và quản lý lại tạo ra rác như vậy mà vẫn được sử dụng. Tôi không phải lần đầu đọc bài của bạn, nên tôi biết sơ bộ trình độ của bạn ở đâu. Đừng đánh giá phiến diện, đi hỏi thì nên cầu thị một tí.
 
Tôi nói thật với bạn, câu hỏi này của bạn chả có một tí khó nào đối với tôi cả. Dĩ nhiên bạn nói vậy nên người tham gia góp ý trả lời chắc chắn không có tôi rồi! Tôi nói nó kỳ cục, vì sao có phần mềm nào mà nó thiết kế và quản lý lại tạo ra rác như vậy mà vẫn được sử dụng. Tôi không phải lần đầu đọc bài của bạn, nên tôi biết sơ bộ trình độ của bạn ở đâu. Đừng đánh giá phiến diện, đi hỏi thì nên cầu thị một tí.
Không khó thì bạn cứ đưa lên m-code lên, tôi cũng sẽ đưa cách tôi hiện tại đang sử dụng.
 
Giả sử tôi có file A có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A tên, B ngày, C mã, D là số lương, cột E là Tiền

View attachment 298356

File B có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A Ngày, B Mã, C số lượng, D là tiền, cột E là Tên

View attachment 298357

File C có cấu trúc dữ liệu thế này mặc định chúng ta sẽ hiểu: Cột A Ngày, B Số lượng, C Tiền, D là Tên, cột E là Mã

View attachment 298358

Tôi muốn tổng hợp thành báo cáo có cấu trúc như sau

View attachment 298359

Vậy chúng ta phải viết M-Code thế nào để tối ưu nhất để ra được báo cáo như trên có tiêu đề các cột mong muốn. Hiện tại tôi cũng có 1 cách giải nhưng không chắc là tối ưu, nếu 2 ngày tới không có câu trả lời tôi sẽ đưa cách của tôi.

Chú thích: Các file A,B,C được lấy từng chương trình nên cấu trúc các cột không đổi.

Hiện tại tôi biết các vấn đề này các bạn cũng thường gặp khi tổng hợp các file lấy từ chương trình
Bài này khó thì cũng là khó thật, nhưng chắc cũng có cách xử lý. Tuy nhiên phải có file dữ liệu thật thì mới tính toán được.
 
Bài này khó thì cũng là khó thật, nhưng chắc cũng có cách xử lý. Tuy nhiên phải có file dữ liệu thật thì mới tính toán được.
Dữ liệu thật cũng xuất ra vậy thôi anh. Nên em chỉ đưa ví dụ dữ liệu được xuất ra từ chương trình
Hiện tại tôi làm một table chưa tên cột để nối với tên file gọi là gọi table Header
1705040238305.png

Đây là Mcode mình viết sử dụng, với cách này chúng ta có thể lấy dữ liệu từ các file khác nhau để tạo ra một file tổng hợp chứ tất cả các cột mà chúng ta muốn gọi là facttable

Mã:
let
    Source = Folder.Files("D:\Data"),//Đổi source phù hợp nơi lưu file A,B,C
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Name", "Content"}),
    GetFileName = Table.TransformColumns(#"Removed Other Columns", {{"Name", each Text.BeforeDelimiter(_, ".xlsx"), type text}}),
    #"Added Custom" = Table.AddColumn(GetFileName, "DataFile", each Excel.Workbook([Content]){[Item="Sheet1",Kind="Sheet"]}[Data]),
    Header = Excel.CurrentWorkbook(){[Name="Header"]}[Content],
    #"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Name"}, Header, {"ReportName"}, "Header", JoinKind.LeftOuter),
    #"Append data" = Table.AddColumn(#"Merged Queries", "AppendData", each Table.PromoteHeaders (Table.RemoveColumns(Table.Combine({[Header],[DataFile]}),{"ReportName"}))),
    #"Expanded AppendData" = Table.ExpandTableColumn(#"Append data", "AppendData", {"Name", "Date", "Code", "Qty", "Amount"}, {"Name.1", "Date", "Code", "Qty", "Amount"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Expanded AppendData",{"Name.1", "Date", "Code", "Qty", "Amount"})
in
    #"Removed Other Columns1"

Khi đi làm cho công ty thì dữ liệu ngta xuất ra thế nào thì chúng ta ko có quyền nói dữ liệu họ kỳ cục, thế này thế kia. Có những công ty lớn dữ liệu người xuất ra nhưng thế có thể do tối ưu cách để xuất ra nhiệm vụ mình phải giải quyết vấn đề đó
 
Dữ liệu thật cũng xuất ra vậy thôi anh. Nên em chỉ đưa ví dụ dữ liệu được xuất ra từ chương trình
Hiện tại tôi làm một table chưa tên cột để nối với tên file gọi là gọi table Header
View attachment 298366

Đây là Mcode mình viết sử dụng, với cách này chúng ta có thể lấy dữ liệu từ các file khác nhau để tạo ra một file tổng hợp chứ tất cả các cột mà chúng ta muốn gọi là facttable

Mã:
let
    Source = Folder.Files("D:\Data"),//Đổi source phù hợp nơi lưu file A,B,C
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Name", "Content"}),
    GetFileName = Table.TransformColumns(#"Removed Other Columns", {{"Name", each Text.BeforeDelimiter(_, ".xlsx"), type text}}),
    #"Added Custom" = Table.AddColumn(GetFileName, "DataFile", each Excel.Workbook([Content]){[Item="Sheet1",Kind="Sheet"]}[Data]),
    Header = Excel.CurrentWorkbook(){[Name="Header"]}[Content],
    #"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Name"}, Header, {"ReportName"}, "Header", JoinKind.LeftOuter),
    #"Append data" = Table.AddColumn(#"Merged Queries", "AppendData", each Table.PromoteHeaders (Table.RemoveColumns(Table.Combine({[Header],[DataFile]}),{"ReportName"}))),
    #"Expanded AppendData" = Table.ExpandTableColumn(#"Append data", "AppendData", {"Name", "Date", "Code", "Qty", "Amount"}, {"Name.1", "Date", "Code", "Qty", "Amount"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Expanded AppendData",{"Name.1", "Date", "Code", "Qty", "Amount"})
in
    #"Removed Other Columns1"

Khi đi làm cho công ty thì dữ liệu ngta xuất ra thế nào thì chúng ta ko có quyền nói dữ liệu họ kỳ cục, thế này thế kia. Có những công ty lớn dữ liệu người xuất ra nhưng thế có thể do tối ưu cách để xuất ra nhiệm vụ mình phải giải quyết vấn đề đó
Code bằng ngôn ngữ gì lạ quá, mình xem không hiểu gì hết. Tuy nhiên nếu code này đáp ứng được yêu cầu công việc thì cứ vậy mà xài, thay đổi chi cho mệt người.
Với trình này thì trên GPE không có mấy người đâu. Chỉ với từ M Code mình cũng không hiểu nó là gì luôn mới khổ
 
Code bằng ngôn ngữ gì lạ quá, mình xem không hiểu gì hết. Tuy nhiên nếu code này đáp ứng được yêu cầu công việc thì cứ vậy mà xài, thay đổi chi cho mệt người.
Với trình này thì trên GPE không có mấy người đâu. Chỉ với từ M Code mình cũng không hiểu nó là gì luôn mới khổ
code trong Microsoft Power BI đó anh https://learn.microsoft.com/en-us/powerquery-m/quick-tour-of-the-power-query-m-formula-language
 
Giải thuật cần gì phải phức tạp thế, tôi làm thử:
1705047247574.png
Tôi không có nhu cầu thi đấu với bạn, tôi chỉ chứng minh câu nói của tôi đã nói ở trên
 
Chỉ với từ M Code mình cũng không hiểu nó là gì luôn mới khổ
Đó là ngôn ngữ của Power query, có từ lâu lắm rồi, tài liệu căn bản có từ 2019 (power query và hàm M căn bản), tài liệu hàm M căn bản 2020, nâng cao Tài liệu hướng dẫn Power query (2022).

Với trình này thì trên GPE không có mấy người đâu
Nhiều vô kể ấy nhé: @tranhungdao12a3 ở bài trên, và @excel_lv1.5 là 2 người giỏi nhất mà tôi còn phải học. Còn những người khác nữa.
Ghi chú:
Người giỏi không làm mọi thứ, nhất là không xử lý rác.
 
Giải thuật cần gì phải phức tạp thế, tôi làm thử:
View attachment 298370
Tôi không có nhu cầu thi đấu với bạn, tôi chỉ chứng minh câu nói của tôi đã nói ở trên
Với cách của tôi thì nếu có nhiều kiểu phải cần tổng hợp thì mình chỉ cần tùy biến trên table header, với các cột dữ liệu cần lấy khác nhau có thể có các cột mình không cần lấy.
 
Đó là ngôn ngữ của Power query, có từ lâu lắm rồi, tài liệu căn bản có từ 2019 (power query và hàm M căn bản), tài liệu hàm M căn bản 2020, nâng cao Tài liệu hướng dẫn Power query (2022).


Nhiều vô kể ấy nhé: @tranhungdao12a3 ở bài trên, và @excel_lv1.5 là 2 người giỏi nhất mà tôi còn phải học. Còn những người khác nữa.
Ghi chú:
Người giỏi không làm mọi thứ, nhất là không xử lý rác.
Uầy, em giờ mới đang bắt đầu học mà Sư Phụ, mới biết sơ sơ một tí thôi ạ! Sư phụ nói vậy em sợ!
 
...
Ghi chú:
Người giỏi không làm mọi thứ, nhất là không xử lý rác.
Power Query và M code có khả năng sử lý rác. Và đó cũng là một ưu điểm của Excel so với Google Sheets.
Tuy nhiên, về RÁC thì:
1. Đã nói "rác" thì làm gì chuẩn được. Nếu chuẩn thì đã không phải là rác.
2. Rác có nhiều loại, loại tái chế được và loại chỉ đem đi chôn.
Về giải thuật thì:
1. Mỗi giải thuật tốt có điểm mượt (sweet points) của nó. Với loại rác A thì giải thuật X tối ưu nhưng với rác B thì có thể Y mới tối ưu.

Vì vậy, nếu muốn tối ưu thì phải phân tích đống rác đó. Ví dụ có bao nhiêu phần trăm tái chế, bao nhiêu phần trăm phải đem chôn, chưa kể loại rác độc hại phải sử lý đặc biệt.

Túm lại, cái gì thớt đã dùng được thì cứ dùng tiếp. Tội gì phải tìm cái hiệu quả hơn? Tháng tới, rác đổi kiểu thì phải nghiên cứu sửa lại?
Như tôi đã nhắc ở bài #8, đã không làm chủ được đầu vào thì không có giải thuật nào tối ưu cả.
 
2. Rác có nhiều loại, loại tái chế được và loại chỉ đem đi chôn.
Đối với tôi thì xử lý dữ liệu không chuẩn bao gồm:
- dữ liệu ngày tháng, số dạng text
- dữ liệu text cần tách, gộp
- dữ liệu dạng bảng ngang
- Số lượng cột khác nhau
- ...
Tất cả gọi là xử lý dữ liệu không chuẩn, không phải xử lý rác. Nói chung là không chuẩn về mặt dữ liệu hoặc cấu trúc bảng.

Còn không có tiêu đề, thì thậm chí không được coi là bảng. Thì theo tôi là yêu cầu 3 tên lập trình viên kia xuất dữ liệu cho tử tế.
 
Web KT
Back
Top Bottom