Power BI: Tìm ngày nhập liền trước của sản phẩm (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

nguyenvi1824

Thành viên mới
Tham gia
11/1/24
Bài viết
6
Được thích
0
Mình có file dữ liệu lớn, có cấu trúc như ví dụ. Mình cần xác định thời điểm nhập hàng liền trước để tính thời gian chờ nhập hàng của từng sản phẩm tại từng Cửa hàng.
Nhờ mọi người giúp tình huống dùng hàm DAX này or có giải pháp nào cho ra kết quả tương đương.
 

File đính kèm

Kết quả tương đương là sao?
Làm đại theo mình hiểu là ngày nhập lần cuối của từng mặt hàng tại từng cửa hàng...
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ngay", type date}, {"CuaHang", type text}, {"SanPham", type text}, {"LuongNhap", Int64.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"CuaHang", "SanPham"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"CuaHang", "uCuaHang"}, {"SanPham", "uSanPham"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Ngày Nhập Cuối", each List.Max(Table.SelectRows(Data,(var)=> var[CuaHang]= [uCuaHang] and var [SanPham]=[uSanPham] )[Ngay])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Ngày Nhập Cuối", type date}})
in
    #"Changed Type1"
 

File đính kèm

Kết quả tương đương là sao?
Làm đại theo mình hiểu là ngày nhập lần cuối của từng mặt hàng tại từng cửa hàng...
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ngay", type date}, {"CuaHang", type text}, {"SanPham", type text}, {"LuongNhap", Int64.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"CuaHang", "SanPham"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"CuaHang", "uCuaHang"}, {"SanPham", "uSanPham"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Ngày Nhập Cuối", each List.Max(Table.SelectRows(Data,(var)=> var[CuaHang]= [uCuaHang] and var [SanPham]=[uSanPham] )[Ngay])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Ngày Nhập Cuối", type date}})
in
    #"Changed Type1"
Mình mong kết quả trả về như ảnh này, anh xem giúp1704967630597.png
Bài đã được tự động gộp:

Kết quả tương đương là sao?
Làm đại theo mình hiểu là ngày nhập lần cuối của từng mặt hàng tại từng cửa hàng...
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ngay", type date}, {"CuaHang", type text}, {"SanPham", type text}, {"LuongNhap", Int64.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"CuaHang", "SanPham"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"CuaHang", "uCuaHang"}, {"SanPham", "uSanPham"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Ngày Nhập Cuối", each List.Max(Table.SelectRows(Data,(var)=> var[CuaHang]= [uCuaHang] and var [SanPham]=[uSanPham] )[Ngay])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Ngày Nhập Cuối", type date}})
in
    #"Changed Type1"
Mình mong kết quả trả về như ảnh này, anh xem giúp1704967630597.png
 

File đính kèm

  • 1704967516714.png
    1704967516714.png
    40 KB · Đọc: 2
Kết quả tương đương là sao?
Làm đại theo mình hiểu là ngày nhập lần cuối của từng mặt hàng tại từng cửa hàng...
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ngay", type date}, {"CuaHang", type text}, {"SanPham", type text}, {"LuongNhap", Int64.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"CuaHang", "SanPham"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"CuaHang", "uCuaHang"}, {"SanPham", "uSanPham"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Ngày Nhập Cuối", each List.Max(Table.SelectRows(Data,(var)=> var[CuaHang]= [uCuaHang] and var [SanPham]=[uSanPham] )[Ngay])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Ngày Nhập Cuối", type date}})
in
    #"Changed Type1"
Mình mong kết quả trả về như ảnh này, anh xem giúpView attachment 298340
Bạn viết hàm tạo cột như sau, do bạn chỉ lấy ngày mua trước có doanh số nên thêm điều kiện lọc số lượng mua>0 như hình là được
View attachment 298351
Rất cảm ơn anh. Sáng hôm nay lên cty sớm để thử luôn
 
Kết quả tương đương là sao?
Làm đại theo mình hiểu là ngày nhập lần cuối của từng mặt hàng tại từng cửa hàng...
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ngay", type date}, {"CuaHang", type text}, {"SanPham", type text}, {"LuongNhap", Int64.Type}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"CuaHang", "SanPham"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"CuaHang", "uCuaHang"}, {"SanPham", "uSanPham"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Ngày Nhập Cuối", each List.Max(Table.SelectRows(Data,(var)=> var[CuaHang]= [uCuaHang] and var [SanPham]=[uSanPham] )[Ngay])),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Ngày Nhập Cuối", type date}})
in
    #"Changed Type1"
