Forum Discussion

Sclark's avatar
Sclark
Frequent Visitor
8 years ago
Solved

Generate timestamp for each hour between range

I am looking to generate a timestamp for each hour between a range.   Columns: Ticket open [date time], Ticket suspended [date time], Ticket reactivated [date time], Ticket closed [date time]   E...
  • MarcelBeug's avatar
    8 years ago

    Example In Power Query:

     

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ticket ID", Int64.Type}, {"Ticket open", type datetime}, {"Ticket suspended", type datetime}, {"Ticket reactivated", type datetime}, {"Ticket closed", type datetime}}),
        DateAndHourTimes24 = Table.TransformColumns(#"Changed Type",{{"Ticket open",        each 24 * Number.From(DateTime.Date(_) & #time(Time.Hour(DateTime.Time(_)),0,0))},
                                                                     {"Ticket suspended",   each 24 * Number.From(DateTime.Date(_) & #time(Time.Hour(DateTime.Time(_)),0,0))},
                                                                     {"Ticket reactivated", each 24 * Number.From(DateTime.Date(_) & #time(Time.Hour(DateTime.Time(_)),0,0))},
                                                                     {"Ticket closed",      each 24 * Number.From(DateTime.Date(_) & #time(Time.Hour(DateTime.Time(_)),0,0))}}),
        AddedHourOpen = Table.AddColumn(DateAndHourTimes24, "Hour Open", each List.Transform({[Ticket open]..[Ticket suspended],[Ticket reactivated]..[Ticket closed]}, each DateTime.From(_ / 24)), type {datetime}),
        ExpandedHourOpen = Table.ExpandListColumn(AddedHourOpen, "Hour Open"),
        RemovedColumns = Table.RemoveColumns(ExpandedHourOpen,{"Ticket open", "Ticket suspended", "Ticket reactivated", "Ticket closed"})
    in
        RemovedColumns
  • v-jiascu-msft's avatar
    8 years ago

    Hi Sclark,

     

    Query code could be the best solution. Here is a DAX solution, which is ugly.

    1. Create a datetime table.

    TimeTable =
    GENERATESERIES (
        DATEVALUE ( MIN ( 'Ticket'[Open] ) ),
        DATEVALUE ( MAX ( 'Ticket'[Closed] ) + 1 ),
        TIME ( 1, 0, 0 )
    )

    2. Create a result table.

    Result =
    FILTER (
        CROSSJOIN ( TimeTable, Ticket ),
        [Value]
            > [Open] - TIME ( 1, 0, 0 )
            && [Value] <= [Suspended]
            || [Value]
                > [Reactivated] - TIME ( 1, 0, 0 )
                && [Value] <= [Closed]
    )

    3. Delete the columns if needed.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Please reference this file: https://1drv.ms/u/s!ArTqPk2pu-BkgRZJFof6N-uug1Jw

     

    Best Regards!

    Dale