另一个里面的 RunningSum

RunningSum inside another

我有一份包含以下数据的报告

IdSource       20170629    20170628    20170626     20170625     20170624    20170623
Id1.           OK          KO          N/A          KO           OK          KO

我想计算我的数据(工作流状态)被 KO 的天数。 N/A表示工作流不是预期的,所以不应该计算。

预期结果:

IdSource       20170629    20170628    20170626     20170625    20170624     20170623
Id1.           OK          KO(2)          N/A          KO(1)          OK        KO(1)

每次 OK 时都必须重置计数。

在SQL,我会

select t.*,
       sum(case when status = 'KO' then 1 else 0 end) over (partition by id, cume_ko order by date) as nbDayKO
from (select t.*,
             sum(case when status = 'OK' then 1 else 0 end) over (partition by id order by date) as cume_ko
      from t
     ) t

我尝试使用 RunningSum 函数但没有成功:

感谢您的帮助

它很丑而且效率不高,但我没有找到任何其他解决方案。这是我的做法:

If ([status] = 0) Then 0
Else (

(If (RelativeValue([status];([dayOfWeek]);1) = 1) Then
    If (RelativeValue([status];([dayOfWeek]);2) = 1) Then
        If (RelativeValue([status];([dayOfWeek]);3) = 1) Then
            If (RelativeValue([status];([dayOfWeek]);4) = 1) Then
                If (RelativeValue([status];([dayOfWeek]);5) = 1) Then
                    If (RelativeValue([status];([dayOfWeek]);6) = 1) Then
                        If (RelativeValue([status];([dayOfWeek]);7) = 1) Then
                            If (RelativeValue([status];([dayOfWeek]);8) = 1) Then
                                If (RelativeValue([status];([dayOfWeek]);9) = 1) Then
                                    If (RelativeValue([status];([dayOfWeek]);10) = 1) Then
                                        If (RelativeValue([status];([dayOfWeek]);11) = 1) Then
                                            If (RelativeValue([status];([dayOfWeek]);12) = 1) Then
                                                If (RelativeValue([status];([dayOfWeek]);13) = 1) Then
                                                    If (RelativeValue([status];([dayOfWeek]);14) = 1) Then
                                                        If (RelativeValue([status];([dayOfWeek]);15) = 1) Then 15
                                                        Else 14
                                                    Else 13
                                                Else 12
                                            Else 11
                                        Else 10
                                    Else 9
                                Else 8
                            Else 7
                        Else 6
                    Else 5
                Else 4
            Else 3
        Else 2
    Else 1
Else 0)+[status])