メインコンテンツまでスキップ
waffle.svg
Domo Knowledge Base - 日本人

Beast Mode計算例:前期比変換

Version 2

はじめに

この記事では、Beast Modeで実行できる、前期比計算をいくつか紹介します。これらの同じ計算の多くは、前期比チャート作成機能を使用して実行することもできます。 

前期比グラフを作成する

Domoで前期比グラフを作成するには、x軸(日付)に1つのBeast Mode計算を使い、系列に別のBeast Mode計算を使います。また、 Beast Mode計算を作成して、カードに表示する日付の範囲を制限することもできます。

以下の例を使って、自分用の前年比Beast Mode計算を作成してみましょう。以下の例は、前年比グラフを作成する方法を示しています。

ステップ1:x軸(日付)計算を作成(必須)

このステップでは、年など前期の日付を現在の期間の日付に算定します。これで、異なる期間のデータがx軸で同じ範囲内に表示されます。このBeast Mode計算は、日付の値の年の部分を現在の年に置き換えます。

STR_TO_DATE(CONCAT(YEAR(CURRENT_DATE()), '-', DATE_FORMAT(`Date_Field`, '%m-%d') ), '%Y-%m-%d’)

ステップ2:系列(年)計算を作成(必須)

次に、各期間のデータを表す系列を作成します。このBeast Mode計算は、各年のデータを表す系列を作成します。

YEAR(`Date_Field`)

ステップ3:フィルターのための計算を作成(オプション)

1年間以外の期間(前四半期比、前月比など)を見たい場合は、その日付範囲または期間のみのフィルターを作成することもできます。

フィルター用のBeast Mode計算を作成するには、2つの方法があります。最初の方法では、特定の日付範囲内のフィルターを作成します。2つ目の方法では、過去の日数や月数などを指定したフィルターを作成します。

特定の日付範囲

特定の日付範囲のフィルターを作成するには、以下のBeast Mode計算を使います。

CASE

WHEN CONCAT(YEAR(CURRENT_DATE()), '-', DATE_FORMAT(`Date_Field `, '%m-%d') ) >= '2015-07-01' AND CONCAT(YEAR(CURRENT_DATE()), '-', DATE_FORMAT(`Date_Field `, '%m-%d') ) <= '2015-11-30' THEN 'TRUE' 

    ELSE 'FALSE'

END

過去X日や月など

特定の期間過去のフィルターを作成するには、以下のBeast Mode計算を使います。“3 MONTH”を、必要な期間に置き換えてください。例えば“1 DAY”、“4 WEEK”など。その場合、数値と、単位(単数形)を使用します。

CASE

WHEN STR_TO_DATE(CONCAT(YEAR(CURRENT_DATE()), '-', DATE_FORMAT(`Date_Field `, '%m-%d') ), '%Y-%m-%d') >= DATE_SUB(CURRENT_DATE(), INTERVAL 3 MONTH)  THEN 'TRUE' 

    ELSE 'FALSE'

END

必要な期間に応じて上記のフィルターに変更を加えて使用してください。

前週比の変化を計算する

以下のコードを使って前週比の変化を示す計算を作成します。以下の例は、4週間前(曜日で並べられた)のものと52週間前(曜日で並べられた)のものを含んでいます。数値を目的の期間に変更します。

X軸が日付 - 「共通の日付」でなくてはなりません。

case
when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < 28 and DateDiff(Current_Date(), `MyDateColumn`) > 0 then Date_Format(`MyDateColumn`, '%b %e')

when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < (28 + 28) and DateDiff(Current_Date(), `MyDateColumn`) > 28 then Date_Format(AddDate(`MyDateColumn`,28), '%b %e')

when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < 28 + (52 * 7) and DateDiff(Current_Date(), `MyDateColumn`) > (52 * 7) then Date_Format(AddDate(`MyDateColumn`,52 * 7), '%b %e')

end

「過去28日間」にフィルターをかけます。

case
when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < 28 and DateDiff(Current_Date(), `MyDateColumn`) > 0 then 'Yes'

when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < (28 + 28) and DateDiff(Current_Date(), `MyDateColumn`) > 28 then 'Yes'

when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < 28 + (52 * 7) and DateDiff(Current_Date(), `MyDateColumn`) > (52 * 7) then 'Yes'
else 'No'
end

メトリックを選び(「アクセス数」など)、「系列」という名前の列を作成します。

case
when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < 28 and DateDiff(Current_Date(), `MyDateColumn`) > 0 then 'Last 28 Days'

when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < (28 + 28) and DateDiff(Current_Date(), `MyDateColumn`) > 28 then '4 Weeks Prior'

when when DateDiff(AddDate(Current_Date(), -1), `MyDateColumn`) < 28 + (52 * 7) and DateDiff(Current_Date(), `MyDateColumn`) > (52 * 7) then '52 Weeks Prior'
end

前年から今年までの変化の割合を計算する

例えば、過去24か月を月別にグループ化して表示するカードがあるとします。系列として、年が設定されています。前年の1月から現在の月と、今年の1月から現在の月とを比較し、まとめ数字にその変化の割合(%)を表示したいとします。これを行うには、以下のBeast Mode計算を作成します:

(SUM(CASE WHEN YEAR('Date') = YEAR('NOW') THEN 'Total Sales' ELSE 0 END)-SUM(CASE WHEN YEAR('Date')= YEAR(DATE_SUB('NOW', INTERVAL 1 YEAR))AND month('Date') <= month('NOW') THEN 'Total Sales' ELSE 0 END))/

SUM(CASE WHEN YEAR('Date')= YEAR(DATE_SUB('NOW', INTERVAL 1 YEAR)) AND month('Date') <= month('NOW') THEN 'Total Sales' ELSE 0 END)

この計算は、カードのまとめ数字や、単一の値パネルの値として役立ちます。時間の経過に沿って変化の割合(%)を示したい場合は、前のセクションに記載された高度な前期比の計算方法に従ってBeast Mode計算を作成し、以下の式に従って前年の値と現在の値のフィールドから変化の割合(%)を導きます。

(今年の値 - 昨年の値)/昨年の値

差異を計算する

当年度・前年度差異

以下のコードを使い、当年度と前年度の差異の計算を作成します。

(
SUM(CASE WHEN YEAR(`MyDateColumn`) = YEAR(CURRENT_DATE()) THEN `Amount` ELSE 0 END)
- SUM(CASE WHEN YEAR(`MyDateColumn`) = YEAR(CURRENT_DATE()) - 1 THEN `Amount` ELSE 0 END)
)

差異% ((CY - PY) / PY)

以下のコードを使い、差異% ((当年度 − 前年) / 前年度)の計算を作成します。

(
(SUM(CASE WHEN YEAR(`MyDateColumn`) = YEAR(CURRENT_DATE()) THEN `Amount` ELSE 0 END)
- SUM(CASE WHEN YEAR(`MyDateColumn`) = YEAR(CURRENT_DATE()) - 1 THEN `Amount` ELSE 0 END)
)
/ NULLIF(SUM(CASE WHEN YEAR(`MyDateColumn`) = YEAR(CURRENT_DATE()) - 1 THEN `Amount` ELSE 0 END), 0)
)

年初来差異

月ごとの店舗別の従業員数を含むDataSetがあるとします。今月の従業員数と年末の数を比較するには、どうしたらよいでしょうか?

カードが現在の年にフィルタリングされていると仮定した場合、次のBeast Mode計算を作成します。

今月の従業員数:

COUNT(DISTINCT CASE WHEN YEAR(DateColumn) = YEAR(CURRENT_DATE()) AND MONTH(DateColumn) = MONTH(CURRENT_DATE()) THEN `Employee ID` END)

今年の従業員数:

COUNT(DISTINCT'Employee ID')

今年の従業員数 - 今月の従業員数(年初来差異):

COUNT(DISTINCT `Employee Id` - COUNT(DISTINCT CASE WHEN YEAR(DateColumn) = YEAR(CURRENT_DATE()) AND MONTH(DateColumn) = MONTH(CURRENT_DATE()) THEN `Employee ID` END)

このデータのトレンドを時系列で確認する必要がある場合は、このソリューションで、毎月の年初来を参照し、月レベルで要約する作業をDataFlowで実行する必要があります。 

前年同期比(YOY)を比率で計算する

このタイプの比較を行う場合、比率の計算はすべてDataFlow内で行う必要があります。

YOY:複数期間の比較

複数期間の前年同期比計算を作成するには、次の表を参照してください。

期間 説明 計算
年単位 年間Beast Modeを作成し、カテゴリーとしてプロットします(ほとんどのチャートでx軸)。 year(`datefield`)
四半期単位 四半期Beast Modeを作成してカテゴリーとしてプロットします(ほとんどのチャートでx軸)。複数年にまたがる場合はyear(`datefield`)を系列として使用します。 Quarter(`datefield`)
月単位 月単位のBeast Modeを作成してカテゴリーとしてプロットします(ほとんどのチャートでx軸)。複数年にまたがる場合はyear(`datefield`)を系列として使用します。 Month(`datefield`)
週単位 月単位のBeast Modeを作成してカテゴリーとしてプロットします(ほとんどのチャートでx軸)。複数年にまたがる場合はyear(`datefield`)を系列として使用します。 WeekofYear(`datefield`)
日単位 日単位のBeast Modeを作成してカテゴリーとしてプロットします(ほとんどのチャートでx軸)。複数年にまたがる場合はyear(`datefield`)を系列として使用します。 DayofYear(`datefield`)

YOY:2つの期間の比較

‘This Year’‘Last Year’は、他のテキストまたは金額フィールドと入れ替えることができます。比率を計算する際は、金額フィールドは必須です。

「複数系列」に対して「同一系列」の利点は、「同一系列」ではコードを統合できることです。ただ、「今年/前年」を金額列と入れ替える場合は、それらを分離する必要があります。

YOY:年間比較

年間の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when Year(`Datefield`) = Year(curdate()) then 'This Year' end
複数系列 - 前年 Case when Year(`Datefield`) = Year(curdate())-1 then 'Last Year' end
複数系列 - 同じ系列 Case year(`Datefield`) when year(curdate()) then 'This Year' when year(curdate())-1 then 'Last Year’ End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when Year(`Datefield`) = Year(curdate()) then `Amountfield` end / Case when Year(`Datefield`) = Year(curdate())-1 then `Amountfield` end) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。  

YOY:1年間(YTD)の比較

年初来の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 CASE  WHEN year(`Datefield`)=year(curdate())  THEN 'This Year' END
複数系列 - 前年 CASE  WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (dayofyear(curdate()) >= dayofyear(`Datefield`))) THEN 'Last Year' END
複数系列 - 同じ系列 CASE  year(`Datefield`) when year(curdate())  THEN 'This Year’ when ((year(`Datefield`)=(year(curdate()) - 1)) AND (dayofyear(curdate()) >= dayofyear(`Datefield`))) THEN 'Last Year' END
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN year(`Datefield`)=year(curdate())  THEN `Amountfield` END / CASE  WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (dayofyear(curdate()) >= dayofyear(`Datefield`))) THEN `Amountfield` END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。  

