最終試験に向けて復習してみた - Ord9でてきた計算式をまとめてみる-
関数を覚えるのが苦手なので、自分視点で勝手にどういう感じ?というイメージを交えつつ、かみ砕いて覚えよー!と思います。(皆様は、覚えづらいものってどうやって覚えているのでしょうか?💦)
・合計売上を更新したら、合計売上を返す。
RUNNING_MAX( SUM([売上]) ) = SUM([売上])
(ヒトリゴト):試験ででたら、すぐ思い出せる自信ない。値が継続(走っている?)ときの最大値を返すときのものくらいのイメージ。
・最初の合計売上は含めたくない。行数が1以上(つまりは初めの値以外)で表内の売上合計が売上合計と一致したら真で、そのあとは偽
INDEX()>1 AND
RNNING_MAX( RUNNING_MAX(SUM([売上]) )
= SUM([売上])
※高値更新のとき、はじめの年の売上も含まれてしまうため、そこは真としたくなというときにINDEX()>1をつかった。
(ヒトリゴト):インデックス関数って、とある行列の交差した点?という認識なので、INDEX()=1は自分自身。INDEX()=0はでは何になるのか?…。ちょっとわからないけど、INDEX()>=2と、INDEX()>1でやっても今回の問題は問題ないか。
・0行前のオーダー年(最小値)を返す(つまり、その年の値を返す)
LOOKUP( MIN( DATEPART('year',[オーダー日]), 0) )
※前年度比成長率の計算で、任意年(オーダー日)でフィルターすると、NULLとなり計算できなくなるため、全年分は残しつつ、ただその年の分の前年度比成長率をだすためにつかった。
(ヒトリゴト):LOOKUPの、0の部分は選択したそれ自身の値。では1とすると?2014年はNULLになる…これは、2013年の値を返してってなるわけだけど、前年比成長率でそもそも2013年の成長率はないから、そりゃそうか!と納得。2にすると2015がNULLになる。理由は同じ。数字いじってみると理解しやすいなと思った。
・出荷にかかる日数
DATEDIFF( [オーダー日],[出荷日] )
※日付の差分を出すときにつかう。
・条件を満たすときに色を付けたいときによくつかう
AVG([出荷にかかる日数]) >
WINDOW_AVG( AVG([出荷にかかる日数]) )+
WONDOW_STDEV( AVG( [出荷にかかる日数] ) ) * 3
※出荷にかかる日数の平均が、「その平均+標準偏差3σ」が大きい値に色をつけたくてつかった。
(ヒトリゴト):STDEVはいわゆる標準:standard 偏差値:deviation(diviate)の略、エスティ・デヴ。英語得意な人がプログラミング得意なのがよくわかる。切り抜きたい部分?をWINDOWつまり窓とかって表現するのが、アメリカンな感覚のネーミングだなと感じた。名付けたのがアメリカ人かはわからないけど。
・もしも、最後から0番目つまり、最後の行のときは合計売上を返してね
IF LAST()=0 THEN SUM( [売上] ) END
(ヒトリゴト):中学生の簡単な英語の通りで、素直で覚えやすい。でも、やはりLAST()=0が最後のそれ自身っていうのが、いまいち個人的に直観的じゃなくなる。LAST()=1とやると、最後から1つ前だから、1つ前の値が表示された。LAST()>=0とやると全部の値がでた。てことは、LAST()<0ってやると、、、何もでない?と思ったらやはり出ないので、いじってみることで腹落ちしてきた。
・連続した値で、最初と最後のみ表示したいとき
FIRST()=0 or LAST()=0
(ヒトリゴト):またまた表のどこを指すかの話。さすがに慣れてきた。なが~い行の真ん中を取り出したいときはではどうすればいいのか?MIN([オーダー日])とMAX(オーダー日)の足し算を2で割ればいいのか!
・合計売上が、とある閾値(パラメータ)以上の値だったら真という「閾値判定」
SUM([売上]) >= [閾値]
(ヒトリゴト):パラメータを簡単に変えながら見れるの便利で好き。
・もし売上合計が閾値を超えていたら、前の行の計算に1を足して返す
IF [閾値判定] THEN PREVIOUS_VALUE(0)+1 ELSE 0 END
※最初の1行目に関しては「PREVIOUS_VALUE()」の中の「()」内で指定した値(今回は0」が代入されて計算を実行。そして2行目以降は「PREVIOUS_VALUE()」の値に、前の行の値が代入されて計算を実行
(ヒトリゴト):もし、閾値超えていたら、真で1となります。その次が偽だったら、0、真だったら、「1」+1で2ってことだと理解した。でもPREVIOUS_VALUE()の( )内の値は何を入れても変わらない?ってのが腹落ちしていない。下図のように、()内の数字をでかくしたら、答えの8の値って、10000008になるんじゃないのかな?ならないから、()内の数字はなんでもよいみたい。
下図のように、+2にすると、それは16になるってのはその通りと理解。
この記事が気に入ったらサポートをしてみませんか?