Tableau Desktop에서 두 번째 날짜를 사용하여 분석

이것은 자습서의 두 번째 단계이며 첫 번째 단계인 Tableau Prep으로 두 번째 날짜 구하기를 완료했다고 가정합니다.

첫 번째 단계에서 원래 데이터 집합을 가져와 다음과 같은 질문에 답할 수 있도록 변형했습니다.

  1. 각 운전자에 대한 첫 번째 위반과 두 번째 위반 사이의 간격(일)은 얼마입니까?

  2. 첫 번째 위반과 두 번째 위반에 대한 벌금을 비교합니다. 상관 관계가 있습니까?

  3. 가장 많은 벌금을 낸 운전자는 누구입니까? 가장 적은 벌금을 낸 운전자는 누구입니까?

  4. 위반 유형이 여러 개인 운전자는 몇 명입니까?

  5. 교통 안전 교육을 받은 적이 없는 운전자의 평균 벌금 액수는 얼마입니까?

이제 이러한 질문을 살펴보면 앞서 만든 첫 번째 데이터 구조에 몇 가지 장점과 단점이 있다는 것이 명확해집니다. 다시 Tableau Prep Builder로 돌아가 추가적인 몇 가지 변형을 다시 수행한 다음 Tableau Desktop에서 동일한 분석에 미치는 영향을 확인할 것입니다. 마지막으로, 원래 데이터와 세부 수준(LOD) 식을 사용하여 분석에 Tableau Desktop만 사용하는 접근 방식을 살펴볼 것입니다.

이 자습서의 목표는 생활 속 시나리오의 관점에서 다양한 개념을 제안하고 옵션을 살펴보는 것입니다. 따라서, 어떤 옵션이 최선인지에 대해서는 다루지 않습니다. 이 자습서를 끝내면 Tableau Prep의 다양한 특성과 Tableau Desktop의 계산에 대해 더 잘 알게 되며 데이터 구조가 계산 및 분석에 미치는 영향을 더 잘 이해하게 됩니다.

참고: 이 자습서의 작업을 완료하려면 Tableau Prep Builder가 필요하며 선택적으로 Tableau Desktop을 설치하고 데이터를 다운로드해야 합니다.

이 자습서를 계속하기 전에 Tableau Prep 및 Tableau Desktop을 설치하려면 Tableau Desktop 및 Tableau Prep 배포 가이드(링크가 새 창에서 열림)를 참조하십시오. 또는 Tableau Prep(링크가 새 창에서 열림)Tableau Desktop(링크가 새 창에서 열림) 무료 평가판을 다운로드할 수 있습니다.

데이터 집합은 첫 번째 단계에서 구축한 Driver Infractions.tflx의 출력입니다.

Tableau Desktop의 분석

이제 데이터를 구성했으므로 Tableau Desktop으로 데이터를 가져와야 합니다. 몇 가지 질문에는 쉽게 답할 수 있지만, 다른 질문들에는 몇 개의(또는 많은) 계산이 필요합니다. 아래 질문에 답해 보십시오. 막혔을 때 진행하는 방법에 대한 기본 정보를 얻으려면 각 질문을 확장하면 됩니다.

참고: Driver Infractions.twbx(링크가 새 창에서 열림) 통합 문서를 다운로드하면 솔루션을 상황에 맞게 살펴볼 수 있습니다. 분석을 해석하거나 답을 찾는 다른 방법이 있을 수 있음을 기억하십시오.

1. 각 운전자에 대한 첫 번째 위반과 두 번째 위반 사이의 간격(일)은 얼마입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 DATEDIFF 함수를 사용합니다. 이 함수에는 날짜 부분, 시작 날짜 및 종료 날짜의 세 가지 인수가 있습니다. 우리가 알고 싶은 것은 이벤트 사이의 기간(일)이므로 날짜 부분으로 'day'를 사용합니다. 시작 날짜와 종료 날짜는 데이터 집합에서 1st Infraction Date(첫 번째 위반 날짜)2nd Infraction Date(두 번째 위반 날짜)입니다.

  2. 계산은 다음과 같습니다.

    Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  3. 이 기간을 Driver ID(운전자 ID)를 기준으로 막대 차트로 그릴 수 있습니다. 7명의 운전자에게는 두 번째 위반이 없기 때문에 Null이 7개 있습니다.

    위반 사이의 시간별 운전자에 대한 막대 차트

2. 첫 번째 위반과 두 번째 위반에 대한 벌금을 비교합니다. 상관 관계가 있습니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 1st Fine Amount(첫 번째 벌금 액수)2nd Fine Amount(두 번째 벌금 액수)의 분산형 차트를 만듭니다. Driver ID(운전자 ID)마크 카드의 세부 정보 선반으로 가져와 각 운전자에 대한 마크를 만들 수 있습니다.

  2. 추세선을 추가하기 위해 왼쪽 패널에 있는 분석 탭을 사용하고 선형 추세선을 가져옵니다. 추세선을 마우스오버하면 R-제곱 값이 실제적으로 0이고 p-값이 유의값의 한계보다 훨씬 크다는 것을 알 수 있습니다. 따라서 첫 번째와 두 번째 벌금 액수 사이에 상관 관계가 없음을 확인할 수 있습니다.

    대시보드에서 이 분산형 차트를 사용하려면 추세선을 제거해야 합니다.

운전자 ID의 1차 및 2차 벌금에 대한 분산형 차트와 추세선 도구 설명

3. 가장 많은 벌금을 낸 운전자는 누구입니까? 가장 적은 벌금을 낸 운전자는 누구입니까?

