【问题标题】:Calculate backlog from 2 dates with m code or dax使用 m 代码或 dax 从 2 个日期计算积压
【发布时间】:2023-01-18 03:39:56
【问题描述】:

我们拥有的票务工具为我们提供了一个出口,其中包含我们所做的每一个动作,就像这样:

Ticket ID |    In Date    |    Out Date    |
INC001    |    1/1/2023   |    2/1/2023    | ->
INC001    |    3/1/2023   |    null        | -> transferred back or reopened
INC001    |    null       |    4/1/2023    | -> closed or transferred
INC002    |    3/1/2023   |    3/1/2023    | -> arrived and closed/transferred on same day
INC003    |    3/1/2023   |    null        | -> ticket was sent back/reopened
INC004    |    3/1/2023   |    null        | -> incoming
INC004    |    null       |    null        | -> example: just added a comment
INC005    |    4/1/2023   |    5/1/2023    | -> 

我需要有一些每日积压,这很困难,因为有几行具有相同的工单 ID,即使在关闭或转移工单后,如果发回或重新打开,它也需要回到积压中:

Date      | Backlog |
1/1/2023  |    1    |
2/1/2023  |    0    |
3/1/2023  |    3    |
4/1/2023  |    3    |

使用 M 代码有没有办法做到这一点?或者也许与 Dax?

我已经搜索并尝试过但即将放弃:P。

任何人都知道我如何实现这一目标?

谢谢

【问题讨论】:

  • 你的问题有点混乱。您是否需要根据每个工单 ID 条目的最低进入日期计算每天的工单数量?
  • 您好,抱歉,感谢您的回复。我想要的是每天的积压(门票仍然开放)。
  • 更好地解释如何使用样本数据确定每天的积压
  • 为了同一张票Out Date 和下一个 In Date 之间是否可以相差超过一天?

标签: powerbi dax powerquery


【解决方案1】:

如果我正确地推断出您的逻辑,则以下内容应该有效。至少它适用于您的数据样本和我设计的一些变体。但如果您的数据样本并不真正具有代表性,则代码可能需要修改:

let
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ticket ID", type text}, {"In Date", type date}, {"Out Date", type date}}, "en-GB"),

maxDate = List.Max(#"Changed Type"[Out Date]),
minDate = List.Min(#"Changed Type"[In Date]),

    #"Grouped Rows" = Table.Group(#"Changed Type", {"Ticket ID"}, {

//Calculate Backlog dates
//This may need to be modified if your sample is not representative of your actual data
        {"Open Dates", (t)=>
            let 
                #"Filled In Dates" = Table.FillDown(t,{"In Date"}),
                #"Fill Out Dates" = Table.ReplaceValue(Table.FillUp(#"Filled In Dates",{"Out Date"}),null,maxDate,Replacer.ReplaceValue,{"Out Date"}),
                #"Date Ranges" = Table.AddColumn(#"Fill Out Dates", "dateRange", each List.Dates([In Date], Duration.Days([Out Date]-[In Date]), #duration(1,0,0,0))),
                theDates = List.Distinct(List.Combine(#"Date Ranges"[dateRange]))
            in 
                theDates
        }
        }),
    #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Ticket ID"}),
    #"Expanded Open Dates" = Table.ExpandListColumn(#"Removed Columns", "Open Dates"),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Open Dates", each ([Open Dates] <> null)),

//create date table for joining
    allDates = Table.FromList(List.Dates(minDate,Duration.Days(maxDate-minDate), #duration(1,0,0,0)),
                        Splitter.SplitByNothing(), type table[Dates=date]),

//Join with data table
    join = Table.Join(#"Filtered Rows","Open Dates", allDates,"Dates", JoinKind.FullOuter),
    #"Grouped Rows1" = Table.Group(join, {"Dates"}, {
        {"Backlog", each List.Count(List.RemoveNulls([Open Dates]))}
    }),
    #"Sorted Rows" = Table.Sort(#"Grouped Rows1",{{"Dates", Order.Ascending}})
in
    #"Sorted Rows"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多