ナレッジベース

個別の実行中または移動中のカウントの計算


発行: 07 Nov 2015
最終修正日: 24 Aug 2022

ご質問

ディメンションの個別の実行中または移動中のカウントを計算する方法。

たとえば、全期間内でオーダーを行った一意の顧客の累計や、過去 3 週間などのある期間内にオーダーを行った一意の顧客の累計を計算できます。

環境

Tableau Desktop

回答

添付のワークブックの例では、"Superstore (スーパーストア)" サンプル データ セットを使用して次の方法を示しています。
クリックして手順を展開する
オプション 1: FIXED を使用して個別の実行中のカウントを調べる
注: この方法で個別の移動中のカウントを見つけることはできません。
  1. [分析] > [計算フィールドの作成] を選択します。
  2. 開いた [計算フィールド] ダイアログ ボックスで次の操作を行い、[OK] をクリックします。
    1. 計算フィールドに名前を付けます。この例では、計算フィールドに "Customer's First Order (顧客の最初のオーダー)" という名前を付けます。
    2. 式フィールドで、次のような計算を作成します。
      { FIXED [Customer Name], [Order Date] : MIN(
      IF [Order Date] = { EXCLUDE [Order Date] : MIN([Order Date])}
      THEN 1
      ELSE 0
      END
      ) }
      
  3. "Accurate Running COUNTD of Customers (顧客の正確な実行中の COUNTD)" などの名前を付けて、次のような計算の計算フィールドを作成します。
    RUNNING_SUM(SUM([Count Customer's 1st Order]))
  4. [Order Date (オーダー日)] を右クリックして、ビューにドラッグします。
  5. [フィールドのドロップ] ダイアログで、カレンダー アイコンが緑色の [WEEK(Order Date) (WEEK(オーダー日))] を選択します。
  6. [Accurate Running COUNTD of Customers (顧客の正確な実行中の COUNTD)] を [行] シェルフにドラッグします。
クリックして手順を展開する
オプション 2: 表関数を使用して個別の移動中のカウントを調べる
注: この解決策では、表計算を計算するために必要なすべてのディメンションがビューに含まれている必要があるため、パフォーマンスの問題が発生する可能性があります。
ステップ 1 - 3 つの計算フィールドの作成
  1. [分析] > [計算フィールドの作成] を選択します。
    1. 開いた [計算フィールド] ダイアログ ボックスで次の操作を行い、[OK] をクリックします。
    2. 計算フィールドに名前を付けます。この例では、計算フィールドに "Every 3 Week Period a Customer is In (顧客が存在する 3 週間ごとの期間)" という名前を付けます。
    3. 式フィールドで、次のような計算を作成します。
      	WINDOW_MAX( MAX(1), -2, 0 )
    • Tableau 計算はビューにかなり依存しています。ビューのコンテキストがなければ、この計算でビュー内のすべてのマーク (行、ポイント、棒など) について値 1 が返され、2 つのマークの 1 のうちの最大値がこのマークに返されます。
    • この例では、最終的なビューですべての顧客について毎週のマークがあります。そのため、このコンテキストでは、顧客が今週または 2 週間前にオーダーを行った場合、この計算から 1 が返されます。WINDOW_SUM() でなく WINDOW_MAX() を使用しているため、顧客がオーダーを毎週 1 回行った場合も、この計算からは 1 だけが返されます。
    • この計算自体では、顧客ごとに 1 または 0 が返されるだけです。そのため、WINDOW_SUM() でこの計算をネストして、すべての顧客の 1 をすべて加算する必要があります。表関数を異なる計算に設定できるよう、これらの計算は別個の計算フィールドに入っている必要があります。
  2. "Moving Count of Customers for Every 3 Weeks (3 週間ごとの顧客の実行中のカウント)" などの名前を付けて、次のような計算の計算フィールドを作成します。
    WINDOW_SUM([Every 3 Week Period a Customer is In])
  3. "First Filter (最初のフィルター)" などの名前を付けて、次のような計算の計算フィールドを作成します。
    FIRST() = 0
ステップ 2 - ビューの構築
  1. [Order Date (オーダー日)] を右クリックして、[列] シェルフへドラッグします。
  2. [フィールドのドロップ] ダイアログで、カレンダー アイコンが緑色の [WEEK(Order Date) (WEEK(オーダー日))] を選択します。
    1. [列] シェルフで、[WEEK(Order Date) (WEEK(オーダー日))] を右クリックし、[不連続] を選択します。
    2. 日付フィールドは不連続である必要があります。そうでないと、線グラフは [Customer Name (顧客名)] によって分割されます。
  3. [Customer Name (顧客名)] を [マーク] カードの [詳細] にドラッグします。
    • 表計算が正しく計算されるよう、[Customer Name (顧客名)] フィールドはビュー内にある必要があります。後で、行が 1 つだけになるようにビューをフィルターします。
  4. [Moving Count of Customers for Every 3 Weeks (3 週間ごとの顧客の実行中のカウント)] を [行] シェルフにドラッグします。
ステップ 3 - 表計算の編集
  1. [行] シェルフで [Moving Count of Customers for Every 3 Weeks (3 週間ごとの顧客の実行中のカウント)] を右クリックし、[表計算の編集...] を選択します。
  2. [表計算] ダイアログで、次を実行してからダイアログを閉じます。
    1. [ネストされた計算] で、[Every 3 Week Period a Customer is In (顧客が存在する 3 週間ごとの期間)] を選択します。
    2. [次を使用して計算] で、[特定のディメンション] を選択します。
    3. ディメンションのリストで、[Week of Order Date (オーダー日の週)] のみをオンにします。
    4. [ネストされた計算] で、[Moving Count of Customers for Every 3 Weeks (3 週間ごとの顧客の実行中のカウント)] を選択します。
    5. [次を使用して計算] で、[特定のディメンション] を選択します。
    6. ディメンションのリストで、[Customer Name (顧客名)] のみをオンにします。
      • [Every 3 Week Period a Customer is In (顧客が存在する 3 週間ごとの期間)] では、顧客が存在する 3 週間ごとの期間を顧客ごとに Tableau Desktop がカウントすることを希望しています。言い換えると、各顧客内の週の数を Tableau Desktop がカウントすることを希望しています。あるディメンションのチェックがオンになっていると、そのディメンションのすべての値について表計算が実行されます。あるディメンションのチェックがオフになっていると、そのディメンションのすべての値について Tableau Desktop で計算が開始されます。
      • 同様に、[Moving Count of Customers for Every 3 Weeks (3 週間ごとの顧客の実行中のカウント)] では、それぞれの週ですべての顧客を合計することを希望しています。
  3. [First Filter (最初のフィルター)] を [フィルター] シェルフにドラッグし、[OK] をクリックして [フィルター] ダイアログを閉じます。
  4. [フィルター] シェルフで [First Filter (最初のフィルター)] を右クリックし、[次を使用して計算] > [Customer Name (顧客名)] を選択します。
  5. [フィルター] ダイアログで [True] をチェックし、[OK] をクリックします。

詳細情報

オプション 1 の注意事項:
  • この計算では、すべての顧客がデータ セットでの最初の出現時に 1 回カウントされます。つまり、この方法は移動中の個別のカウントを見つけるのには役立ちません。なぜなら、FIXED 式では移動中の期間で最初のオーダー日を見つけることができないためです。
  • この計算のステップ 2 では次のことが行われます。
    • まず、式 { EXCLUDE [Order Date] : MIN([Order Date])} により、顧客ごとの最初のオーダー日を見つけます。通常は、式 { FIXED [Customer Name] : MIN([Order Date])} によって最初のオーダー日を見つけます。しかし、この EXCLUDE の範囲は外側の FIXED ステートメントによって設定されています。言い換えると、この EXCLUDE ステートメントはディメンション [Customer Name (顧客名)] および [Order Date (オーダー日)] を使用して開始した後、[Order Date (オーダー日)] を除外します。
    • 次に、その顧客の最初のオーダー日である日付に、IF ステートメントから 1 が返されます。
    • この IF ステートメントでは、日付が最初のオーダー日と一致する任意の行で 1 が返されます。つまり、最初のオーダーについて参照元データに複数のレコードがある場合、それらの行のそれぞれが 1 になります。各顧客を 1 回だけカウントしたいので、IF ステートメントの最小値を [Customer Name (顧客名)] に固定しています。
    • また、最終的なビューで時間経過による変化が示されるよう、[Order Date (オーダー日)] を FIXED ステートメントのディメンション宣言に追加する必要があります。
オプション 2 の注意事項:
  • Tableau 計算はビューにかなり依存しています。ビューのコンテキストがなければ、ステップ 2 の計算でビュー内のすべてのマーク (行、ポイント、棒など) について値 1 が返され、2 つのマークの 1 のうちの最大値がこのマークに返されます。
  • この例では、最終的なビューですべての顧客について毎週のマークがあります。そのため、このコンテキストでは、顧客が今週または 2 週間前にオーダーを行った場合、この計算から 1 が返されます。WINDOW_SUM() でなく WINDOW_MAX() を使用しているため、顧客がオーダーを毎週 1 回行った場合も、この計算からは 1 だけが返されます。
  • この計算自体では、顧客ごとに 1 または 0 が返されるだけです。そのため、WINDOW_SUM() でこの計算をネストして、すべての顧客の 1 をすべて加算する必要があります。
  • 表関数を異なる計算に設定できるよう、これらの計算は別個の計算フィールドに入っている必要があります。

この記事についてディスカッションする... フィードバック フォーラム
この記事で問題は解決しましたか?