Forum Discussion
Date lookup between ranges in PowerQuery
- Anonymous1 year ago
Hi Anonymous ,
Thanks for jgeddes reply.Here is my sample data
Raw dataLatest Booking Submission Date 2/15/2023 2/1/2023 4/1/2023
You can try the following codelet MRSVersion = #"MRS version", RawData = #"Raw data", Addcustom = Table.AddColumn(RawData, "MRSVersion", each let submissionDate = [Latest Booking Submission Date], matchingRow = Table.SelectRows(MRSVersion, each _[MRS Start] <= submissionDate and _[MRS End] >= submissionDate) in if Table.IsEmpty(matchingRow) then null else matchingRow{0}[MRS version] ) in AddcustomFinal output
Best regards,
Albert HeIf this post helps, then please consider Accept it as the solution to help the other members find it more quickly
- 1 year ago
Hi Anonymous, check also this:
let T1 = [ a = Date.From(DateTime.LocalNow()), b = List.Generate( ()=> { Date.AddDays(a, -12000), Date.AddDays(a, -11994) }, each _{0} <= a, each { Date.AddDays(_{0}, 7), Date.AddDays(_{1}, 7) } ), c = Table.AddIndexColumn(Table.FromRows(b, type table[MRS Start=date, MRS End=date]), "MRS Version", 1) ][c], T1_SortedRows = Table.Sort(T1,{{"MRS Start", Order.Ascending}}), T1_Ad_Date = Table.AddColumn(T1_SortedRows, "Date", each List.Dates([MRS Start], Duration.TotalDays([MRS End]-[MRS Start])+1, #duration(1,0,0,0)), type {date}), // This table has to be uniqe per [Date] T1_ExpandedDate = Table.ExpandListColumn(T1_Ad_Date, "Date"), // Do not add any new columns after this step to T1 (do it before this step if necessary) T1_AddKey = Table.AddKey(Table.ReorderColumns(T1_ExpandedDate, {"Date"} & List.RemoveItems(Table.ColumnNames(T1_ExpandedDate), {"Date"})), {"Date"}, true), T2 = [ a = Date.From(DateTime.LocalNow()), b = Date.AddDays(a, -10000), c = Table.FromList(List.Dates(b, Duration.TotalDays(a-b)+1, #duration(1,0,0,0)), Splitter.SplitByNothing(), type table[D=date]), d = Table.AddIndexColumn(c, "i", Number.From(Table.FirstN(c, 1){0}[D])), e = Table.AddColumn(d, "Date", each Date.From(Number.Round(Number.RandomBetween(d{0}[i], Table.LastN(d, 1){0}[i]))), type date)[[Date]] ][e], MergedQueries = Table.NestedJoin(T2, {"Date"}, T1_AddKey, {"Date"}, "T1", JoinKind.LeftOuter), ExpandedT1 = Table.ExpandTableColumn(MergedQueries, "T1", {"MRS Version"}, {"MRS Version"}) in ExpandedT1
Hi Albert He,
Thank you very much for your help!
Although, i have been down the path you mention here and many others - the problem keeps being that by dataset is very heavy, so the PowerBI is crashing over and over again after loading approx 10k rows..
Do you have any solution that can prevent that from happening?
Hi Anonymous ,
You can try these following methods:
First, if possible, try to reduce the amount of data loaded. For example, load only the necessary columns or use filters to reduce the number of rows. Or process the dataset in smaller parts. You can use parameterized queries or partitioning strategies to load data in segments. Of course, you can also try to increase your computer's memory if you can to improve processing efficiency.
Second, you can use the Table.Buffer function to cache the table data and reduce the overhead of repeated calculations.
let
MRSVersion = #"MRS version",
RawData = #"Raw data",
BufferedMRSVersion = Table.Buffer(MRSVersion),
Addcustom = Table.AddColumn(RawData, "MRSVersion", each
let
submissionDate = [Latest Booking Submission Date],
matchingRow = Table.SelectRows(BufferedMRSVersion, each _[MRS Start] <= submissionDate and _[MRS End] >= submissionDate)
in
if Table.IsEmpty(matchingRow) then null else matchingRow{0}[MRS version]
)
in
Addcustom
Best practices when working with Power Query - Power Query | Microsoft Learn
Best regards,
Albert He
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly