Hàm đọc file2 nếu như file1 không tồn tại và ngược lại trong Power Querry

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
Sau khi tách ra nhiều dòng:
JavaScript:
let
    Source = List.Transform({"D:\MyPham\DOWNLOAD\csv2file\Ngày 1.csv","D:\MyPham\DOWNLOAD\csv2file\Trống.csv"}, each
    let
        a = Csv.Document(File.Contents(_), [Delimiter=",", Columns=23, Encoding=65001, QuoteStyle=QuoteStyle.None]) ,
        n = Table.RowCount(a),
        result = try if n is number then a else null otherwise null
    in result),
    Data = List.RemoveNulls(Source),
   Header = Table.PromoteHeaders(Data{0})
in
   Header
Trong đó:
- a là mở và lấy dữ liệu cả 2 file trong 1 vòng lặp List.Transform
- n là lấy số dòng dữ liệu của mỗi file, lấy được mỗi file 1 giá trị. Nếu file 1 không tồn tại thì không thể lấy số dòng, n của file đó không tính được và nhận giá trị lỗi (không biết hình dạng giá trị lỗi ra sao). Ngược lại file có tồn tại thì n nhận giá trị number.
- result là try otherwise: Tạo 1 list 2 phần tử:
Phần tử a nào có n là number thì lấy dữ liệu của a đó, ngược lại thì gán giá trị null. Otherwise không lấy được cũng null.
- Data lọc bỏ null trong list (nếu để thì khi lấy Header sẽ lỗi)
- Header: tạo header từ dòng đầu của table thứ nhất (lấy bằng phần tử thứ nhất {0})
________________________
Như vậy code này không lấy giá trị lỗi mà lấy giá trị ngược với lỗi để làm điều kiện rẽ nhánh. Hình như gọi là phản chứng.
Em cảm ơn các anh rất nhiều ạ, em dựa theo hàm trên thì đã tìm được hướng ra cho nó, cảm ơn các anh đã hỗ trợ em, chúc các anh thật nhiều sức khoẻ
 
Sau khi tách ra nhiều dòng:
JavaScript:
let
    Source = List.Transform({"D:\MyPham\DOWNLOAD\csv2file\Ngày 1.csv","D:\MyPham\DOWNLOAD\csv2file\Trống.csv"}, each
    let
        a = Csv.Document(File.Contents(_), [Delimiter=",", Columns=23, Encoding=65001, QuoteStyle=QuoteStyle.None]) ,
        n = Table.RowCount(a),
        result = try if n is number then a else null otherwise null
    in result),
    Data = List.RemoveNulls(Source),
   Header = Table.PromoteHeaders(Data{0})
in
   Header
Trong đó:
- a là mở và lấy dữ liệu cả 2 file trong 1 vòng lặp List.Transform
- n là lấy số dòng dữ liệu của mỗi file, lấy được mỗi file 1 giá trị. Nếu file 1 không tồn tại thì không thể lấy số dòng, n của file đó không tính được và nhận giá trị lỗi (không biết hình dạng giá trị lỗi ra sao). Ngược lại file có tồn tại thì n nhận giá trị number.
- result là try otherwise: Tạo 1 list 2 phần tử:
Phần tử a nào có n là number thì lấy dữ liệu của a đó, ngược lại thì gán giá trị null. Otherwise không lấy được cũng null.
- Data lọc bỏ null trong list (nếu để thì khi lấy Header sẽ lỗi)
- Header: tạo header từ dòng đầu của table thứ nhất (lấy bằng phần tử thứ nhất {0})
________________________
Như vậy code này không lấy giá trị lỗi mà lấy giá trị ngược với lỗi để làm điều kiện rẽ nhánh. Hình như gọi là phản chứng.
Em chào anh ạ, hiện tại em đang sài code của anh nhưng bị lỗi là khi file Ngày 1 không tồn tại, nó load file trống thì công thức trong ngày 1 của em nó bị nhảy số và bị N/A
VD: em đang để C4:C500 thì nó tự động nhảy thành C41:C512, xong lúc load lại ngày 1 thì nó không trả về như cũ, báo N/A luôn.

- Anh cho em hỏi làm thế nào nó có thể giữ được công thức cũ cho dù file nó có load file trống không ạ.

Em gửi a file đính kèm có data và công thức để anh xem thử
 

File đính kèm

  • Desktop.zip
    27.5 KB · Đọc: 5
