วิเคราะห์ด้วยด้วยวันที่สองใน Tableau Desktop

นี่คือช่วงที่สองของบทแนะนำและถือว่าช่วงแรก การค้นหาวันที่ที่สองด้วย Tableau Prep เสร็จสมบูรณ์แล้ว

ในช่วงแรก เรานำชุดข้อมูลเดิมมาสร้างเพื่อตอบคำถามต่อไปนี้

  1. ระยะเวลาเป็นจำนวนวันระหว่างการละเมิดครั้งแรกและครั้งที่สองสำหรับผู้ขับขี่แต่ละคนคือกี่วัน

  2. เปรียบเทียบจำนวนเงินค่าปรับสำหรับการละเมิดครั้งแรกและครั้งที่สอง มีความสัมพันธ์กันหรือไม่

  3. ผู้ขับขี่รายใดจ่ายโดยรวมมากที่สุด ใครจ่ายน้อยที่สุด

  4. มีผู้ขับขี่กี่คนที่มีการละเมิดหลายประเภท

  5. จำนวนเงินค่าปรับโดยเฉลี่ยสำหรับผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถคือเท่าใด

เมื่อเราสำรวจคำถามเหล่านี้ จะเห็นได้ชัดเจนว่าโครงสร้างข้อมูลแรกที่เราสร้างขึ้นมีทั้งข้อดีและข้อเสีย เราจะกลับไปที่ Tableau Prep Builder และเปลี่ยนรูปแบบเพิ่มเติม จากนั้นดูว่าส่งผลต่อการวิเคราะห์เดียวกันใน Tableau Desktop อย่างไร ท้ายที่สุด เราจะดูแนวทาง Tableau Desktop เท่านั้นเพื่อวิเคราะห์นิพจน์ระดับรายละเอียด (LOD) ด้วยข้อมูลเดิม

เป้าหมายของบทแนะนำนี้คือการนำเสนอแนวคิดต่างๆ ในบริบทของสถานการณ์ในชีวิตจริง และทำงานผ่านตัวเลือกต่างๆ ไม่ใช่การกำหนดโดยบังคับว่าข้อใดดีที่สุด ในตอนท้าย คุณควรจะมีความเข้าใจมากขึ้นว่าโครงสร้างข้อมูลส่งผลต่อการคำนวณและการวิเคราะห์อย่างไร เช่นเดียวกับความคุ้นเคยกับแง่มุมต่างๆ ของ Tableau Prep และการคำนวณใน Tableau Desktop ที่มากขึ้น

หมายเหตุ: หากต้องการทำงานในบทแนะนำนี้ให้เสร็จสิ้น คุณต้องมี Tableau Prep Builder และติดตั้ง Tableau Desktop และข้อมูลที่ดาวน์โหลด

หากต้องการติดตั้ง Tableau Prep และ Tableau Desktop ก่อนดำเนินบทแนะนำนี้ต่อ โปรดดู คู่มือ Tableau Desktop และ Tableau Prep Deployment(ลิงก์จะเปิดในหน้าต่างใหม่) หรือคุณสามารถดาวน์โหลด Tableau Prep(ลิงก์จะเปิดในหน้าต่างใหม่) และ Tableau Desktop(ลิงก์จะเปิดในหน้าต่างใหม่) เพื่อทดลองใช้ฟรีได้

ชุดข้อมูลเป็นเอาท์พุตจาก Driver Infractions.tflx ซึ่งสร้างในช่วงแรก

การวิเคราะห์ใน Tableau Desktop

ในขณะนี้เราได้กำหนดค่าข้อมูลแล้ว เราจะป้อนข้อมูลไปยัง Tableau Desktop เราสามารถตอบคำถามบางข้อได้อย่างง่ายดาย แต่บางคำถามก็เกี่ยวข้องกับการคำนวณเล็กน้อย (หรือมาก) ลองใช้คำถามด้านล่าง คุณสามารถขยายแต่ละคำถามเพื่อดูข้อมูลพื้นฐานเกี่ยวกับวิธีดำเนินการหากคุณติดขัด

หมายเหตุ: คุณสามารถดาวน์โหลดเวิร์กบุ๊ก Driver Infractions.twbx(ลิงก์จะเปิดในหน้าต่างใหม่) เพื่อดูโซลูชันในบริบท โปรดจำไว้ว่าอาจมีวิธีอื่นในการตีความการวิเคราะห์หรือหาคำตอบ

1. ระยะเวลาเป็นจำนวนวันระหว่างการละเมิดครั้งแรกและครั้งที่สองสำหรับผู้ขับขี่แต่ละคนคือกี่วัน
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราจะใช้ฟังก์ชัน DATEDIFF ฟังก์ชันนี้ใช้การอภิปรายสามส่วน ได้แก่ ส่วนวันที่ วันที่เริ่มต้น และวันที่สิ้นสุด เนื่องจากเราต้องการทราบวันระหว่างเหตุการณ์เหล่านี้ เราจะใช้ส่วนวันที่ “วัน” วันที่เริ่มต้นและสิ้นสุดของเราในชุดข้อมูลเป็นวันที่ละเมิดครั้งที่ 1และวันที่ละเมิดครั้งที่ 2

  2. การคำนวณ:

    เวลาระหว่างการละเมิด = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  3. เราสามารถพล็อตข้อมูลนั้นเทียบกับ ID ผู้ขับขี่เป็นแผนภูมิแท่งได้ โปรดทราบว่าผู้ขับขี่เจ็ดคนไม่มีการละเมิดครั้งที่สอง ดังนั้นจึงเป็น null เจ็ดค่า

    แผนภูมิแท่งของผู้ขับขี่ตามเวลาระหว่างการละเมิด

2. เปรียบเทียบจำนวนเงินค่าปรับสำหรับการละเมิดครั้งแรกและครั้งที่สอง มีความสัมพันธ์กันหรือไม่
  1. เพื่อที่จะตอบคำถามนี้ใน Tableau Desktop เราจะสร้างแผนภาพการกระจายจำนวนเงินค่าปรับครั้งที่ 1และจำนวนเงินค่าปรับครั้งที่ 2 ด้วยการป้อน ID ผู้ขับขี่ไปยังแถบรายละเอียดบนการ์ดเครื่องหมาย เราสามารถสร้างเครื่องหมายสำหรับผู้ขับขี่แต่ละคนได้

  2. หากต้องการเพิ่มเส้นแนวโน้ม ให้ใช้แท็บการวิเคราะห์ ในแผงด้านซ้ายและนำเส้นแนวโน้มแนวนอนออกมา เมื่อวางเมาส์เหนือเส้นแนวโน้ม เราจะเห็นว่าค่า R-squared นั้นแทบจะเป็นศูนย์ และ P-Value นั้นสูงกว่าจุดตัดที่สำคัญมาก เราสามารถระบุได้ว่าไม่มีความสัมพันธ์กันระหว่างจำนวนเงินค่าปรับครั้งที่แรกและครั้งที่สอง

    หากเราจะใช้แผนภาพการกระจายนี้ในแดชบอร์ด เส้นแนวโน้มควรถูกลบออก

