最終試験に向けて復習してみた - Ord8でてきた計算式をまとめてみる-
関数を覚えるのが苦手なので、自分視点で勝手にどういう感じ?というイメージを交えつつ、かみ砕いて覚えよー!と思います。の第2弾Ord8編
(皆様は、覚えづらいものってどうやって覚えているのでしょうか?💦)
![](https://assets.st-note.com/img/1688881062324-2A7ym5Jmfj.png?width=1200)
・最終購入日
{ MAX( [オーダー日] ) }
・各顧客の最終オーダー日
{ FIXED [顧客 Id] } : MAX([オーダー日]) }
※最終購入日でフィルタしようとしたとき、日付が異なるディメンションの影響を受けて、日付が変わってしまうため、顧客のみのディメンションで最終オーダー日を設定するために使った。
(ヒトリゴト):「各〇〇の■■」を見たいときに使うって覚えました。任意ディメンション○○にFIXして、■■を確認するときに使う。問題で「○○ごとの■■」の表現があるときはFIXEDだ!と思うようにしています。
・最終の購入日はどのくらい前か?
DATEDIFF( 'day', [最終購入日], [各顧客の最終オーダー日] )
※いつもの、DATEDIFF。Date differenceの略なので覚えやすいです。
![](https://assets.st-note.com/img/1688882740570-7HH3j8n8vy.png?width=1200)
・顧客ごとの購入回数
{ FIXED [顧客 Id] : COUNTED( [オーダー Id] ) }
(ヒトリゴト):○○ごとの■■のパターンですね。
・1オーダーあたりの売上
{ INCLUDE [オーダーId] : SUM( [売上] ) }
※INCLUDE計算:ビュー内のディメンションを考慮した○○(ディメンション)ごとの集計関数▢▢の△△(集計関数)
※平均(売上)を単純に入れると「オーダーIdごとにN回購入している人」で割った平均がでて、1回のオーダーにおける平均とはならない。このために、「顧客ごとの購入回数」のディメンションの中でも、顧客Idごとにしっかりと平均をだすために使った。
![](https://assets.st-note.com/img/1688888409168-NZuv2373US.png?width=1200)
・顧客ごとの合計売上
{ FIXED[顧客Id] : SUM( [売上] )}
![](https://assets.st-note.com/img/1688888480277-BmvRrgpgCG.png?width=1200)
・顧客別初回オーダー日
{ FIXED[顧客 Id] : MIN([オーダー日]) }
![](https://assets.st-note.com/img/1688888710500-GYVZgzAFbd.png?width=1200)
・顧客別初回オーダー日
{ FIXED [顧客] : MIN( [オーダー日] ) }
・顧客別2回目以降のオーダー日
IIF([購入日] > [顧客別初回オーダー日], [オーダー日], NULL )
・顧客別2回目のオーダー日
{ FIXED[顧客名] : MIN(顧客別2回目以降のオーダー日)}
・1回目と2回目の購入Qの差
DATEDIFF('quater', [顧客別初回オーダー日], [顧客別2回目オーダー日])
※1回目と2回目の購入Qの差を求めるのに、多段になりながらの計算
![](https://assets.st-note.com/img/1688889170330-jNIisdMQkg.png?width=1200)
・日当たり売上(LOD)
{ INCLUDE [オーダー日] : SUM( [売上] )
・日当たり売上(Basic)
SUM( [売上] ) / COUNTED( [オーダー日] )
(ヒトリゴト):この問題のディメンションは、曜日(オーダー日)と月(オーダー日)なので、INCLUDEでなくFIXEDでも可能?
![](https://assets.st-note.com/img/1688889790438-EamemohyDW.png?width=1200)
・ソート別売上(EXCLUDE)※ソートはパラメータ「ソートカテゴリ」(家具・家電・事務用品)
{ EXCLUDE[カテゴリ] :
SUM( IF [カテゴリ]=[ソートカテゴリ],
THEN [売上])
end
}
※カテゴリを無視して、もし、カテゴリがソート用カテゴリと一致していたら売上を返す
※EXCLUDE計算は、○○(ディメンション)を無視したビュー内のディメンションごとの集計関数▢▢ということ
・ソート別売上(INCLUDE)
{ FIXED
DATERUNC( 'quarter', [オーダー日] ) :
SUM( IF [カテゴリ]=[ソートカテゴリ]
THEN [売上]) END )
}
![](https://assets.st-note.com/img/1688892619748-CnrZYsY1ZJ.png?width=1200)
・顧客ごとの購入間隔(月)
{ FIXED [個客 Id] : DATEDIFF('month' MIN([オーダー日]), MAX(オーダー日)) }
※DATEDIFF( 'month', { FIXED[顧客 Id] : MIN( [オーダー日] )}, { FIXED[顧客 Id] : MAX( [オーダー日] )})
・顧客別購入回数
{ FIXED [顧客 Id] : COUNTED([オーダー日]) }
・顧客ごとの購入間隔の平均
ROUND ([顧客ごとの購入間隔(月)] / [顧客別購入回数] )
※購入間隔の平均は、(初回購入-最終購入日)/購入数だが、顧客ごととっているので、顧客IdをFIXEDとする。
※ROUND関数は整数をまるめるということ。月単位でみればいいためまるめるのが正解。
・地域/都道府県 からなる文字列で都道府県を取り出す
TRIM( SPLIT( [F1],"/", -1) )
・新規/既存
{ FIXED [顧客 Id] : MIN( [オーダー日] ) }=[オーダー日]
※顧客ごとの初購入日だけを取り出す。顧客の初購入がオーダー日のときが真、そうでないときは偽とし、フィルタすると初購入日だけ取り出せる。
・顧客数が最後に1位の地域
WINDOW_MAX( SUM( {FIXED [地域] : COUNTED( [顧客 Id] )})) = SUM( { FIXED [地域] : COUNTED( [顧客 Id ] )})
※表内の地域ごとの顧客数の最大値が地域ごとの顧客数と一致していたら真、それ以外は偽というブール式
※表計算の方向を特定のディメンションで月と地域にチェック
![](https://assets.st-note.com/img/1688902868290-WXhTcp8LK5.png?width=1200)
平均割引率が基準値(0.15)を超えているメーカー
IIF(
{ FIXED[サブカテゴリ], [メーカー] : AVG( [割引率] )}
>= 0.15, [メーカー], NULL
)
※もし、サブカテゴリ、メーカーごとの平均割引率が15%を超えていたら、メーカーを返して、それ以外はNULLを返す。
ここのFIXED計算で、メーカーだけでなくサブカテゴリも入っている理由は、いくつかのメーカーは複数のサブカテゴリを持っているため。