Aggregate 式 (集計式) で
Data Selector オブジェクトを使用することができます。
Data Selector は、次の文法に従って、USING 節で集計式の中で参照されます:
<集計式の名前> (<エクスプレッション>, [ <集計条件> ] , [ <既定値> ] )
構文の表記規則の表示
入力値の説明:
集計式の名前
次のうちのいずれかです: Find、Max、Min、Sum、Count、Average。
エクスプレッション
検索するか、最大値、最小値、合計、または平均を求めるエクスプレッションです。項目属性 (保存済みか数式)、または項目属性、変数、定数を使用するエクスプレッションを指定できます。
集計条件
[ <条件> ] [
USING <DataSelector>
'(' <パラメーター...>
')' ] という構造で指定します。
既定値
集計条件に一致するレコードがない場合に返される値です。これは定数であり、オプションです。
注
- Count 式では、最初のパラメーターとしてエクスプレッションは使用できません。項目属性である必要があります。
- Sum および Count 式では、エクスプレッションの評価の結果は数値である必要があります。
- Data Selector (USING 節) を使用する場合、式の定義の中でプロシージャーの使用はサポートされません。そうでない場合は、spc0026 が詳述され、式は解決されません。
- ユーザー変数は、インライン式でのみ使用できます。
次の
Transaction オブジェクトがあるとします:
Country
{
CountryId*
CountyName
}
Customer
{
CustomerId*
CustomerName
CustomerStatus
CountryId
CountyName
}
「ActiveCustomers」データセレクターの定義は次のとおりとします:
1) アクティブな顧客の総数を数えるには、イベントやソースで次のコードを定義できます:
&NumberActiveCustomers = Count(CustomerName, USING ActiveCustomers())
2) 国別にアクティブな顧客の数を数えるには、次のコードを定義できます:
For Each Country
&NumberActiveCustomers = Count(CustomerName, USING ActiveCustomers())
EndFor
重要な点は、GeneXus が
For Each の
ベーステーブルを判別する際、Count 式の最初のパラメーターである
CustomerName 項目属性を考慮しないことです。
CustomerName 項目属性は式の定義に属します。
For Each のベーステーブルは COUNTRY です (
Country が
ベーストランザクションとして言及されているため)。
計算式で問い合わされるテーブルは、CUSTOMER です。これは、計算式とデータセレクターの定義にある項目属性が、CUSTOMER テーブルに属しているからです。
また、ナビゲートされる COUNTRY と CUSTOMER の 2 つのテーブルには、CountryId という共通の項目属性があります。
したがって、For Each コマンドでナビゲートされるどの Country についても、For Each 内 (インライン) で定義した集計式は、
式がトリガーされた時点で For Each のクエリでナビゲートされている Country に属するアクティブな顧客のみを計算の対象にします。
グリッドにおける Data Selector
Data Provider における Data Selector
For Each コマンドにおける Data Selector
Web パネルにおける Data Selector
Work With の List ノード
スマートデバイスにおけるリストのためのフィルタとしての Entry パネル
Data Selectors