一.概要
1.応用シーン
通信や監視などの業界のように、毎日大量のデータが生成され、データベーステーブルの総データ量は非常に大きくなりますが、帳票では通常、当日の数百件のデータを取得すればいいです。
テンプレート変数を使用する場合、まずすべてのデータを取り出し、その後フィルタリングを行う必要があります。データの取得とフィルタリングには多くの時間がかかり、帳票のクエリ効率に大きな影響を与えます。一方、データセット変数はデータベースによるクエリ際にすでにデータのフィルタリングが完了しているため、データセット変数を使用して設計されたクエリ帳票は、テンプレート変数を使用する場合よりも効率が高くなります。
2.機能の概要
データセットを定義する際、SQL文に ${para} 書式の内容を追加することで、データセット変数を定義することができます。定義が完了した後、使用方法はテンプレート変数と同じです。以下の図のように、プルダウンボックスで「関東」を選択し、クエリをクリックすると、帳票中の関東地域の販売情報のみがクエリされます。
注意:データセット変数はデータセットにバインドされません。複数のデータセットにおける同名の変数は同一の変数であり、変数値は最後に代入された値を基準とします。
二.使用説明
データセットのSQLクエリ文において、変数${}を使用してフィルタ条件を動的に生成することができます。${}の実行結果はSQL文と結合されて最終的なクエリ文を形成し、データベースに渡されて実行されます。SQL文には複数の${}を使用し、複数の変数を定義して使用することができます。
${}を使用して変数を定義する場合、{ }内に記入する内容が変数を定義する内容となります。その中では、FineReportのすべての組み込み関数、例えばif関数、len関数などを使用することができます。{ }の中では、 FineReportの組み込み関数名、定数、文字列の結合文法以外の変数がデータセット変数となります。
例えば:SELECT * FROM 販売量 where 地域 = '${area}' で定義されるデータセット変数は areaです。
注意:データセット変数を定義する際、できるだけ${}の中で直接{ 、}を使用しないようにしてください。そうしないと解析できない可能性があります。${}の中で直接{ 、}を使用する必要がある場合は、関数CONCATENATEを使用してエスケープする必要があります。例えば:SELECT * FROM 販売量${'{'} の文はエラーを起こす場合、文を SELECT * FROM ${CONCATENATE ("販売量 {")} に変更することで、正常にクエリすることができます。
データセット変数を含むSQL文を記入した後、データセット定義画面の[プレビュー]ボタンをクリックすると、定義されたデータセット変数が表示されます。これは、データセット変数の定義が成功したことを示しています。以下の図のように:
変数の位置に値を入力してから[確定]をクリックすると、変数値がSQL文に代入され、データがクエリされます。
以下にいくつかの一般的な応用方法を示します。ユーザは使用際に実際のシーンに応じて調整すればいいです。特に、データセット変数はSQLクエリ文で使用されるため、使用際には、特に文法と対応するデータベースタイプのSQL文法の一致に注意する必要があります。
1.簡単な応用
例えば、地域変数を定義し、この変数を使用してデータをフィルタリングする場合、新しいデータベースクエリを作成する際、SQLクエリ文にデータセット変数 area を定義することができます。つまり、SELECT * FROM 販売量 where 地域 = 'です。
このSQL文の中で、その他の内容はすべて確定しており、ただareaのみが不確定です。areaが異なる値に対応する場合、データセットも異なる地域のデータをクエリします。複数選択のクエリを実現する場合は、SQL文のinの使い方を組み合わせて変数を定義することができます。例えば:SELECT * FROM 販売量 where 地域 in ('${area}')
変数値を入力する際は、データベースの文法と一致するように注意してください。例えば、関東と関西のデータをクエリするSQL文は SELECT * FROM 販売量 where 地域 in (' 関東 ',' 関西 ') であり、入力する変数値の書式は関東','関西となるようにします。このように、定義際の ('${area}') と結合することで正しい文法が形成されます。
2.数式を含む応用
データセット変数を定義する際、FineReportのすべての組み込み関数を使用することができます。例えば、地域変数を定義する必要があり、地域が空の場合、すべての地域のデータをクエリし、地域の値が空でない場合、対応する地域のデータをクエリします:
SELECT * FROM 注文 where 1=1 ${if (len (area) == 0,"","and 荷主地域 = '"+ area +"'")}
定義する際、まずlen関数を使用して変数の長さを取得し、その後if関数を使用して判断します。
· もしarea変数の長さが0の場合、内容は空となり、SQL文を結合した後は SELECT * FROM 注文 where 1=1 となります;
· もしarea変数の長さが0でない場合、「文字列 and 荷主地域 = '」と「変数 area、' 」を結合して1つのSQL文とします。例えばareaの値が関東の場合、変数定義部分の実行結果は 「and 荷主地域 =' 関東 ' 」となり、完全なSQL文は SELECT * FROM 注文 where 1=1 and 荷主地域 =' 関東 ' となります。
3.複数の変数を定義する場合
データのフィルタリングにおいて、複数のフィルタ条件が必要な場合は、複数のデータセット変数を定義することができます。例えば:
SELECT * FROM 注文 where 1=1 ${if(len(area) == 0,"","and 荷主地域 = '" + area + "'")} ${if (len (province) == 0,"","and 都道府県 = '"+ province +"'")}
ここでは2回${}を使用し、2つのデータセット変数 area と province を定義しています。定義の説明は第二章第2節を参照してください。
4.ネスト応用
データセット変数を定義する際、いくつかのロジック判断を通じて複数のデータセット変数をネスト定義することもできます。例えば:
SELECT * FROM 販売量 where 1=1 ${if (len (area)!=0,"and 地域 ='"+area+"'",if (len (product)== 0,""," and 商品 ='"+product+"'"))}
if 関数は FineReport の組み込み関数であり、変数 area と product はデータセット変数です。もし len (area)!=0 、すなわち area 変数が空でない場合、SELECT * FROM 販売量 where 1=1 and 地域 ='area' でクエリします。もし地域が空の場合、len (product) を判断する必要があります。もし product 変数が空の場合、どんなクエリ条件も結合しないで、すべてのデータをクエリします。そうでない場合、SELECT * FROM 注文 where 1=1 and 商品 ='product' でクエリします。
三.例
1.データセット変数を定義
新しいデータベースクエリds1を作成し、データベースクエリダイアログに SQL クエリス文 SELECT * FROM 販売量 WHERE 地域 ='${area}' を記入します。これは、データベースクエリス文にデータセット変数 areaを定義することに相当します。右下の[リフレッシュ]ボタンをクリックすると、下のデータセット変数管理パネルには、すでに作成されたデータセット変数areaが表示されます。その既定値を「関東」に設定します。[確定]をクリックすると、データの準備とデータセット変数の定義の作業が同時に完了します。以下の図のように:
2.テーブルスタイルの設計
1)以下の図のようにテーブルスタイルを設定します。その中で、テーブルには予め定義されたスタイル「表タイトル」タイプのスタイルを選択し、タイトルのフォントは自動的に[中央揃え]になります。以下の図のように:
2)データセットのフィールドを対応するセルにドラッグし、フォントを[中央揃え]にし、テーブル全体に予め定義されたスタイルのスカイブルーの内外枠を追加します。以下の図のように:
3)C2セルを選択し、右の属性パネルで[セル要素]-[基本]を選択します。データ設定のプルダウンボックスから[集計]-[合計]を選択します。以下の図のように:
3.変数にウィジェットを追加
1)[変数パネル]の[編集]ボタンをクリックし、[変数パネル]の設定画面に入ります。以下の図のように:
2)右上のウィジェット設定パネルには、ウィジェットが追加されていない変数が表示されます。[area]をクリックするか、[すべて追加]をクリックし、変数のデフォルトウィジェットを[変数パネル]に追加します。以下の図のように:
注意:変数とウィジェットは変数名を通じてバインドされます。つまり、[ウィジェット名]が変数名と一致する場合、変数とウィジェットがバインドされます。すなわち、Web側でウィジェットに値を代入することは、変数に値を代入することに相当します。
3)変数areaのデフォルトウィジェットを[変数パネル]に追加した後の効果は、以下の図のようになります:
注意:[すべて追加]や「変数」をクリックしてデフォルトウィジェットを迅速に追加したくない場合は、ウィジェットバーから直接ウィジェットを[変数パネル]にドラッグし、[ウィジェット名]を変数名と一致させることで、ウィジェットと変数をバインドすることもできます。
4)カスタムウィジェットの[編集]ボタンをクリックし、[プルダウンボックス]ウィジェットタイプを選択し、ユーザが[プルダウンボックス]を通じて変数値を選択できるようにします。以下の図のように:
5)帳票のプレビュー際に[プルダウンボックス]をクリックして変数値のオプションが表示されるようにするには、[プルダウンボックス]の[データ辞書]を販売量テーブルの下の地域フィールドに設定する必要があります。
[変数パネル]で[プルダウンボックス]ウィジェットを選択し、右の属性パネルで[属性]-[データ辞書]を選択します。[データ辞書]の[編集]ボタンをクリックすると、[データ辞書]設定ダイアログが表示されます。[データ辞書]のタイプを[データベーステーブル]に設定し、[データベース]を「FRDemoJP」とし、[データベーステーブル選択]として「販売量」を選択し、列名の[実際値]と[表示値]をともに地域に設定します。以下の図のように:
注意:ウィジェットを[データ辞書]にバインドする際、データセットにウィジェットと同名の変数が存在する場合、使用しないでください。そうしないと、循環参照が発生し、テンプレートにエラーが生じます。例えば、ここのds1の場合です。
6)[ラベル]ウィジェットをクリックし、[ウィジェット値]を「地域:」と命名します。以下の図のように:
7)[クエリ]ボタンを左にドラッグし、コンパクトなレイアウトを形成し、ウィジェットパネルをより美しくします。再度、[変数パネル]の[編集]ボタンをクリックし、変数ウィジェットの設定を完了します。以下の図のように:
4.効果のプレビュー
4.1PC端末
テンプレートを保存し、[改ページプレビュー]をクリックして帳票を表示します。
[プルダウンボックス]から「関東」を選択し、[クエリ]をクリックすると、帳票内の関東地域の販売情報のみがクエリされます。
[プルダウンボックス]で「関西」を選択し、[クエリ]をクリックすると、帳票内の関西地域の販売情報のみがクエリされます。
4.2モバイル端末
モバイル端末での帳票の表示方法は、「帳票のモバイル端末プレビュー」を参照してください。
[プルダウンボックス]で「関東」を選択し、[クエリ]をクリックすると、帳票内の関東地域の販売情報のみがクエリされます。
[プルダウンボックス]で「関西」を選択し、[クエリ]をクリックすると、帳票内の関西地域の販売情報のみがクエリされます。