Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Memo-mohammed
Frequent Visitor

Lists of Groups by overlapping datetime

Hello

Im very new to Power Query and i need help .

I have a table :

 

IDAlarm-IDSector-idOccurred-On Cleared-On
28127020 29/8/2023 12:3429/8/2023 12:39
8322312029/8/2023 11:4729/8/2023 11:48
59227020 29/8/2023 11:1929/8/2023 11:23
59227020 29/8/2023 11:0729/8/2023 11:14
5922312229/8/2023 10:4529/8/2023 10:48
5922312129/8/2023 10:4629/8/2023 10:48
5922312029/8/2023 10:4629/8/2023 10:48
5922312229/8/2023 11:3029/8/2023 11:35
5922312129/8/2023 11:3029/8/2023 11:35
5922312029/8/2023 11:3029/8/2023 11:35
5922312129/8/2023 11:4029/8/2023 11:43
5922312029/8/2023 11:4029/8/2023 11:43
5922312229/8/2023 11:4629/8/2023 11:49
5922312129/8/2023 11:4629/8/2023 11:49
5922312029/8/2023 11:4729/8/2023 11:49
5922312229/8/2023 11:5529/8/2023 11:59
5922312129/8/2023 11:5529/8/2023 11:59
5922312029/8/2023 11:5529/8/2023 11:59

 

And I need a list of groups like this 

Memomohammed_0-1694192780857.png

 

How can i group them by ovarlapping function in Power Query ?

Thank you

2 ACCEPTED SOLUTIONS
AlienSx
Super User
Super User

Hello, @Memo-mohammed try this

