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

Liên hệ QC
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

  • Tìm ngày nhập liền trước.xlsx
    9.5 KB · Đọc: 12
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

  • Tìm ngày nhập cuối cùng.xlsx
    19.2 KB · Đọc: 5
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: 1
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

  • 1705113440110.png
    1705113440110.png
    49 KB · Đọc: 6
  • Tìm ngày nhập liền trước.xlsx
    172.5 KB · Đọc: 3
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

  • data.xlsx
    11.8 KB · Đọc: 4
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
Back
Top Bottom