Công thức countif trong Power Query

Liên hệ QC

kelacloi

Thành viên thường trực
Tham gia
6/11/14
Bài viết
331
Được thích
156
Giới tính
Nam
Chào anh, chị,

Trong Power Query, để thêm một custom column sử dụng công thức countif dựa vào cột tên như trong file đính kèm thì câu lệnh như thế nào ạ?

Cảm ơn anh, chị.



1614845961452.png
 

File đính kèm

  • Test cong thuc (1).xlsx
    9 KB · Đọc: 61
Lần chỉnh sửa cuối:
Chào anh, chị,

Trong Power Query, để thêm một custom column sử dụng công thức countif dựa vào cột tên như trong file đính kèm thì câu lệnh như thế nào ạ?

Cảm ơn anh, chị.



View attachment 254835
Với hiểu biết hạn hẹp thì nó thế này:
Đưa bảng vào powerquery xong, sau đó dùng lệnh
Mã:
= Table.AddColumn(Source, "Custom", each List.Count(List.FindText(Source[Tên], [Tên])))
 
Với hiểu biết hạn hẹp thì nó thế này:
Đưa bảng vào powerquery xong, sau đó dùng lệnh
Mã:
= Table.AddColumn(Source, "Custom", each List.Count(List.FindText(Source[Tên], [Tên])))
Cảm ơn anh
Không phải kết quả em cần ạ.
Vì ở đây em muốn đếm ví dụ: An thì ở dòng 1 nó là 1, an lần thứ ở dòng 3 là 2,... Công thức tương tự như trong file em đính kèm ạ.

Em diễn giải trong file bị nhầm, em đã đính kèm lại rồi ạ.


1614845629371.png
 
Vì ở đây em muốn đếm ví dụ: An thì ở dòng 1 nó là 1, an lần thứ ở dòng 3 là 2,... Công thức tương tự như trong file em đính kèm ạ.
Thử:
= Table.AddColumn(Source, "Custom", each List.Count(List.FindText(List.FirstN(Source[Tên], List.PositionOf(Source[STT],[STT])+1),[Tên])))
1614847974220.png
 

File đính kèm

  • GPE.xlsx
    17.5 KB · Đọc: 113
dựa vào cột duy nhất bất kỳ. Nếu không có STT hay cột duy nhất nào thì tạo cột Index tương tự cột STT
Bổ sung:
Hàm List.PositionOf có 2 tham số (List và Text) tìm vị trí của text tìm thấy đầu tiên trong List. Vị trí bắt đầu từ 0
- Nếu Text xuất hiện nhiều lần cũng chỉ lấy vị trí đầu tiên.
- Tham số thứ 3 (opional occurrence) cho phép lấy vị trí đầu tiên hay cuối, hay lấy hết (mặc định lấy đầu tiên). Nếu lấy hết thì kết quả là 1 list
- Tham số thứ 4 (optional equationCriteria) định nghĩa điều kiện so sánh khi tìm kiếm
Do đó dùng cột Index cho bảo đảm không trùng và đúng thứ tự, tìm 5 thì phải là vị trí thứ 5 (Index 4), cộng 1 cho ra dòng hiện hành:

Mã:
List.PositionOf(Source[STT],[STT])+1

Diễn giải:
Tìm [STT] dòng hiện hành, trong list Source[STT] lấy vị trí của nó và cộng 1
 
Lần chỉnh sửa cuối:
em xin phép hỏi thêm xíu về topic này ạ:

em muốn countif theo tên thôi không có cột STT thì viết hàm như thế nào ạ?

Em cảm ơn.
 
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"STT", Int64.Type}, {"Tên", type text}, {"CongThucDem", Int64.Type}}),
BufTbl = Table.Buffer(#"Changed Type"),
Count = Table.AddColumn(BufTbl, "Count", (TABLE) => Table.RowCount(Table.SelectRows(BufTbl,(TMP) => TMP[STT] <= TABLE[STT] and TMP[Tên]=TABLE[Tên])))
in
Count
 
dựa vào cột duy nhất bất kỳ. Nếu không có STT hay cột duy nhất nào thì tạo cột Index tương tự cột STT
anh có thể hướng dẫn cách làm được ko ạ, em viết theo cú pháp hàm trong file thì làm được mà em chưa có hiểu cách làm để áp dụng cho các trường hợp tương tự ạ.
 
anh có thể hướng dẫn cách làm được ko ạ, em viết theo cú pháp hàm trong file thì làm được mà em chưa có hiểu cách làm để áp dụng cho các trường hợp tương tự ạ.
Mã:
Table.AddColumn(Source, "Custom", each List.Count(List.FindText(List.FirstN(Source[Tên], List.PositionOf(Source[STT],[STT])+1),[Tên])))
Thêm cột tên là "Custom", giá trị là đếm [Tên] trong dòng hiện hành được tìm thấy ở bên trên và cả dòng hiện hành.
- Đếm bằng List.Count
- Đếm cái gì: [Tên]
- Đếm ở đâu (bên trên và dòng hiện hành) bằng List.FirstN với tham số là [STT] hoặc vị trí tìm thấy số thứ tự + 1
- Vị trí [STT] tìm được bằng List.PositionOf lấy vị trí đầu tiên. Do [STT] duy nhất nên chính là vị trí dòng hiện hành
 
Với hiểu biết hạn hẹp thì nó thế này:
Đưa bảng vào powerquery xong, sau đó dùng lệnh
Mã:
= Table.AddColumn(Source, "Custom", each List.Count(List.FindText(Source[Tên], [Tên])))
Cách đếm của anh rất hay, hiện tại em cũng muốn đếm như sau: đếm số lượng nhưng với điều kiện của 2 cột, Ví dụ loại A trong tháng 7 là bao nhiêu chẳng hạn thì làm thế nào bác. Em tìm từ sáng giờ chưa nghĩ ra, mong bác bớt thời gian chỉ giáo
 
Sao lại đếm số lượng? tính tổng thì phải lẽ hơn.

PHP:
Tmp1Table = Table.SelectColumns(Source, {"Loại", "Tháng", "SL"})
Tmp2Table = Table.SelectRows(Tmp1Table, each [Loại] = "A" and [Tháng] = 7
Qty = List.Sum(Tmp2[SL])
 
Web KT
Back
Top Bottom