Mình mong kết quả trả về như ảnh này, anh xem giúpView attachment 298340
Bạn viết hàm tạo cột như sau, do bạn chỉ lấy ngày mua trước có doanh số nên thêm điều kiện lọc số lượng mua>0 như hình là được
View attachment 298351
Rất cảm ơn anh. Sáng hôm nay lên cty sớm để thử luôn
Bạn viết hàm tạo cột như sau, do bạn chỉ lấy ngày mua trước có doanh số nên thêm điều kiện lọc số lượng mua>0 như hình là được
View attachment 298351
Hi anh, hôm qua em làm thì thấy kết quả gần với mục đích em hỏi rồi. Còn 1 chút nữa nên em thử mò theo hướng anh làm, nhưng chưa đc.
A xem lại hình em gửi.
Bạn viết hàm tạo cột như sau, do bạn chỉ lấy ngày mua trước có doanh số nên thêm điều kiện lọc số lượng mua>0 như hình là được
View attachment 298351
Hi anh, hôm qua em xem thì thấy kết quả gần với mục đích em hỏi. Còn chút em thử mò thêm nhưng chưa được nên lên hỏi tiếp.
Câu hỏi:
Tính thời gian (số ngày) từ lần nhập hàng trước đến lần nhập này tại từng Cửa hàng.
Điều kiện:
- Cứ mỗi ngày có phát sinh sl nhập >0 thì sẽ tính số ngày Cửa hàng chờ từ lần nhập trước (SL>0) cho đến lần nhập này (SL>0)
- Các cửa hàng cùng nhập 1 sản phẩm (ví dụ SP A).
- Các ngày SL nhập bằng 0 thì để trống
 

File đính kèm

Lần chỉnh sửa cuối:
Mình mong kết quả trả về như ảnh này, anh xem giúpView attachment 298340

Rất cảm ơn anh. Sáng hôm nay lên cty sớm để thử luôn

Hi anh, hôm qua em làm thì thấy kết quả gần với mục đích em hỏi rồi. Còn 1 chút nữa nên em thử mò theo hướng anh làm, nhưng chưa đc.
A xem lại hình em gửi.

Hi anh, hôm qua em xem thì thấy kết quả gần với mục đích em hỏi. Còn chút em thử mò thêm nhưng chưa được nên lên hỏi tiếp.
Câu hỏi:
Tính thời gian (số ngày) từ lần nhập hàng trước đến lần nhập này tại từng Cửa hàng.
Điều kiện:
- Cứ mỗi ngày có phát sinh sl nhập >0 thì sẽ tính số ngày Cửa hàng chờ từ lần nhập trước (SL>0) cho đến lần nhập này (SL>0)
- Các cửa hàng cùng nhập 1 sản phẩm (ví dụ SP A).
- Các ngày SL nhập bằng 0 thì để trống
Bạn mô tả số liệu trong file đi, mình ngại đọc rồi suy luận, mô tả số liệu và điền vô file rồi mình viết
 
