2016-04-08 5 views
0

BIRT 3.7.1には1レベルの階層データを持つテーブルがあります。 レコードには一意の番号(キー)と、データセット内のキーを参照する親フィールドがあります。トップレベルレコードの場合、親フィールドはnullです。BIRTはレコードによってグルーピングされたデータを表示します

私は親フィールドにグループを追加すると、BIRTは、親のラベルの下に親がnullであるすべてのレコードと、グループ内のすべてのグループの要素を持つグループ内のトップレベルの記録(100)が表示されます
---+------------+-------------+-----------+ 
| | Key  | Parent | Fields... | 
+---+------------+-------------+-----------+ 
| 1 |  100 |    | INFO | 
| 2 |  101 |  100 | INFO | 
| 3 |  102 |  100 | INFO | 
+---+------------+-------------+-----------+ 

---+------------+-------------+-----------+ 
| | Key  | Parent | Fields... | 
+---+------------+-------------+-----------+ 
| |   |    |   | <= group header 
+---+------------+-------------+-----------+ 
| 1 |  100 |    | INFO | 
+---+------------+-------------+-----------+ 
| |  100 |    |   | <= group header 
+---+------------+-------------+-----------+ 
| 2 |  101 |  100 | INFO | 
| 3 |  102 |  100 | INFO | 
+---+------------+-------------+-----------+ 

トップレベルのレコード(親レコード)に関する情報をグループヘッダーに表示したいと考えています。

これは可能ですか?私はあなたが行.__ rownumのようなものを使うことができ、テーブルデータバインディングのdataSetまたは行を参照できることを知っています。また、データセットをリンクする場合はrows [0] ['fieldName']を使用できます。

この情報を使用してトップレベルレコードのデータにアクセスする方法はありますか?

答えて

1

考えられるアプローチ(より洗練されたソリューションがあるかもしれません!)は、スクリプトに基づいています。 onFetchイベントでは、キー列を索引として使用してレコードをディクショナリ(レポート変数)に追加できます。

具体的には、AFAIKレコードを直接使用することはできません。その値をコピーする必要があります。

レポート変数の名前が「rowDict」であるとします。

のDataSetのbeforeOpenイベントでは、あなたがデータセットのonFetchイベントでrowDict

vars["rowDict"] = new java.lang.HashMap(); 

を初期化し、あなたがrowDictに現在のレコードのデータを追加するには:ヘッダー行の

var rec = new java.lang.HashMap(); 
rec.put("Info1", row["Info1"]); 
// ... and so on for the other columns 
vars["rowDict"].put(row["Key"], rec); 

vars["rowDict"].get(row["Parent"]).get("Info1") 

のような構文を使用してこのデータにアクセスできます。グループのr行、行はこのグループ内の最初のレコードを参照します。

質問に表示されるBIRTのレイアウトはあまり正確ではないと思います。データ項目「親」を「親」列から「表」レイアウト項目の「キー」列に移動しました。

使用するデータベースによっては、この問題を解決するためにSQLを使用することもできます。これは高速でも、より多くの思考が必要です。

注:コードはテストされていませんが、あなたは考えを得る...

0

私は最も簡単な方法が表示される各フィールドの集計を作成することであると思う:

右グループヘッダー行をクリック - > [挿入] - > [集合。フィールドを式として選択し、集計関数として「First」を設定するか、「String」などのデータ型を指定し、親グループのプロパティ「group on」プロパティを使用します。

+0

このアプローチはうまくいかないと思います。例えば。親ID 100のグループヘッダーのid 101のINFOが表示されます。 – hvb