多条件计数
A multiple conditioned count
我在数据库中有一个引用列表。如果参考在一个月内存在,那么它的评分为 1 或 99。如果参考不存在,那么它的评分为 0。每 3 个月构成一个季度。在富客户端中,我能够创建以下交叉 table:
| 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 的 Ref 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
哪些业务对象代码可以直接跳转到计数table?
我认为关键是获取一些代码来计算每季度每个客户的 'final rating',但是我没有运气这样做。我还没有找到在一个公式中使用多个 '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]))
还要添加一个简单的 Count/Where 以获得非 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
我在数据库中有一个引用列表。如果参考在一个月内存在,那么它的评分为 1 或 99。如果参考不存在,那么它的评分为 0。每 3 个月构成一个季度。在富客户端中,我能够创建以下交叉 table:
| 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 的 Ref 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
哪些业务对象代码可以直接跳转到计数table?
我认为关键是获取一些代码来计算每季度每个客户的 'final rating',但是我没有运气这样做。我还没有找到在一个公式中使用多个 '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]))
还要添加一个简单的 Count/Where 以获得非 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