【发布时间】:2013-12-19 23:26:12
【问题描述】:
这是我在 SSRS 中面临的一个难题,我有点难过。这是我正在尝试创建的业务逻辑。
在确定正确的实验室天数时,请使用以下逻辑:
如果一个案例有多个同一个BacklogGroup的明细项,Daysinlab = Max(DaysinlabGDL)
如果项目来自不同的 BackLogGroups 对每个 BackLogGroups 的 DaysInLabGDL 求和以获得 DaysInLab 数量。
例如:
Case ID Back Log Group Days Calc Days
In Lab
4595549 EMAX 5 7
4595550 EMAX 5 2
4595551 CLINICAL ZIRC 5 3
4595552 BruxZir H 5 3
4595559 Implant SS 5 4
4595559 IMPLANTCA 8 8
我在 Calc 天使用的表达式是这样的:
=iif(Fields!CaseID.Value = Previous(Fields!CaseID.Value) and Fields!BackLogGroup.Value <> Previous(Fields!BackLogGroup.Value),Fields!ActualDaysInLab.Value + Previous(Fields!ActualDaysInLab.Value),Max(Fields!ActualDaysInLab.Value))
本质上,我要做的是比较案例中的详细记录,如果每个详细记录的积压组不同(可能有超过 2 个详细记录/案例),则将实验室列中的天数相加.如果详细记录的积压组相同,那么我想在实验室中取 max() 天数。
如果有 3 个详细记录且两个具有相同的积压组的情况,则取其中的最大值并将它们添加到另一个。
因此,在上述案例中,caseID 4595559 的计算天数对于两个详细记录都应为 13 (5+8)。但由于某种原因,我不明白这一点。我最后一个是 4 岁,一个是 8 岁。
如果有什么不同,这里是创建数据集的 SQL 查询:
Declare @StartDate Datetime
Declare @EndDate Datetime
Set @StartDate = '12/01/2013'
Set @EndDate = GetDate()
SELECT
cp.CaseID
,c.DateIn
,c.DateInvoiced
,cp.ProductID
,p.BackLogGroup
,sra.SourceCategory
,sra.DaysInLabGDL
,DATEDIFF(DAY,c.DateIn,c.DateInvoiced) AS ActualDaysInLab
,dbo.GL_GetBusinessDayCount(c.DateIn,c.DateInvoiced) AS WorkingDays
FROM dbo.CaseProducts cp WITH (NOLOCK)
INNER JOIN dbo.Cases c WITH (NOLOCK)
ON cp.CaseID = c.CaseID
LEFT OUTER JOIN dbo.Products p WITH (NOLOCK)
ON cp.ProductID = p.ProductID
LEFT OUTER JOIN dbo.SalesReAllocation sra WITH (NOLOCK)
ON p.ProductID = sra.ProductID
WHERE
p.BackLogGroup IS NOT NULL
AND
c.DateInvoiced IS NOT NULL
AND
c.DateIn between @StartDate and @EndDate
Order by
cp.CaseID
我希望这很清楚。如果不让我知道,我会尽力澄清。
提前致谢。
【问题讨论】:
-
将逻辑表达为 SQL 查询对您有帮助吗?
-
是的。如果我能在 SQL 中做到这一点就更好了。
标签: sql-server sql-server-2008 reporting-services