見出し画像

notionでタイムレコーダーの作り方|Formulaの解説

このnoteはフリーランスがnotionでタイムレコーダーの作り方を紹介する。

👇使い方を見たい方はこちらへ👇

前半はタイムカードの作り方で「if」、「dateBetween」と「format」について紹介、後半は「Relation」と「Rollup」、「slice」を中心に説明します!

早速始めます!

内容はちょっと長いので、使いこなしている方は、是非目次を活用してください〜

タイムカードの作り方

❶(property)属性の設定

テーブルのデータベースを新規で作成してから、このように属性を作る。

新規データーベースの作成を知りたい方はこちら

わかりやすいように、日本語に直したが、自分が読めるように書き込めばいい。

20210208打卡機.004

かかった時間は基本チェックインした時間で計算してもらうが、たまに押し忘れることがあるので、後から入力した時間でも計算できるように作った。

今のところ引き受けた翻訳の案件は短いもの、仕事の完了度を見る必要がないが、文字起こしは結構時間がかかるものなので、完了度を見るために進み具合も記録するようにした。

❷(Formula)今回終わらせた仕事量

エクスセルのようにセルの中の数値を計算させる

20210208打卡機.005

このように、セルの中は「数値」なら計算できる

prop("文字起こしの終わった所の秒数") - prop("文字起こしの始めた所の秒数")

❷(dateBetween)時間の長さを計算する

20210208打卡機.006

時間の計算は今回のタイムレコーダーの基本となる。

20210208打卡機.007

❸-❶ = dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes")
❷-❶ = dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes")

計算の表示方法は色々あるが、「分」自分にとって一番直観的にわかりやすいので、「分」で表示させた。

❹(if)基本な使い方

時間の計算が覚えたら、私が大好きな(if)の番だ。

最初は理解するのはちょっと難しかったが、自分が理解できる言葉に変えると使いこなせるようになった。

20210208打卡機.008

上と下は同じ意味の数式だが、自分にとって上の方がわかりやすい〜

なぜこれを使うと〜

基本は「チェックインした時間」(新しいページを開いた時間)でかかった時間を計算させるが、たまにタイムカードの押し忘れる時があるので、手動で入力した時間でも計算できるようにしたい。

それでこのような式を書いた

if(empty(prop("始めた時間")), dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes"), dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes"))

20210208打卡機.009

一旦三つのパーツに分けてみた方が分かりやすいかも

条件 = "始めた時間"が空白の場合 = empty(prop("始めた時間"))
表示1 = dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes")
表示2 = dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes")

もっとわかりやすくいうと〜

20210208打卡機.010

普段は青い状態で計算させる、
でも❷の条件が発動されたら、
❷で計算させる意味。

この基本踏まえて、色々変化させる!

❺(format)時間の長さを「数値」から「文字」に

截圖 2021-02-08 12.08.12

上の図の右側に注目、かかった時間の出し方がわかったが、でもやはり「何時間と何分かかったか」の方が見やすい、それを表示させるため、こんな式を書いた。

截圖 2021-02-08 12.06.02

if(empty(prop("始めた時間")), if(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") < 60, format(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes")) + " m", format(floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60)) + " h " + format(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") - floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60) * 60) + " m"), if(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") < 60, format(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes")) + " m", format(floor(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") / 60)) + " h " + format(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") - floor(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") / 60) * 60) + " m"))

画像13

Confused Nick Youngのような戸惑う顔にならないように、ゆっくり説明する😅

20210208打卡機.011

数値を文字に変えると計算ができなくなるので、このように「計算用」と「表示用」の二種で作った。計算用のセルは別のデータベースで使うので、普段は隠している〜

以上を踏まえて〜

例えばdateBetweenの計算結果は215(分)、でもやはり3時間35分の方が分かりやすいよね〜

例にあげた215を何時間かに変えるために、割り算が必要。

215÷60=3余り35