YOY:四半期比較

四半期の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' end 
複数系列 - 前年 Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate())-1) then 'Last Year' end
複数系列 - 同じ系列 Case when (Quarter(`Datefield`) = Quarter(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' when (Quarter(`Datefield`) = Quarter(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year' End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate())) then `Amountfield` end / Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate())-1) then `Amountfield` end) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。  

YOY:四半期初来(QTD)の比較

四半期初来の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate()) and dayofyear(`Datefield`) <= dayofyear(curdate())) then 'This Year' end 
複数系列 - 前年 Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate())-1 and dayofyear(`Datefield`) <= dayofyear(curdate())) then 'Last Year' end
複数系列 - 同じ系列 Case when (Quarter(`Datefield`) = Quarter(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' when (Quarter(`Datefield`) = Quarter(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year' End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate()) and dayofyear(`Datefield`) <= dayofyear(curdate())) then `Amountfield` end / Case when (quarter(`Datefield`) = quarter(curdate()) and year(`Datefield`) = year(curdate())-1 and dayofyear(`Datefield`) <= dayofyear(curdate())) then`Amountfield` end) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。  

YOY:月別比較

月別の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' end 
複数系列 - 前年 Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate())-1) then 'Last Year' end
複数系列 - 同じ系列 Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year' End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate())) then `Amountfield` end / Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate())-1) then `Amountfield` end) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。  

