【问题标题】:Consecutive Absent/Worked Days Power BI Measure连续缺勤/工作日 Power BI 度量
【发布时间】:2021-06-22 17:17:37
【问题描述】:

我目前正在尝试动态计算一组员工的连续工作天数和缺勤天数,但事实证明这是一项相当艰巨的任务。 RAW 表如下所示:

Date ID Absent
6/1/2021 1234 1
6/2/2021 1234 1
6/32021 1234 1
6/4/2021 1234 0
6/1/2021 6789 1
6/2/2021 6789 0

我想使用 Dax(不是 Power Query)来计算他们缺席的连续天数,我最接近的解决方案如下,大喊 SQLBI

DaysWith0 = 
VAR CurrentDate = MAX('Calendar'[Date])
VAR FirstDateEver =  CALCULATE(MIN( 'Calendar'[Date]), REMOVEFILTERS())
VAR PrevWorked =
    CALCULATE(
        MAX('RawDataTable'[Date]),'Calendar'[Date] <= CurrentDate) 
VAR PrevDate = COALESCE(PrevWorked,FirstDateEver)
VAR Result = INT(CurrentDate - PrevDate)  
RETURN
    Result

但这仅计算没有数据(无计划)的连续天数。我需要 2 个度量来显示连续工作日和连续缺勤。

【问题讨论】:

    标签: sql-server powerbi dax powerquery measure


    【解决方案1】:

    这看起来像一个经典的峡岛

    示例

    Select DateR1 = min(Date)
          ,DateR2 = max(Date)
          ,ID
          ,Absent = sum( case when Absent=1 then 1 else 0 end )
          ,Worked = sum( case when Absent=0 then 1 else 0 end )
     From  (
            Select *
                  ,Grp = datediff(day,'1900-01-01',Date) - row_number() over (partition by ID,Absent order by Date) 
             From YourTable
           ) A
     Group By ID,Grp
     Order By ID,min(Date)
    

    结果

    DateR1      DateR2      ID      Absent  Worked
    2021-06-01  2021-06-03  1234    3       0
    2021-06-04  2021-06-04  1234    0       1
    2021-06-01  2021-06-01  6789    1       0
    2021-06-02  2021-06-02  6789    0       1
    

    【讨论】:

    • 嗨,约翰,感谢您的回复,但我觉得我有点失落。我拥有的表有超过 20k 行并且还在计数,所以我无法声明该表。我在看它的一个度量,我可以将它拖到我现有的视觉对象上。很抱歉成为这样的菜鸟:(。我认为您的回复更适合 SQL,但目前这是最后的手段,因为我有其他情况需要将其应用于。
    • @Puno (at)YourTable 只是一个示范性表变量......请参阅更新的答案。我删除了“噪音”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2022-10-05
    • 2010-12-06
    相关资源
    最近更新 更多