Aggr - チャート関数

Aggr() は、指定された軸上で計算された数式の値の配列を返します。たとえば、顧客別、地域別 sales の最大値です。Aggr 関数は高度な集計に使用されます。高度な集計では、Aggr 関数の結果の配列をネストされる集計への入力として使用し、別の集計関数で Aggr 関数を囲みます。

Syntax:  

Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})

Return data type: dual

Arguments:  

引数 説明
expr

集計関数で構成される数式。デフォルトで、集計関数は選択されたレコード セットに対して集計を行います。

StructuredParameter

StructuredParameter は、軸とともに、任意で(Dimension(Sort-type, Ordering)) 形式のソート基準で構成されています。

軸は単一項目で、数式にすることはできません。軸を使用して、Aggr 数式で計算される値の配列が決定されます。

ソート基準が含まれている場合は、軸について計算された Aggr 関数により、作成された値の配列がソートされます。これは、Aggr 関数を囲んでいる数式の結果にソート順序が影響する場合に重要です。

ソート基準の使用法について詳しくは、「構造化パラメータの軸へのソート基準の追加」を参照してください。

SetExpression デフォルトでは、集計関数は選択されたレコード セットに対して集計を行います。Set 分析数式でレコード セットを定義することも可能です。
DISTINCT

expression 引数の前に distinct 修飾子が配置されている場合、あるいは修飾子がまったく使用されていない場合は、軸の値の組み合わせごとに 1 つの戻り値のみ生成されます。これは正常な集計方法で、これらの異なる組み合わせがそれぞれチャートの 1 行に反映されます。

NODISTINCT

expression 引数の前に nodistinct 修飾子が配置されている場合、軸の値の組み合わせは、いずれも基底のデータ構造に基づいて、複数の戻り値を生成する可能性があります。軸が 1 本だけの場合、aggr 関数は、ソース データの行数と同じ数の要素を含む配列を返します。

SumMinAvg などの基本的な集計関数では数値が 1 つ返されるのに対し、Aggr()関数は、一時的な段階の結果セット (仮想テーブル) を作成することと比較することができ、その結果セットで別の集計を行うことができます。例えば、Aggr() ステートメントで顧客別の売上を合計して平均売上値を計算し、それから加算された結果の平均値を計算することができます:Avg(TOTAL Aggr(Sum(Sales),Customer))

ヒント: 複数のレベルでネストされたチャート集計を作成する場合は、計算軸で Aggr() 関数を使用してください。

Limitations:  

Aggr() 関数の各軸は、単一の項目でなければならず、数式 (計算軸) にすることはできません。

基本形式において、Aggr 関数構文の引数 StructuredParameter は単一軸です。数式Aggr(Sum(Sales, Month)) により、各月の総売上高の値が返されます。ただし、別の集計関数によって囲まれている場合は、ソート基準が使用される場合を除いて、予期しない結果になる可能性があります。これは、軸によって、数値やアルファベットなどの異なる基準でソートされるからです。

Aggr 関数の StructuredParameter 引数には、数式での軸のソート基準を指定できます。この方法により、Aggr 関数によって作成される仮想テーブルにソート順序を適用します。

引数 StructuredParameter の構文は次のとおりです。

(FieldName, (Sort-type, Ordering))

構造化パラメータはネストすることができます。

(FieldName, (FieldName2, (Sort-type, Ordering)))

ソート タイプは、NUMERICTEXTFREQUENCY、または LOAD_ORDER です。

各ソート タイプに関連付けられる順序タイプは次のとおりです。

ソート タイプ 許可される順序タイプ
NUMERIC ASCENDINGDESCENDING、または REVERSE
TEXT ASCENDINGA2ZDESCENDINGREVERSE、または Z2A
FREQUENCY DESCENDINGREVERSE 、または ASCENDING
LOAD_ORDER ASCENDINGORIGINALDESCENDING、または REVERSE

順序タイプ REVERSEDESCENDING は同じです。

ソート タイプ TEXT の場合、順序タイプ ASCENDINGA2Z は同じであり、DESCENDINGREVERSEZ2A は同じです。

ソート タイプ LOAD_ORDER の場合、順序タイプ ASCENDINGORIGINAL は同じです。

Examples and results:  

結果
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))

数式 Aggr(Sum(UnitSales*UnitPrice), Customer) は、Customer 別の売り上げの合計値で、3 つの Customer の値として、295、715、120 の値の配列を返します。

実質的には、それらの値を含む明示的なテーブルまたは列を作成することなく、値の一時的なリストを作成したことになります。

これらの値は Avg() 関数に使われ、売り上げの平均値として 376.6667 という値が算出されます(プロパティ パネルで、[プレゼンテーション] の下の [合計] を選択しておく必要があります)。

Aggr(NODISTINCT Max(UnitPrice), Customer)

値の配列: 16、16、16、25、25、25、19、19。nodistinct 修飾子は、配列にはソース データの各行の要素が 1 つ含まれており、各要素が CustomerProduct それぞれの最大 UnitPrice になっていることを意味します。

例で使用されているデータ:

CustomerProductUnitPrice、および UnitSales を軸としたテーブルを作成します。数式をメジャーとしてテーブルに追加します。

ProductData:

LOAD * inline [

Customer|Product|UnitSales|UnitPrice

Astrida|AA|4|16

Astrida|AA|10|15

Astrida|BB|9|9

Betacab|BB|5|10

Betacab|CC|2|20

Betacab|DD|25|25

Canutility|AA|8|15

Canutility|CC||19

] (delimiter is '|');

 

Examples and results: 構造化パラメーター

結果
Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) ))

このメジャーは、数式の構造化パラメーター引数でソート基準を使用し、過去 1 年間の月ごとの売上を計算します。

ソート基準なしの場合、数式 Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) )) の結果は、軸 Year および Month のソート方法によって異なります。必要とする結果が得られない場合もあります。

ソート タイプと順序タイプの値を軸に追加することにより、ソート基準を構造化パラメータ: (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) を参照してください。ソート タイプ NUMERIC と順序 ASCENDING により、Year および Month が数値の昇順でソートされるかどうかが決まります。

例で使用されているデータ:

次のロード スクリプトは、構造化パラメーターの例で使用される、順序行ありでテーブルの順序を生成します。

Set vNumberOfOrders = 1000; OrderLines: Load RowNo() as OrderLineID, OrderID, OrderDate, Round((Year(OrderDate)-2005)*1000*Rand()*Rand()*Rand1) as Sales While Rand()<=0.5 or IterNo()=1; Load * Where OrderDate<=Today(); Load Rand() as Rand1, Date(MakeDate(2013)+Floor((365*4+1)*Rand())) as OrderDate, RecNo() as OrderID Autogenerate vNumberOfOrders; Calendar: Load distinct Year(OrderDate) as Year, Month(OrderDate) as Month, OrderDate Resident OrderLines;

これらのメジャー間の違いは、テーブルまたは独立した折れ線グラフで比較することができます。

  • Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) ))
  • Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) ))

2 つめのメジャーは、各月の過去 1 年間の売上を出力します。