最終試験に向けて復習してみた     - 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になるってのはその通りと理解。


この記事が気に入ったらサポートをしてみませんか?