我有一个包含各种性能指标值的表。我有一个动态构建的查询(subQryKPI),它会像这样水平显示这些指标:
| EmployeeID | Sales | Calls | Hours |
--------------------------------------
| 22567 | 4 | 10 | 5 |
| 98321 | 8 | 12 | 6 |
| 24680 | 0 | 0 | 3 |
我有另一个表,其中包含各种KPI的公式:
| KPI | Formula |
--------------------------------------
| Sales per Call | [Sales] / [Calls] |
| Calls per Hour | [Calls] / [Hours] |
最后,我有一些VBA代码,它构建一个SQL查询来计算每个人的KPI分数,并将它们插入表中(tblKPIdata)。
到目前为止,构建查询的目的是一次计算1个KPI:
INSERT INTO
tblKPIdata
SELECT
EmployeeID,
"Sales per Call" as KPIname,
[Sales]/[Calls] AS KpiScore
FROM
SubQryKPI
如果Select查询包含Div / 0错误(例如上面的EmployeeID 24680),这样可以正常工作。它似乎只是过滤出错误,因为它符合我的需要。
我遇到的问题是我正在尝试更新代码以同时计算多个KPI。我试图使用像这样的Union查询来执行此操作:
INSERT INTO
tblKPIdata
SELECT * FROM (
SELECT
EmployeeID,
"Sales per Call" as KPIname,
[Sales]/[Calls] AS KpiScore
FROM
SubQryKPI
UNION ALL
SELECT
EmployeeID,
"Calls per Hour" as KPIname,
[Calls]/[Hours] AS KpiScore
FROM
SubQryKPI)
但似乎如果Union查询中存在Div / 0错误,则无法将其插入另一个表中。 (我不能使用IIf(divisor = 0,0...
的旧技巧,因为我永远不知道除数会是什么。
有人知道为什么当它们是Union查询的一部分并且有什么方法可以解决时,不能忽略错误吗?
答案 0 :(得分:0)
您可以使用splt函数重构查询以识别被除数并控制错误。
Dim LString as a string
Dim LArray () as a string
LString = "[Calls] / [Hours]"
LArray = Split (LString, "/")
MsgBox LArray (0) // [Calls]
MsgBox LArray (1) // [Hours] <------ apply IIF control