2016-06-30 3 views
0

私はStDev関数を使用する他の人が作成したレポートを作成しています。私はそれが十分に簡単だと思ったが、データは各レコードに複数の値を含むことができるので、各レコードからどの値を取るかを決定するifステートメントが使用されています。私はレコードに1つの値(StDevで使用されるべきもの)を含むExcelにテーブルをエクスポートしてから、そこでSDを計算してチェックを行いました。Crystal Reports 13数式フィールドの標準偏差

レポートやExcelの私には非常に異なる値を与えている:(

をので、私は(バックレポートへ行くと投票を決めるの一種として機能するようにSDの手書きを計算するためにいくつかの追加の式フィールドを使用しています指が交差すると値の3番目の値が生成されません...)。

私は構文エラーを解決しましたが、ランタイムエラーが発生しています以下に示すコードの...

私の数式フィールドは:

{@StDevArrayPopulate} - グループフッター

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 Array varStDevArray; 
NumberVar varStDevArrayCount; 

varStDevArray [varStDevArrayCount] := {ValueToSummarise}; 

varStDevArrayCount := varStDevArrayCount + 1; 

{@StDevArrayCalculate}のグループフッターに

NumberVar varMean; 
NumberVar varStDev; 

"The mean is " & varMean & ", and the standard deviation is " & varStDev & "." 

私はRunning Totalフィールドを使用しようとしましたが、Populate formulaフィールドが実行される前に最初のレコードを数える必要があるため、エラーが発生していました。また、4番目のフィールドをヘッダに追加して、varStDevArrayCountを1に初期化してみました。

誰にも提案はありますか?

答えて

0

詳細レコードがないので、配列がゼロになっているように見えます... 1で初期化すると、代わりに以下のような小さな変更を加えて確認するとは思われません。

if varStDevArrayCount=0 
then 
varMean :=varMean 
else 
varMean := varMean/varStDevArrayCount; 

私は詳細に記録を確認するためにあなたをアドバイスし、その後

をデバッグするだろう