แผนภาพการกระจายของจำนวนเงินค่าปรับครั้งที่ 1 และครั้งที่ 2 ตาม ID ผู้ขับขี่ พร้อมแสดงคำแนะนำแนวโน้ม Tooltip

3. ผู้ขับขี่รายใดจ่ายโดยรวมมากที่สุด ใครจ่ายน้อยที่สุด

เมื่อเราต้องการลงลึกในการวิเคราะห์ของเรา เราอาจจำเป็นต้องสร้างการคำนวณบางอย่าง

  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราต้องเพิ่มค่าปรับสำหรับการละเมิดทั้งสองครั้งเข้าไปในฟิลด์เดียวกัน เนื่องจากผู้ขับขี่บางคนอาจไม่มีการละเมิดครั้งที่สอง เราจำเป็นต้องใช้ฟังก์ชัน Zero Null ZN เพื่อเปลี่ยน null ทั้งหมดสำหรับจำนวนเงินค่าปรับครั้งที่สองกลับเป็นศูนย์ หากไม่ทำเช่นนี้จะทำให้เป็น null หากไม่มีค่าปรับครั้งที่สอง

  2. การคำนวณ:

    จำนวนเงินที่จ่ายทั้งหมด = [1st Fine Amount] + ZN([2nd Fine Amount])

  3. จากนั้นเราสามารถพล็อตจำนวนเงินที่จ่ายทั้งหมดกับ ID ผู้ขับขี่ และจัดเรียงแผนภูมิแท่งได้

แผนภูมิแท่งจำนวนเงินที่จ่ายโดย ID ผู้ขับขี่ พร้อมตัวแก้ไขการคำนวณที่แสดงสำหรับจำนวนเงินที่จ่าย

4. มีผู้ขับขี่กี่คนที่มีการละเมิดหลายประเภท
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราต้องทำการคำนวณ IF ที่พิเศษขึ้นโดยเปรียบเทียบว่าประเภทการละเมิดครั้งแรกและครั้งที่สองเหมือนกันหรือไม่ หากเหมือนกัน เราต้องกำหนดค่าเป็น "1" หากไม่เหมือนกัน เราจะกำหนดค่าเป็น "2" เนื่องจากเราสนใจเฉพาะการละเมิดหลายประเภทเท่านั้น ผลลัพธ์อื่นๆ เช่น ประเภทการละเมิดวินาทีแบบ null จะถูกกำหนดค่าเป็น "1"

  2. การคำนวณ:

    จำนวนประเภทการละเมิด =

    IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 
    ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 
    ELSE 1 END
  3. จากนั้นเราสามารถพล็อตจำนวนประเภทการละเมิด กับ ID ผู้ขับขี่ และจัดเรียงแผนภูมิแท่งได้

แผนภูมิแท่งของจำนวนประเภทการละเมิดโดย ID ผู้ขับขี่ พร้อมตัวแก้ไขการคำนวณที่แสดงสำหรับจำนวนประเภทการละเมิด