더욱 심층적인 분석을 하고 싶다면 몇 가지 계산을 만들어야 합니다.

  1. Tableau Desktop에서 이 질문에 대한 답을 구하려면 두 위반에 대한 벌금을 단일 필드에 추가해야 합니다. 일부 운전자에게 두 번째 위반이 없을 수 있으므로 2nd Fine Amount(두 번째 벌금 액수)의 Null을 0으로 변환하는 0 Null ZN 함수를 사용해야 합니다. 이렇게 하지 않으면 두 번째 벌금이 없는 경우 null이 발생합니다.

  2. 계산은 다음과 같습니다.

    Total Amount Paid(납부 총액) = [1st Fine Amount] + ZN([2nd Fine Amount])

  3. Driver ID(운전자 ID)를 기준으로 막대 차트에 Total Amount Paid(납부 총액)를 그리고 정렬할 수 있습니다.

운전자 ID별 납부 총액의 막대 차트와 납부 총액을 보여주는 계산 에디터

4. 위반 유형이 여러 개인 운전자는 몇 명입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 첫 번째와 두 번째 위반 유형이 같은지 여부를 비교하는 IF 계산을 수행해야 합니다. 같으면 값으로 "1"을 할당합니다. 같지 않으면 "2"를 할당합니다. 여러 위반 유형에만 관심이 있으므로 null인 두 번째 위반 유형과 같은 다른 결과에는 "1"이 할당됩니다.

  2. 계산은 다음과 같습니다.

    Number of Infraction Types(위반 유형의 수) =

    IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 
    ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 
    ELSE 1 END
  3. 그런 다음 Driver ID(운전자 ID)를 기준으로 막대 차트에 Number of Infraction Types(위반 유형의 수)를 그리고 정렬할 수 있습니다.

운전자 ID별 위반 유형의 수에 대한 막대 차트와 위반 유형의 수를 보여주는 계산 에디터

5. 교통 안전 교육을 받은 적이 없는 운전자의 평균 벌금 액수는 얼마입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 총 벌금 액수를 단순히 2로 나눠서는 안 되며, 그 이유는 일부 운전자에게 위반이 하나만 있기 때문입니다. 또한 평균의 평균은 불일치로 이어질 수 있기 때문에 운전자당 평균 벌금 액수를 계산하고 이 값의 평균을 구할 수도 없습니다. 이렇게 하는 대신, 교통 안전 교육을 받은 적이 없는 운전자가 납부한 총 벌금 액수를 계산한 다음 해당 벌금과 관련된 총 위반 수로 나눠야 합니다.

    1. 먼저 각 운전자에게 두 번째 위반이 있는지 확인해야 합니다. 두 번째 위반이 없으면 모든 "2nd(두 번째)" 필드의 정보가 Null이라는 사실을 활용하여 계산을 작성할 수 있습니다.

      IFNULL([2nd Infraction Type], 'no')

      이 계산은 위반 유형이 존재하는 경우 해당 유형을 반환하고, 그렇지 않고 두 번째 위반이 없으면 "no"를 반환합니다.

    2. 다음으로, 이 정보를 위반 수(1 또는 2)로 변환해야 합니다. IFNULL 계산의 결과가 "no"이면 운전자가 벌금을 한 번 낸 것으로 표시되어야 합니다. 다른 모든 결과는 벌금을 두 번 낸 것으로 표시되어야 합니다. 계산은 다음과 같습니다.

      Number of Infractions(위반 수) =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 
      ELSE 2 
      END
    3. 이제 총 벌금 액수를 고려해야 합니다. 위의 질문 3과 유사하게 두 번째 벌금에 ZN 함수를 사용하여 첫 번째와 두 번째 벌금 액수를 더합니다. 하지만 이 계산은 전체 데이터 집합 수준에서 수행되어야 하므로 계산 자체에 집계, 즉 SUM을 지정하는 것이 가장 좋습니다. 계산은 다음과 같습니다. 

      SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) )

    4. 이 모든 것을 하나로 모으기 위해 총 벌금 액수를 구하고 새로운 Number of Infractions(위반 수) 계산된 필드로 나누어 평균 벌금 액수를 결정합니다.

      Average Fine(평균 벌금) = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  2. 또한 교통 안전 교육을 받은 운전자를 필터링해야 하지만 해당 정보도 두 필드에 저장되어 있습니다.

    1. Tableau는 수치 계산에 매우 효율적입니다. 따라서 가능한 성능을 높이기 위해 이 정보를 수치로 풀어내야 합니다. 두 필드를 결합하기 위해 각 필드에 대해 "Yes = 1" 및 "No = 0"(두 번째 위반이 없는 운전자에 대한 Null도 0이어야 함)을 나타내는 계산을 만듭니다. 이러한 계산의 결과를 합하면 총 값이 0인 운전자는 교통 안전 교육을 받은 적이 없는 것이고 1 또는 2 값은 운전자가 교통 안전 교육을 받은 횟수를 나타냅니다. 이제 이 값이 0인 운전자만 남도록 필터링할 수 있습니다.

    2. 이번에는 IF 대신 CASE 문을 사용합니다. 두 문은 매우 유사한 기능을 하지만 구문이 다릅니다. 계산 시작은 다음과 같습니다.

      CASE [1st Traffic School]
      WHEN 'Yes' THEN 1
      WHEN 'No' THEN 
      ELSE 0
      END
    3. 2nd Traffic School(두 번째 교통 안전 교육)에 대해서도 같은 작업을 수행합니다. 각 Case 문을 괄호로 묶고 사이에 더하기를 추가하여 두 문을 한 계산에 추가할 수 있습니다. 줄 바꿈 몇 개를 제거하면 계산은 다음과 같습니다.

      Number of Traffic School Attendances(교통 안전 교육 참석 횟수) =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      
    4. Number of Traffic School Attendances(교통 안전 교육 참석 횟수)데이터 패널(선 위)의 차원 영역에 끌어 놓으면 0~2 값이 불연속형이 됩니다.

    5. 이제 Number of Traffic School Attendances(교통 안전 교육 참석 횟수)를 기준으로 필터링하는 경우 0을 선택하는 것으로 교통 안전 교육을 받은 적이 없는 운전자를 얻을 수 있습니다.

  3. 원래 질문에 답하기 위해 Average Fine(평균 벌금)마크 카드의 텍스트 선반에 끌어 놓습니다.

    계산에 집계를 작성했기 때문에 알약 모양 집계는 AGG이며 변경할 수 없습니다. 이는 예상된 동작입니다.

