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