5. จำนวนเงินค่าปรับโดยเฉลี่ยสำหรับผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถคือเท่าใด
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราไม่สามารถแบ่งจำนวนเงินค่าปรับทั้งหมดเป็นสองส่วนได้ เนื่องจากผู้ขับขี่บางคนมีการละเมิดเพียงครั้งเดียวเท่านั้น เรายังไม่สามารถคำนวณค่าปรับโดยเฉลี่ยต่อผู้ขับขี่หนึ่งราย และหาค่าเฉลี่ยของค่าเหล่านั้นได้ เนื่องจากค่าเฉลี่ยโดยเฉลี่ยอาจทำให้เกิดความไม่สอดคล้องกันได้ แต่เราจำเป็นต้องคำนวณจำนวนเงินที่จ่ายทั้งหมดโดยผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถ แล้วหารด้วยจำนวนการละเมิดทั้งหมดที่เกี่ยวข้องกับค่าปรับเหล่านั้น

    1. อันดับแรก เราจำเป็นต้องระบุว่าผู้ขับขี่แต่ละคนมีการละเมิดครั้งที่สองหรือไม่ เราสามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าข้อมูลในฟิลด์ที่ "2" ทั้งหมดจะเป็น null หากไม่มีการละเมิดครั้งที่สอง และเริ่มสร้างการคำนวณ:

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

      การดำเนินการนี้จะส่งคืนประเภทการละเมิดหากมีอยู่ หรือ "ไม่" หากไม่มีการละเมิดครั้งที่สอง

    2. ถัดไป เราต้องแปลงข้อมูลนี้เป็นจำนวนการละเมิด 1 หรือ 2 หากผลลัพธ์ของการคำนวณ IFNULL ของเราคือ "ไม่" ผู้ขับขี่ควรจะถูกทำเครื่องหมายว่ามีค่าปรับหนึ่งค่า ผลลัพธ์อื่นใดควรจะถูกทำเครื่องหมายว่ามีค่าปรับสองค่า การคำนวณ:

      จำนวนการละเมิด =

      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. หากต้องการนำทั้งหมดมารวมกัน เราจะนำจำนวนเงินค่าปรับทั้งหมดนี้มาหารด้วยฟิลด์ที่คำนวณจำนวนการละเมิดใหม่ของเรา เพื่อหาจำนวนเงินค่าปรับโดยเฉลี่ย ดังนี้

      ค่าปรับโดยเฉลี่ย = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  2. เรายังต้องกรองผู้ขับขี่ที่เคยเข้าเรียนในโรงเรียนสอนขับรถ แต่ข้อมูลนั้นก็ยังเก็บไว้ในสองฟิลด์

    1. Tableau คำนวณเชิงตัวเลขได้มีประสิทธิภาพมาก เราจะอธิบายด้วยตัวเลขเพื่อช่วยในด้านประสิทธิภาพให้มากที่สุด เพื่อที่จะรวมสองฟิลด์นี้เข้าด้วยกัน เราจะสร้างการคำนวณสำหรับแต่ละฟิลด์ซึ่ง "ใช่ = 1" และ "ไม่ = 0" (null ก็ควร = 0 สำหรับผู้ขับขี่ที่ไม่มีการละเมิดครั้งที่สอง) จากการรวมผลลัพธ์การคำนวณนี้ ผู้ขับขี่คนใดที่มีค่ารวมเป็น 0 ไม่เคยไปโรงเรียนสอนขับรถ (และค่า 1 หรือ 2 แทนจำนวนครั้งที่ผู้ขับขี่ไป) จากนั้นเราสามารถกรองเพื่อเก็บเฉพาะผู้ขับขี่ที่มีค่าเป็น 0

    2. ครั้งนี้เราจะใช้คำสั่ง CASE แทน IF ทั้งสองคำสั่งฟังก์ชันคล้ายคลึงกันมากแต่มีวากยสัมพันธ์ต่างกัน การเริ่มต้นการคำนวณควรมีลักษณะดังนี้

      CASE [1st Traffic School]
      WHEN 'Yes' THEN 1
      WHEN 'No' THEN 
      ELSE 0
      END
    3. จากนั้นเราจะทำเช่นเดียวกันกับโรงเรียนสอนขับรถแห่งที่ 2 เราสามารถเพิ่มทั้งสองส่วนในการคำนวณเดียวกันโดยใส่วงเล็บให้คำสั่งกรณีแต่ละคำสั่งและเพิ่มเครื่องหมายบวกระหว่างสองคำสั่ง การนำตัวแบ่งบรรทัดออกบางส่วนจะมีลักษณะดังนี้

      จำนวนการเข้าเรียนโรงเรียนสอนขับรถ =

      (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. หากเราลากจำนวนการเข้าเรียนโรงเรียนสอนขับรถ ไปยังพื้นที่มิติของแผงข้อมูล (เหนือบรรทัดนั้น) ค่า 0–2 จะแยกกัน

    5. ตอนนี้ หากเราจะกรองจำนวนการเข้าเรียนโรงเรียนสอนขับรถ เราสามารถเลือกเพียง 0 และรู้ว่าเราจะได้รับผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถ

  3. เพื่อตอบคำถามเดิม เราจะป้อนค่าปรับโดยเฉลี่ยไปยังแถบ ข้อความบนการ์ดเครื่องหมาย

    เพราะเราสร้างการรวมไปในการคำนวณ การรวมบนข้อมูลที่แสดงจะเป็น AGG และเราไม่สามารถเปลี่ยนแปลงได้ ซึ่งเป็นไปตามคาด

มุมมองตัวเลขเดี่ยวของจำนวนเฉลี่ยที่จ่ายโดยเปิดตัวแก้ไขการคำนวณเพื่อแสดงจำนวนการเข้าเรียนโรงเรียนสอนขับรถ

ก้าวไปอีกขั้น ข้อมูลแบบมี Pivot

ขณะที่ข้อมูลที่เรากำลังทำงานอยู่มีการทำโครงสร้างที่ดีเพื่อตอบคำถามโดยเฉพาะเกี่ยวกับการละเมิดครั้งแรกและครั้งที่สอง แต่ก็ไม่ใช่โครงสร้างมาตรฐานที่แนะนำสำหรับใช้กับ Tableau Desktop ยิ่งการวิเคราะห์ของเราแตกต่างจากคำถามพื้นฐานเกี่ยวกับวันที่ละเมิดมากเท่าใด การคำนวณของเราก็ยิ่งซับซ้อนมากขึ้นในการรวมข้อมูลที่เกี่ยวข้องลงในแบบฟอร์มที่ใช้งานได้

โดยปกติ เมื่อข้อมูลถูกจัดเก็บไว้หลายคอลัมน์สำหรับข้อมูลประเภทเดียวกัน (เช่น สองคอลัมน์สำหรับวันที่ สองคอลัมน์สำหรับจำนวนเงินค่าปรับ ฯลฯ) และข้อมูลเฉพาะถูกเก็บไว้ในชื่อฟิลด์ (เช่น ไม่ว่าจะเป็นการละเมิดครั้งแรกและครั้งที่สอง) นี่เป็นข้อบ่งชี้ว่าคุณควรต้องทำ Pivot ข้อมูล

การทำ Pivot หลายครั้งใน Tableau Prep Builder สามารถจัดการปัญหานี้ได้อย่างดี เราสามารถทำงานจากจุดสิ้นสุดของลำดับงานการละเมิดของผู้ขับขี่ ของ Tableau Prep ที่สร้างขึ้นในบทแนะนำก่อนหน้า การค้นหาวันที่ที่สองด้วย Tableau Prep

เคล็ดลับ: ทำให้แน่ใจว่าคุณกลับมาใน Tableau Prep สำหรับขั้นตอนต่อไปนี้

  1. สำหรับขั้นตอนล้างสุดท้าย ให้เพิ่มขั้นตอนทำ Pivot ซึ่งทำ Pivot ด้วยฟิลด์ที่ทำซ้ำทุกๆ ฟิลด์ ใช้ไอคอนบวก ตรงมุมขวาบนของพื้นที่ฟิลด์แบบมี Pivot เพื่อเพิ่ม ค่าแบบมี Pivotอีก ฟิลด์แต่ละชุด (เช่น จำนวนเงินค่าปรับครั้งที่ 1 และครั้งที่ 2) ควรทำ Pivot เข้าด้วยกัน

    หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการทำ Pivot โปรดดู ล้างและกำหนดรูปแบบของข้อมูล

  2. ในพื้นที่ฟิลด์แบบมี Pivot ในส่วนคอลัมน์ชื่อของ Pivot1 ให้ดับเบิลคลิกแต่ละค่าและเปลี่ยนชื่อเป็นครั้งที่ 1 และครั้งที่ 2

    แผงการกำหนดค่า Pivot 1 ใน Tableau Prep แสดง Pivot 5 ค่า

คุณสามารถทำให้ผลลัพธ์เป็นระเบียบด้วยการลบวันที่ที่เป็นค่า Null รวมทั้งฟิลด์ที่เปลี่ยนชื่อใหม่และจัดลำดับใหม่

  1. เพิ่มขั้นตอนการล้างหลังจากทำ Pivot ในคอลัมน์วันที่ละเมิด คลิกขวาที่แถบ null และเลือกไม่รวม

  2. ดับเบิลคลิกชื่อฟิลด์ชื่อของ Pivot1 และเปลี่ยนชื่อเป็นจำนวนการละเมิด

  3. ลากฟิลด์ตามที่เหมาะสมเพื่อจัดลำดับใหม่ตามดังนี้

    ดูตัวอย่างของข้อมูลแบบมี Pivot และล้างข้อมูล

  1. จากข้อมูลแบบมี Pivot ใหม่ ให้สร้างเอาต์พุตชื่อว่า การละเมิดของผู้ขับขี่แบบมี Pivot และป้อนไปยัง Tableau Desktop (โปรดอย่าลืมเรียกใช้ลำดับงานหลังจากเพิ่มขั้นตอนเอาต์พุต )

ตอนนี้เราสามารถดูคำถาม 5 ข้อของเราอีกครั้งด้วยโครงสร้างข้อมูลแบบมี Pivot นี้ คุณสามารถขยายแต่ละโครงสร้างเพื่อดูข้อมูลพื้นฐานเกี่ยวกับวิธีดำเนินการหากคุณติดขัด

หมายเหตุ: คุณสามารถดาวน์โหลดไฟล์ลำดับงานที่เสร็จสมบูรณ์ Pivoted Driver Infractions.tflx เพื่อตรวจสอบงานของคุณหรือ ดาวน์โหลดเวิร์กบุ๊ก Pivoted Driver Infractions.twbx เพื่อดูโซลูชันในบริบท โปรดจำไว้ว่าอาจมีวิธีอื่นในการตีความการวิเคราะห์หรือหาคำตอบ

1. ระยะเวลาเป็นจำนวนวันระหว่างการละเมิดครั้งแรกและครั้งที่สองสำหรับผู้ขับขี่แต่ละคนคือกี่วัน
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เช่นเดียวกับที่เราทำกับชุดข้อมูลแรก เราจะใช้ฟังก์ชัน DATEDIFF ฟังก์ชันนี้ต้องมีวันที่เริ่มต้นและวันที่สิ้นสุด ข้อมูลนี้มีอยู่ในข้อมูลของเรา แต่ทั้งหมดจะอยู่ในฟิลด์เดียว เราจำเป็นต้องดึงออกมาเป็นสองฟิลด์

    1. สร้างฟิลด์การคำนวณเบื้องต้นสองฟิลด์

      วันที่ละเมิดครั้งที่ 1 = IF [Infraction Number] = "1st" THEN [Infraction Date] END

      วันที่ละเมิดครั้งที่ 2 = IF [Infraction Number] = "2nd" THEN [Infraction Date] END

    2. เนื่องจากเราต้องการให้แน่ใจว่าค่าทั้งสองนี้สามารถใช้เปรียบเทียบผู้ขับขี่แต่ละคนได้ เราจึงต้องแก้ไขให้อยู่ในระดับ ID ผู้ขับขี่

      หมายเหตุ: ไม่เชื่อหรือ ลองทำการคำนวณ DATEDIFF ด้วยสองฟิลด์นี้ตามที่เป็นอยู่: เวลาระหว่างการละเมิด = = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])
      คุณจะได้ผลลัพธ์เป็น null ทุกที่ เพราะ Tableau พยายามเปรียบเทียบกับทั่วทุกโครงสร้างข้อมูลที่มีลักษณะเช่นนี้
      ตารางข้อความแสดงผลลัพธ์เป็น null
      นี่คือ แถวซึ่งรู้ว่าวันที่แรกคืออะไรจะไม่รู้ว่าวันที่ที่สองคืออะไร และในทางกลับกัน เพื่อหลีกเลี่ยงปัญหานี้ เราจะใช้นิพจน์ระดับรายละเอียด FIXED เพื่อบังคับวันที่แรกและวันที่ที่สองเหล่านี้ให้สัมพันธ์กันโดย ID ผู้ขับขี่

    3. แก้ไขการคำนวณแต่ละครั้งดังนี้

      วันที่ละเมิดครั้งที่ 1 = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) }

      วันที่ละเมิดครั้งที่ 2 = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

      หมายเหตุ: การคำนวณ IF เดิมต้องรวมเมื่อฝังอยู่ในนิพจน์ LOD เราสามารถใช้การรวมพื้นฐานใดๆ ที่จะคงค่าวันที่ไว้ (ดังเช่นการรวมแบบ SUM, AVG หรือ MIN แต่ไม่ใช่ CNT หรือ CNTD)

      หมายเหตุ: การคำนวณเหล่านี้ยังสามารถสร้างใน Tableau Prep Builder ได้ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับนิพจน์ LOD ใน Prep โปรดดู สร้างระดับของรายละเอียด อันดับ และการคำนวณไทล์

    4. ตอนนี้เราสามารถสร้างการคำนวณ DATEDIFF ได้ดังนี้

      เวลาระหว่างการละเมิด = 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. พล็อตเวลาระหว่างการละเมิดบนคอลัมน์ และID ผู้ขับขี่บนแถว

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลแบบไม่มี Pivot

