Я работал над отчетом, сделанным кем-то другим, который использует функцию StDev. Я думал, что это будет достаточно просто, но данные могут содержать несколько значений для каждой записи, поэтому есть операторы if, используемые для определения того, какое значение брать из каждой записи. Я экспортировал таблицу в Excel, содержащую одно значение для каждой записи (то самое, которое должно использоваться в StDev), а затем вычислил там SD, чтобы обеспечить проверку.
Отчет и Excel дают мне очень разные значения :(
Итак, я возвращаюсь к отчету и использую некоторые дополнительные поля формулы для расчета SD от руки, чтобы действовать как своего рода решающий голос (скрестив пальцы, это не дает третьего набора значений...).
Я исправил синтаксические ошибки, но все еще получаю ошибку времени выполнения - «Деление на ноль», которая затем выделяет раздел кода, указанный ниже...
Мои поля формулы:
{@StDevArrayPopulate} — в разделе сведений
NumberVar Array varStDevArray;
NumberVar varStDevArrayCount;
varStDevArray [varStDevArrayCount] := {ValueToSummarise};
varStDevArrayCount := varStDevArrayCount + 1;
{@StDevArrayCalculate} — в футере группы
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
{@StDevArrayCalculate} — в футере группы
NumberVar varMean;
NumberVar varStDev;
"The mean is " & varMean & ", and the standard deviation is " & varStDev & "."
Я пытался использовать поле Текущая сумма, но это давало ошибки, так как нужно было подсчитать первую запись до запуска поля формулы Заполнить. Я также попытался добавить в заголовок четвертое поле, которое инициализирует varStDevArrayCount как 1.
У кого-нибудь есть предложения?