Xem đúng kết quả không
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    CT = Table.TransformColumnTypes(Source,{{"Ngày", type date}, {"Cửa hàng", type text}, {"Sản phẩm", type text}, {"SL Nhập", Int64.Type}}),
    Filter = Table.SelectRows(CT, each ([SL Nhập] <> 0)),
    GR = Table.Combine(Table.Group(Filter, {"Cửa hàng", "Sản phẩm"}, {{"T", each let tbl = Table.AddIndexColumn(Table.Sort(_,"Ngày"),"TT",0) in Table.AddColumn(tbl, "Ngay truoc", each try tbl[Ngày]{[TT]-1} otherwise [Ngày])}})[T]),
    AdCol= Table.AddColumn(CT, "Ngày mua trước đó",(x)=> Table.SelectRows(GR,each [Cửa hàng]= x[Cửa hàng] and [Sản phẩm] =x[Sản phẩm] and [Ngày]=x[Ngày])[Ngay truoc]{0}?)
in
    AdCol
1705282143230.png
 
Bạn mô tả số liệu trong file đi, mình ngại đọc rồi suy luận, mô tả số liệu và điền vô file rồi mình viết
em mô tả lại file để rõ ràng hơn, anh viết giúp e. Số liệu trong file: ngày 1->5, 03 cửa hàng, 02 sản phẩm
Bài đã được tự động gộp:

Xem đúng kết quả không
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    CT = Table.TransformColumnTypes(Source,{{"Ngày", type date}, {"Cửa hàng", type text}, {"Sản phẩm", type text}, {"SL Nhập", Int64.Type}}),
    Filter = Table.SelectRows(CT, each ([SL Nhập] <> 0)),
    GR = Table.Combine(Table.Group(Filter, {"Cửa hàng", "Sản phẩm"}, {{"T", each let tbl = Table.AddIndexColumn(Table.Sort(_,"Ngày"),"TT",0) in Table.AddColumn(tbl, "Ngay truoc", each try tbl[Ngày]{[TT]-1} otherwise [Ngày])}})[T]),
    AdCol= Table.AddColumn(CT, "Ngày mua trước đó",(x)=> Table.SelectRows(GR,each [Cửa hàng]= x[Cửa hàng] and [Sản phẩm] =x[Sản phẩm] and [Ngày]=x[Ngày])[Ngay truoc]{0}?)
in
    AdCol
View attachment 298454
Kết quả đúng rồi bạn. Cách này là M code phải k. Nếu viết bằng DAX thì viết như thế nào bạn. Mình chưa biết M code, sợ sau này gặp lại tình huống như này
 

File đính kèm

Lần chỉnh sửa cuối:
em mô tả lại file để rõ ràng hơn, anh viết giúp e. Số liệu trong file: ngày 1->5, 03 cửa hàng, 02 sản phẩm
Bài đã được tự động gộp:


Kết quả đúng rồi bạn. Cách này là M code phải k. Nếu viết bằng DAX thì viết như thế nào bạn. Mình chưa biết M code, sợ sau này gặp lại tình huống như này
Bạn thử công thức này xem
Mã:
=var _datemax =MAXX(FILTER(Table1,Table1[Ngày]<EARLIER(Table1[Ngày])&&Table1[Cửa hàng]=EARLIER(Table1[Cửa hàng])&&Table1[Sản phẩm]=EARLIER(Table1[Sản phẩm])&&Table1[SL Nhập]>0),Table1[Ngày])
return
IF(AND(Table1[SL Nhập]>0,_datemax=BLANK()),Table1[Ngày],IF(AND(_datemax<>BLANK(),Table1[SL Nhập]>0),_datemax,BLANK()))
1705287187207.png
 
Bạn thử công thức này xem
Mã:
=var _datemax =MAXX(FILTER(Table1,Table1[Ngày]<EARLIER(Table1[Ngày])&&Table1[Cửa hàng]=EARLIER(Table1[Cửa hàng])&&Table1[Sản phẩm]=EARLIER(Table1[Sản phẩm])&&Table1[SL Nhập]>0),Table1[Ngày])
return
IF(AND(Table1[SL Nhập]>0,_datemax=BLANK()),Table1[Ngày],IF(AND(_datemax<>BLANK(),Table1[SL Nhập]>0),_datemax,BLANK()))
View attachment 298459
Mình làm dc r, cảm ơn bạn nhiều
 
Web KT

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

Back
Top Bottom