Em chào anh ạ, hiện tại em đang sài code của anh nhưng bị lỗi là khi file Ngày 1 không tồn tại, nó load file trống thì công thức trong ngày 1 của em nó bị nhảy số và bị N/A
VD: em đang để C4:C500 thì nó tự động nhảy thành C41:C512, xong lúc load lại ngày 1 thì nó không trả về như cũ, báo N/A luôn.
Thứ nhất, code đó tuy vẫn đúng nhưng không phải code của tôi viết từ đầu,
Thứ hai, công thức của bạn quá phức tạp, tôi không muốn xem. Tuy nhiên, hãy viết công thức với tên cột của table thay vì địa chỉ dòng cột.
Thí dụ thay 'TGHĐ Ngày 1'!$A$3:$C$533 bằng TGHĐ_Ngày_1[[2024-07-04 Daily report]:[_1]]
bằng cách quét chọn từ dòng 2 đến hết thay vì dòng 3.
Thứ ba: file csv của bạn dư 1 dòng đầu, phải skip nó trước khi Promote header
Mã:
Header= Table.PromoteHeaders(Table.Skip(Data{0},1))
 
Lần chỉnh sửa cuối:
Thứ nhất, code đó tuy vẫn đúng nhưng không phải code của tôi viết từ đầu,
Thứ hai, công thức của bạn quá phức tạp, tôi không muốn xem. Tuy nhiên, hãy viết công thức với tên cột của table thay vì địa chỉ dòng cột.
Thí dụ thay 'TGHĐ Ngày 1'!$A$3:$C$533 bằng TGHĐ_Ngày_1[[2024-07-04 Daily report]:[_1]]
bằng cách quét chọn từ dòng 2 đến hết thay vì dòng 3.
Ahh, Em hiểu rồi ạ, em sẽ thử, cảm ơn anh nhiều ạ.
 
Nếu Skip 1 trước khi promote header thì TGHĐ_Ngày_1[[2024-07-04 Daily report]:[_1]] sẽ là TGHĐ_Ngày_1[[Date]:[Mold machine name]]
Dạ anh cho e hỏi thêm 1 câu nữa ạ, nếu em muốn không muốn sài nguyên cột mà chỉ sài từ 1 khoảng nhất định như là từ C10:C20hoặc C10:F20 thì sao ạ, khi e sổ hàm ra thì chỉ thấy toàn nguyên một cột như hình1722909271454.png
 
Dạ anh cho e hỏi thêm 1 câu nữa ạ, nếu em muốn không muốn sài nguyên cột mà chỉ sài từ 1 khoảng nhất định như là từ C10:C20hoặc C10:F20 thì sao ạ,
Với 1 bảng dữ liệu chuẩn thì khi dò tìm (Match) hoặc truy xuất (Index) không có lý do gì để chỉ tìm trong 1 khoảng nhỏ. Ngoài ra nếu là file "Trống" thì có đâu cái khoảng nhỏ đó?
khi e sổ hàm ra thì chỉ thấy toàn nguyên một cột như hình
Không ai gõ kiểu đó, mà là click chọn và Excel tự điền tên cột vào.
______
Tôi vẫn thấy dữ liệu có 1 đống những dòng trống ở giữa, và có vẻ như 1 file csv có 3 bảng chồng lên nhau. Vi phạm nguyên tắc và cấu trúc CSDL.
 
Em thử sử dụng skip như của anh cho thì nó báo không được ạ.
Đọc lại bài 23: Skip trong PQ chứ excel làm gì có skip.
Tôi vẫn thấy dữ liệu có 1 đống những dòng trống ở giữa, và có vẻ như 1 file csv có 3 bảng chồng lên nhau. Vi phạm nguyên tắc và cấu trúc CSDL.
Giả sử khi có file ngày 1, bảng trên cùng đến dòng 30. Nếu cứ chọn A3:A30 (không phải nguyên cột), thì nó là bảng trên cùng, nếu không có file ngày 1, mà lấy file trống thì 3 bảng gộp lại cũng chưa đến 30 dòng. Luôn luôn sai.
Phải tách mỗi file thành 3 bảng riêng biệt rồi mỗi bảng tra cứu nguyên cột.
 
Đọc lại bài 23: Skip trong PQ chứ excel làm gì có skip.

Giả sử khi có file ngày 1, bảng trên cùng đến dòng 30. Nếu cứ chọn A3:A30 (không phải nguyên cột), thì nó là bảng trên cùng, nếu không có file ngày 1, mà lấy file trống thì 3 bảng gộp lại cũng chưa đến 30 dòng. Luôn luôn sai.
Phải tách mỗi file thành 3 bảng riêng biệt rồi mỗi bảng tra cứu nguyên cột.
Mình có cách nào cố định được range $A$3:$C$500, cho dù có delete hay insert dòng mới thì nó vẫn không giữ nguyên $A$3:$C$500 không ạ
 
Mình có cách nào cố định được range $A$3:$C$500, cho dù có delete hay insert dòng mới thì nó vẫn không giữ nguyên $A$3:$C$500 không ạ
Hình như ở trên tôi nói là không. Và tôi nói biện pháp duy nhất là tách 1 file csv thành 3 bảng.
 
Web KT

Bài viết mới nhất

Back
Top Bottom