Yellowfin からストアドプロシージャに接続

## はじめに
Yellowfin のビューからは、データベースのテーブルだけでなく、ストアドプロシージャにも接続することが可能です。[Wiki](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=1351080#id-%E3%83%93%E3%83%A5%E3%83%BC%E4%BD%9C%E6%88%90-%E3%82%B9%E3%83%88%E3%82%A2%E3%83%89%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3) にもストアドプロシージャへの接続手順は説明されていますが、設定手順をもう少し丁寧目に説明したいと思います。

## データベース
今回の手順では、MS SQL Server を使用します。

ストアドプロシージャが参照するテーブル (RegionSales) は以下の通りです。
|area|country|sales|
|---|---|---|
|アジア|日本|26|
|アジア|中国|11|
|アジア|マレーシア|39|
|アジア|シンガポール|69|
|アジア|インド|66|
|欧州|フランス|83|
|欧州|イギリス|14|
|欧州|ギリシャ|70|
|欧州|スペイン|67|
|欧州|ノルウェイ|37|
|北中米|アメリカ|25|
|北中米|カナダ|71|
|北中米|メキシコ|28|
|北中米|ホンジュラス|52|
|北中米|コスタリカ|81|

以下のストアドプロシージャ (SP_RegionSales) を作成します。処理内容としては、パラメーターとして地域 (<span>@</span>area) を引き渡すと、地域ごとの売上 (sales) の中央値 (median) を算出するものです。
```sql:SP_RegionSales
USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SP_RegionSales] @area varchar(50)
AS
BEGIN
    SELECT
      area,
	  country,
	  sales,
	  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY [sales]) OVER (PARTITION BY [area]) AS median
    FROM
      dbo.RegionSales
	WHERE
	  RegionSales.area = @area
END;
```

## ビュー
Yellowfin で[ビュー](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294093)を作成します。
ビューのタイプとしてストアドプロシージャを選択し、先の手順で作成したストアドプロシージャ (SP_RegionSales) を選択します。ビュー名は任意で構いません。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/5d13cf8a-755d-cbb4-562b-e89d0802f69a.png)

[プロシージャステップ]で、パラメーターとして受け渡す値を指定します。下記の例では <span>@</span>area に「アジア」を指定しています。
[承認] ボタン押下後に、Column Name に、ストアドプロシージャが返す列一覧が見えてきます。
なお、ここで指定するパラメーター値は、あくまで、続く [準備] ステップのプレビュー表示に使うデータを指定しているだけです。ビューを通して参照できる値を絞り込んでいる訳ではありません。
[保存] ボタンを押下して、[準備] ステップに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/4ea706df-5bc3-b91f-8ac1-06919985e150.png)

左ペインの [ストアドプロシージャフィルター] ボックスに、パラメーターが表示されます。
プレビューで見えている情報は、先のステップで <span>@</span>area に指定したアジアの情報だけですが、このビューを通してアジア以外の area (欧州、北中米) の情報も全て参照できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/6592f114-94f2-e638-15fc-9f2dc5924cc2.png)

※参考までに、ストアドプロシージャフィルターに対して、[アクセスフィルター](https://xn--wiki-u53c0c6cp.yellowfin.co.jp/pages/viewpage.action?pageId=2294281)をかけることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/78efdc1e-286b-6b23-55a3-510c244e6373.png)

## レポート
先の手順で作成したビューから[レポート](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2293995)を作成します。
フィルターに <span>@</span>area を、カラムにディメンションとメトリックを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/e3740c7f-07e5-a7e1-1c8a-00275b1421bb.png)

フィルターの値を一覧から選択させたい場合は、フィルターの書式画面で、RegionSales テーブルに対して、データを取りに行くのが良いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/c28e399b-904c-c930-94b7-5699add36c0c.png)

公開してレポートの動作を確認します。絞り込んだ地域の中央値が算出されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/af738f98-cc44-fbed-9ad6-afffcef0bc21.png)

## 最後に
ストアドプロシージャを使って、データベース側で様々な処理を施していることも多いかと思います。
パフォーマンス面でも、データベース側で可能な処理を施した結果を、Yellowfin で可視化することの優位性は大きいはずです。
是非、本記事の内容をご活用ください。

では、皆様良いデータ分析を! Cheers!!