평균 벌금의 단일 뷰와 교통 안전 교육 참석 횟수를 보여주는 계산 에디터

자세히 알아보기 - 피벗된 데이터

지금까지 작업한 데이터는 첫 번째와 두 번째 위반과 관련된 질문에 답할 수 있도록 잘 구조화되어 있지만 Tableau Desktop에서 사용할 수 있도록 권장되는 표준 구조는 아닙니다. 분석이 위반 날짜와 관련된 기본적인 질문에서 멀어질수록 관련 정보를 사용 가능한 형태로 결합하기 위해 계산이 더욱 복잡해집니다.

일반적으로 데이터가 동일한 데이터 유형(예: 날짜에 대한 두 열, 벌금 액수에 대한 두 열 등)에 대한 여러 열에 저장되어 있고 필드명(예: 첫 번째 위반인지 또는 두 번째 위반인지 여부)에 고유한 정보가 저장되어 있는 경우 데이터를 피벗해야 한다는 의미입니다.

Tableau Prep Builder에서 다중 피벗을 수행하면 이 문제를 훌륭하게 해결할 수 있습니다. 이전 자습서 Tableau Prep으로 두 번째 날짜 구하기에서 만든 Driver Infraction(운전자 위반) Tableau Prep 흐름의 끝부터 작업할 수 있습니다.

: 다음 단계를 위해 Tableau Prep으로 돌아왔는지 확인하십시오.

  1. 마지막 정리 단계에서 모든 중복 필드를 기준으로 피벗하는 피벗 단계를 추가합니다. 피벗된 필드 영역의 오른쪽 위에 있는 더하기 아이콘을 사용하여 더 많은 피벗 값을 추가합니다. 1st/2nd Fine Amounts(첫 번째/두 번째 벌금 액수) 같은 각 필드 집합은 함께 피벗되어야 합니다.

    피벗에 대한 자세한 내용은 데이터 정리 및 변형을 참조하십시오.

  2. 피벗 필드 영역의 Pivot1 이름 열 아래에서 각 값을 두 번 클릭하고 이름을 1st(첫 번째) 및 2nd(두 번째)로 바꿉니다.

    5개 피벗이 표시된 Tableau Prep의 피벗 1 구성 패널

Null 날짜를 제거하고 필드 이름을 변경한 다음 순서를 재정리하여 결과를 간소화할 수 있습니다.

  1. 피벗 다음에 정리 단계를 추가합니다. Infraction Date(위반 날짜) 열에서 Null 표시줄을 마우스 오른쪽 단추로 클릭하고 제외를 선택합니다.

  2. Pivot1 Names(피벗1 이름) 필드명을 두 번 클릭하고 이름을 Infraction Number(위반 수)로 바꿉니다.

  3. 필드를 적절히 끌어 놓아 아래와 같이 순서를 다시 정렬합니다.

    피벗되고 정리된 데이터의 미리 보기

  1. 새 피벗된 데이터에서 Pivoted Driver Infractions(피벗된 운전자 위반 수)라는 출력을 만들고 Tableau Desktop으로 가져옵니다. (출력 단계를 추가한 후 흐름을 실행하는 것을 잊지 마십시오.)

이제 이 피벗된 데이터 구조를 사용하여 다섯 개 질문을 다시 살펴볼 수 있습니다. 막혔을 때 진행하는 방법에 대한 기본 정보를 얻으려면 각 질문을 확장하면 됩니다.

참고: 완성된 흐름 파일 Pivoted Driver Infractions.tflx를 다운로드하여 작업을 확인하거나, 통합 문서 Pivoted Driver Infractions.twbx를 다운로드하여 솔루션을 상황에 맞게 살펴볼 수 있습니다. 분석을 해석하거나 답을 찾는 다른 방법이 있을 수 있음을 기억하십시오.

