一. 概要
1.問題の説明
帳票を作成する際、タイトルをクリックして昇順と降順を切り替える場合がよくあります。ヘルプドキュメント「データセットをソートする」では、データセットパラメータを定義し、動的パラメータを使用してタイトルをクリックして動的に並べ替えることができるようになります。
ただし、帳票を作成する際に、他のデータ列から計算された列がある場合があります。その列にデータセットをデータをソートすることができません。以下の図のように、「利益」は(単価-仕入れ価格)*数量から得られます。この場合、タイトルをクリックして動的に並べ替えるにはどうすればよいでしょうか?

2.解決方法
「ダイナミック変数」タイプのハイパーリンクを追加し、セルの展開後ソートに数式を追加することで実現します。つまり、データ列のタイトルをクリックすると、そのデータ列があるセルが変数として渡され、展開後のソート数式でその変数を受け取ります。変数に応じて異なる並べソートを実現します。
注意1:数値型と文字型の設定は異なります。詳細は本文の例を参照してください。
注意2:この記事では1列のデータソートについて説明します。複数列ダイナミックソートについては、ヘルプドキュメントの「複数列ダイナミックソート」を参照してください。
二. 例:数値型
1.データ準備
新しい一般帳票を作成し、新しいデータベースクエリds1を作成します。SQLクエリ文は:SELECT * FROM 注文明細 limit 20。以下の図のように:

2.帳票設計
データセットのデータをテーブルにドラッグし、A2セルの[データ設定]を[一覧]に設定します。F2セルに以下の式を挿入します:(C2 - E2) * D2。帳票のデザインは以下のようになります:

3.ダイナミック変数の追加
「利益」タイトルがあるF1セルを選択し、[ハイパーリンク]-[リンクの追加]で新しいダイナミック変数「a」を追加します。変数値は以下の式に設定します:if($a=1,-1,1)。以下のように表示されます:

4.展開後ソート設定
「親元セル」であるA2セルに設定を行います。A2セルを選択し、[セル属性]-[展開]を選び、[展開後ソート]を[昇順]に設定します。以下の数式を入力します:if($a=1,F2,-F2)
ここで、F2はF2セルの値に基づいて並べ替えることを示します。以下のように表示されます:
注意3:数値型フィールドをソート際、フィールドが空の場合は、ソート数式で空値に値を付与する必要があります。

注意4:数値型データにのみ負の値があるため、文字列型データには負の値がありません。したがって、このソート方法は「数値型フィールド」のソートにのみ適用されます。
5.効果プレビュー
5.1PC端末
帳票を保存し、[改ページプレビュー] をクリックするします。効果は本文の第1章第1節をご覧ください。
5.2モバイル端末
App端とHTML5端の両方がサポートされています。以下のように表示されます:

三. 例:文字型
1.データ準備
新しい一般帳票を作成し、新しいデータベースクエリds1を作成します。SQLクエリ文は:SELECT * FROM 販売量 where 地域='関東'。以下の図のように:

2. 帳票設計
データセットのデータをテーブルにドラッグし、A2セルの[データ設定]を[一覧]に設定します。帳票のデザインは以下のようになります:

3.ダイナミック変数の追加
「販売員」タイトルがあるB1セルを選択し、[ハイパーリンク]-[リンクの追加]で新しいダイナミック変数を追加します。変数設定以下のテーブルをご覧ください:
| パラメータ名 | パラメータ値のタイプ | パラメータ |
|---|---|---|
| a | 数式 | if(a=1,-1,1) |
| asc | 文字列 | B2 |
手順は以下の図のように:

4.展開後ソート設定
「親元セル」であるA2セルに設定を行います。A2セルを選択し、[セル属性]-[展開]を選び、[展開後ソート]を[昇順]に設定します。以下の数式を入力します:INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a。
数式の説明は以下のテーブルのように:
| 数式 | 説明 |
|---|---|
EVAL($asc) | 表現式 $asc を返し、つまり B2 セルの計算結果を返します。 |
| $asc+"[!0]" | 結合された文字列を返し、つまり B2[!0] を返します。これは B2 セルから展開されたすべての値を意味します。 |
| SORTARRAY(array) | 並べ替えられたarray配列を返します。 注意:配列の要素にタイプの不一致や比較できない場合がある場合、元の配列が返されます。 |
| INARRAY(co,array) | co が配列 array の中の位置を返します。co が array の中にない場合は、0 を返します |
手順は以下の図のように:

5.効果プレビュー
5.1PC端末
帳票を保存し、[改ページプレビュー] をクリックするします。効果は以下の図のように:

5.2モバイル端末
App端末とHTML5端末の両方がサポートされています。以下のように表示されます:
