Googleデータポータルでの「時間」の扱い

# これは何？

Googleスプレッドシートをデータソースとして、Googleデータポータルでグラフ化を行う。
そこで「時間」を扱う時に 工ｴｴｪｪ(´д｀)ｪｪｴｴ工 ってなったのでまとめておく。

# やりたいこと

何かの工数管理をしているとします。
D列の「経過時間」列には、「終了時刻 - 開始時刻」( D2に`=ArrayFormula(C2:C-B2:B)` )が入っていて、
D列の「表示形式」は「経過時間」になっています。

データの中身は

- タスクAの合計が2時間
- タスクBの合計が3時間

(図1) データソースとしてのスプレッドシート
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/091e4200-1135-af03-ea3e-e75d79f71444.png)


↑これをデータソースとして、データポータルで↓こんなグラフを作りたいとします。
ポイントは「Y軸の単位は時間で表示したい」です。

(図2) こんなグラフを作りたい
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/668c4c96-9041-592f-f7b4-1d96819d95d0.png)


# 持続時間(秒) を利用する

データソースと接続する時にフィールドの設定ができると思うのですが `持続時間(秒)` という「それっぽいもの」があるじゃないですか。それに設定してみます。

(図3)
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/9b2d9a16-8972-a2e7-2608-eb21805446e5.png)

↓ データポータルで「グラフを追加」で「縦棒グラフ」を追加して、ディメンションとかを設定したところ。何も表示されない。。。(正確には意図していないものが表示されている、か)

(図4)
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/f3a4e457-6e43-7d55-7d09-1ad7e65a2a2d.png)

ちなみに図3で「数値」にしてみるとこんなグラフになります。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/083f6dbc-5e20-4fd1-c4d7-7781b26044b1.png)



# 実験する

(あれこれ調べたことは省略 → 結果としてそのセルの「値」が何なのか、ってことに行き着いた)

## スプレッドシート側の設定

(図5)
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/060a1ede-5803-75bc-2f6e-31a5b951bf67.png)

**E列: 秒表示**
式は`=C2-B3` で 表示形式は [カスタム数値形式](https://support.google.com/docs/answer/56470)より `[s]` にした。(「秒」の表示)

**F列: VALUE表示**
式は`=VALUE(D2)` で、表示形式を「数値」にして、小数点以下をいっぱい表示させてみた。(経過時間のVALUE)



## データポータル>フィールドの設定

データソースの編集からフィールドを更新するとこうなる

(図6)
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/514d0267-224e-1918-b176-63a41ce6cad5.png)

## 解決策1: [s]を使う

(図7) 指標に [s]のフィールドを指定
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/afd9e0e5-760a-d782-e70c-b01981f578f8.png)


きたこれ。ただし、Y軸が「秒」なので、これを「時間」に変換してくれるフィールドを追加する。

データソースの編集から、フィールドを追加して、`[s]/(60*60) ` することで、「秒」を「時間」として表現するフィールドを追加する。`[s]/3600` でも同じ。

(図8) 投下時間(h) のフィールドを追加
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/c9b1ec31-a499-594c-9610-9d80913fdb1e.png)


↓ 期待するものができた！

(図9) 指標に「投下時間(h)」を指定する
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/ad150894-b9ca-7cf3-e1c7-1194410cddd3.png)


## 解決策2: VALUEを使う

[s]でできたからいいのでは？と思うのですが、表示形式はともかくスプレッドシートの内部的にはVALUEで値を持っていると思うので、これを元データとするのが一番安全？なのでは、と思った次第。

図5のように `1:00:00` というのは `0.0416666667` という「値」として管理されている。
ちなみに、下記のように「24時間」を「1」として扱っているようです。

![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/4dcdca3d-26fa-8e78-56b3-824d31f80f39.png)

つまり `VALUE * 24` で何時間かかったか、がわかる、と。

ということで、`VALUE*24` のフィールドを追加します。

![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/6cbd37e9-b8ab-0e0e-ed9c-57909bf787e0.png)

↓ できた！

![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8612/224e8040-5612-e429-3757-15f29d3abc55.png)


# さいごに

...ほんとにこれでいいのかな？もっとうまい方法があるのかもしれない。ぜひ教えてほしい。

これって、「元データ」に手を加えてるんですよね。(スプレッドシートのE,F列は本来要らないハズ) A～D列だけを元データとして、スプレッドシート側の「経過時間」と、データポータル側の「持続時間(秒)」をうまく使えば同じグラフが書けるような気がしてならないのですが、だれか教えて！