複数列ダイナミックソート

  • 作成者:ayuan0625
  • 編集回数:19次
  • 最終更新:FRInternational 于 2021-11-27
  • 一.概要

    1.効果

    帳票をデザインする時は、複数の列をクリックすることで、昇順および降順を変換します。つまり、第一列をクリックすると、第一列に従って昇順または降順で並べ替えられます。第二列をクリックすると、第三列に従って昇順または降順で並べ替えられます。予想される効果は下図に示されます:

     

    2.実現方法

    ダイナミックパラメータータイプのハイパーリンクを追加し、及びセルの展開後ソートに数式を追加することで実現されます。つまり、データ列タイトルをクリックすると、データ列が配置されているセルがパラメーターとして渡され、展開後ソート式に当パラメータを受け取ります。異なるパラメーターによって異なる並べ替えを実現します。

    注1:一緒に並べ替える必要のある文字列型フィールドがある場合、展開後ソート式は異なります。本文では2つの例で解説します。

    注2:ダッシュボードに適用できます。

    注3:ページ数が多すぎる場合、またはダッシュボードのタブブロックで複数のタブページに動的並べ替えが使用されている場合、ダイナミックパラメーターによってページ全体が更新されるため、他のページで並べ替えをクリックすると最初のページに戻ります。

    二.例示一

    1.データの準備

    データセットds1を作成し、以下のSQLを追加します(FRDemoを使用):

    SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10

     

    2.帳票の設計

    EMPID、EMPNAME、BIRTHDATE、HEIGHTフィールドをそれぞれセルA3〜D3にドラッグし、対応するタイトルを入力します。テーブルスタイルは次の図に示されます。

     

    3.ハイパーリンク動的パラメータの追加

    セルA2、C2、D2をそれぞれ選択し、右側のハイパーリンクを選択し、ダイナミックパラメータを追加します。各セルのパラメータ設定は次の表に示されます。

    注:本例では、文字列型のデータは並べ替えることはできない。

    セル

    パラメータ

    スタイル

    説明

    A2

    a

    if(a==-1,1,-1)

    パラメータaは、ハイパーリンクがクリックされるたびaの値が置き換えられることを意味し、1は昇順を、-1は降順を表す

    パラメータascはソートされるセルを示し、日付と時刻のタイプデータには特別な設定が必要

    asc

    文字列

    A3

    C2

    a

    if(a==1,-1,1)

    asc

    文字列

    tointeger(format(C3,'yyyyMMddHHmmss'))

    注:時間タイプに年、月、日のみが含まれている場合、パラメーターはtointeger(replace(C3、"-",""))

    D2

    a

    if(a==1,-1,1)

    asc

    文字列

    D3

    手順は下図の通りです:

     

    4.展開後ソートの設定

    セルA3を選択し、セル-展開後ソート-昇順を順次に設定し、以下の式を入力する:if($a==1,eval($asc),eval($asc)*-1)。

    式の説明を下表に示す。

    説明

    eval(exp) 

    式expで計算された果を返す。exp :表現式タイプの文字列

    $asc

    パラメータ$ascの値を返す

    if($a==1,eval($asc),eval($asc)*-1)

    パラメータaが1の場合、ascの値に従って昇順で並べ替える。それ以外の場合は、ascの値に従って降順で並べ替える。

    手順は下図の通りである:

     

    注:後ろのセルは第一列に続いて展開され、最上位の左側の親セルに「展開後ソート」が設定されている場合にのみ有効である。

    5.プレビュー

    5.1.PC端末

    帳票を保存し、改ページをクリックしてください(1.1予想される効果を参照)。

    5.2.モバイル端末

    APPとHTML5端末でプレビューでき、効果は下図のようになる。

     

    三.例示二

    例示一では、日付・時刻タイプのデータについて特別に設定しなければならなく、文字列タイプのデータを並べ替えることはできません。本マニュアルでは、数値、日付、文字列を並べ替える方法について説明します。

    例示一のテンプレートと違いは主に展開後ソートの式にあります。以下で簡単に説明します。

    3.1.ハイパーリンク形式のダイナミックパラメータを追加

    セル A2、B2、C2、D2にハイパーリンク-ダイナミックパラメータを追加する。パラメータ設定は次の表に示す。

    セル

    パラメータ

    スタイル

    説明

    A2

    a

    if($a=-1,1,-1)

    if($a=1,-1,1) は、ハイパーリンクがクリックされるたびaの値が置き換えられることを意味し、1は昇順を、-1は降順を表す。

    パラメータascの値は並べ替えられる対象セルを表す

    asc

    文字列

    A3

    B2

    a

    if($a=1,-1,1)

    asc

    文字列

    B3

    C2

    a

    if($a=1,-1,1)

    asc

    文字列

    C3

    D2

    a

    if($a=1,-1,1)

    asc

    文字列

    D3

    3.2.展開後ソートの設定

    セルA3を選択し、展開後ソートの数式を以下に変更します:INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a

    式の説明を下表に示す。

    数式

    説明

    EVAL(exp) 

    式expで計算された結果を返す。exp:表現式タイプの文字列

    $asc+"[!0]"

    結合された文字を返す。パラメータ$ascの値がA3の場合、A3[!0]を返す。つまり、セルA3から展開されたすべての値である

    SORTARRAY(array)

    並べ替えられたarray配列を返す

    注:配列要素のタイプに一貫性がないか、比較できない場合は、元の配列が返される

    INARRAY(co,array)

    coが配列arrayにおける位置を返す

    coがarrayにない場合、0を返す

    INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a

    まずSORTARRAYで取得したセルのすべての展開された値を並べ替え、次にINARRAYで並べ替えられたすべての値の中の現在のセル値の位置を返し、次にパラメーター$aを掛けて昇順や降順で並べ替える。

    注:データ列に空の値がある場合、少数または整数の並べ替えが無効になる可能性があります。このとき、式は以下に変更できます:INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]{len("+$asc+")>0}")))*$a 。{len("+$asc+")>0}条件で空でないデータをフィルターすることで並べ替える。

    3.プレビュー

    APPとHTML5端末でプレビューでき、効果は下図のようです。

     


    Attachment List


    Theme: FineReport 帳票実例
    既に最初
    既に最後
    • Helpful
    • Not helpful
    • Only read