我在数据库中有一个引用列表。如果该引用存在于一个月内,则其评级为1或99。如果引用不存在,则它的评级为0。每3个月形成一个季度。在富客户端中,我能够创建以下交叉表:
| Q1 Q1 Q1 | Q2 Q2 Q2
Ref | M1 M2 M3 | M4 M5 M6
----|-----------------|-----------------
a | 99 99 99 | 99 01 99
b | 00 01 99 | 99 01 00
c | 99 00 00 | 00 00 00
d | 99 01 01 | 01 01 99
e | 00 00 01 | 01 99 01
f | 01 01 01 | 99 99 99
g | 01 01 01 | 00 00 00
h | 99 01 00 | 00 00 00
i | 00 00 01 | 01 99 01
j | 00 00 00 | 00 01 99
k | 00 00 00 | 01 01 01
我想做的是,对于每个季度,统计该季度某个时候存在的引用总数,并统计以99分结束的任何引用。我指的是本季度给出的最后一个评级。
例如,Q1的Ref a存在,也将计入99。Q1的参考h也存在,其最终评级将被视为1。Ref j在Q1中根本不会被计算在内。
完整的结果是:
Ref | Last Q1 | Last Q2
----|---------|---------
a | 99 | 99
b | 99 | 01
c | 99 | 00
d | 01 | 99
e | 01 | 01
f | 01 | 99
g | 01 | 00
h | 01 | 00
i | 01 | 01
j | 00 | 99
k | 00 | 01
这给了我最后的计数:
Q | Q1 | Q2
-----------|----|---
99 Count | 3 | 4
Full Count | 9 | 8
哪些业务对象代码可以直接跳到计数表?
我认为关键是获得一点代码来计算每个客户每个季度的"最终评级",但我在这方面运气不佳。我还没有找到在一个公式中使用多个where子句的方法。
您需要使用多个变量来实现这一点。
假设您从名为的对象开始
| [Qtr]
| [Mth]
----|------------
[Ref] | [Val]
1) 创建一个变量以保存每个季度的最大月数(非零值):MaxM = Max([Mth]) In ([Ref];[Qtr]) Where ([Val] <>"00")
将其放入交叉表的主体中以验证结果:
Q1 Q2
a M3 M6
b M3 M5
c M1
d M3 M6
e M3 M6
f M3 M6
g M3
h M2
i M3 M6
j M6
k M6
2) 创建另一个变量来计算99的数量,其中月份等于季度中的最后一个月,值为:LastIs99Cnt = If (Max([Val]) Where ( [Mth] = [MaxM])) = "99" Then 1 Else 0
用这个变量替换交叉表中的[MaxM],这样我们就可以验证:
Q1 Q2
a 1 1
b 1 0
c 1 0
d 0 1
e 0 0
f 0 1
g 0 0
h 0 0
i 0 0
j 0 1
k 0 0
3) 从报告正文中删除[Ref],并将[LastIs99Cnt]聚合为:=Sum([LastIs99Cnt] ForEach ([Ref]))
还添加一个简单的计数/在哪里获取非99值:=Count([Ref] Where ([Val] <> "00"))
区块将如下所示:
| [Qtr]
|---------------------------
99 Cnt | =Sum([LastIs99Cnt] ForEach (Ref))
Full Cnt | =Count(Ref] Where (Val] <> "00"))
并产生所需的结果:
Q1 Q2
99 Cnt 3 4
Full Cnt 9 8