2017-02-28 12 views
1

私はCrystal Reports 2016を使用しています。何かが変更されたときに表すdatetimeという値があります。私はdatetime値で何が変化するの数値を持っています。この場合、一部のネットワーク接続は3つの値(0,1,2)の間で状態を変更しています。期間と期間の合計を計算したいと思います。次に、期間の比率とレポートの時間をグラフ化します。私はこれをいくつかやったことがありますが、最後のビットが機能していないので、私は間違ったアプローチを取ったと思います。タイムスタンプのみの時間の計算方法と合計時間はどのくらいですか?

私はそうのような部分的にオンラインオンライン、オフラインのための式、および、(それぞれ)を持つ:

If {CRV_AttributeLog.AnalogValue}=2 
    Then {CRV_AttributeLog.LogTimeStamp} 

If {CRV_AttributeLog.AnalogValue}=0 
    Then {CRV_AttributeLog.LogTimeStamp} 

If {CRV_AttributeLog.AnalogValue}=1 
    Then {CRV_AttributeLog.LogTimeStamp} 

私は状態間の期間を計算するための式を有する:

オンライン

abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) + 
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 

オフライン

abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampOnline})) + 
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampPartiallyOnline})) 

一部オンライン

abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) + 
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 

私は効果的な変数である式の最初のセットを持っていると思われるので、期間を計算式の概要を作成することはできません。 Crystal Reportsでは、数式の入れ子が好きではありません。私は式の名前をif ... then式に置き換えてcopypastaできません。それは私がエラーをチェックするときに私にエラーを与えます(フィールドはここになければなりません)。私はif文を前に持ち、オフラインレコードであれば操作を行うことを考えましたが、他のタイムスタンプは参照できません。

期間をチャートに入れることができます。これにより、期間が追加されます。しかし、計算された時間は、レポートが実行されている期間のすべての時間を表しているわけではないので、データの特異性のために比率が依然として良好ですが、結果のグラフは100%正確ではありません。エッジの場合、接続がオフラインになっている時間の合計を計算することができません。たとえば、レポートの全期間にわたって接続がオフラインであった場合、オフラインである多くのタイムスタンプがありますが、オンラインのタイムスタンプがないため、オフライン期間は0であり、チャートを破棄します。

どのようにしてこれらの期間を計算し、それをレポートの期間と比較できますか?私はすでにレポートの時間の長さ(分子という別名分子)を与える式を作成しましたが、計算には配分(分母)が必要です。

この問題にアプローチするより良い方法はありますか?

+0

あなたはこれまでに何をしていますか?あなたはここにそれを見ることができます –

答えて

1

Next()関数を使用するCrystal Reportsの計算では、並べ替え、グループ化、および集計がすべて完了するまで待つ必要があります。彼らは動作しますが、クリスタルの結果でできることを厳しく制限します。最良の方法は、SQLクエリーを作成して、各レコードが次のレコードにリンクされるようにすることです。このようにCrystalに見られるデータセットには、同じレコード内に期間の開始と期間の終了の両方が含まれます。あなたはそのSQLをどのように書くのが良い別個の質問でしょう。

値がない場合のエッジの場合、IF-THENロジックを使用して欠損値を対象期間の開始または対象期間の終了のいずれかに置き換えたいと考えています。

+0

私がCrystal Reportsでやろうとしていることに対するほとんどの答えは、 "SQLでやる"と思われます。 – YetAnotherRandomUser

関連する問題