let
    Source = your_table,
    sorted = Table.Sort(Source,{{"ID", Order.Ascending}, {"Alarm-ID", Order.Ascending}, {"Occurred-On ", Order.Ascending}, {"Cleared-On", Order.Ascending}}),
    g1 = 
        Table.Group(
            sorted, {"ID", "Alarm-ID", "Occurred-On ", "Cleared-On"}, {{"All", each _}}, GroupKind.Local,
            (s, c) => 
                Byte.From(
                    List.AnyTrue(
                        {s[ID] <> c[ID],
                        s[#"Alarm-ID"] <> c[#"Alarm-ID"],
                        s[#"Cleared-On"] < c[#"Occurred-On "]}
                    )
                )),
    g2 = Table.Group(g1, {"ID", "Alarm-ID"}, {{"All", each _[All]}})
in
    g2

View solution in original post

let
    Source = your_table,
    sorted = Table.Sort(Source,{{"ID", Order.Ascending}, {"Alarm-ID", Order.Ascending}, {"Occurred-On ", Order.Ascending}, {"Cleared-On", Order.Ascending}}),
    g1 = 
        Table.Group(
            sorted, {"ID", "Alarm-ID", "Occurred-On ", "Cleared-On"}, {{"All", each _}}, GroupKind.Local,
            (s, c) => 
                Byte.From(
                    List.AnyTrue(
                        {s[ID] <> c[ID],
                        s[#"Alarm-ID"] <> c[#"Alarm-ID"],
                        s[#"Cleared-On"] < c[#"Occurred-On "]}
                    )
                ))[All],
    tbl_tx = 
        Table.Combine(
            List.Transform(
                g1, 
                (x) => 
                    #table(
                        {"ID", "Alarm-ID", "Max Occured-On", "Min Cleared-On", "Sector-id"}, 
                        {{x[ID]{0}, x[#"Alarm-ID"]{0}, List.Max(x[#"Occurred-On "]), List.Min(x[#"Cleared-On"]), 
                        Text.Combine(List.Transform(List.Sort(x[#"Sector-id"]), Text.From), ", ")}})
            )
        )
in
    tbl_tx

View solution in original post

6 REPLIES 6
Memo-mohammed
Frequent Visitor

Thank you @AlienSx 

Woked perfect thanks.

 

Now I need Expand The list like That

 

- Max of Occurred-On 

- Min of Cleared-On

- New column  Sector-id with secor in Tablt (0,1) or (0.1.2) ...

thanks for your efforts 

 

Microsoft-33.png

first we wrapped tables into lists, now you want to expand... I am confused, maybe this is what you want...

let
    Source = your_table,
    sorted = Table.Sort(Source,{{"ID", Order.Ascending}, {"Alarm-ID", Order.Ascending}, {"Occurred-On ", Order.Ascending}, {"Cleared-On", Order.Ascending}}),
    g1 = 
        Table.Group(
            sorted, {"ID", "Alarm-ID", "Occurred-On ", "Cleared-On"}, {{"All", each _}}, GroupKind.Local,
            (s, c) => 
                Byte.From(
                    List.AnyTrue(
                        {s[ID] <> c[ID],
                        s[#"Alarm-ID"] <> c[#"Alarm-ID"],
                        s[#"Cleared-On"] < c[#"Occurred-On "]}
                    )
                ))[All],
    tbl_tx = 
        Table.Combine(
            List.Transform(
                g1, 
                (x) => 
                    #table(
                        {"ID", "Alarm-ID", "Max Occured-On", "Min Cleared-On", "Sector-id"}, 
                        {{x[ID]{0}, x[#"Alarm-ID"]{0}, List.Max(x[#"Occurred-On "]), List.Min(x[#"Cleared-On"]), x[#"Sector-id"]}})
            )
        ),
    #"Expanded Sector-id" = Table.ExpandListColumn(tbl_tx, "Sector-id")
in
    #"Expanded Sector-id"

Thank you for your replay.
What I want exactly is to assemble the [Sector-IDs] exactly like the picture (0,1,2) 

111111.png

 

let
    Source = your_table,
    sorted = Table.Sort(Source,{{"ID", Order.Ascending}, {"Alarm-ID", Order.Ascending}, {"Occurred-On ", Order.Ascending}, {"Cleared-On", Order.Ascending}}),
    g1 = 
        Table.Group(
            sorted, {"ID", "Alarm-ID", "Occurred-On ", "Cleared-On"}, {{"All", each _}}, GroupKind.Local,
            (s, c) => 
                Byte.From(
                    List.AnyTrue(
                        {s[ID] <> c[ID],
                        s[#"Alarm-ID"] <> c[#"Alarm-ID"],
                        s[#"Cleared-On"] < c[#"Occurred-On "]}
                    )
                ))[All],
    tbl_tx = 
        Table.Combine(
            List.Transform(
                g1, 
                (x) => 
                    #table(
                        {"ID", "Alarm-ID", "Max Occured-On", "Min Cleared-On", "Sector-id"}, 
                        {{x[ID]{0}, x[#"Alarm-ID"]{0}, List.Max(x[#"Occurred-On "]), List.Min(x[#"Cleared-On"]), 
                        Text.Combine(List.Transform(List.Sort(x[#"Sector-id"]), Text.From), ", ")}})
            )
        )
in
    tbl_tx

worked like a charm.
Thank you @AlienSx 

AlienSx
Super User
Super User

Hello, @Memo-mohammed try this

let
    Source = your_table,
    sorted = Table.Sort(Source,{{"ID", Order.Ascending}, {"Alarm-ID", Order.Ascending}, {"Occurred-On ", Order.Ascending}, {"Cleared-On", Order.Ascending}}),
    g1 = 
        Table.Group(
            sorted, {"ID", "Alarm-ID", "Occurred-On ", "Cleared-On"}, {{"All", each _}}, GroupKind.Local,
            (s, c) => 
                Byte.From(
                    List.AnyTrue(
                        {s[ID] <> c[ID],
                        s[#"Alarm-ID"] <> c[#"Alarm-ID"],
                        s[#"Cleared-On"] < c[#"Occurred-On "]}
                    )
                )),
    g2 = Table.Group(g1, {"ID", "Alarm-ID"}, {{"All", each _[All]}})
in
    g2

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

Top Solution Authors
Top Kudoed Authors