YOY:1か月間(MTD)の比較

1か月間の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate()) and DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate())) then 'This Year'  end
複数系列 - 前年 Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year)) and DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate())) then  'Last Year'  end
複数系列 - 同じ系列 Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate()) and DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate())) then 'This Year' when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year)) and DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate())) then Last Year' End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(curdate()) and DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate())) then `Amountfield` end / Case when (month(`Datefield`) = month(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year)) and DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate())) then `Amountfield`  end)  -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

YOY:週別比較

1か月間の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year’ end
複数系列 - 前年 Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year' End
複数系列 - 同じ系列 Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year’ End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

((Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(curdate())) then `Amountfield` end / Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then `Amountfield` End) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

YOY:1週間(WTD)の比較

1週間の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(curdate()) and DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate())) then 'This Year' end
複数系列 - 前年 Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year)) and DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate())) then 'Last Year' End
複数系列 - 同じ系列 Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(curdate()) and DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate())) then 'This Year' when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))and DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate())) then 'Last Year’ End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(curdate()) and DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate())) then `Amountfield` end / Case when (WEEKOFYEAR(`Datefield`) = WEEKOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year)) and DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate())) then `Amountfield` End) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

YOY:日別比較

1週間の前年同期比計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今年 Case when (DAYOFYEAR(`Datefield`) = DAYOFYEAR(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' end
複数系列 - 前年 Case when (DAYOFYEAR(`Datefield`) = DAYOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year' End
複数系列 - 同じ系列 Case when (DAYOFYEAR(`Datefield`) = DAYOFYEAR(curdate()) and year(`Datefield`) = year(curdate())) then 'This Year' when (DAYOFYEAR(`Datefield`) = DAYOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then 'Last Year' End
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(Case when (DAYOFYEAR(`Datefield`) = DAYOFYEAR(curdate()) and year(`Datefield`) = year(curdate())) then `Amountfield` end / Case when (DAYOFYEAR(`Datefield`) = DAYOFYEAR(curdate()) and year(`Datefield`) = year(date_sub(curdate(), interval 1 year))) then `Amountfield` End) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

比率計算を使ったPOP計算(今期対前期)

POP:前四半期比(QOQ)の比較

前四半期比の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今期 CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (quarter(`Datefield`)=quarter(CURDATE()))) THEN `Amountfield` END 
複数系列 - 前期 CASE  WHEN (quarter(curdate())=1) THEN (CASE  WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (quarter(`Datefield`)=4)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (quarter(`Datefield`)=(quarter(CURDATE()) -1))) THEN `Amountfield` END ) END
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (quarter(`Datefield`)=quarter(CURDATE()))) THEN `Amountfield` END / CASE  WHEN (quarter(curdate())=1) THEN (CASE  WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (quarter(`Datefield`)=4)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (quarter(`Datefield`)=(quarter(CURDATE()) -1))) THEN `Amountfield` END ) END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

