This is best Fabric, Power BI, SQL and AI community event. How do we know? The last event sold out! Save €200 with code FABCMTY200.
Register nowA new Data Days event is coming soon! This time we’re going bigger than ever. Fabric, Power BI, SQL, AI and more. Don't miss out.
HI I have columns
Employee ID, Start Date, Start Time, Finish Time
I am trying to identify overlapping but this is bringing up false every time.
(Table as table) as table =>
let
AddIndex = if Table.HasColumns(Table, "Index")
then Table
else Table.AddIndexColumn(Table, "Index", 1, 1, Int64.Type),
AddCheckColumn = Table.AddColumn(AddIndex, "Overlap", each List.AnyTrue(
List.Transform(
Table.SelectRows(AddIndex, each _[Index] <> [Index] and
_[Employee ID] = [Employee ID] and
_[Start Date] = [Start Date] and
(
(_[Start Time] < [Finish Time] and _[Finish Time] > [Start Time]) or
(_[Finish Time] > [Start Time] and _[Finish Time] <= [Finish Time]) or
(_[Start Time] <= [Start Time] and _[Finish Time] >= [Finish Time])
))[Index], each true))),
RemoveIndex = if Table.HasColumns(AddCheckColumn, "Index")
then Table.RemoveColumns(AddCheckColumn, {"Index"})
else AddCheckColumn
in
RemoveIndex
How can i get correct results?
Thanks
Solved! Go to Solution.
lets check the logic then I provide the solution for you. Consider tow rows with starting and ending time as [S1 E1] and [S2 E2] . Thes two rows have overlap if any of the below situation happen.
S2 < S1 <E2
S2<E1< E2
S1 < S2 <E1
S1<E2< E1
additionally you cant (usually) use two nested each _
so by knowing this, use the below formula.
(Table as table) as table =>
let
AddIndex =
if Table.HasColumns(Table, "Index") then
Table
else
Table.AddIndexColumn(Table, "Index", 1, 1, Int64.Type),
AddCheckColumn = Table.AddColumn(
AddIndex,
"Overlap",
each
Table.RowCount(
Table.SelectRows(
AddIndex,
(x)=> x[Employee ID] = _[Employee ID]
and ( x[Start Date] = [Start Date] )
and (
(x[Start Time] < _[Start Time] and x[Finish Time] > [Start Time])
or (x[Start Time] < _[Finish Time] and x[Finish Time] > [Finish Time])
or (_[Start Time] < x[Start Time] and _[Finish Time] > x[Start Time])
or (_[Start Time] < x[Finish Time] and _[Finish Time] > x[Finish Time])
)
)
)>0),
RemoveIndex =
if Table.HasColumns(AddCheckColumn, "Index") then
Table.RemoveColumns(AddCheckColumn, {"Index"})
else
AddCheckColumn
in
RemoveIndex
lets check the logic then I provide the solution for you. Consider tow rows with starting and ending time as [S1 E1] and [S2 E2] . Thes two rows have overlap if any of the below situation happen.
S2 < S1 <E2
S2<E1< E2
S1 < S2 <E1
S1<E2< E1
additionally you cant (usually) use two nested each _
so by knowing this, use the below formula.
(Table as table) as table =>
let
AddIndex =
if Table.HasColumns(Table, "Index") then
Table
else
Table.AddIndexColumn(Table, "Index", 1, 1, Int64.Type),
AddCheckColumn = Table.AddColumn(
AddIndex,
"Overlap",
each
Table.RowCount(
Table.SelectRows(
AddIndex,
(x)=> x[Employee ID] = _[Employee ID]
and ( x[Start Date] = [Start Date] )
and (
(x[Start Time] < _[Start Time] and x[Finish Time] > [Start Time])
or (x[Start Time] < _[Finish Time] and x[Finish Time] > [Finish Time])
or (_[Start Time] < x[Start Time] and _[Finish Time] > x[Start Time])
or (_[Start Time] < x[Finish Time] and _[Finish Time] > x[Finish Time])
)
)
)>0),
RemoveIndex =
if Table.HasColumns(AddCheckColumn, "Index") then
Table.RemoveColumns(AddCheckColumn, {"Index"})
else
AddCheckColumn
in
RemoveIndex
Do you whant to check each row with all the other rows and see is there any overlaping or do you whant to merge them?
Sign up to receive a private message when registration opens and key events begin.
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.