【MicroStrategy】Lag関数で同列に前月値、前年同月値を表示する方法

Lag関数を用いて前月値、前年同月値を表示する方法について

# はじめに
本記事がQiita初投稿になります。
今回はMicroStrategyで前月値や前年同月値を表示する方法、Lag関数の使用方法についてまとめていきたいと思います。
[設定後の出力結果はこちら](#sec5)

<a id="sec1"></a>
# 使用環境と前提
今回はドシエを使用するため、すべてブラウザ上で作業しています。

本記事では以下のダミーデータを使用しています。
|　商品　|　年月　|　金額　|
|--:|--:|--:|
|A|202107|1000|
|A|202108|2500|
|A|202109|3500|
|A|202207|2000|
|A|202208|3000|
|A|202209|4500|
|B|202107|900|
|B|202108|1750|
|B|202109|2800|
|B|202207|1800|
|B|202208|2100|
|B|202209|3600|
|C|202107|1100|
|C|202108|3000|
|C|202109|3850|
|C|202207|2400|
|C|202208|3300|
|C|202209|5400|

※使用する関数の都合上、データは連続した年月のもの

事前にドシエに商品、年月ごとに金額を表示するグリッドを作成しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/0c1c3930-2a5d-ebec-4575-58fc09d582b7.png)

<a id="sec2"></a>
# 作業の流れ
以下手順で必要なアトリビュート、メトリックを作成していきます。
１．年月アトリビュートから派生させて、月、年のアトリビュートを作成する〈事前準備〉
２．手順1の派生アトリビュートを用いて、前月値を表示するメトリックを作成〈本題、Lag関数の設定〉
３．手順2と同様に前年同月値を表示するメトリックを作成〈本題、Lag関数の設定〉

<a id="sec3"></a>
# 作業手順〈事前準備〉
## １．年月アトリビュートから派生させて、月、年のアトリビュートを作成する
後述のLag関数で前月、前年を指定するために月と年の独立したアトリビュートが必要なので、年月アトリビュートからそれぞれ派生アトリビュートとして作成します。

#### 1-1．月アトリビュート
年月アトリビュートから、月部分を抜き出します。

    SubStr(年月@ID, 5, 6)
　
※関数エディタで以下のように設定も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/52c8f0fb-ab86-5670-bdbc-164856d97c6c.png)

#### 1-2．年アトリビュート
月アトリビュートと同様に、年月アトリビュートから、年部分を抜き出します。

    LeftStr(年月@ID, 4)
　
※関数エディタで以下のように設定も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/fe2554c3-5ec5-3962-2b38-5bd07497f36b.png)

グリッドに月、年のアトリビュートを追加表示させた結果は以下です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/61cd8a4d-4b2c-42d8-b158-d4821c13bb77.png)

<a id="sec4"></a>
# 作業手順〈本題、Lag関数の設定〉
## ２．手順1の派生アトリビュートを用いて、前月値を表示するメトリックを作成
必要なオブジェクトがそろったので、本題に入ります。
商品、年毎に月アトリビュートを基準に1つ前の金額を表示するよう、Lag関数を用いて作成します。
#### Lag関数とは？
以下5つを設定して、指定した順序でメトリック値を表示する関数です。
・**ValueList**：表示させたいメトリック　※選択肢はデータセット内のメトリック
・**Offset**：並べ替えで指定したものに対し、いくつ前を表示するか
・**DefaultValue**：初期値
・**区切り(BreakBy)**：並べ替えの区切りとなるもの
・**並べ替え(SortBy)**：基準となるもの

⇒今回は<INS>商品、年毎 __[BreakBy]__ </INS>に <INS>月アトリビュートを基準 __[SortBy]__ </INS>にし、<INS>1つ前 __[Offset]__ </INS> の<INS>金額メトリックの数値 __[ValueList]__ </INS>を、<INS>データがない場合は0 __[DefaultValue]__ </INS>を表示させたいので、以下のように設定します。

    Lag<BreakBy={商品, 年}, SortBy=(月@ID)>(金額, 1, 0)
　
※関数エディタで以下のように設定も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/d43c96a7-a6b3-1394-4bd4-b7f0192b7d09.png)

## ３．手順2と同様に前年同月値を表示するメトリックを作成
手順2と同様に、商品、月毎に年アトリビュートを基準に1つ前の金額を表示するよう、Lag関数を用いて作成します。

⇒<INS>商品、月毎 __[BreakBy]__ </INS>に <INS>年アトリビュートを基準 __[SortBy]__ </INS>にし、<INS>1つ前 __[Offset]__ </INS> の<INS>金額メトリックの数値 __[ValueList]__ </INS>を、<INS>データがない場合は0 __[DefaultValue]__ </INS>を表示させたいので、以下のように設定します。

    Lag<BreakBy={商品, 月}, SortBy=(年@ID)>(金額, 1, 0)
　
※関数エディタで以下のように設定も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/48c84cd7-61eb-ae14-4c0e-b7c1523d4d5d.png)

<a id="sec5"></a>
# 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768514/c1e049af-2250-59e2-750a-1b1a46837d45.png)

<a id="sec6"></a>
# おわりに
今回は前月値や前年同月値を表示する方法について記載しました。
別記事になりますが使用時の注意点について以下にまとめていますので、こちらもご参照いただければと思います。

https://qiita.com/m_zeal/items/94232b2b4036c1610797

MicroStrategyには他にも関数が用意されているので、今後も投稿したいと思います。



#
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area