Qlik Senseナレッジ - INSIGHT LAB

FirstSortedValue関数について

作成者: seri|2023年6月01日

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のみがこの方法で得ることができます。

 

以上になります。