1. 각 운전자에 대한 첫 번째 위반과 두 번째 위반 사이의 간격(일)은 얼마입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 첫 번째 데이터 집합에서 했던 것처럼 DATEDIFF 함수를 사용합니다. 이 함수에는 시작 날짜와 종료 날짜가 필요합니다. 이 정보는 데이터에 존재하지만 모두 한 필드에 있습니다. 데이터를 가져와 두 필드로 만들어야 합니다.

    1. 임시 계산된 필드 두 개를 만듭니다.

      첫 번째 위반 날짜 = IF [Infraction Number] = "1st" THEN [Infraction Date] END

      두 번째 위반 날짜 = IF [Infraction Number] = "2nd" THEN [Infraction Date] END

    2. 각 운전자에 대해 이 두 값을 모두 비교할 수 있게 만들고 싶기 때문에 두 값을 Driver ID(운전자 ID) 수준이 되도록 수정해야 합니다.

      참고: 믿지 못하시겠습니까? 이 두 필드를 그대로 사용하여 DATEDIFF 계산을 수행해 보십시오. Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])
      Tableau가 다음과 같은 데이터 구조에서 비교하기 때문에 모든 위치에서 Null 결과를 얻게 됩니다.
      null 결과를 보여주는 텍스트 테이블
      여기에서 첫 번째 날짜가 무엇인지 알 수 있는 행에서는 두 번째 날짜가 무엇인지 알 수 없고, 그 반대도 마찬가지입니다. 이 문제를 해결하기 위해 FIXED 세부 수준 식을 사용하여 첫 번째와 두 번째 날짜를 Driver ID(운전자 ID)와 연관시킵니다.

    3. 각 계산을 다음과 같이 편집합니다.

      첫 번째 위반 날짜 = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) }

      두 번째 위반 날짜 = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

      참고: LOD 식에 내장된 경우 원래 IF 계산을 집계해야 합니다. 날짜 값을 보존하는 기본 집계를 사용할 수 있습니다. 예를 들어 SUM, AVG 또는 MIN 같은 집계는 작동하지만 CNT 또는 CNTD는 작동하지 않습니다.

      참고: 이러한 계산은 Tableau Prep Builder에서도 만들 수 있습니다. Prep의 LOD 식에 대한 자세한 내용은 세부 수준(LOD), 순위 및 분위 계산 만들기를 참조하십시오.

    4. 이제 다음과 같이 DATEDIFF 계산을 만들 수 있습니다.

      Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

      • 주 또는 월 수준에서 살펴보고 싶다면 날짜 부분(현재 'day')을 수정하면 됩니다.

      • FIXED 계산을 DATEDIFF 안에 직접 배치하여 전체 항목에 대한 단일 계산을 만들 수도 있습니다. 

        DATEDIFF ( 'day',

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) },

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

        )

    5. 열의 Time Between Infractions(위반 사이의 기간)과 행의 Driver ID(운전자 ID)를 도표로 그립니다.

결과는 피벗되지 않은 데이터 구조의 결과와 동일합니다.

2. 첫 번째 위반과 두 번째 위반에 대한 벌금을 비교합니다. 상관 관계가 있습니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 이전 질문과 매우 유사한 논리를 사용합니다. Infraction Number(위반 수)를 사용하여 지정된 행이 첫 번째 위반인지, 아니면 두 번째 위반인지를 식별한 다음 그에 따라 벌금 액수를 가져옵니다.

    1. 수행하려는 작업이 분산형 차트를 만드는 것이라면 LOD 부분을 건너 뛰고 바로 IF 계산을 사용할 수 있습니다.

      1st Fine Amount(첫 번째 벌금 액수) = IF [Infraction Number] = "1st" THEN [Fine Amount] END

      2nd Fine Amount(두 번째 벌금 액수) = IF [Infraction Number] = "2nd" THEN [Fine Amount] END

    2. 하지만 한 운전자에 대해 첫 번째 벌금과 두 번째 벌금 간의 액수 차이를 비교하고 확인하고 싶다면 날짜에서 발생한 것과 동일한 Null 문제를 만나게 됩니다. FIXED LOD 안에 이러한 계산을 넣을 수 있으므로 처음부터 그렇게 하는 것이 좋습니다.

      1st Fine Amount(첫 번째 벌금 액수) = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

      2nd Fine Amount(두 번째 벌금 액수) = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Fine Amount] END ) }

      이러한 계산은 Tableau Prep Builder에서도 만들 수 있습니다. Prep의 LOD 식에 대한 자세한 내용은 세부 수준(LOD), 순위 및 분위 계산 만들기를 참조하십시오.

    3. 열의 1st Fine Amount(첫 번째 벌금 액수)와 행의 2nd Fine Amount(두 번째 벌금 액수)로 분산형 차트를 만들고 이전과 같이 선형 추세선을 가져옵니다.

결과는 피벗되지 않은 데이터 구조의 결과와 동일합니다.

3. 가장 많은 벌금을 낸 운전자는 누구입니까? 가장 적은 벌금을 낸 운전자는 누구입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하려면 피벗된 데이터 구조가 이상적입니다. 수행해야 할 일은 Driver ID(운전자 ID)Fine Amount(벌금 액수)를 막대 차트로 가져오는 것입니다. 기본 집계는 이미 SUM이므로 운전자별로 납부한 총액이 자동으로 그려집니다.

결과는 피벗되지 않은 데이터 구조의 결과와 동일합니다.

4. 위반 유형이 여러 개인 운전자는 몇 명입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하려면 피벗된 데이터 구조가 이상적입니다. 수행해야 할 일은 Driver ID(운전자 ID)Infraction Type(위반 유형) 고유 카운트를 막대 차트로 가져오는 것이며, 답을 바로 얻게 됩니다.

결과는 피벗되지 않은 데이터 구조의 결과와 동일합니다.

