我一直在研究别人使用StDev函数制作的报告。我认为这足够简单,但是数据可以包含每个记录的多个值,因此有if语句用于确定从每个记录获取哪个值。我已经导出了一个表到Excel,其中包含一个值每条记录(一个应该在StDev中使用),然后计算那里的SD提供检查。
报告和Excel给我的值非常不同:(
所以,我要回到报告并使用一些额外的公式字段来计算SD长手作为一种决定性的投票(祈祷它不会产生第三组值…)。
我已经解决了语法错误,但我仍然得到一个运行时错误-"除零",然后突出显示下面指示的代码部分…
我的公式字段是:
{@StDevArrayPopulate} -在详细信息部分
NumberVar Array varStDevArray;
NumberVar varStDevArrayCount;
varStDevArray [varStDevArrayCount] := {ValueToSummarise};
varStDevArrayCount := varStDevArrayCount + 1;
{@ stdevarraycompute} -在组页脚
NumberVar Array varStDevArray;
NumberVar varCounter :=1;
NumberVar varMean := 0;
NumberVar varStDev := 0;
NumberVar varStDevArrayCount;
// START OF MEAN
// Sum of all of the values in the array
for varCounter:= 1 to varStDevArrayCount step 1 do
(
varMean := varMean + varStDevArray [varStDevArrayCount];
);
// Divide by the total number of values in the array
varMean := varMean / varStDevArrayCount; // !! This is the line that highlights after the error message !!
// END OF MEAN
// START OF STANDARD DEVIATION
// Subtract the mean from each value in the array and square the result
for varCounter := 1 to varStDevArrayCount step 1 do
(
varStDevArray[varStDevArrayCount] := (varStDevArray [varStDevArrayCount] - varMean) * (varStDevArray [varStDevArrayCount] - varMean);
);
// Sum of all of the values in the array
for varCounter:= 1 to varStDevArrayCount step 1 do
(
varStDev := varStDev + varStDevArray [varStDevArrayCount];
);
// Divide by the total number of values in the array
varStDev := varStDev / varStDevArrayCount;
// Square root of mean of differences
varStDev := Sqr(varStDev)
// END OF STANDARD DEVIATION
{@ stdevarraycompute} -在组页脚
NumberVar varMean;
NumberVar varStDev;
"The mean is " & varMean & ", and the standard deviation is " & varStDev & "."
我试过使用一个总运行字段,但这是给错误,因为它需要计数的第一个记录之前填充公式字段运行。我还尝试在头中添加第四个字段,将varStDevArrayCount初始化为1。
有人有什么建议吗?
看起来没有详细记录,因此你在数组中得到零…我不认为用1
初始化会有什么不同,而是像下面这样做一个小的改变,然后检查。
if varStDevArrayCount=0
then
varMean :=varMean
else
varMean := varMean / varStDevArrayCount;
我建议你先详细检查记录,然后再调试