でも普通のパソコンの計算では「余り」は出せなくて、「3.5833333...」みたいな数値が出る、そうならないために、こういう計算式になる

3 = 215÷60を小数点以下を切り捨て
35 = 215-(215÷60を小数点以下を切り捨て)×60 = 215-3×60 = 215-180

小数点以下の切り捨てるには、notionの数式の書き方はfloor(数値)

数式に直すと

3 = floor(215/60)
35 = 215-floor(215/60)*60

215を先程のdateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes")を代入すると

3floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60)
35 = dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") - floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60) * 60

ここまでができたら、これからは簡単です!

20210208打卡機2.002

20210208打卡機2.001

組み合わせばいい

215(数値) = 3h35m(文字)
215 = format(3)+"h"+format(35)+"m"

先出した式を「3」と「35」代入すると

215 = format(floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60)) + " h " + format(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") - floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60) * 60) + " m"

これで「何時間何分」かかったかの数式ができた〜〜

もちろん”Xh Ym”を”X時間Y分”に変えることもできる、お好きのように色々変えてみてください!

截圖 2021-02-09 13.43.48

もっと違う表示を使ってみたい方は、ぜひこのサイトへ!

❻(if)シチュエーションに合わせて表示を変える

もう一度のConfused Nick YoungもConfuseした数式に戻る。

色をつけたら多分ちょっと見やすくなる

20210208打卡機.012

もし「始めた時間」が空白な場合は前者で、空白じゃないなら後者で表す。

後者だけをさらに分解すると

20210208打卡機2.003

もし「かかった時間」が60分以下なら前者で、60分以上なら後者で表す、始めた時間」が空白な場合も同様。

これでタイムカードにある数式が全部書き込めるようになった!

タイムレコーダーの表示板の作り方

❶(property)属性の設定

20210208打卡機.013

時間効率が見れるため、時給換算を加えた。

「仕事の状態」は使う人によって、設定が違うと思う、自分はこのように設定した。

截圖 2021-02-13 04.25.02

❷(Relation)二つのデーターベースを繋げる

タイムカードのデーターベースに戻って、Relationを作くる。

螢幕錄製 2021-02-15 03.04.11.mov


❸(Rollup)二つのデーターベースを連動させる

タイムカードで入力したものが、仕事の管理画面で見れるようにRollupで連動させる。

チェックインしたものと共に、下のデータベースだけではなく、上のデータベースも自動的に計算される。

画像23

Relationと同じ要領で、かかった時間トータル(計算用)のところにRollupを選ぶ。

螢幕錄製 2021-02-15 03.32.45.mov

今回合計値が欲しいので「sum」を選ぶ。

前回作った「かかった時間(計算用)」の数値を合計したら、かかったトータル時間が出る。

画像29

「かかった時間(表示用)」は文字として認識されているから、計算ができない。

画像30

文字起こしの進み具合も同じ要領で

画像31

❹(formula)時給の出し方

青い❹時給のところの数式を紹介

画像32

連動させたら、下の❶の部分を入力するだけで、他は色々計算してくれる。

とりあえず一番簡単な「時給換算」から始める

時給 = 手取り÷時間 = prop(手取り)/時間

かかった時間は「分」になっいるから、それを1時間あたりに直す

時間 = prop(かかった時間)×60 = prop(かかった時間)*60

二つを合体させると

時給 = porp(手取り)/prop(かかった時間)*60

小数点以下を切り捨てると

時給 = floor(porp(手取り)/(prop(かかった時間)*60)

このようになる〜

画像33

これで、手取りの金額を入力すれば、この仕事は時給換算すればいくらだったかがわかる。

螢幕錄製 2021-02-15 03.39.02.mov

❺(if)かかった時間をXh Ymに直す

青い❸かかった時間のところの数式を紹介

画像37

if(prop("かかった時間(計算用)") < 60, format(prop("かかった時間(計算用)")) + " m", format(floor(prop("かかった時間(計算用)") / 60)) + " h " + format(prop("かかった時間(計算用)") - floor(prop("かかった時間(計算用)") / 60) * 60) + " m")

前回より短い式になっているので、多分読めると思う〜

条件=かかった時間<60
表示1=Ym = format(prop("かかった時間(計算用)")) + " m"
表示2=Xh Ym = format(floor(prop("かかった時間(計算用)") / 60)) + " h " + format(prop("かかった時間(計算用)") - floor(prop("かかった時間(計算用)") / 60) * 60) + " m"

難しいと思ったら、また前回のを説明をもう一度復習しよう〜

❻(slice)メーターを作る

黄色い❷仕事の完了度のメーターを作る

画像38

前の読書メーターで紹介したものとまたちょっと違う表示方法形になっている、これも私が大好きなnotionのユーチューバーRed Gregoryが作ったもの〜

彼女の話がすごくわかりやすくて、英語が上手だと言えない私でも理解できる。本当に大好きです!興味がある方彼女の是非動画をみてみてください。

告白タイムが終わり、解説に入ります〜

とりあえず式をお見せします。

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) + "⬤" + slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 20 - floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) + " " + format(round(prop("終わらせた秒数") / prop("トータル秒数") * 100)) + "%" + " " + format(prop("トータル秒数") - prop("終わらせた秒数")) + "s"