2. เปรียบเทียบจำนวนเงินค่าปรับสำหรับการละเมิดครั้งแรกและครั้งที่สอง มีความสัมพันธ์กันหรือไม่
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราจะใช้ลอจิกที่คล้ายคลึงกับคำถามก่อนหน้า เราจะใช้จำนวนการละเมิดเพื่อระบุหากแถวที่กำหนดเป็นการละเมิดครั้งแรกหรือครั้งที่สอง จากนั้นดึงจำนวนเงินค่าปรับออกมาตามนั้น

    1. หากสิ่งที่เราต้องการทำคือทำแผนภาพการกระจาย เราสามารถข้ามส่วน LOD และใช้แค่การคำนวณ IF ดังนี้

      จำนวนเงินค่าปรับครั้งที่ 1 = IF [Infraction Number] = "1st" THEN [Fine Amount] END

      จำนวนเงินค่าปรับครั้งที่ 2 = IF [Infraction Number] = "2nd" THEN [Fine Amount] END

    2. อย่างไรก็ตาม หากเราต้องการเปรียบเทียบและดูความแตกต่างของจำนวนเงินระหว่างค่าปรับครั้งแรกและครั้งที่สองสำหรับผู้ขับขี่คนเดียว เราจะพบปัญหาที่เป็น null เช่นเดียวกับวันที่ การใส่การคำนวณเหล่านี้ไว้ใน LOD แบบ FIXED ไม่ใช่เรื่องเสียหาย ดังนั้นจึงควรทำเช่นนี้ตั้งแต่ต้น ดังนี้

      จำนวนเงินค่าปรับครั้งที่ 1 = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

      จำนวนเงินค่าปรับครั้งที่ 2 = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Fine Amount] END ) }

      การคำนวณเหล่านี้ยังสามารถสร้างใน Tableau Prep Builder ได้ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับนิพจน์ LOD ใน Prep โปรดดู สร้างระดับของรายละเอียด อันดับ และการคำนวณไทล์

    3. สร้างแผนภาพการกระจายโดยจำนวนเงินค่าปรับครั้งที่ 1 บนคอลัมน์และจำนวนเงินค่าปรับครั้งที่ 2บนแถว และนำเส้นแนวโน้มแนวนอนออกมาดังเดิม

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลแบบไม่มี Pivot

3. ผู้ขับขี่รายใดจ่ายโดยรวมมากที่สุด ใครจ่ายน้อยที่สุด
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop โครงสร้างข้อมูลแบบมี Pivot ถือว่าเหมาะสมที่สุด สิ่งที่เราต้องทำคือนำ ID ผู้ขับขี่และจำนวนเงินค่าปรับมาไว้ในแผนภูมิแท่ง การรวมตามค่าเริ่มต้นเป็น SUM อยู่แล้ว ดังนั้นจำนวนเงินที่จ่ายทั้งหมดจากผู้ขับขี่จะพล็อตโดยอัตโนมัติ

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลแบบไม่มี Pivot

4. มีผู้ขับขี่กี่คนที่มีการละเมิดหลายประเภท
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop โครงสร้างข้อมูลแบบมี Pivot ถือว่าเหมาะสมที่สุด สิ่งที่เราต้องทำคือนำ ID ผู้ขับขี่และนับจำนวนที่แตกต่างกันของประเภทการละเมิด ออกมาเป็นแผนภูมิแท่ง และเราจะได้คำตอบ

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลแบบไม่มี Pivot

