バートでクロステーブルを達成するための動的なグループ化

出典:

  https://forums.opentext.com/forums/discussion/173783/dynamic-grouping-of-crosstab-in-birt#latest

 

  事業が完了して、時には我々は、毎日、毎週、毎月、毎年のダイナミックグループ化を達成するための時間の長さに基づいて、動的なクロスパケット統計の時間に基づいてする必要があります。たとえば、次のビジネスニーズに基づいて会社、統計的な受注を達成するために、一定期間内の2つのパラメータ(開始日、終了日)を実行する必要があります。次のように統計的なルールは以下のとおりです。

  例:入力パラメータ値、日付の差を計算します。

  VAR差分=終了日-間隔の日数----開始日
  の場合(差分<15)
    「に設定した日付は」日付パケットとして表示されている
  場合(差分> 15)
    「に設定した日付が」周パケットとして表示されている
  場合(デフ> 30)
    「に設定した日付は」月として表示されるようにグループ化された
  (差分> 365)があれば
    年を表示するグループの「設定日」となります

 

  小さなパートナーは、それに圧倒ビットではありませんか?上記の問題は、本質的にデータ準備の問題ですが、SQLまたはスクリプトのデータソースは、コードに重いワークロードをそのように書くのは難しいです;ない普遍的と非常に厄介な、列を非表示にするレポートを使用する2番目の方法を取りました。だから、より良い解決策は、問題のすべての種類が簡単になります解決するためのレポートツールで設定したカウントを導入することです。ここでは、バートレポートツールを持って、例えば、実装プロセスについて教えてください。他のレポートツールのために似ています。

 

  この場合、入力パラメータに応じて、2012-07-04 2014年5月6日開始注文の総数、総運賃、注文の総量この期間の終わりに、企業から統計。データシート「ORDERS」生データを次のように

  未定義

 

  私たちは、この問題解決直視はSPLコードを設定し、解決します:


A B C
1 =( "デモ")を接続します //データベースに接続します
2 = A1.query( "ORDERID、ORDERDATE貨物を選択し、ORDERDATE> =?とORDERDATE <= ORDERSからORDERAMOUNT"、たstartDate、endDateに) //日付、たstartDateとendDateに日付パラメータ間のORDERSテーブルの注文データの最初から最後まで統計の日付をチェックしてください。
3 =間隔(たstartDate、endDateに) //開始日と終了日の間の日数を計算します
4 365> A3であれば //間隔は日数、1年365日の記者パケットよりも大きい場合
5
=たstartDate | A3(経過@ yを(たstartDate、〜))。 //年によってシーケンステーブルのパケットを計算
6
= A2.group(B5.pseg(ORDERDATE)〜.count(ORDERID):TotalOrder、ラウンド(〜.SUM(運賃)、2):TotalFreight、ラウンド(〜.SUM(ORDERAMOUNT)、2):TotalOrderAmount、B5 (#):BEGINDATE) A2グループの//プレスB5範囲、統計のための注文の合計数、運賃、総受注金額、小数点以下2桁、そして最後の一つとしてB5の合計数。
7
= B6.new(開始日:日付を起動し、#2:全順序、#3:TotalFreight、#4:TotalOrderAmount) //新しいシーケンステーブルの結果を生成するために必要なデータ系列を削除します
8
> A1.close() //データベースを閉じます
9
リターンB7 //戻り結果セットは、年によってグループ化
10 それ以外の場合はA3> 30 //間隔は日30日365日&以下の数よりも大きい場合、プレスパケット月
11
=たstartDate | A3(経過する@ M(たstartDate、〜))。 //月でシーケンステーブルのパケットを計算
12
=A2.group(B11.pseg(ORDERDATE);~.count(ORDERID):TotalOrder,round(~.sum(FREIGHT),2):TotalFreight,round(~.sum(ORDERAMOUNT),2):TotalOrderAmount,B11(#):BeginDate) //按 B11 区间对 A2 分组,统计出订单总数,运货费总数,订单金额总数,保留两位小数,并将 B11 作为最后一列。
13
=B12.new(BeginDate:BeginDate,#2:TotalOrder,#3:TotalFreight,#4:TotalOrderAmount)
14
>A1.close()
15
return B13 //返回按月份分组的结果集
16 else if A3>15 //如果天数间隔大于 15 天 & 小于等于 30 天,则按星期分组
17
=startDate|A3.(elapse(startDate,7*~)) //计算出按星期的分组序表
18
=A2.group(B17.pseg(ORDERDATE);~.count(ORDERID):TotalOrder,round(~.sum(FREIGHT),2):TotalFreight,round(~.sum(ORDERAMOUNT),2):TotalOrderAmount,B17(#):BeginDate) /按 B17 区间对 A2 分组,统计出订单总数,运货费总数,订单金额总数,保留两位小数,并将 B17 作为最后一列。
19
=B18.new(BeginDate:BeginDate,#2:TotalOrder,#3:TotalFreight,#4:TotalOrderAmount)
20
>A1.close()
21
return B19 //返回按星期分组的结果集
22 else //如果天数间隔小于 15 天,则按日期分组
23
=startDate|A3.(elapse(startDate,~)) //计算出按日期的分组序表
24
= A2.group(B23.pseg(ORDERDATE)〜.count(ORDERID):TotalOrder、ラウンド(〜.SUM(運賃)、2):TotalFreight、ラウンド(〜.SUM(ORDERAMOUNT)、2):TotalOrderAmount、B23 (#):BEGINDATE) /最後の一つとしてグループA2、統計のための注文の合計数、小数点以下2桁運賃、総受注金額の合計数、およびB23のプレスB23の範囲。
25
= B24.new(開始日:日付を起動し、#2:全順序、#3:TotalFreight、#4:TotalOrderAmount)
26
> A1.close()
27
B25を返します //戻り結果セットは、日付ごとにグループ化され

 

  コードリゾルバSPL order.dfxのセットはファイルとして保存され、その後、BIRTレポートに導入します。引用した記事のドライ・カレッジを参照するにはどのように「BIRTスクリプトは、SPLを呼び出します。」

 

  次の表のBIRTレポートのデザイン:

  未定義

 

  レポートセットソルバメソッドを呼び出して、そのようなBIRT集中手順で記憶されたデータと全く同じストアドプロシージャを呼び出す命令を呼び出すことができる(?、?)を呼び出します。

  次に、我々はWEBプレビューは、異なる入力パラメータの結果をプレビューする場合を見てみましょう。

  (1)入力パラメータ:2012-07-04開始時間、365より大きい数日2014年5月6日の終了時間間隔が、今年はパケットに表示しました。

  未定義

  未定義

 

  (2)入力パラメータ:2012年7月15日、開始時刻、30より大きい数日2012年12月3日の最後の時間間隔は、月はパケットに表示しました。

  未定義

  未定義

 

  (3)入力パラメータ:2012-07-20開始時刻、終了時刻は、グループ週に表示さ日2012年8月15日15の数よりも大きいです。

  未定義

  未定義

 

  (4)入力パラメータ:2012-07-04開始時間、15より2012-07-18少ない数日の終了時間間隔、パケット内に表示される日付。

  未定義

  未定義



おすすめ

転載: blog.51cto.com/12749034/2442579