これは読書メーター登場したスキル、今回は3度目の登場となります👏

シンプルなslice(”文字”,数字,数字)なのに、考え方を変えるだけで、こんなに使い方が広がるって、本当に面白いと思った。

画像39

とりあえずSliceを説明する。

画像40

上の図の例のとこに書いたslice("Hello world" , 1, 5)の意味は、
「1」つ目のアルファベット以前と、
「5」つ目のアルファベット以降の文字を全部カットする。

この図の数字で式を作ってみよう

画像41

式に使うのは、終わらせた秒数の2148とトータル秒数の9405。

完成度 = 2148÷9405 = 2148/9405 = 0.228389....

上の数値を今回のslice代入してと

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,0.228389....)

sliceは数字の小数点以下を認識できないので、数値を丸めないといけない。

今回使うsliceは20文字分がある、20分割できるように数値に20をかける。

完成度 = 20×30÷100小数点以下を切り捨て = floor(20*30/100) = 6 
完成度 = 20×80÷100小数点以下を切り捨て = floor(20*80/100) = 16 
完成度 = 20×2148÷9405小数点以下を切り捨て = floor(20*2148/9405) = 4 

これをもう一度sliceに代入してみる

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,floor(20*30/100)) = slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 6) =  ‒‒‒‒‒‒
slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,floor(20*80/100)) = slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,16) = ‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒
slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,floor(20*2148/9405)) = slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 4) =‒‒‒‒

2148と9405にセルを代入すれば青い部分の式の完成

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, floor(20 * prop("終わらせた秒数") / prop("トータル秒数")))

黄色い部分の式は

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 20 - floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) 

これも数字を入れてみよう

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,20-floor(20*30/100)) = slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 14) = ‒‒‒‒‒‒‒‒‒‒‒‒‒‒
slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,20-floor(20*80/100)) = slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,4) = ‒‒‒‒
slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0,20-floor(20*2148/9405)) = slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 16) = ‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒

これで、青い部分と黄色い部分のーが丁度合わせて20個になる、この間に●を挟めば、メーターの完成となる。

❼(format)メーターに文字を加える

画像42

一番複雑なメーター部分をの乗り越えておめでとう〜👏

これが最後式の最後の部分になる。

数値を丸める式は3つある
floor(数値)は小数点以下切り捨て
ceil(数値)は小数点以下切り上げ
round(数値)は小数点以下四捨五入

みんなは状況に応じて変えていい〜
自分は今回round(数値)を使う

残りはformat(数値)と”表示させたい”ものを組み合わせばいい。