POP:QTD前四半期比の比較

四半期初来の前四半期比の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列 - 今期 CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (quarter(`Datefield`)=quarter(CURDATE()))) THEN `Amountfield` END 
複数系列 - 前期

MAX(CASE WHEN YEAR(curdate()) / 4 = ROUND((YEAR(curdate()) / 4),0) THEN 

        CASE WHEN QUARTER(curdate())=1 THEN (DAYOFYEAR(curdate()) - 1)   

             WHEN (QUARTER(curdate())=2) THEN (DAYOFYEAR(curdate()) - 91) 

             WHEN (QUARTER(curdate())=3) THEN (DAYOFYEAR(curdate()) - 182)          

             WHEN (QUARTER(curdate())=4) THEN (DAYOFYEAR(curdate()) - 273) 

               ELSE 0 END 

       ELSE CASE 

            WHEN QUARTER(curdate())=1 THEN DAYOFYEAR(curdate()) - 1 

            WHEN QUARTER(curdate())=2 THEN DAYOFYEAR(curdate()) - 90 

            WHEN QUARTER(curdate())=3 THEN DAYOFYEAR(curdate()) - 181 

            WHEN QUARTER(curdate())=4 THEN DAYOFYEAR(curdate()) - 272 

            ELSE 0 END 

          END) * MAX(CASE WHEN YEAR(curdate()) / 4=ROUND(YEAR(curdate()) / 4,0) THEN 

              CASE WHEN (QUARTER(curdate())=1) THEN 91 

                    WHEN (QUARTER(curdate())=2) THEN 91 

                    WHEN (QUARTER(curdate())=3) THEN 92 

                          WHEN (QUARTER(curdate())=4) THEN 92 

                          ELSE 0  END 

        ELSE CASE 

            WHEN (QUARTER(curdate())=1) THEN 90   

            WHEN (QUARTER(curdate())=2) THEN 91 

            WHEN (QUARTER(curdate())=3) THEN 92 

              WHEN (QUARTER(curdate())=4) THEN 92 

              ELSE 0 END 

          END) - MAX(CASE WHEN YEAR(curdate()) / 4=ROUND(YEAR(curdate()) / 4,0) THEN        

         CASE WHEN QUARTER(curdate())=1 THEN DAYOFYEAR(curdate()) - 1

                   WHEN QUARTER(curdate())=2 THEN DAYOFYEAR(curdate()) - 91 

                 WHEN QUARTER(curdate())=3 THEN DAYOFYEAR(curdate()) - 182 

                   WHEN QUARTER(curdate())=4 THEN DAYOFYEAR(curdate()) - 273 

                 ELSE 0 END 

          ELSE CASE 

                   WHEN QUARTER(curdate())=1 THEN DAYOFYEAR(curdate()) - 1 

                 WHEN QUARTER(curdate())=2 THEN DAYOFYEAR(curdate()) - 90 

                   WHEN QUARTER(curdate())=3 THEN DAYOFYEAR(curdate()) - 181

                 WHEN QUARTER(curdate())=4 THEN DAYOFYEAR(curdate()) - 272 

                   ELSE 0 END 

END) + SUM(CASE WHEN QUARTER(curdate())=QUARTER(`Datefield`) AND YEAR(`Datefield`)=YEAR(curdate()) THEN `Amountfield` ELSE 0 END) - 

