Oracle Analytics Cloud：Ago関数で過去のデータを検索する

# はじめに
時系列に沿った推移を可視化する際には、前の期間との比較をしてみたくなることがあります。
Oracle Analytics Cloud（**OAC**）に用意されている関数を使用して過去の数値を集計する方法を紹介します。
以前に書いた記事とは別の方法です。
- [Oracle Analytics Cloud：前年の値を計算](https://qiita.com/tyo38/items/71de5c655ce0b17fd5a0)

:::note
Autonomous Data Warehouse(**ADW**）とMySQLをデータソースとして検証しました。
:::

# 前提条件
これから紹介する時系列関数を使用するためには、いくつかの前提条件があります。

- セマンティック・モデルを構築していること
- セマンティック・モデルで「時間ディメンション」が定義されていること
- セマンティック・モデル（サブジェクト領域）を経由した検索であること

# セマンティック・モデルとは
利用者が検索先DBを参照する際に、接続先の情報や表・ビューなど技術的な知識不要で利用できるための仕組みです。
セキュリティやドリル分析のための階層（ディメンション）、式の定義といった、ロジックを組み込んでおくことも可能です。

# 時間ディメンション
ドリル分析のために事前定義しておく階層（ディメンション）の中でも、時間に関する特別な階層を時間ティメンションとして定義できます。
時系列関数を使用するには、時間ディメンションが必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5b9e6732-a018-a2aa-b684-0e7a0961d710.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1fd51511-ab53-6789-2076-4273b4ebab95.png)

# サブジェクト領域を経由した検索
セマンティック・モデルは、利用目的毎に定義された「サブジェクト領域（エリア）」として利用者に提供されます。

## AGO関数
時系列関数のひとつです。
過去の数値を簡単に集計することができます。
書式は、次の通りです。
```
AGO(集計列, [時系列階層のレベル,] シフトする値)
```
第2パラメータはオプションです。指定しない場合は、クエリーの内容から自動的に判断されます。

:::note
サブジェクト領域を直接データソースにしたときのみ、AGO関数は使用できます。
サブジェクト領域をデータソースにしたデータセットでは使用できません。
:::

## Answersを使用した検索
「クラシック・ホーム」に移動し、「新規」メニューから「分析」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d57f30bc-40d2-6184-971d-36fdcba381f6.png)
目的のサブジェクト領域を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a77ea823-2ea3-ebd1-be93-0936a6bded2f.png)
「年」をダブルクリックします。次に「販売金額」を2回ダブルクリックします（同じ項目が2つ選択されます）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6744beae-20bd-4e08-db73-280ca310c8a4.png)
右側の「販売金額」の「式の編集」をクリックします。
列式として「AGO("実績"."販売金額", 1)」と入力後、OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/34dd464f-788c-1787-561f-d3b4a7a427f3.png)
式の意味は、販売金額を1期間過去にシフトする、になります。

時系列階層に属する列「年」と一緒に使用しているので、この場合
```
select 年, 販売金額, AGO(販売金額, 1)
```
となり、AGO関数により、年を1期間シフトした値（つまり1年前）が集計されます。
6ヶ月前の値を求めたい場合は、時系列階層に所属する列である「月」とともに
```
select 月, 販売金額, AGO(販売金額, 6)
```
と定義します。

## セルフサービスBIでの検索
ワークブックを新規に作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5942975e-d08d-95c7-0454-4483f0a5595c.png)
目的のサブジェクト領域を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d216d40c-7107-dd90-fdf8-008467c77501.png)
「追加（＋）」をクリックし「計算の追加」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ac60b862-488f-9a65-acc6-ece92c4c3581.png)
式としては、
```
AGO(販売金額, 1)
```
と定義します。
右側の関数一覧で「時系列計算」カテゴリに「Ago」が表示されないデータセットの場合は、この関数は使えません（ファイルデータセットなど）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1263c7b1-5892-6f42-e36c-b9ced8f1e6c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/dea78e79-55da-6131-134b-d56ba1d17aa4.png)
12ヶ月前の値を取得して、前年同月比を求めた例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f33668ec-b344-3652-7b9a-dd5d149266c0.png)

# ドキュメント
- [時系列データのモデリング](https://docs.oracle.com/cd/F33068_01/metadata-oas/model-time-series-data.html#GUID-BF2B592A-E66C-48CA-AA4C-4BE9B454A45C)
- [AGO関数について](https://docs.oracle.com/cd/F33068_01/metadata-oas/model-time-series-data.html#GUID-D474E224-DFBB-4639-8873-8A618271F88D)

# 参考
- [Oracle Analytics Cloud：時系列関数で前期間のデータを検索する](https://qiita.com/tyo38/items/b630761e75d7db7f3e74)