23% = format(23)+"%" = format(round(2148/9405*100))+"%" = format(round(prop("終わらせた秒数") / prop("トータル秒数") * 100)) + "%"
7257s = format(7257)+"s" = format(9405-2148)+"s"

間に空白を一個入れて組み合わせると

23% 7257s = 23%+" "+7257s= format(round(prop("終わらせた秒数") / prop("トータル秒数") * 100)) + "%" + " " + format(prop("トータル秒数") - prop("終わらせた秒数")) + "s"

さらにメーターと組み合わせると完成👏

slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) + "⬤" + slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 20 - floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) + " " + format(round(prop("終わらせた秒数") / prop("トータル秒数") * 100)) + "%" + " " + format(prop("トータル秒数") - prop("終わらせた秒数")) + "s"

書いた式のおさらい

タイムカード

1、今回の文字起こしで終わらせた秒数の式で

prop("文字起こしの終わった所の秒数") - prop("文字起こしの始めた所の秒数")

​2、かかった時間(計算用)の式で

dateBetween(時間、時間、文字) = 時間の長さを計算
empty(prop(セル)) = セルが空白なら
if(条件、表示1、表示2)= 条件に合わせて表示方法を変える
if(empty(prop("始めた時間")), dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes"), dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes"))

3、かかった時間(表示用)の式で

floor(数値)= 小数点以下の切り捨て
format(数値)= "数値" = 文字
if(empty(prop("始めた時間")), if(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") < 60, format(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes")) + " m", format(floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60)) + " h " + format(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") - floor(dateBetween(prop("終わった時間"), prop("チェックインした時間"), "minutes") / 60) * 60) + " m"), if(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") < 60, format(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes")) + " m", format(floor(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") / 60)) + " h " + format(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") - floor(dateBetween(prop("終わった時間"), prop("始めた時間"), "minutes") / 60) * 60) + " m"))

タイムレコーダーの表示版

1、時給換算

floor(prop("手取り") / prop("かかった時間(計算用)") * 60)

2、かかった時間

if(prop("かかった時間(計算用)") < 60, format(prop("かかった時間(計算用)")) + " m", format(floor(prop("かかった時間(計算用)") / 60)) + " h " + format(prop("かかった時間(計算用)") - floor(prop("かかった時間(計算用)") / 60) * 60) + " m")

3、仕事の進み具合を見るメーター

slice("文字",数字,数字) = 文字を切ることでメーターを作る
floor(数値) = 小数点以下切り捨て
ceil(数値) = 小数点以下切り上げ
round(数値) = 小数点以下四捨五入
slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) + "⬤" + slice("‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒‒", 0, 20 - floor(20 * prop("終わらせた秒数") / prop("トータル秒数"))) + " " + format(round(prop("終わらせた秒数") / prop("トータル秒数") * 100)) + "%" + " " + format(prop("トータル秒数") - prop("終わらせた秒数")) + "s"


終わりに

🎊よくここまで読めました👏

前に参加したnotionのmeetupイベントで、IFの活用法を見せたら「神IF」と言われるほど、他に色んな使い方を見せた。自分は文系でプログラミング知識ゼロの人だから、誰でも理解できるように説明をしようと努力した、その場にいた他の文系の子たちから「なるほど」って言われた瞬間は本当に最高だった。

文章にしたら何かぐちゃぐちゃになったが、お役に立てると嬉しいです。

自分で書くのはやはり難しいと思ったら、そのまま式をコピペしても構わないです(笑)

コピーする時セル名が違うと、式が使えないので、一度このnoteに書いたセル名に合わせて式を代入してから、自分が好きのセル名を変える方が楽だと思います!


最後まで読んでいただいて、
ありがとうございます!


👇使い方とテンプレートはこちらになります👇

👇他のnotionに関するnoteに興味がある方はこちらへ👇



いいなと思ったら応援しよう!