SUM((CASE WHEN ((QUARTER(curdate())=QUARTER(`Datefield`)) AND (YEAR(`Datefield`)=YEAR(DATE_SUB(curdate(),INTERVAL 1 QUARTER)))) THEN `Amountfield` ELSE 0 END ))) / SUM((CASE  WHEN QUARTER(DATE_SUB(curdate(),INTERVAL 1 QUARTER))=QUARTER(`Datefield`) AND YEAR(`Datefield`)=YEAR(DATE_SUB(curdate(),INTERVAL 1 QUARTER)) THEN `Amountfield` ELSE 0 END ))

比率:(C/P) - 1の式を用いた2つの間の変化の割合

結果を得るには、上の式にその前の2つのセクションを挿入します。

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

POP:前月比(MOM)の比較

前月比の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列

CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (month(`Datefield`)=month(CURDATE()))) THEN `Amountfield` END 

CASE  WHEN (month(curdate())=1) THEN (CASE WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (month(`Datefield`)=12)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (month(`Datefield`)=(month(CURDATE()) -1))) THEN `Amountfield` END ) END

 
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (month(`Datefield`)=month(CURDATE()))) THEN `Amountfield` END / CASE  WHEN (month(curdate())=1) THEN (CASE WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (month(`Datefield`)=12)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (month(`Datefield`)=(month(CURDATE()) -1))) THEN `Amountfield` END ) END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

POP:1か月間MOMの比較

1か月間の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列

CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (month(`Datefield`)=month(CURDATE()))) THEN `Amountfield` END 

