Powerbi 功率双复计算列

Powerbi 功率双复计算列,powerbi,dax,powerquery,calculated-columns,Powerbi,Dax,Powerquery,Calculated Columns,我对Power BI非常陌生,我尝试用历史数据查询AzureDevOps数据 我制作了一个OData提要,用于查询数据并返回下面的数据(见表),对于IsCurrent=True的每一行,我想将该工作项ID的“阻塞时间”计算到一个新列

我对Power BI非常陌生,我尝试用历史数据查询Azure
DevOps
数据

我制作了一个
OData
提要,用于查询数据并返回下面的数据(见表),对于
IsCurrent
=True的每一行,我想将该
工作项ID的“阻塞时间”计算到一个新列
。因此,我需要遍历该
WorkItemId
的记录并进行日期计算

在深入研究了计算、过滤器和其他方面之后,我现在有点被卡住了

我为
WorkItemId
1、72和149指定了三种场景

在下面的计算中,我使用列索引作为参考线的编号

我的查询返回以下内容:

WorkItemId Revision Index AnalyticsUpdatedDate IsCurrent TagNames BlockedTime
        72        7     0 06/19/2020 11.41.04  True               See calculation 1  
        72        6     1 06/19/2020 11.41.04  False     Blocked
        72        5     2 06/18/2020 10.41.23  False     Blocked
        72        4     3 06/17/2020 09.38.54  False     
        72        3     4 06/16/2020 14.22.21  False     Blocked
        72        2     5 06/15/2020 15.01.02  False     
        72        1     6 06/14/2020 07.21.16  False     
         1        6     7 07/07/2020 09:58:12  True      Blocked  See calculation 2  
         1        5     8 07/07/2020 09:58:12  False     
         1        4     9 07/06/2020 10:22:02  False     Blocked
         1        3    10 07/05/2020 12:34:31  False     
         1        2    11 07/04/2020 13:51:30  False     Blocked
         1        1    12 07/03/2020 08:23:41  False     
        149       1    13 07/02/2020 10:01:55  False     Blocked See calculation 3
规则

变量
CurrentDate
包含当前
DateTime

标记名
包含给定行的“已阻止”文本时,从
AnalyticsUpdatedDate
中的日期/时间开始将其视为已阻止,并且应通过在记录中向下遍历(修订号向下)来“向后”计算时间,并汇总到没有“已阻止”的行在
中遇到标记名

计算1:计算阻塞时间并将结果放入阻塞时间(0)

计算2:计算阻塞时间并将结果放入阻塞时间(7)

计算3:计算阻塞时间并将结果放入阻塞时间(13)


有谁知道如何最好地解决这个问题吗?

那么我们开始吧。我用3个步骤和3列完成了它,所以它更容易理解,你可以在一个脚本中完成

首先,我们需要找到所有版本的日期(当块不再存在时)

我们对以下列执行此操作:

Released = 
var workItemId = Track[WorkItemId]
var Revision = Track[Revision]
var ReleaseTime = CALCULATE(MIN(Track[AnalyticsUpdatedDate]), FILTER(Track, Track[WorkItemId] = workItemId && Revision < Track[Revision]))
var ReleaseFinal = if (ISBLANK(ReleaseTime), NOW(), ReleaseTime)
return if(Track[TagNames] = "Blocked", ReleaseFinal)
我创建的最后一列将秒数相加,并使用IsCurrent=True来弹出该列:

TotalBlockedTime = 
var WorkItemId = Track[WorkItemId]
return if (Track[IsCurrent], CALCULATE(SUM(Track[SecDiff]), FILTER(Track, Track[WorkItemId] = WorkItemId)))
最终结果见下文。我认为你的数据不是100%,因为你的第三个例子是current=false(应该是true)


享受吧

这三个都是可能的结果吗?如果没有,是否有对工作项应用特殊计算的逻辑?为什么最后一条记录有计算结果?只有当iscurrent为真时,才计算阻塞时间。
(CurrentDate - AnalyticsUpdatedDate(13))
Released = 
var workItemId = Track[WorkItemId]
var Revision = Track[Revision]
var ReleaseTime = CALCULATE(MIN(Track[AnalyticsUpdatedDate]), FILTER(Track, Track[WorkItemId] = workItemId && Revision < Track[Revision]))
var ReleaseFinal = if (ISBLANK(ReleaseTime), NOW(), ReleaseTime)
return if(Track[TagNames] = "Blocked", ReleaseFinal)
SecDiff = DATEDIFF(Track[AnalyticsUpdatedDate],Track[Released], SECOND)
TotalBlockedTime = 
var WorkItemId = Track[WorkItemId]
return if (Track[IsCurrent], CALCULATE(SUM(Track[SecDiff]), FILTER(Track, Track[WorkItemId] = WorkItemId)))