我正在尝试计算作业表中每个资产的平均故障时间。目前我计算如下;
Previous ID = CALCULATE(MAX('JobTrackDB Job'[JobId]),FILTER('JobTrackDB Job','JobTrackDB Job'[AssetDescriptionID]=EARLIER('JobTrackDB Job'[AssetDescriptionID]) && 'JobTrackDB Job'[JobId]<EARLIER('JobTrackDB Job'[JobId])))
然后当JobStatus为7(关闭)时,我将当前作业的最后完成时间带回来;
Finish Time = CALCULATE(MAX('JobTrackDB JobDetail'[FinishTime]),'JobTrackDB JobDetail'[JobId],'JobTrackDB JobDetail'[JobStatus]=7)
然后我带回JobType为1的先前作业完成时间(响应而不是将其与维护呼叫进行比较);
Previous Finish = CALCULATE(MAX('JobTrackDB Job'[Finish Time]),FILTER('JobTrackDB Job','JobTrackDB Job'[AssetDescriptionID]=EARLIER('JobTrackDB Job'[AssetDescriptionID]) && 'JobTrackDB Job'[Finish Time]<EARLIER('JobTrackDB Job'[Finish Time]) && EARLIER('JobTrackDB Job'[JobTypeID])=1))
然后我计算失败之间的时间,我也忽略了错误的值;
Time between failure = IF([Previous Finish]=BLANK(),BLANK(),IF('JobTrackDB Job'[Date Logged]-[Previous Finish]<0,BLANK(),'JobTrackDB Job'[Date Logged]-[Previous Finish]))
问题是有时计算使用以前的维护作业,即使我在过滤器中指定了JobTypeID = 1。此外,当前计算没有考虑从记录开始到该资产的第一个作业以及从上一个作业到今天的时间。我正在试图弄明白这一点。
任何想法???
谢谢, 布伦特
答案 0 :(得分:0)
一些基本措施:
MaxJobID := MAX( Job[JobID] )
MaxLogDate := MAX ( Job[Date Logged] )
MaxFinishTime := MAX (JobDetail[Finish Time])
中级计算:
ClosedFinishTime := CALCULATE ( [MaxFinishTime], Job[Status] = 7 )
AssetPreviousJobID := CALCULATE (
[MaxJobID],
FILTER(
ALLEXCEPT(Job, Table1[AssetDescriptionID]),
Job[JobId] < MAX(Table1[JobID])
)
)
PreviousFinishTime: = CALCULATE ( [ClosedFinishTime],
FILTER(
ALLEXCEPT(Job, Job[AssetDescriptionID]),
Job[JobId] < MAX(Job[JobID])
&& Job[JobType] = 1
)
)
FailureTime := IF (
ISBLANK([PreviousFinishTime]),
0,
( [MaxLogDate]-[PreviousFinishTime] )
)
这至少应该让你开始。如果你想设置一些&#34;第一天&#34;,你可以用一个像MaxLogDate - [OverallFirstDate]这样的计算取代FailureTime中的0,它可以是一个计算的度量或一个常数。
对于没有失败的东西,你想要使用完全不同的措施,因为这个措施仅基于回顾。像[上次失败的日子]那样的东西(基本上)今天() - [ClosedFinishTime]