FirstSortedValue関数とは
FirstSortedValue関数は、ある項目のソート順に基づいて別の項目の値を出力することができる関数です。
構文は以下のようになります。(Qlik Senseの公式ドキュメントより引用)
FirstSortedValue([{SetExpression}] [DISTINCT] [TOTAL [<fld {,fld}>]] value, sort_weight [,rank])
valueには出力対象の項目名、sort_weightにはソート対象の項目名が入ります。
具体例を用いて使い方を見ていきます。
具体例
例えば、以下のテーブルにおいて、[価格(千円)]の値が3番目に小さい行の[商品名]=Product7を出力したいです。
このような状況では、以下の2つの手段が考えられます。
- Min関数とMinString(MaxString)関数を使用する
- FirstSortedValue関数を使用する
Min関数とMinString(MaxString)関数を使用する
Min関数とMinString(MaxString)関数を使用して、期待する出力結果が得られます。
MinString({<[価格(千円)]={$(=Min([価格(千円)],3))}>} 商品名)
(MaxString({<[価格(千円)]={$(=Min([価格(千円)],3))}>} 商品名)
)
これは、FirstSortedValue関数を使用することにより、より短く記述することができます。
FirstSortedValue関数を使用する
FirstSortedValue(商品名, [価格(千円)], 3)
ここで、[価格(千円)]の値が3番目に大きい行の[商品名]を知りたい場合は、
FirstSortedValue(商品名, -[価格(千円)], 3)
とすればよいです。
値に重複がある場合
これまでは値に重複がありませんでしたが、次は以下のように値が重複する場合を考えます。
Min関数とMinString関数を使用すると、価格(千円)が15の行で商品名のソート順が最初のもの、つまりProduct1を得、Min関数とMaxString関数を使用すると、価格(千円)が15の行で商品名のソート順が最後のもの、つまりProduct7を得ます。
一方で、先ほどと同じ式でFirstSortedValue関数を使用した場合、結果はNULLとなります。
価格(千円)が15である商品名が、Product1, Product2, Product7の3つあるためです。
FirstSortedValue関数を使用して期待する結果を得るためには、商品名の前にDistinct修飾子を付与する必要があります。ただし、商品名のソート順が1番目であるProduct1のみがこの方法で得ることができます。
以上になります。