【2/2】DomoでよくあるBeast Modeをまとめます
この記事の続きです。
0.LIKE '%A%'のコピペ用
Beast Modeを利用して、特定の条件に合致するデータを排除した上での、項目の合計値の比率を計算します。
1.目的
このBeast Modeの目的は、「特定の製品(Product A)の生産量」と「全体の生産ラインの生産量から特定の工場の生産量を差し引いたもの」の比率を計算し、製品Aの全体の生産ラインに対する生産率を求めることです。これにより、特定の条件を満たす工場の影響を排除した、製品Aの生産状況を把握できます。
2.beast mode入力例
SUM(`ProductA`)
/
NULLIF(
(
sum(`ProductionLine`)-
sum(case when `factory_name` LIKE '%FactoryB%' OR `factory_name` LIKE '%FactoryC%' then `ProductionLine` else 0 end)
)
,0)
3.説明
このBeast Modeの入力例では、SUMとCASE文を用いて、`ProductA`の生産総量と、特定の条件を満たす`factory_name`を除外した`ProductionLine`の生産総量の比率を計算します。
具体的には、`factory_name`の値が'FactoryB'を含むか、'FactoryC'を含む場合、その行の`ProductionLine`の値を合計から差し引きます。その結果を元の`ProductA`の生産総量で除算します。
ここで、NULLIF関数は0での除算を防ぐために用いられ、除算の結果が0となる場合にはNULLを返します。
この情報は、特定の条件を満たす工場の影響を排除した上で、製品Aの生産状況を把握するために利用できます。
0.目標値の差分を計算し、その結果を日割りで表示
Beast Modeを用いて特定の目標と実績値の比較を行い、その結果を日割りで表示します。
1.目的
このBeast Modeの目的は、特定の商品(ProductX)の合計値とその目標値の差分を算出し、その差分を日割りで表示することです。これにより、目標達成のために一日あたりに何件必要かを把握することが可能となります。
2.beast mode入力例
CONCAT(
--商品合計
SUM(`ProductX`)-
--目標件数/日数(=差分)
(SUM(`Target`)*0.2/NULLIF((DATEDIFF(MAX(`Date`),MIN(`Date`))+1),0)),
'件 \\n (',
--小数点以下第1位
ROUND(
--商品合計
(SUM(`ProductX`)-
--目標件数/日数(=差分)/
(SUM(`Target`)*0.2/
NULLIF((DATEDIFF(MAX(`Date`),MIN(`Date`))+1),0)))/
--日数(=差分日割り)
(DATEDIFF(LAST_DAY(CURDATE()),MIN(`Date`))-DATEDIFF(CURDATE(),MIN(`Date`))+1)
,1),
'件/日)'
)
3.説明
このBeast Modeの入力例では、`ProductX`の合計値と、その目標値の差分を計算し、その結果を日割りで表示しています。
具体的には、目標値(`Target`)を日数で割ったものを`ProductX`の合計値から差し引きます。その結果を現在の日付から最終日と最初の日付の差の日数で割ります。そして、その結果を小数第1位まで表示します。
この情報は、目標達成のために一日あたりに何件必要かを把握するために利用できます。また、`NULLIF`関数は0での除算を防ぐために使用されます。
0.土日の取得が全体に占める割合
Beast Modeを用いて特定の商品の取得量が全体に占める割合を、土日のみで計算します。
1.目的
このBeast Modeの目的は、特定の商品(ProductX)の取得量が全体に占める割合を、土日のみで計算し、土日が全体の取得に占める割合を把握することです。
2.beast mode入力例
SUM(case when WEEKDAY(`Date`)=1 or WEEKDAY(`Date`)=7 then `ProductX` end)/nullif(sum(`ProductX`),0)
3.説明
このBeast Modeの入力例では、`ProductX`の取得量が全体に占める割合を計算しています。その際、取得量をカウントするのは土日(`WEEKDAY`関数で1または7の場合)のみです。
具体的には、`Date`が土日であるときの`ProductX`の合計を、全体の`ProductX`の合計で割ります。この割合は土日の取得が全体に占める割合を示しています。
また、`NULLIF`関数は0での除算を防ぐために使用されます。これは、全体の`ProductX`の合計が0の場合にエラーを防ぐためです。
0.取得量が全体に占める割合を、土日のみで計算
Beast Modeを用いて特定の商品の取得量が全体に占める割合を、土日のみで計算します。
1.目的
このBeast Modeの目的は、特定の商品(ProductX)の取得量が全体に占める割合を、土日のみで計算し、土日が全体の取得に占める割合を把握することです。
2.beast mode入力例
SUM(case when WEEKDAY(`Date`)=1 or WEEKDAY(`Date`)=7 then `ProductX` end)/nullif(sum(`ProductX`),0)
3.説明
このBeast Modeの入力例では、`ProductX`の取得量が全体に占める割合を計算しています。その際、取得量をカウントするのは土日(`WEEKDAY`関数で1または7の場合)のみです。
具体的には、`Date`が土日であるときの`ProductX`の合計を、全体の`ProductX`の合計で割ります。この割合は土日の取得が全体に占める割合を示しています。
また、`NULLIF`関数は0での除算を防ぐために使用されます。これは、全体の`ProductX`の合計が0の場合にエラーを防ぐためです。
0.Typeごとの店舗からの寄与率
Beast Modeを用いて特定タイプの店舗からの商品の寄与率を計算します。
1.目的
このBeast Modeの目的は、「ProductX」が「TypeA」または「TypeB」の店舗からの寄与率を把握することです。
2.beast mode入力例
IFNULL(SUM(case when `shop_type` = 'TypeA' OR `shop_type` = 'TypeB' then `ProductX` end),0) / NULLIF(SUM(`ProductX`),0)
3.説明
このBeast Modeの入力例では、「ProductX」が「TypeA」または「TypeB」の店舗からの寄与率を計算しています。
具体的には、`shop_type`が`TypeA`または`TypeB`である場合の`ProductX`の合計を、全体の`ProductX`の合計で割ります。この割合は`TypeA`または`TypeB`の店舗からの`ProductX`の寄与率を示します。
また、`IFNULL`関数と`NULLIF`関数は0での除算を防ぐために使用されます。これは、対象の店舗からの`ProductX`の合計または全体の`ProductX`の合計が0の場合にエラーを防ぐためです。
0.店舗数の割合とその商品のシェア
Beast Modeを用いて特定商品を取り扱う店舗の数とその商品のシェアを計算します。
1.目的
このBeast Modeの目的は、特定の商品を取り扱う店舗数の割合とその商品の全体に対するシェアを把握することです。
2.beast mode入力例
COUNT(DISTINCT `shop_code`)/ SUM(COUNT(DISTINCT `shop_code`) FIXED ())
SUM(`ProductX`)/SUM(SUM(`ProductX`)FIXED ())
3.説明
このBeast Modeの入力例では、「ProductX」を取り扱っている店舗数の割合とその商品のシェアを計算します。
1行目では、特定の商品を取り扱っている店舗数(`shop_code`のユニーク数)の全体に対する割合を計算しています。全体の店舗数は、すべての行でユニークな`shop_code`の数として計算されます。
2行目では、`ProductX`の全体に対するシェアを計算しています。全体の`ProductX`は、すべての行での`ProductX`の合計として計算されます。
この計算は、商品の展開範囲や影響力を把握するために有用で、市場戦略の策定に役立ちます。
0.顧客の年齢層`when`文
Beast Modeを使用して、顧客の生年月日から各顧客の年齢層を算出します。
1.目的
このBeast Modeの目的は、顧客の年齢層を把握し、それを基にマーケティング戦略や顧客分析を行うためです。
2.beast mode入力例
case
when
PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 239 then '10代以下'
when
239 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 359 then '20代'
when
359 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 479 then '30代'
when
479 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 599 then '40代'
when
599 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 719 then '50代'
when
719 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 839 then '60代'
when
839 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 959 then '70代'
when
959 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 1079 then '80代'
when
1079 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) <= 1199 then '90代'
when
1199 < PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) AND PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(`Birthday`, '%Y%m')) then '100歳以上!'
end
3.説明
このBeast Modeの入力例では、顧客の生年月日(`Birthday`)から現在までの月数を計算し、それを基に顧客の年齢層を特定します。それぞれの`when`文は特定の年齢範囲を示しており、その範囲に基づいて該当する年齢層を出力します。
具体的には、生年月日から現在までの月数が239以下なら'10代以下'、240から359なら'20代'とし、類似のパターンを'100歳以上!'まで続けます。
ただし数字は適宜変えてください。この計算は、顧客の年齢層に基づいたマーケティング戦略の策定や、年齢層別の顧客行動の分析に役立ちます。
TIPS
Beast mode書くときあるある
Wordの置換で作業時間短縮
連番とかつくるならExcelで&"テキスト"とかもよく使う
Excelの関数とは一味違う気持ちよさがあると思ってます。
この記事が気に入ったらサポートをしてみませんか?