CASE WHEN month(curdate()) = 1 THEN CASE WHEN year(`Datefield`) = year(curdate()) - 1 AND month(`Datefield`) = 12 AND DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate()) THEN `Amountfield` END  ELSE CASE  WHEN year(`Datefield`) = year(curdate()) AND month(`Datefield`) = month(curdate())-1 AND DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate()) THEN `Amountfield` END END

 
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (month(`Datefield`)=month(CURDATE()))) THEN `Amountfield` END / CASE WHEN month(curdate()) = 1 THEN CASE WHEN year(`Datefield`) = year(curdate()) - 1 AND month(`Datefield`) = 12 AND DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate()) THEN `Amountfield` END  ELSE CASE  WHEN year(`Datefield`) = year(curdate()) AND month(`Datefield`) = month(curdate())-1 AND DAYOFMONTH(`Datefield`) <= DAYOFMONTH(curdate()) THEN `Amountfield` END END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

POP:前週比(WOW)の比較

前週比の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列

CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (weekofyear(`Datefield`)=weekofyear(CURDATE()))) THEN `Amountfield` END 

CASE  WHEN (weekofyear(curdate())=1) THEN (CASE WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (weekofyear(`Datefield`)=52)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (weekofyear(`Datefield`)=(weekofyear(CURDATE()) -1))) THEN `Amountfield` END ) END

 
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (weekofyear(`Datefield`)=weekofyear(CURDATE()))) THEN `Amountfield` END / CASE  WHEN (weekofyear(curdate())=1) THEN (CASE WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (weekofyear(`Datefield`)=52)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (weekofyear(`Datefield`)=(weekofyear(CURDATE()) -1))) THEN `Amountfield` END ) END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

POP:1週間のWOWの比較

1週間の前週比の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列

CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (weekofyear(`Datefield`)=weekofyear(CURDATE()))) THEN `Amountfield` END 

CASE WHEN weekofyear(curdate()) = 1 THEN CASE WHEN year(`Datefield`) = year(curdate()) - 1 AND weekofyear(`Datefield`) = 52 AND DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate()) THEN `Amountfield` END ELSE CASE WHEN year(`Datefield`) = year(curdate()) AND weekofyear(`Datefield`) = weekofyear(CURDATE()) -1 AND DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate()) THEN `Amountfield` END END

 
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (weekofyear(`Datefield`)=weekofyear(CURDATE()))) THEN `Amountfield` END / CASE WHEN weekofyear(curdate()) = 1 THEN CASE WHEN year(`Datefield`) = year(curdate()) - 1 AND weekofyear(`Datefield`) = 52 AND DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate()) THEN `Amountfield` END ELSE CASE WHEN year(`Datefield`) = year(curdate()) AND weekofyear(`Datefield`) = weekofyear(CURDATE()) -1 AND DAYOFWEEK(`Datefield`) <= DAYOFWEEK(curdate()) THEN `Amountfield` END END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。 

POP:前日比(DOD)の比較

前日比の比較計算を作成するには、次の表を参照してください。

タイプ 計算
複数系列

CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (dayofyear(`Datefield`)=dayofyear(CURDATE()))) THEN `Amountfield` END 

CASE  WHEN (dayofyear(curdate())=1) THEN (CASE WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (dayofyear(`Datefield`)=365)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (dayofyear(`Datefield`)=(dayofyear(CURDATE()) -1))) THEN `Amountfield` END ) END

 
比率:(C/P) - 1の式を用いた2つの間の変化の割合

(CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (dayofyear(`Datefield`)=dayofyear(CURDATE()))) THEN `Amountfield` END / CASE  WHEN (dayofyear(curdate())=1) THEN (CASE WHEN ((year(`Datefield`)=(year(curdate()) - 1)) AND (dayofyear(`Datefield`)=365)) THEN `Amountfield` END ) ELSE (CASE  WHEN ((year(`Datefield`)=year(curdate())) AND (dayofyear(`Datefield`)=(dayofyear(CURDATE()) -1))) THEN `Amountfield` END ) END) -1

注記:(C-P)/Pを使っても計算できますが、より多くのコードが必要となります。