【Tableau テクニカルサポート】表計算関数 PREVIOUS_VALUE のご紹介
Tableau 製品を日頃よりご愛顧いただき、誠にありがとうございます。
Tableau テクニカルサポートの Rae と申します。
Tableau テクニカルサポートから、Tableau 製品に関するナレッジやTipsなどのお役立ち情報やサポートに関する情報などを発信してまいります。
今回は大変便利な表計算関数 PREVIOUS_VALUE() に関して紹介します。
💡PREVIOUS_VALUEについて
Tableau のオンラインヘルプでは PREVIOUS_VALUE(expression) に関して下記のように説明しています。
前の行のこの計算の値を返します。現在の行がパーティション内の最初の行の場合は、指定された式を返します。
PREVIOUS_VALUE(expression) の特徴は、特定の expression の値を見ているではなく、計算式全体の結果に基づき、繰り返して計算します。
PREVIOUS_VALUE(expression) における expression は、重複計算の初期値を意味し、全体の計算の中に1回しか計算式に含まれないイメージです。
つまり、1 行目の計算は expression に基づき計算されますが、2行目からの計算には expression は関与せず、前の行の計算結果に基づき計算が行われます。
下記2つの計算式の計算結果をご確認ください:
PREVIOUS_VALUE(1)+SUM([数量])
PREVIOUS_VALUE(sum([数量]))+1
PREVIOUS_VALUE(1)+SUM([数量]) の場合、expression=1 のため、計算の初期値は 1 です。
そのため、
1 行目の計算結果は初期値(1) +1 行目のSUM([数量]) :1+306=307,
2 行目の計算結果は 1 行目の計算結果+2 行目のSUM([数量]) :307+159=466
3 行目の計算結果は 2 行目の計算結果+3 行目のSUM([数量]) :466+597=1063
...
PREVIOUS_VALUE(sum([数量]))+1 の場合、expression=sum(数量) のため、計算の初期値は1行目の sum(数量)=306 です。expression は一回しか計算に含まれないため、2 行目からの計算は、sum(数量) と関係なくなります。
そのため、
1 行目の計算結果は初期値(1 行目のSUM([数量]))+1:306+1=307,
2 行目の計算結果は 1 行目の計算結果+1 :307+1=308
3 行目の計算結果は 2 行目の計算結果+1 :308+1=309
...
となります。
💡PREVIOUS_VALUEの使用例
それでは、どのような時に PREVIOUS_VALUE が使われるでしょうか。
欠損値を補完するため、下記ナレッジベースに記載されている使い方がよく上げられます。
NULL や欠落しているデータをゼロまたは既存データで置き換える
上記以外、今回は PREVIOUS_VALUE() を活用できる 2 つの例を用意しております。サンプルワークブック (previous_value.twbx) を添付しておりますので、ご参照ください。
①目標値を算出
初期値を設定し、毎年の前年比成長目標を計算する方法下記に紹介させていただきます。
例えば上記のような オレンジ線:初期値75,000,000を設定して毎年 10% の成長で各年の売上目標値 を算出したい場合、下記の計算式を使用することにより、毎年 10% の成長で各年の売上目標値を算出できます。
IF INDEX()=1 THEN [パラメーター.初期値]
ELSE PREVIOUS_VALUE(0)*1.1 END
表計算 INDEX() はパーティション内の現在の行のインデックスを返します。ここでは、1番目の値をパラメーター[初期値]で設定します。
INDEX()=1 で初期値を定義しているため、PREVIOUS_VALUE(expression) の expression は今回の計算に影響しなくなります。
INDEX()=1 の計算結果はパラメーター[初期値]の設定値:75000000
INDEX()=2 の計算結果はINDEX()=1 の計算結果*1.1:75000000*1.1=82500000
INDEX()=3 の計算結果はINDEX()=2 の計算結果*1.1:82500000*1.1=90750000
…
➁欠損値を補完
欠損値がある場合、一番近いのところの値で補完する方法を下記に紹介させていただきます。
例えば上記のようなデータがある場合
2019/06/30 の欠損値を、最も近い 2019/06/28 の値(100.0)で補完する。
2019/07/01 の欠損値を、最も近い 2019/07/02 の値(500.0)で補完する。
a. 連続の Null に対してインデックスを付ける計算式を作成
計算式「上から数える」:IIF(ISNULL(SUM([Sales])),PREVIOUS_VALUE(0)+1,0)
計算式「下から数える」:IIF(ISNULL(SUM([Sales])),PREVIOUS_VALUE(0)+1,0)
*「上から数える」と「下から数える」の計算式内容は同じですが、表計算の計算方向を異なる方向で設定する必要がございます。
・「上から数える」の表計算方向:
「表(下)」いわゆる日付の昇順に設定したら、上から 1, 2, 3... の順番を付けることができます。
・「下から数える」の表計算方向:
日付の降順に設定したら、下から 1, 2, 3... の順番を付けることができます。
「上から数える」と「下から数える」の計算結果:
b. 連続の Null に対して値を補完
計算式「上からもらった値」:IFNULL(SUM([Sales]),PREVIOUS_VALUE(SUM([Sales])))
計算式「下からもらった値」:IFNULL(SUM([Sales]),PREVIOUS_VALUE(SUM([Sales])))
上記 a に紹介したロジックと同じように、上の値で Null 値を補完する計算式と下の値で Null 値を補完する計算式をそれぞれ作成します。
c. インデックスの数値を比較して、条件を満たす補完値を使用
計算式「Sales 補完」:
if [上から数える]>[下から数える]
then [下からもらった値]
else [上からもらった値]
END
上から数える数値と下から数えるインデックスを比較して、インデックスが小さい方は該当[Sales]より近い方ですので、そちらの数値を使用します。
例えば、上記 2019/6/30 の Null 値に対して、上から数える場合、1番目の Null 値であり、下から数える場合、2番目の Null 値です。1<2 となるため、 上の数値 100 で補完します。
以上、表計算関数 PREVIOUS_VALUE(expression) に関する紹介でした。今後計算式の作成においてお役に立てば幸いです。
本年も Tableau 製品をご愛顧賜りますよう、何卒よろしくお願い申し上げます。