5. 교통 안전 교육을 받은 적이 없는 운전자의 평균 벌금 액수는 얼마입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 총 벌금 액수를 단순히 2로 나눠서는 안 되며, 그 이유는 일부 운전자에게 위반이 하나만 있기 때문입니다. 또한 평균의 평균은 불일치로 이어질 수 있기 때문에 운전자당 평균 벌금 액수를 계산하고 이 값의 평균을 구할 수도 없습니다. 이렇게 하는 대신, 교통 안전 교육을 받은 적이 없는 운전자가 납부한 총 벌금 액수를 계산한 다음 해당 벌금과 관련된 총 위반 수로 나눠야 합니다.

    1. 먼저 각 운전자에게 두 번째 위반이 있는지 확인해야 합니다. 두 번째 위반이 없으면 2nd Infraction Date(두 번째 위반 날짜)가 Null이라는 사실을 활용하여 계산을 작성할 수 있습니다.

      IFNULL(STR([2nd Infraction Date]), 'no')

      이 계산은 두 번째 위반이 존재하는 경우 해당 날짜를 반환하고, 그렇지 않고 두 번째 위반이 없으면 "no"를 반환합니다.

      참고: 이 계산의 STR 부분은 IFNULL 인수에 데이터 유형 일관성이 있어야 하기 때문에 필요합니다. Null 값에 대해 "no" 문자열을 반환하고 싶기 때문에 날짜도 문자열로 변환해야 합니다.

    2. 다음으로, 이 정보를 위반 수(1 또는 2)로 변환해야 합니다. IFNULL 계산의 결과가 "no"이면 운전자가 벌금을 한 번 낸 것으로 표시되어야 합니다. 다른 모든 결과는 벌금을 두 번 낸 것으로 표시되어야 합니다. 계산은 다음과 같습니다.

      Number of Infractions(위반 수) =

      IF IFNULL(STR([2nd Infraction Date]), 'no')= 'no' THEN 1 
      ELSE 2 
      END
      
    3. 이제 평균 벌금 액수를 고려해야 합니다. 이미 Fine Amount(벌금 액수)에 대한 단일 필드가 있습니다. 수행해야 할 작업은 이 필드와 새 Number of Infractions(위반 수) 필드를 SUM 안에 넣고 다음과 같이 나누는 것입니다. 

      Average Fine(평균 벌금) = (SUM([Fine Amount]) / SUM([Number of Infractions])

  2. 교통 안전 교육을 받은 운전자를 필터링해야 합니다. Traffic School(교통 안전 교육) 필드를 사용하고 Traffic School(교통 안전 교육) = no(아니요)로 필터링할 수 있을 것 같지만 교통 안전 교육에 참석하지 않은 운전자가 아니라 교통 안전 교육과 관련되지 않은 위반으로 필터링됩니다. 운전자가 하나의 위반으로 교통 안전 교육을 받았지만 다른 위반으로는 받지 않은 경우 두 위반 모두 고려하지 않으려 합니다. 해당 운전자는 교통 안전 교육을 받았기 때문에 질문의 매개 변수에 맞지 않습니다.

    수행하려는 작업은 교통 안전 교육을 받은 모든 운전자를 필터링하는 것입니다. 관련된 위반과 상관없이 데이터 관점에서 행의 Traffic School(교통 안전 교육)이 “Yes”인 모든 운전자를 필터링하려고 합니다. 상황을 추적하는 데 도움이 되도록 간단한 뷰를 사용하여 단계별로 계산을 작성해 보겠습니다.

    1. 먼저 운전자의 Traffic School(교통 안전 교육)이 "Yes"인지 여부를 알고자 합니다. Driver ID(운전자 ID)으로 끌어 오고 Traffic School(교통 안전 교육)로 끌어 옵니다. 각 운전자에 대한 관련 값을 나타내는 자리 표시자 "Abc" 텍스트가 있는 텍스트 테이블이 나타납니다.

    2. 다음으로, Traffic School(교통 안전 교육) 값이 "Yes"인지 여부를 식별하는 계산을 작성합니다. 계산의 첫 번째 단계는 다음과 같습니다.

      Attended Traffic School(교통 안전 교육 참석) = CONTAINS([Traffic School), 'Yes')

      Attended Traffic School(교통 안전 교육 참석)마크 카드의 색상 선반으로 가져오면 "No" 열의 모든 마크에 정확하게 "False" 레이블이 표시되고 "Yes" 열의 모든 마크에 "True" 레이블이 표시됩니다.

    3. 하지만 실제로 필요한 것은 위반이 아닌 운전자 수준의 이 정보입니다. 데이터의 기본 구조와 다른 세부 수준에서 결과를 계산하려고 할 때 LOD 식이 적합합니다. 다음과 같은 FIXED LOD 식을 만듭니다. 하지만 LOD의 집계 식 부분은 집계 상태여야 한다는 것을 알고 있습니다. 이전에는 MIN을 사용했지만 여기서도 작동할까요? 계산을 다음과 같이 수정합니다. 

      Attended Traffic School(교통 안전 교육 참석) = { FIXED [Driver ID] : MIN( CONTAINS([Traffic School], 'Yes'))}

      색상에 Attended Traffic School(교통 안전 교육 참석)이 있는 Traffic School(교통 안전 교육)별 Driver ID(운전자 ID) 뷰

      이 변경 내용을 뷰에 적용하면 원하는 것과 반대되는 결과가 나타납니다. "No"가 있는 모든 운전자가 보드에서 "False"로 표시됩니다. 원하는 것은 해당 운전자의 모든 레코드에서 "Yes"를 "True"로 변환하는 것입니다. 여기에서 MIN의 역할은 무엇일까요? 이 함수는 사전순으로 첫 번째 응답을 선택합니다. 즉, "No"를 선택합니다.

    4. 이것을 MAX로 바꾸면 어떻게 됩니까? 마지막 응답을 사전순으로 가져옵니까? 계산을 다음과 같이 수정합니다. 

      Attended Traffic School(교통 안전 교육 참석) = { FIXED [Driver ID] : MAX ( CONTAINS( [Traffic School], 'Yes') ) }

      색상에 Attended Traffic School(교통 안전 교육 참석)이 있는 Traffic School(교통 안전 교육)별 Driver ID(운전자 ID) 뷰

      결과는, 운전자의 데이터 중에 "Yes"가 있으면 위반에 교통 안전 교육이 포함되지 않은 경우에도 운전자의 교통 안전 교육 참석 여부가 "True"로 표시됩니다.

    5. Attended Traffic School(교통 안전 교육 참석)필터 선반에 놓고 "False"만 선택하면 교통 안전 교육을 받은 적이 없는 운전자만 남게 됩니다.

  3. 필터를 적용한 상태에서 원래 질문에 답하기 위해 Average Fine(평균 벌금)마크 카드의 텍스트 선반에 끌어 놓습니다. 계산에 집계를 작성했기 때문에 필드의 집계는 AGG이며 변경할 수 없습니다. 이는 예상된 동작입니다.

결과는 피벗되지 않은 데이터 구조의 결과와 동일합니다.

피벗된 데이터의 이점

자습서의 원래 데이터 구조를 사용하여 쉽게 답할 수 있는 질문에만 답하면 되는 경우 해당 데이터 구조를 유지할 수 있습니다. 하지만 피벗된 데이터 형식은 훨씬 유연합니다. 몇 가지 계산이 필요하더라도 일단 데이터 집합을 얻게 되면 더 광범위한 질문에 적합하게 됩니다.

더 자세히 알아보기 - 계산만 사용

Tableau Prep Builder에 액세스할 수 없다면 어떻게 될까요? 원래 데이터에서 막힌 경우 전혀 방법이 없을까요? 전혀 그렇지 않습니다!

Tableau Desktop 및 LOD 식은 모든 분석 질문에 답할 수 있습니다. 원래 Traffic Violations.xlsx(링크가 새 창에서 열림)에 연결하면 피벗된 데이터 집합과 매우 유사합니다. 중요한 Infraction Number(위반 수) 필드가 없을 뿐입니다. LOD 식을 통해 집계 단계의 결과를 흉내 낼 수 있습니다.

참고: LOD Driver Infractions.twbx(링크가 새 창에서 열림) 통합 문서를 다운로드하면 솔루션을 상황에 맞게 살펴볼 수 있습니다. 분석을 해석하거나 답을 찾는 다른 방법이 있을 수 있음을 기억하십시오.

1. 각 운전자에 대한 첫 번째 위반과 두 번째 위반 사이의 간격(일)은 얼마입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 DATEDIFF 함수를 다시 사용합니다. 이 함수에는 시작 날짜와 종료 날짜가 필요합니다. 이 정보는 데이터에 존재하지만 모두 한 필드에 있습니다. 데이터를 가져와 두 필드로 만들어야 합니다. 각 운전자에 대해 이 두 값을 모두 비교할 수 있게 만들고 싶기 때문에 두 값을 Driver ID(운전자 ID) 수준이 되도록 수정해야 합니다.

    1. 첫 번째 위반 날짜를 구하기 위해 다음 계산을 사용합니다.

      1st Infraction(첫 번째 위반) = { FIXED [Driver ID] : MIN ( [Infraction Date] ) } 

    2. 단계에 따라 두 번째 위반 날짜를 구합니다.

      1. 시작하려면 첫 번째 날짜보다 큰 날짜를 찾아야 합니다.

        IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END

      2. 하지만 이렇게 하면 첫 번째 이후의 모든 위반을 얻게 되며 필요한 것은 두 번째 위반뿐입니다. 따라서 이 날짜 중에 가장 작은 것이 필요합니다. 전체를 MIN 안에 넣습니다.

        MIN( IF [Infraction] : [1st Infraction] THEN [Infraction Date] END )

      3. 또한 각 운전자에 대해 두 번째 위반 날짜를 다시 계산하고 싶습니다. 여기서 LOD 식이 등장합니다. 이 식을 Driver ID(운전자 ID) 수준으로 수정하겠습니다.

        2nd Infraction(두 번째 위반) = { FIXED [Driver ID] : MIN ( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

    3. 이제 DATEDIFF 계산을 만들 수 있습니다.

      Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction], [2nd Infraction])

결과는 다른 두 데이터 구조의 결과와 동일합니다.

2. 첫 번째 위반과 두 번째 위반에 대한 벌금을 비교합니다. 상관 관계가 있습니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 이 질문의 피벗된 데이터 버전과 유사한 논리를 사용합니다. 질문 1에 대해 만든 1st Infraction(첫 번째 위반)2nd Infraction(두 번째 위반) 필드를 사용하여 지정된 행이 첫 번째 위반인지, 아니면 두 번째 위반인지를 식별한 다음 그에 따라 벌금 액수를 가져옵니다.

    1. 수행하려는 작업이 분산형 차트를 만드는 것이라면 LOD 부분을 건너 뛰고 바로 IF 계산을 사용할 수 있습니다.

      1st Fine Amount(첫 번째 벌금 액수) = IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END

      2nd Fine Amount(두 번째 벌금 액수) = IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END

    2. 하지만 한 운전자에 대해 첫 번째 벌금과 두 번째 벌금 간의 액수 차이를 비교하고 확인하고 싶다면 첫 번째 데이터 구조에서처럼 Null 문제가 발생합니다. FIXED LOD 안에 이러한 계산을 넣을 수 있으므로 처음부터 그렇게 하는 것이 좋습니다.

      1st Fine Amount(첫 번째 벌금 액수) = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

      2nd Fine Amount(두 번째 벌금 액수) = {FIXED [Driver ID] : MIN( IF [2ndInfraction] = [Infraction Date] THEN [Fine Amount] END ) }

결과는 다른 두 데이터 구조의 결과와 동일합니다.

3. 가장 많은 벌금을 낸 운전자는 누구입니까? 가장 적은 벌금을 낸 운전자는 누구입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하려면 먼저 LOD만 사용하는 방법과 관련된 사항을 파악해야 합니다. Tableau Prep을 사용하는 두 방법 모두 운전자에 대해 첫 번째 또는 두 번째 위반이 아닌 레코드를 필터링합니다. Tableau Desktop의 LOD 방법은 모든 레코드를 유지합니다. 즉, Driver ID(운전자 ID)별로 SUM(Amount Paid)의 비주얼리제이션을 만들면 Tableau Desktop만 사용하는 버전에서는 셋 이상의 위반이 있는 운전자에 대해 더 높은 금액이 표시됩니다. 다른 방법과 일치하는 완전한 데이터에서 Total Amount Paid(납부 총액) 값을 구하려면 원래 Fine Amount(벌금 액수) 필드를 사용하는 대신 첫 번째 데이터 구조에서 했던 것처럼 첫 번째와 두 번째 벌금을 합해야 합니다.

  2. 질문 2에서 만든 필드를 사용하여 2가지 벌금 액수를 추가할 것입니다. 위반이 1건인 운전자에 대해 null 결과가 나오는 것을 방지하려면 ZN 이 필요합니다. 계산은 다음과 같습니다. 

    Total Amount Paid(납부 총액) = [1st Fine Amount] + ZN([2nd Fine Amount])

결과는 다른 두 데이터 구조의 결과와 동일합니다.

4. 위반 유형이 여러 개인 운전자는 몇 명입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 단순히 Driver ID(운전자 ID)Infraction Type(위반 유형)고유 카운트를 가져와서는 안 됩니다. 이 데이터 집합에는 두 번째 이후의 위반도 있기 때문에 일부 운전자는 세 개 이상의 위반 유형을 가질 수 있습니다. 다른 모델과 결과를 일치시키려면 범위를 첫 번째와 두 번째 위반으로 제한해야 합니다.

  1. 첫 번째와 두 번째 위반 유형을 가져오고 LOD 식으로 감싸 운전자 수준으로 FIXED (고정)한 다음 IF 계산을 사용하여 유형의 개수를 구합니다.

    1. 1st Infraction Type(첫 번째 위반 유형) = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    2. 2nd Infraction Type(두 번째 위반 유형) = { FIXED [Driver ID] : MIN ( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    3. Number of Infraction Types(위반 유형의 수) =

      IF [1st Infraction Type] = [2nd Infraction Type] THEN 1 
      ELSEIF [1st Infraction Type] != [2nd Infraction Type] THEN 2
      ELSE 1 END 

      참고: 또한 더 큰 계산에 직접 초기 계산을 중첩시켜 이러한 계산 중 많은 수를 단일 필드로 만들 수 있습니다. 결합된 계산은 다음과 같습니다.
      IF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      =
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 1

      ELSEIF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      !=
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 2

      ELSE 1
      END


      다소 이해하기 어려울 수 있지만 원하는 경우 사용할 수 있습니다. (줄 바꿈 및 일부 공백은 Tableau에서 계산이 해석되는 방식에 영향을 미치지 않습니다.)

  2. 그런 다음 Driver ID(운전자 ID)를 기준으로 막대 차트에 Number of Infraction Types(위반 유형의 수)를 그리고 정렬할 수 있습니다.

결과는 다른 두 데이터 구조의 결과와 동일합니다.

5. 교통 안전 교육을 받은 적이 없는 운전자의 평균 벌금 액수는 얼마입니까?
  1. Tableau Desktop에서 이 질문에 대한 답을 구하기 위해 총 벌금 액수를 단순히 2로 나눠서는 안 되며, 그 이유는 일부 운전자에게 위반이 하나만 있기 때문입니다. 또한 평균의 평균은 불일치로 이어질 수 있기 때문에 운전자당 평균 벌금 액수를 계산하고 이 값의 평균을 구할 수도 없습니다. 이렇게 하는 대신, 교통 안전 교육을 받은 적이 없는 운전자가 납부한 총 벌금 액수를 계산한 다음 해당 벌금과 관련된 총 위반 수로 나눠야 합니다.

    1. 먼저 각 운전자에게 두 번째 위반이 있는지 확인해야 합니다. 두 번째 위반이 없으면 모든 "2nd(두 번째)" 필드의 정보가 Null이라는 사실을 활용하여 계산을 작성할 수 있습니다.

      IFNULL([2nd Infraction Type], 'no')

      이 계산은 위반 유형이 존재하는 경우 해당 유형을 반환하고, 그렇지 않고 두 번째 위반이 없으면 "no"를 반환합니다.

    2. 다음으로, 이 정보를 위반 수(1 또는 2)로 변환해야 합니다. IFNULL 계산의 결과가 "no"이면 운전자가 벌금을 한 번 낸 것으로 표시되어야 합니다. 다른 모든 결과는 벌금을 두 번 낸 것으로 표시되어야 합니다. 계산은 다음과 같습니다.

      Number of Infractions(위반 수) =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1
      ELSE 2
      END
    3. Total Amount Paid(납부 총액)에 대해서는 질문 3의 계산을 사용할 수 있습니다. 이 모든 것을 하나로 모으기 위해 총 벌금 액수를 구하고 새로운 Number of Infractions(위반 수) 계산된 필드로 나누어 평균 벌금 액수를 결정합니다.

      Average Fine(평균 벌금) = SUM([Total Amount Paid]) / SUM([Number of Infractions])

  2. 교통 안전 교육을 받은 운전자를 필터링해야 합니다. 이 데이터 집합은 세 번째 또는 네 번째 위반이 있는 일부 운전자를 포함하기 때문에 피벗된 데이터 구조와 동일한 방법을 사용할 수 없습니다. 대신 여기에서 요약하여 설명하는 피벗되지 않은 데이터와 동일한 방법을 따릅니다.

    1. 먼저 첫 번째와 두 번째 위반에 교통 안전 교육이 포함되는지 여부를 식별하는 두 계산을 작성해야 합니다. 

      1st Traffic School(첫 번째 교통 안전 교육) = { FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

      2nd Traffic School(두 번째 교통 안전 교육) = { FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

    2. 그런 다음 값을 더해 총 교통 안전 교육 참석 횟수를 구합니다. 

      Number of Traffic School Attendances(교통 안전 교육 참석 횟수) =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
    3. Number of Traffic School Attendances(교통 안전 교육 참석 횟수)데이터 패널의 차원 영역에 끌어 놓으면 0–2 값이 불연속형이 됩니다.

    4. 이제 Number of Traffic School Attendances(교통 안전 교육 참석 횟수)를 기준으로 필터링하는 경우 0을 선택하는 것으로 교통 안전 교육을 받은 적이 없는 운전자를 얻을 수 있습니다.

  3. 원래 질문에 답하기 위해 Average Fine(평균 벌금)마크 카드의 텍스트 선반에 끌어 놓습니다. 계산에 집계를 작성했기 때문에 필드의 집계는 AGG이며 변경할 수 없습니다. 이는 예상된 동작입니다.

결과는 다른 두 데이터 구조의 결과와 동일합니다.

이 솔루션에 많은 중첩 계산과 LOD 식이 있다는 것을 기억해야 합니다. 데이터 집합의 크기와 데이터의 복잡성에 따라 성능이 문제가 될 수 있습니다.

방법에 대한 반성

그렇다면 어떤 경로를 따라야 할까요? 이는 전적으로 귀하와 귀하가 사용할 수 있는 도구에 따라 결정됩니다.

  • LOD 없이 관리하고 싶다면 데이터 변형 솔루션이 있지만 일부 분석(Tableau Desktop의 분석)에 계산이 필요할 수 있습니다.

  • 데이터를 변형할 수 있으며 LOD를 포함한 계산에 거부감이 없다면 가운데 옵션(자세히 알아보기 - 피벗된 데이터)이 최상의 유연성을 제공합니다.

  • LOD에 익숙하다면 성능에 미치는 영향을 최소화하거나 Tableau Prep에 액세스할 필요가 없도록 LOD만 사용하여 푸는 것이 실행 가능한 옵션(더 자세히 알아보기 - 계산만 사용)입니다.

적어도 Tableau Prep의 집계와 Tableau Desktop의 세부 수준 식이 어떻게 상호 관련되어 있으며 데이터 분석에 영향을 주는지 이해하는 것이 중요합니다. Tableau에서 수행하는 대부분의 작업과 마찬가지로 이 경우에도 방법이 둘 이상 있을 수 있습니다. 모든 다양한 옵션을 탐색하면 개념을 모아 최상의 솔루션을 선택할 수 있습니다.

사용된 계산:

Driver Infractions(운전자 위반 수)

  • Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  • Total Amount Paid(납부 총액) =[1st Fine Amount] + ZN([2nd Fine Amount])

  • Number of Infraction Types(위반 유형의 수) = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Number of Infractions(위반 수) = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Average Fine(평균 벌금) = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  • Number of Traffic School Attendances(교통 안전 교육 참석 횟수) = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Pivoted Driver Infractions(운전자 위반 수)

  • 1st Infraction(첫 번째 위반) = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "1st" THEN [Infraction Date] END)}

  • 2nd Infraction(두 번째 위반) = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "2nd" THEN [Infraction Date] END)}

  • Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • 1st Fine Amount(첫 번째 벌금 액수) = {FIXED [Driver ID] : MIN( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

  • Number of Infractions(위반 수) = IF IFNULL(STR([2nd Infraction]), 'no')= 'no' THEN 1 ELSE 2 END

  • Average Fine(평균 벌금) = SUM([Fine Amount])/SUM([Number of Infractions])

  • Attended Traffic School(교통 안전 교육 참석) = { FIXED [Driver ID] : MAX( CONTAINS([Traffic School], 'Yes'))}

LOD Driver Infractions(운전자 위반 수)

  • 1st Infraction(첫 번째 위반) = {FIXED [Driver ID] : MIN([Infraction Date])}

  • 2nd Infraction(두 번째 위반) = { FIXED [Driver ID] : MIN( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

  • Time Between Infractions(위반 사이의 기간) = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • 1st Fine Amount(첫 번째 벌금 액수) = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • 2nd Fine Amount(두 번째 벌금 액수) = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • Total Amount Paid(납부 총액) = [1st Fine Amount] + ZN([2nd Fine Amount])

  • 1st Infraction Type(첫 번째 위반 유형) = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • 2nd Infraction Type(두 번째 위반 유형) = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • Number of Infraction Types(위반 유형의 수) = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Number of Infractions(위반 수) = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Average Fine(평균 벌금) = SUM ([Total Amount Paid]) / SUM([Number of Infractions])

  • 1st Traffic School(첫 번째 교통 안전 교육) = {FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • 2nd Traffic School(두 번째 교통 안전 교육) = {FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • Number of Traffic School Attendances(교통 안전 교육 참석 횟수) = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

참고: 이 자습서의 초기 영감을 제공한 Workout Wednesday 주제 Do Customers Spend More on Their First or Second Purchase?(고객이 첫 번째 또는 두 번째 구매에서 더 많은 소비를 합니까?)(링크가 새 창에서 열림)의 Ann Jackson과 Tableau Prep 팁 Returning the First and Second Purchase Dates(첫 번째 및 두 번째 구매 날짜 반환)(링크가 새 창에서 열림)의 Andy Kriebel에게 특별한 감사를 전합니다. 이러한 링크를 클릭하면 Tableau 웹 사이트 외부로 이동합니다. Tableau는 외부 공급자에 의해 유지 관리되는 페이지가 정확하며 최신 상태인지에 대해 책임을 지지 않습니다. 콘텐츠와 관련된 질문이 있는 경우 해당 소유자에게 문의하십시오.

피드백을 제공해 주셔서 감사합니다!귀하의 피드백이 제출되었습니다. 감사합니다!