如果我按一下按钮,我想添加一些列表字段,这些列表字段用表格中的数字填充。为了调试,我选择了简单的值。
下面的第一个字段应包含所有字段的平均值,第二个字段应包含总和,第三个字段应包含每一列的总和乘以一定百分比然后求和(以下公式和图片)。
默认情况下,如果未给出百分比值,则仅显示总和。
这是问题所在:
一切正常,并按预期工作,给出或不给出百分比:
除非我在第2行中输入值或值,否则
。
然后,通常显示总和的字段(每隔一行都正确)仅将每行的每个数字彼此相邻而不是相加。如果给出百分比,也会发生这种情况。
如果我清空第2行,它将再次正常工作。
我无法解释为什么会这样,有人知道为什么吗?
最后一个字段的公式为:
({CB
是第1列,OF
是第2列,AS
是第3列,[FehlleistungXX]
是具有百分比值的字段:)
=0+Nz([DeltaDetailCB1]+[DeltaDetailCB2]+[DeltaDetailCB3]+[DeltaDetailCB4]+[DeltaDetailCB5]+[DeltaDetailCB6]+[DeltaDetailCB7]+[DeltaDetailCB8]+[DeltaDetailCB9]+[DeltaDetailCB10]+[DeltaDetailCB11]+[DeltaDetailCB12]+[DeltaDetailCB13]+[DeltaDetailCB14]+[DeltaDetailCB15]+[DeltaDetailCB16];0)*Nz(1+[FehlleistungCB]*0,01;0)
+Nz([DeltaDetailAS1]+[DeltaDetailAS2]+[DeltaDetailAS3]+[DeltaDetailAS4]+[DeltaDetailAS5]+[DeltaDetailAS6]+[DeltaDetailAS7]+[DeltaDetailAS8]+[DeltaDetailAS9]+[DeltaDetailAS10]+[DeltaDetailAS11]+[DeltaDetailAS12]+[DeltaDetailAS13]+[DeltaDetailAS14]+[DeltaDetailAS15]+[DeltaDetailAS16];0)*Nz(1+[FehlleistungAS]*0,01;0)
+Nz([DeltaDetailOF1]+[DeltaDetailOF2]+[DeltaDetailOF3]+[DeltaDetailOF4]+[DeltaDetailOF5]+[DeltaDetailOF6]+[DeltaDetailOF7]+[DeltaDetailOF8]+[DeltaDetailOF9]+[DeltaDetailOF10]+[DeltaDetailOF11]+[DeltaDetailOF12]+[DeltaDetailOF13]+[DeltaDetailOF14]+[DeltaDetailOF15]+[DeltaDetailOF16];0)*Nz(1+[FehlleistungOF]*0,01;0)
编辑1:我试图删除字段并用其他字段的副本替换它们,但这并不能解决问题。
答案 0 :(得分:0)
首先,我建议将每个字段都包含在Nz
表达式中,而不是将计算出的表达式有选择地包含在Nz
表达式中,即:
=
(
(
Nz([DeltaDetailCB1],0)+
Nz([DeltaDetailCB2],0)+
Nz([DeltaDetailCB3],0)+
Nz([DeltaDetailCB4],0)+
Nz([DeltaDetailCB5],0)+
Nz([DeltaDetailCB6],0)+
Nz([DeltaDetailCB7],0)+
Nz([DeltaDetailCB8],0)+
Nz([DeltaDetailCB9],0)+
Nz([DeltaDetailCB10],0)+
Nz([DeltaDetailCB11],0)+
Nz([DeltaDetailCB12],0)+
Nz([DeltaDetailCB13],0)+
Nz([DeltaDetailCB14],0)+
Nz([DeltaDetailCB15],0)+
Nz([DeltaDetailCB16],0)
) *
(1+(Nz([FehlleistungCB],0)*0.01))
)
+
(
(
Nz([DeltaDetailAS1],0)+
Nz([DeltaDetailAS2],0)+
Nz([DeltaDetailAS3],0)+
Nz([DeltaDetailAS4],0)+
Nz([DeltaDetailAS5],0)+
Nz([DeltaDetailAS6],0)+
Nz([DeltaDetailAS7],0)+
Nz([DeltaDetailAS8],0)+
Nz([DeltaDetailAS9],0)+
Nz([DeltaDetailAS10],0)+
Nz([DeltaDetailAS11],0)+
Nz([DeltaDetailAS12],0)+
Nz([DeltaDetailAS13],0)+
Nz([DeltaDetailAS14],0)+
Nz([DeltaDetailAS15],0)+
Nz([DeltaDetailAS16],0)
) *
(1+(Nz([FehlleistungAS],0)*0.01))
)
+
(
(
Nz([DeltaDetailOF1],0)+
Nz([DeltaDetailOF2],0)+
Nz([DeltaDetailOF3],0)+
Nz([DeltaDetailOF4],0)+
Nz([DeltaDetailOF5],0)+
Nz([DeltaDetailOF6],0)+
Nz([DeltaDetailOF7],0)+
Nz([DeltaDetailOF8],0)+
Nz([DeltaDetailOF9],0)+
Nz([DeltaDetailOF10],0)+
Nz([DeltaDetailOF11],0)+
Nz([DeltaDetailOF12],0)+
Nz([DeltaDetailOF13],0)+
Nz([DeltaDetailOF14],0)+
Nz([DeltaDetailOF15],0)+
Nz([DeltaDetailOF16],0)
) *
(1+(Nz([FehlleistungOF],0)*0.01))
)
我怀疑是Nz
函数返回的值被加法运算符(+
)解释为字符串,然后用来连接每个Nz
返回的字符串表达。
如果我的代码产生相同的结果,则可以通过将整个表达式放在CDbl()
中来强制强制数据类型。
但是,我必须说,在一个表达式中重复这么多字段是一个危险信号,表明您的数据库设计不良。