5. จำนวนเงินค่าปรับโดยเฉลี่ยสำหรับผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถคือเท่าใด
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราไม่สามารถแบ่งจำนวนเงินค่าปรับทั้งหมดเป็นสองส่วนได้ เนื่องจากผู้ขับขี่บางคนมีการละเมิดเพียงครั้งเดียวเท่านั้น เรายังไม่สามารถคำนวณค่าปรับโดยเฉลี่ยต่อผู้ขับขี่หนึ่งราย และหาค่าเฉลี่ยของค่าเหล่านั้นได้ เนื่องจากค่าเฉลี่ยโดยเฉลี่ยอาจทำให้เกิดความไม่สอดคล้องกันได้ แต่เราจำเป็นต้องคำนวณจำนวนเงินที่จ่ายทั้งหมดโดยผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถ แล้วหารด้วยจำนวนการละเมิดทั้งหมดที่เกี่ยวข้องกับค่าปรับเหล่านั้น

    1. อันดับแรก เราจำเป็นต้องระบุว่าผู้ขับขี่แต่ละคนมีการละเมิดครั้งที่สองหรือไม่ เราสามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าวันที่การละเมิดครั้งที่ 2 จะเป็น null หากไม่มีการละเมิดครั้งที่สอง และเริ่มสร้างการคำนวณดังนี้

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

      การดำเนินการนี้จะส่งคืนวันที่การละเมิดครั้งที่สองหากมีอยู่ หรือ "ไม่" หากไม่มีการละเมิดครั้งที่สอง

      หมายเหตุ: ส่วน STR ของการคำนวณนี้จำเป็นเพราะ IFNULL จำเป็นต้องมีประเภทข้อมูลที่สม่ำเสมอในการอภิปราย เพราะเราต้องการคืนสตริง "ไม่” สำหรับค่า null เราจำเป็นต้องแปลงวันที่เป็นสตริงด้วย

    2. ถัดไป เราต้องแปลงข้อมูลนี้เป็นจำนวนการละเมิด 1 หรือ 2 หากผลลัพธ์ของการคำนวณ IFNULL ของเราคือ "ไม่" ผู้ขับขี่ควรจะถูกทำเครื่องหมายว่ามีค่าปรับหนึ่งค่า ผลลัพธ์อื่นใดควรจะถูกทำเครื่องหมายว่ามีค่าปรับสองค่า การคำนวณ:

      จำนวนการละเมิด =

      IF IFNULL(STR([2nd Infraction Date]), 'no')= 'no' THEN 1 
      ELSE 2 
      END
      
    3. ตอนนี้เราจำเป็นต้องพิจารณาจำนวนค่าปรับโดยเฉลี่ย เรามีฟิลด์เดี่ยวสำหรับจำนวนค่าปรับแล้ว สิ่งที่เราต้องทำคือแยกด้วยฟิลด์จำนวนการละเมิด ใหม่ ใส่ทั้งสองค่าใน SUM ดังนี้ 

      ค่าปรับโดยเฉลี่ย = (SUM([Fine Amount]) / SUM([Number of Infractions])

  2. เราจำเป็นต้องกรองผู้ขับขี่ที่เข้าเรียนในโรงเรียนสอนขับรถออกด้วย ดูเหมือนว่าเราจะสามารถใช้ฟิลด์โรงเรียนการจราจร และกรองโรงเรียนการจราจร = ไม่ ได้ อย่างไรก็ตาม การทำเช่นนี้จะเป็นการกรองการละเมิดที่ไม่เกี่ยวข้องกับโรงเรียนการจราจร ไม่ใช่ผู้ขับขี่ที่ไม่เคยไปยังโรงเรียนการจราจร หากผู้ขับขี่เข้าเรียนในโรงเรียนสอนขับรถด้วยการละเมิดอย่างหนึ่งไม่ใช่การละเมิดอีกอย่าง เราไม่ต้องการให้พิจารณาการละเมิดอย่างใดอย่างหนึ่งในที่นี้ ซึ่งผู้ขับขี่คนนั้นเคยไปโรงเรียนสอนขับรถ ดังนั้นจึงไม่เหมาะกับตัววัดของคำถาม

    สิ่งที่เราต้องทำคือกรองผู้ขับขี่ที่เคยเข้าเรียนในโรงเรียนสอนขับรถออก ในแง่ของข้อมูล เราต้องการกรองผู้ขับขี่ที่มี "ใช่" สำหรับโรงเรียนสอนขับรถ ออกจากทุกแถว ไม่ว่าจะเกี่ยวข้องกับการละเมิดแบบใด มาสร้างการคำนวณของเราเป็นขั้นๆ โดยใช้มุมมองง่ายๆ เพื่อช่วยติดตามสิ่งที่เกิดขึ้นดังนี้

    1. ขั้นแรก เราต้องรู้ว่าผู้ขับขี่มี "ใช่" สำหรับโรงเรียนสอนขับรถหรือไม่ ลาก ID ผู้ขับขี่ไปยังแถว และโรงเรียนสอนขับรถไปยังคอลัมน์ เราจะได้ตารางข้อความที่มีข้อความ "Abc" ของตัวยึดตำแหน่งซึ่งระบุค่าที่เกี่ยวข้องสำหรับผู้ขับขี่แต่ละคน

    2. ขั้นตอนต่อไป เราต้องการสร้างการคำนวณที่จะระบุหากค่าของโรงเรียนสอนขับรถเป็น "ใช่" ขั้นตอนแรกของการคำนวณคือ

      ที่เข้าเรียนในโรงเรียนสอนขับรถ = CONTAINS([Traffic School), 'Yes')

      หากเรานำที่เข้าเรียนในโรงเรียนสอนขับรถไปยังแถบสีบนการ์ดเครื่องหมาย เราจะเห็นค่านั้นติดป้ายกำกับว่า "เท็จ" สำหรับทุกเครื่องหมายในคอลัมน์ "ไม่" และ "จริง" สำหรับทุกเครื่องหมายในคอลัมน์ "ใช่"

    3. อย่างไรก็ตาม สิ่งที่เราต้องการจริงๆ คือข้อมูลนี้ในระดับผู้ขับขี่ ไม่ใช่การละเมิด นิพจน์ LOD เหมาะสมอยู่แล้วเมื่อพยายามคำนวณผลลัพธ์ในระดับรายละเอียดที่แตกต่างจากโครงสร้างพื้นฐานของข้อมูล เราจะทำให้นิพจน์นี้เป็นนิพจน์ LOD แบบ FIXED แต่ตามที่รู้กัน ส่วนนิพจน์รวมของ LOD จะต้องรวมไว้ ก่อนหน้านี้ เราเคยใช้ MIN จะใช้ที่นี่ได้ด้วยไหม เราจะแก้ไขการคำนวณเป็น: 

      ที่เข้าเรียนในโรงเรียนสอนขับรถ = { FIXED [Driver ID] : MIN( CONTAINS([Traffic School], 'Yes'))}

      มุมมองของ ID ผู้ขับขี่ตามโรงเรียนสอนขับรถ ที่มีการเข้าเรียนในโรงเรียนสอนขับรถเป็นสี

      ด้วยการเปลี่ยนแปลงดังกล่าวในมุมมอง เราจะเห็นสิ่งที่ตรงกันข้ามกับสิ่งที่เราต้องการ ผู้ขับขี่ที่มีคำว่า "ไม่" จะถูกทำเครื่องหมายเป็น "เท็จ" ทั่วทั้งบอร์ด แต่เราต้องการให้ "ใช่" เป็น "จริง" ในทุกบันทึกสำหรับผู้ขับขี่คนนั้น MIN มีหน้าที่อะไรที่นี่ MIN จะเลือกคำตอบแรกตามลำดับตัวอักษรที่เป็น "ไม่"

    4. หากเราเปลี่ยนเป็น MAX ล่ะ MAX จะใช้คำตอบสุดท้ายตามลำดับตัวอักษรหรือไม่ เราจะแก้ไขการคำนวณเป็น: 

      ที่เข้าเรียนในโรงเรียนสอนขับรถ = { FIXED [Driver ID] : MAX ( CONTAINS( [Traffic School], 'Yes') ) }

      มุมมองของ ID ผู้ขับขี่ตามโรงเรียนสอนขับรถ ที่มีการเข้าเรียนในโรงเรียนสอนขับรถเป็นสี

      และนี่คือสิ่งที่เราได้ หากคนขับมี "ใช่" ที่ใดก็ได้ในข้อมูล พวกเขาจะถูกทำเครื่องหมายว่า "จริง" เนื่องจากเคยเข้าเรียนในโรงเรียนสอนขับรถ แม้แต่ในการละเมิดที่ไม่เกี่ยวกับโรงเรียนสอนขับรถ

    5. หากเรานำที่เข้าเรียนในโรงเรียนสอนขับรถไปยังแถบตัวกรอง และเลือกเฉพาะ "เท็จ” เราจะเหลือแค่ผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถ

  3. เพื่อที่จะตอบคำถามเดิม ด้วยตัวกรองของเราที่มีอยู่ เราจะแค่นำค่าปรับโดยเฉลี่ยไปยังแถบข้อความบนการ์ดเครื่องหมาย เนื่องจากเราสร้างการรวมลงในการคำนวณ การรวมบนฟิลด์จะเป็น AGG และเราไม่สามารถเปลี่ยนแปลงได้ ซึ่งเป็นไปตามคาด

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลแบบไม่มี Pivot

ประโยชน์ของข้อมูลแบบมี Pivot

หากเรารู้ว่าเราแค่ต้องใช้โครงสร้างนั้นตอบคำถามที่ตอบได้ง่ายเท่านั้น เราอาจยึดติดกับโครงสร้างข้อมูลเดิมจากบทแนะนำได้ อย่างไรก็ตาม ข้อมูลแบบมี Pivot นั้นยืดหยุ่นกว่า ถึงแม้ว่าจะต้องมีการคำนวณบ้าง แต่เมื่อเข้าที่แล้ว ชุดข้อมูลที่เป็นผลลัพธ์ก็เหมาะที่จะตอบคำถามที่กว้างขึ้น

ก้าวไปอีกขั้น การคำนวณเท่านั้น

หากคุณเข้าถึง Tableau Prep Builder ไม่ได้ล่ะ คุณโชคร้ายไปตลอดเลยหรือไม่หากคุณติดอยู่กับข้อมูลเดิม ไม่เลย

Tableau Desktop และนิพจน์ LOD สามารถตอบคำถามเชิงวิเคราะห์ของเราทั้งหมดได้ หากเราเชื่อมต่อไปยัง Traffic Violations.xlsx(ลิงก์จะเปิดในหน้าต่างใหม่) เดิม จะดูคล้ายคลึงกับชุดข้อมูลแบบมี Pivot มาก เพียงแค่ไม่มีฟิลด์จำนวนการละเมิดสำคัญ เราจะต้องเลียนแบบผลลัพธ์ของขั้นตอนการรวมผ่านนิพจน์ LOD

หมายเหตุ: คุณสามารถดาวน์โหลดเวิร์กบุ๊ก LOD Driver Infractions.twbx(ลิงก์จะเปิดในหน้าต่างใหม่) เพื่อดูโซลูชันในบริบท โปรดจำไว้ว่าอาจมีวิธีอื่นในการตีความการวิเคราะห์หรือหาคำตอบ

1. ระยะเวลาเป็นจำนวนวันระหว่างการละเมิดครั้งแรกและครั้งที่สองสำหรับผู้ขับขี่แต่ละคนคือกี่วัน
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราจะใช้ฟังก์ชัน DATEDIFF อีกครั้ง ฟังก์ชันนี้ต้องมีวันที่เริ่มต้นและวันที่สิ้นสุด ข้อมูลนี้มีอยู่ในข้อมูลของเรา แต่ทั้งหมดจะอยู่ในฟิลด์เดียว เราจำเป็นต้องดึงออกมาเป็นสองฟิลด์ เนื่องจากเราต้องการให้แน่ใจว่าค่าทั้งสองนี้สามารถใช้เปรียบเทียบผู้ขับขี่แต่ละคนได้ เราจึงต้องแก้ไขให้อยู่ในระดับ ID ผู้ขับขี่

    1. เพื่อที่จะหาวันที่การละเมิดครั้งแรก เราจะใช้การคำนวณนี้

      การละเมิดครั้งที่ 1 = { 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 จะเข้ามาเกี่ยวข้องในขั้นนี้ เราจะแก้ไขค่านี้เป็นระดับ ID ผู้ขับขี่ดังนี้

        การละเมิดครั้งที่ 2 = { FIXED [Driver ID] : MIN ( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

    3. และตอนนี้เราสามารถสร้างการคำนวณ DATEDIFF ดังนี้

      เวลาระหว่างการละเมิด = DATEDIFF('day', [1st Infraction], [2nd Infraction])

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลอีกสองโครงสร้าง

2. เปรียบเทียบจำนวนเงินค่าปรับสำหรับการละเมิดครั้งแรกและครั้งที่สอง มีความสัมพันธ์กันหรือไม่
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราจะใช้ลอจิกที่คล้ายคลึงกับเวอร์ชันข้อมูลแบบมี Pivot ของคำถามนี้ เราจะใช้ฟิลด์การละเมิดครั้งที่ 1และการละเมิดครั้งที่ 2 ที่เราสร้างสำหรับคำถามที่ 1 เพื่อระบุว่าแถวที่กำหนดเป็นการละเมิดครั้งแรกหรือครั้งที่สอง จากนั้นดึงจำนวนเงินค่าปรับออกมาตามนั้น

    1. หากสิ่งเดียวที่เราต้องการทำคือทำแผนภาพการกระจาย เราสามารถข้ามส่วน LOD และใช้แค่การคำนวณ IF ดังนี้

      จำนวนเงินค่าปรับครั้งที่ 1 = IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END

      จำนวนเงินค่าปรับครั้งที่ 2 = IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END

    2. อย่างไรก็ตาม หากเราต้องการเปรียบเทียบและดูความแตกต่างของจำนวนเงินระหว่างค่าปรับครั้งแรกและครั้งที่สองสำหรับผู้ขับขี่คนเดียว เราจะพบปัญหาเกี่ยวกับ null เช่นเดียวกับในโครงสร้างข้อมูลแรก การใส่การคำนวณเหล่านี้ไว้ใน LOD แบบ FIXED ไม่ใช่เรื่องเสียหาย ดังนั้นจึงควรทำเช่นนี้ตั้งแต่ต้น ดังนี้

      จำนวนเงินค่าปรับครั้งที่ 1 = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

      จำนวนเงินค่าปรับครั้งที่ 2 = {FIXED [Driver ID] : MIN( IF [2ndInfraction] = [Infraction Date] THEN [Fine Amount] END ) }

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลอีกสองโครงสร้าง

3. ผู้ขับขี่รายใดจ่ายโดยรวมมากที่สุด ใครจ่ายน้อยที่สุด
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราต้องเข้าใจบางอย่างเกี่ยวกับวิธีการใช้ LOD เท่านั้นก่อน ทั้งสองวิธีใช้ Tableau Prep กรองบันทึกที่ไม่ใช่การละเมิดครั้งแรกหรือครั้งที่สองสำหรับผู้ขับขี่ วิธี LOD ใน Tableau Desktop จะเก็บบันทึกทั้งหมด หมายความว่าหากเราสร้างการแสดงเป็นภาพ SUM(จำนวนเงินที่จ่าย)โดย ID ผู้ขับขี่ เวอร์ชัน Tableau Desktop เท่านั้นจะแสดงจำนวนของผู้ขับขี่ที่มีการละเมิดมากกว่าสองครั้งมากขึ้น หากต้องการได้ค่าจำนวนเงินที่จ่ายทั้งหมดจากข้อมูลสมบูรณ์ที่จับคู่กับวิธีอื่นๆ แทนที่จะใช้ฟิลด์จำนวนเงินค่าปรับ เราต้องรวมค่าปรับครั้งแรกและครั้งที่สองเหมือนที่เราทำกับโครงสร้างข้อมูลแรก

  2. โดยใช้ฟิลด์ที่เราสร้างขึ้นสำหรับคำถามที่ 2 เราจะเพิ่มจำนวนเงินค่าปรับสองรายการ ZN  ถือว่ามีความจำเป็นเพื่อป้องกันไม่ให้ผลลัพธ์มีค่าเป็นค่า null สำหรับผู้ขับขี่ที่มีการละเมิดเพียงครั้งเดียว การคำนวณ: 

    จำนวนเงินที่จ่ายทั้งหมด = [1st Fine Amount] + ZN([2nd Fine Amount])

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลอีกสองโครงสร้าง

4. มีผู้ขับขี่กี่คนที่มีการละเมิดหลายประเภท
  1. เพื่อที่จะตอบคำถามนี้ใน Tableau Desktop เราไม่สามารถทำเพียงแค่นำ ID ผู้ขับขี่และนับจำนวนที่แตกต่างกันของประเภทการละเมิดออกมา เนื่องจากชุดข้อมูลนี้มีการละเมิดเกินกว่าวินาที ผู้ขับขี่บางคนอาจมีการละเมิดมากกว่าสองประเภท หากต้องการจับคู่ผลลัพธ์กับวิธีอื่นๆ เราต้องจำกัดขอบเขตให้เหลือเพียงสองการละเมิดแรกเท่านั้น

  1. เราสามารถดึงประเภทการละเมิดครั้งที่ 1 และครั้งที่ 2 ออกมาใส่ด้วยนิพจน์ LOD เพื่อทำให้ FIXED กับผู้ขับขี่คนนั้น จากนั้นใช้การคำนวณ IF เพื่อนับประเภท ดังนี้

    1. ประเภทการละเมิดครั้งที่ 1 = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    2. ประเภทการละเมิดครั้งที่ 2 = { FIXED [Driver ID] : MIN ( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    3. จำนวนประเภทการละเมิด =

      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. จากนั้นเราสามารถพล็อตจำนวนประเภทการละเมิด กับ ID ผู้ขับขี่ และจัดเรียงแผนภูมิแท่งได้

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลอีกสองโครงสร้าง

5. จำนวนเงินค่าปรับโดยเฉลี่ยสำหรับผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถคือเท่าใด
  1. เพื่อตอบคำถามนี้ใน Tableau Desktop เราไม่สามารถแบ่งจำนวนเงินค่าปรับทั้งหมดเป็นสองส่วนได้ เนื่องจากผู้ขับขี่บางคนมีการละเมิดเพียงครั้งเดียวเท่านั้น เรายังไม่สามารถคำนวณค่าปรับโดยเฉลี่ยต่อผู้ขับขี่หนึ่งราย และหาค่าเฉลี่ยของค่าเหล่านั้นได้ เนื่องจากค่าเฉลี่ยโดยเฉลี่ยอาจทำให้เกิดความไม่สอดคล้องกันได้ แต่เราจำเป็นต้องคำนวณจำนวนเงินที่จ่ายทั้งหมดโดยผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถ แล้วหารด้วยจำนวนการละเมิดทั้งหมดที่เกี่ยวข้องกับค่าปรับเหล่านั้น

    1. อันดับแรก เราจำเป็นต้องระบุว่าผู้ขับขี่แต่ละคนมีการละเมิดครั้งที่สองหรือไม่ เราสามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าข้อมูลในฟิลด์ที่ "2" ทั้งหมดจะเป็น null หากไม่มีการละเมิดครั้งที่สอง และเริ่มสร้างการคำนวณ:

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

      การดำเนินการนี้จะส่งคืนประเภทการละเมิดหากมีอยู่ หรือ "ไม่" หากไม่มีการละเมิดครั้งที่สอง

    2. ถัดไป เราต้องแปลงข้อมูลนี้เป็นจำนวนการละเมิด 1 หรือ 2 หากผลลัพธ์ของการคำนวณ IFNULL ของเราคือ "ไม่" ผู้ขับขี่ควรจะถูกทำเครื่องหมายว่ามีค่าปรับหนึ่งค่า ผลลัพธ์อื่นใดควรจะถูกทำเครื่องหมายว่ามีค่าปรับสองค่า การคำนวณ:

      จำนวนการละเมิด =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1
      ELSE 2
      END
    3. สำหรับจำนวนเงินที่จ่ายทั้งหมด เราสามารถใช้การคำนวณจากคำถามที่ 3 ได้ หากต้องการนำทั้งหมดมารวมกัน เราจะนำจำนวนเงินค่าปรับทั้งหมดนี้มาหารด้วยฟิลด์ที่คำนวณจำนวนการละเมิดใหม่ของเรา เพื่อหาจำนวนเงินค่าปรับโดยเฉลี่ย ดังนี้

      ค่าปรับโดยเฉลี่ย = SUM([Total Amount Paid]) / SUM([Number of Infractions])

  2. เราจำเป็นต้องกรองผู้ขับขี่ที่เข้าเรียนในโรงเรียนสอนขับรถออกด้วย เนื่องจากชุดข้อมูลนี้ประกอบด้วยผู้ขับขี่บางคนที่มีการละเมิดครั้งที่สามหรือสี่ เราจึงไม่สามารถใช้วิธีการเดียวกันกับโครงสร้างข้อมูล Pivot ได้ แต่เราจะใช้วิธีเดียวกันกับข้อมูลแบบไม่มี Pivot ซึ่งสรุปไว้ที่นี่ดังนี้

    1. อันดับแรก เราต้องสร้างการคำนวณสองแบบเพื่อระบุว่าการละเมิดครั้งแรกและครั้งที่สองเกี่ยวข้องกับโรงเรียนสอนขับรถหรือไม่ ดังนี้ 

      โรงเรียนสอนขับรถครั้งที่ 1 = { FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

      โรงเรียนสอนขับรถครั้งที่ 2 = { FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

    2. จากนั้นเราจะเพิ่มค่าเหล่านั้นเพื่อให้ได้จำนวนการเข้าเรียนโรงเรียนสอนขับรถทั้งหมด ดังนี้ 

      จำนวนการเข้าเรียนโรงเรียนสอนขับรถ =

      (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. หากเราดึงจำนวนการเข้าเรียนโรงเรียนสอนขับรถ ไปยังพื้นที่มิติของแผงข้อมูล ค่า 0–2 จะแยกกัน

    4. ตอนนี้ หากเราจะกรองจำนวนการเข้าเรียนโรงเรียนสอนขับรถ เราสามารถเลือกเพียง 0 และรู้ว่าเราจะได้รับผู้ขับขี่ที่ไม่เคยเข้าเรียนในโรงเรียนสอนขับรถ

  3. เพื่อตอบคำถามเดิม เราจะป้อนค่าปรับโดยเฉลี่ยไปยังแถบ ข้อความบนการ์ดเครื่องหมาย เนื่องจากเราสร้างการรวมลงในการคำนวณ การรวมบนฟิลด์จะเป็น AGG และเราไม่สามารถเปลี่ยนแปลงได้ ซึ่งเป็นไปตามคาด

ผลลัพธ์จะเหมือนกับผลลัพธ์ที่มีโครงสร้างข้อมูลอีกสองโครงสร้าง

สิ่งสำคัญคือต้องจำไว้ว่าโซลูชันนี้มีการคำนวณแบบซ้อนและนิพจน์ LOD จำนวนมาก ประสิทธิภาพอาจเป็นปัญหาได้ ทั้งนี้ขึ้นอยู่กับขนาดของชุดข้อมูลและความซับซ้อนของข้อมูล

ไตร่ตรองเกี่ยวกับวิธีการ

แล้วควรไปเส้นทางไหน ทั้งหมดนั้นขึ้นอยู่กับคุณและเครื่องมือที่คุณมีอยู่

  • หากคุณต้องการหลีกเลี่ยง LOD ก็มีโซลูชันการสร้างข้อมูล แม้ว่าการคำนวณอาจจำเป็นสำหรับการวิเคราะห์บางอย่าง (การวิเคราะห์ใน Tableau Desktop)

  • หากคุณสามารถกำหนดรูปแบบข้อมูลและสะดวกที่จะคำนวณ รวมถึง LOD ตัวเลือกทางสายกลางจะมอบความยืดหยุ่นมากที่สุด (ก้าวไปอีกขั้น ข้อมูลแบบมี Pivot)

  • หากคุณสะดวกใช้ LOD จะมีผลกระทบต่อประสิทธิภาพน้อยที่สุด และ/หรือคุณไม่มีสิทธิ์เข้าถึง Tableau Prep การแก้ปัญหานี้ด้วย LOD เพียงอย่างเดียวคือตัวเลือกที่ใช้การได้ (ก้าวไปอีกขั้น การคำนวณเท่านั้น)

อย่างน้อยที่สุด ควรเข้าใจว่าการรวมใน Tableau Prep และนิพจน์ระดับรายละเอียดใน Tableau Desktop มีความสัมพันธ์กันและส่งผลต่อการวิเคราะห์ข้อมูลอย่างไร เช่นเดียวกับวิธีส่วนใหญ่ใน Tableau มีวิธีทำมากกว่าหนึ่งวิธี การสำรวจตัวเลือกต่างๆ ทั้งหมดสามารถช่วยนำแนวคิดมารวมกัน และให้คุณเลือกทางออกที่ดีที่สุดสำหรับตน

การคำนวณใช้

การละเมิดของผู้ขับขี่

  • เวลาระหว่างการละเมิด = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  • จำนวนเงินที่จ่ายทั้งหมด =[1st Fine Amount] + ZN([2nd Fine Amount])

  • จำนวนประเภทการละเมิด = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • จำนวนการละเมิด = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • ค่าปรับโดยเฉลี่ย = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  • จำนวนการเข้าเรียนโรงเรียนสอนขับรถ = (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)

การละเมิดของผู้ขับขี่แบบมี Pivot

  • การละเมิดครั้งที่ 1 = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "1st" THEN [Infraction Date] END)}

  • การละเมิดครั้งที่ 2 = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "2nd" THEN [Infraction Date] END)}

  • เวลาระหว่างการละเมิด = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • จำนวนเงินค่าปรับครั้งที่ 1 = {FIXED [Driver ID] : MIN( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

  • จำนวนการละเมิด = IF IFNULL(STR([2nd Infraction]), 'no')= 'no' THEN 1 ELSE 2 END

  • ค่าปรับโดยเฉลี่ย = SUM([Fine Amount])/SUM([Number of Infractions])

  • ที่เข้าเรียนในโรงเรียนสอนขับรถ = { FIXED [Driver ID] : MAX( CONTAINS([Traffic School], 'Yes'))}

การละเมิดของผู้ขับขี่ LOD

  • การละเมิดครั้งที่ 1 = {FIXED [Driver ID] : MIN([Infraction Date])}

  • การละเมิดครั้งที่ 2 = { FIXED [Driver ID] : MIN( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

  • เวลาระหว่างการละเมิด = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • จำนวนเงินค่าปรับครั้งที่ 1 = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • จำนวนเงินค่าปรับครั้งที่ 2 = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • จำนวนเงินที่จ่ายทั้งหมด = [1st Fine Amount] + ZN([2nd Fine Amount])

  • ประเภทการละเมิดครั้งที่ 1 = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • ประเภทการละเมิดครั้งที่ 2 = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • จำนวนประเภทการละเมิด = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • จำนวนการละเมิด = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • ค่าปรับโดยเฉลี่ย = SUM ([Total Amount Paid]) / SUM([Number of Infractions])

  • โรงเรียนสอนขับรถครั้งที่ 1 = {FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • โรงเรียนสอนขับรถครั้งที่ 2 = {FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • จำนวนการเข้าเรียนโรงเรียนสอนขับรถ = (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 ของ Ann Jackson ลูกค้าใช้จ่ายมากขึ้นในการซื้อครั้งแรกหรือครั้งที่สองหรือไม่(ลิงก์จะเปิดในหน้าต่างใหม่) และเคล็ดลับ Tableau Prep ของ Andy Kriebel การส่งคืนวันที่ซื้อครั้งแรกและครั้งที่สอง(ลิงก์จะเปิดในหน้าต่างใหม่) ซึ่งให้แรงบันดาลใจเริ่มต้นสำหรับบทแนะนำนี้ การคลิกลิงก์เหล่านี้จะนำคุณออกจากเว็บไซต์ Tableau Tableau ไม่สามารถรับผิดชอบความถูกต้องหรือความใหม่ของหน้าต่างๆ ที่ผู้ให้บริการภายนอกเป็นผู้ดูแลได้ โปรดติดต่อเจ้าของหากคุณมีคำถามเกี่ยวกับเนื้อหาของพวกเขา

ขอบคุณสำหรับข้อเสนอแนะของคุณส่งข้อเสนอแนะของคุณเรียบร้อยแล้ว ขอขอบคุณ