【クエリビルダ】プロンプトフィルター：通常フィルター値の決定要因として使う

[【クエリビルダ】プロンプトフィルターを使いこなす](https://qiita.com/Miki_Yokohata/items/4551b136febdf8082802)記事に関連する投稿です。
プロンプト専用フィルターの使用例を紹介します。この使用例は実用的ではないでしょうが、基本となる考え方をご紹介できればと思います。

使用例では、SAP Business Oneデータモデルを使用し、プロンプト専用フィルターに渡した値を元に、**Document Date列**にフィルターをかけます。

[Sharperlight](https://sharperlight.jp/)パブリッシャーでレポートを作成し、そのレポートのクエリ定義でプロンプト専用フィルターを使用してみます。
先ずは、[Sharperlight](https://sharperlight.jp/)アプリケーションメニューから**パブリッシャー**を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0811bf1d-3314-d35a-5952-41ae2a82107e.png)
**パブリッシャー**が起動したら`新規`ボタンで新しいレポートの作成を開始します。
# クエリの編集 #
`クエリを編集`ボタンで**クエリビルダ**を起動します。

`製品`、`Company`、`テーブル`を下図のようにそれぞれ選択します。選択したテーブルに付随する既定の必須フィルターが自動設定されます。それらはそのままの状態で使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/03d91049-f459-0f7a-2f59-f552b995ab0e.png)
## フィルターの定義 ##
この例では、`年度`と`季節`を引数として渡します。よって二つのプロンプト専用フィルターを準備します。
番号型とテキスト型の二種類を追加します。
クエリビルダのフィルター領域の右クリックメニューから**その他**のサブメニューを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/b11b27fc-dd84-4adb-09b0-24477ceb409b.png)
サブメニューでは、様々なデータ型を選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/41f2d697-e8c7-1f7f-f231-f91b5bb32836.png)
### プロンプト専用フィルター : 年度 ###
先ずは番号を選択し、フィルター領域に番号型のフィルターを追加します。フィルターの説明ダイアログが表示されるので、**年度**と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9f54fbf0-9389-205c-0836-05fbff7b2710.png)
フィルターオプションダイアログを開き、`フィルター名`、`説明`、`1つの値のみ`オプションを下図のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c5a8d938-dc0b-75fa-9b30-897d0f7c08e2.png)
### プロンプト専用フィルター : 季節 ###
次にフィルター領域にテキスト型のフィルターを追加します。フィルターの説明ダイアログが表示されるので、**季節**と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ca54d3c3-cde8-697e-1490-30a9ce85b237.png)
フィルターオプションダイアログを開き、`フィルター名`、`説明`、`1つの値のみ`オプションを下図のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/d3f17e0e-6067-c6e6-12ec-4de36b7af6cf.png)
このようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e7fc201d-70af-e8ff-3894-055af05bd2b5.png)
### 通常フィルター : Document Date ###
クエリのWHERE句に使用される通常のフィルターを設定します。そして上記で設定したプロンプト専用フィルターをここで使用します。
選択リストから**Document Date列**をフィルター領域にドラッグ＆ドロップ。
フィルターオプションダイアログを開き日付オプションの選択から開始します。
`関数`タブで、この**年/月**オプションを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/403ea3f0-05ae-c59e-2133-fb9684b3d3fb.png)
次にFrom値とTo値に拡張表現式を用いてプロンプト専用フィルターの値を使用するよう設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/08efbcfb-0569-9b0f-f935-213a5413b99d.png)
#### 演算子 ####
`演算子`には、**間**(Between)を選択します。
#### 演算子または値 (From) ####
`演算子または値`(From)には、拡張表現を用いてSwitch文を設定します。右側のボタンでエディタが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ec09138d-8853-ef08-0e74-3e4613247dc6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/67a39baa-379a-236c-eb08-93063e06e177.png)
`プロンプト専用フィルター：年度`に**2006**が渡され、`プロンプト専用フィルター：季節`に**春**が渡された場合、春の開始月である季節`2006/03を、夏の場合は、2006/06をといった具合です。
```
_Expression(
    Switch( "{@季節}"
        ,"春","{@年度}" + "/03"
        ,"夏","{@年度}" + "/06"
        ,"秋","{@年度}" + "/09"
        ,"冬","{@年度}" + "/12"
        ,"<ALL>"
    )
)
```
#### 値 (To) ####
`値`(To)にもSwitch文を拡張表現を用いて設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/10dafad2-18d5-405c-b4df-69601cc78b30.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/dc366d71-99a4-f69b-986c-ad28bab363a4.png)
`プロンプト専用フィルター：年度`に**2006**が渡され、`プロンプト専用フィルター：季節`に**春**が渡された場合、春の終り月である季節2006/05を、夏の場合は、2006/08をといった具合です。
**冬**の場合は、翌年の2月が終り月なので、`プロンプト専用フィルター：年度`に1を加算します。
```
_Expression(
    Switch( "{@季節}"
        ,"春","{@年度}" + "/05"
        ,"夏","{@年度}" + "/08"
        ,"秋","{@年度}" + "/11"
        ,"冬", CStr({@年度}+1) + "/02"
        ,"<ALL>"
    )
)
```
## 出力アイテムの定義 ##
選択リストから以下のような列を出力アイテムとして設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/eb1174dd-92b6-fd73-bac8-20dae5395ea1.png)
## クエリのプレビュー ##
`プロンプト専用フィルター：年度`と`プロンプト専用フィルター：季節`に、それぞれ**2006**と**春**と入力して`プレビュー`ボタンを押します。
出力結果のDocument Date列の値を確認します。全てが2006/03から2006/05の範囲であればフィルターが正常に動いているということです。
同じように**夏**、**秋**そして**冬**を確認してみましょう。特に**冬**の場合は、全てが2006/12から<font color="Red">**2007**</font>/02の範囲であればOKです。
<br>
最後、クエリに戻り`年度`と`季節`以外のフィルターを全て**非表示**に設定し、クエリを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c189e779-d1ef-006c-e804-e036e4af71b2.png)
# レポートからの検証 #
公開レポートのダイアログに戻ったら、**コード**、**グループ**および**タイトル**を記入して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9bc6dd98-9c16-ae8c-27ea-ff2846eb62a3.png)
Sharperlightサービスを起動してブラウザで表示してみます。
このようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ace1e36a-d706-4707-bdf4-9dbe4c634631.png)
<br>
今回、実用的ではない例で記事を書いてみましたが、**プロンプト専用フィルター**の使い方とその動きをご紹介できたかなと思っています。

では、失礼します。