เชื่อมต่อข้อมูลเชิงพื้นที่ในฐานข้อมูล
คุณสามารถใช้คอลัมน์เชิงพื้นที่ที่จัดเก็บไว้ในฐานข้อมูลของคุณเพื่อสร้างการแสดงแผนที่เป็นภาพใน Tableau คุณสามารถเชื่อมต่อกับแหล่งข้อมูลเชิงพื้นที่ที่รองรับ และสร้างการแสดงเป็นภาพเพื่อวิเคราะห์ข้อมูลเชิงพื้นที่ได้ หรือคุณสามารถเชื่อมต่อกับการค้นหา SQL หรือ RAWSQL แบบปรับแต่งเองเพื่อทำการวิเคราะห์เชิงพื้นที่ขั้นสูง
Tableau รองรับการเชื่อมต่อโดยตรงกับข้อมูลเชิงพื้นที่โดยใช้ตัวเชื่อมต่อดังนี้
- Amazon Redshift
- Microsoft SQL Server
- PostgreSQL + PostGIS
- Pivotal Greenplum + PostGIS
- Oracle
- Snowflake
หากต้องการข้อมูลเกี่ยวกับการใช้ตัวเชื่อมต่อเหล่านี้ โปรดดูตัวอย่างตัวเชื่อมต่อ Microsoft SQL Server, PostgreSQL, Pivotal Greenplum Database, Oracle หรือ Snowflake
ข้อมูลเชิงพื้นที่และ SRID ที่รองรับ
Microsoft SQL Server รองรับเฉพาะข้อมูลเชิงพื้นที่ประเภทภูมิศาสตร์เท่านั้น
PostgreSQL + PostGIS, Oracle และ Pivotal Greenplum + PostGIS รองรับฟิลด์ประเภทภูมิศาสตร์และรูปทรงเรขาคณิต ฟิลด์รูปทรงเรขาคณิตต้องระบุประเภทภูมิศาสตร์ (เช่น POINT, LINESTRING) และ SRID เพื่อให้ระบบรู้จักในฐานะฟิลด์เชิงพื้นที่ ฟิลด์ข้อมูลภูมิศาสตร์ต้องระบุประเภทภูมิศาสตร์ที่จะให้ระบบรู้จัก
หมายเหตุ: ใน PostgreSQL + PostGIS คุณสามารถเชื่อมต่อกับตารางที่มีรูปทรงเรขาคณิตที่ผสมกันทั้ง 2 ประเภทได้ (จุด เส้น และรูปหลายเหลี่ยม) แต่ Tableau จะไม่แสดงผลข้อมูลเหล่านี้พร้อมกัน
ตัวเชื่อมต่อเหล่านี้รองรับ SRID ต่อไปนี้
NAD83 (EPSG:4269)
ETRS89 (EPSG:4258)
WGS84 (EPSG:4326)
ใน PostgreSQL + PostGIS นั้น SRID จะมีค่าเริ่มต้นเป็น WGS84 (EPSG: 4326) เสมอ
Tableau รองรับการเชื่อมต่อทั้งแบบสดและแบบแยกข้อมูลโดยใช้ตัวเชื่อมต่อเหล่านี้
เชื่อมต่อไปยังคอลัมน์เชิงพื้นที่
- เปิด Tableau และเชื่อมต่อกับข้อมูลของคุณ
หากต้องการข้อมูลเกี่ยวกับวิธีการเชื่อมต่อกับข้อมูลโดยใช้ตัวเชื่อมต่อที่รองรับ โปรดดู ตัวอย่างตัวเชื่อมต่อ Microsoft SQL Server, PostgreSQL, Oracle, Pivotal Greenplum Database หรือ Snowflake บนหน้าแหล่งข้อมูล ในแผงด้านซ้ายใต้ตาราง ให้ลากตารางที่มีข้อมูลเชิงพื้นที่มาไว้ในแคนวาส
คอลัมน์เชิงพื้นที่จะแสดงชื่อเดียวกันกับที่ใช้ในฐานข้อมูลของคุณ
ตอนนี้คุณพร้อมที่จะสร้างแผนที่ใน Tableau โดยใช้ข้อมูลเชิงพื้นที่แล้ว หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างแผนที่จากไฟล์เชิงพื้นที่ โปรดดู สร้างมุมมองแผนที่จากข้อมูลเชิงพื้นที่
ใช้ SQL แบบปรับแต่งเองและ RAWSQL เพื่อดำเนินการวิเคราะห์เชิงพื้นที่ขั้นสูง
เชื่อมต่อกับการค้นหา SQL แบบปรับแต่งเอง
- เปิด Tableau และเชื่อมต่อกับฐานข้อมูลของคุณ
บนหน้าแหล่งข้อมูล ในแผงด้านซ้าย ให้ลาก SQL แบบปรับแต่งเองใหม่มาไว้บนแคนวาส
พิมพ์หรือวางการค้นหาของคุณลงในกล่องโต้ตอบ “แก้ไข SQL แบบปรับแต่งเอง” ที่ปรากฏขึ้น หากต้องการดูตัวอย่าง SQL ที่ปรับแต่งเองที่คุณสามารถใช้กับข้อมูลเชิงพื้นที่ได้ โปรดดูตัวอย่างการค้นหา SQL แบบปรับแต่งเอง
เมื่อเสร็จแล้ว ให้คลิกตกลง
หากต้องการข้อมูลเพิ่มเติม โปรดดู เชื่อมต่อกับการค้นหา SQL แบบปรับแต่งเอง
ตัวอย่างการค้นหา SQL แบบปรับแต่งเอง
การค้นหาต่อไปนี้เป็นตัวอย่าง โปรดทราบว่าการค้นหา SQL แบบปรับแต่งเองจะแตกต่างกันไปตามแหล่งข้อมูล
หากข้อมูลของคุณมีจุด 2 ชุด เช่น โรงเรียนและสวนสาธารณะ และคุณต้องการแสดงว่ามีจุดตัดกันที่ใด
SELECT S.[name] as SchoolName, P.[name] as PubSpaceName, S.geog_schools.STBuffer(<Parameters.Radius>) as Geog_School, P.geog_pub_space as Geog_Pub_Space FROM TestSpatial.dbo.seattle_public_schools S LEFT JOIN TestSpatial.dbo.seattle_pub_space P ON S.geog_schools.STBuffer(<Parameters.Radius>) STIntersects(P.geog_pub_space) = 1
ตัวอย่างการค้นหานี้จะสร้างแถวสำหรับแต่ละกรณี ซึ่งรูปหลายเหลี่ยมของพื้นที่สาธารณะอยู่ภายในระยะรัศมี (เมตร) จากโรงเรียน ผลลัพธ์การค้นหาจะมีลักษณะดังนี้ในตารางกริดข้อมูล:
หมายเหตุ: ตัวอย่างนี้อ้างอิงถึงพารามิเตอร์ที่ชื่อ "Radius" โดยวัดระยะทาง (เมตร) และมีการตั้งค่าต่อไปนี้
- ประเภทข้อมูล: เลขทศนิยม
- ค่าปัจจุบัน: 600
- ค่าที่อนุญาต: ช่วง
- ต่ำสุด: 100
- สูงสุด 2,000
- ขนาดขั้น: 50
เมื่อใช้พารามิเตอร์นี้ คุณจะสามารถปรับความสัมพันธ์ระหว่างโรงเรียนและพื้นที่สาธารณะได้แบบไดนามิก
หากต้องการข้อมูลเพิ่มเติม โปรดดูหัวข้อ ใช้พารามิเตอร์ในการค้นหา SQL แบบปรับแต่งเอง
หากคุณต้องการข้อมูลบริเวณจุดใดจุดหนึ่งเท่านั้น
SELECT * FROM [Test_spatial_<username>].[dbo].[SDOT_Collisions] C WHERE C.geom.STIntersects(geography::STGeomFromText('POINT(-122.344706 47.650388)', 4326).STBuffer(1000))=1
ตัวอย่างการค้นหานี้จำกัดข้อมูลไว้ที่ 1000 เมตรรอบๆ POINT รัศมีสามารถเป็นพารามิเตอร์ได้ เช่นเดียวกับพารามิเตอร์ที่ใช้ในตัวอย่างแรก
หรือจะใช้สี่เหลี่ยมผืนผ้าแทนจุดและรัศมีก็ได้ ตัวอย่าง:
SELECT * FROM [Test_spatial_<username>].[dbo].[SDOT_Collisions] C
WHERE C.geom.STIntersects(geography::STGeomFromText('POLYGON ((-122.3625 47.6642,-122.3625 47.6493,-122.3427 47.6493,-122.3422 47.6642,-122.3625 47.6642))', 4326))=1
ลำดับที่คดเคี้ยวของจุดรูปหลายเหลี่ยม (ตามเข็มนาฬิกาเทียบกับทวนเข็มนาฬิกา) จะเป็นตัวกำหนดว่าคุณจะได้จุดชุดใด คุณสามารถย้อนกลับลำดับที่คดเคี้ยวด้วยฟังก์ชัน SQL Server ReorientObject()
หากคุณได้รับข้อผิดพลาดเกี่ยวกับประเภทข้อมูลที่ผสมกัน
SELECT *, F.geom.STGeometryType() as geomtype FROM [Test_spatial_<username>].[dbo].[us_historic_fire_perimeters_dd83] F
WHERE F.geom.STGeometryType() = 'MultiPolygon' OR F.geom.STGeometryType() = 'Polygon'
ตัวอย่างการค้นหานี้จะกรองข้อมูลเชิงพื้นที่ประเภทรูปทรงเรขาคณิตออกไป เนื่องจาก Tableau ไม่สามารถแสดงผลข้อมูลเชิงพื้นที่ประเภทรูปทรงเรขาคณิตสำหรับการเชื่อมต่อ Microsoft SQL Server ได้ คุณสามารถเลือกประเภทเชิงพื้นที่อื่นๆ ได้เช่นกัน
หากข้อมูลของคุณแสดงผลช้าเกินไปใน Tableau
SELECT [Id], [OBJECTID], [fire_num], [year_], [acres], [fire_name], [unit_id], [Shape_Leng], [Shape_Area], [geom].Reduce(500) as SimpleGeom
FROM [Test_spatial_<username>].[dbo].[us_historic_fire_perimeters_dd83]
WHERE [geom].Reduce(500).STGeometryType() = 'MultiPolygon' OR [geom].Reduce(500).STGeometryType() = 'Polygon'
ตัวอย่างการค้นหานี้อาจลดขนาดข้อมูลไปมาก (บางออบเจ็กต์จะถูกลดเป็นจุดและจะถูกทิ้งไป)
ใช้ RAWSQL
หากต้องการใช้ RAWSQL กับข้อมูลเชิงพื้นที่ คุณสามารถสร้างฟิลด์ที่คำนวณได้โดยใช้ฟังก์ชัน RAWSQL_SPATIAL หรือ RAWSQLAGG_SPATIAL ตัวอย่าง:
RAWSQL_SPATIAL("Select %1.STIntersection(%2.STBuffer(200))",[school_geom], [park_geom])
สูตรนี้จะส่งคืนข้อมูลเชิงพื้นที่ที่ไม่ซ้ำกันโดยอิงตามจุดตัดของ 2 ค่า
RAWSQLAGG_SPATIAL("ST_ConvexHull(ST_Collect(%1))", [Geog])
RAWSQLAGG_SPATIAL("ST_ConcaveHull(ST_Collect(%1), %2, false)", [Geog], [ParameterValue])
แต่ละรายการจะส่งคืนพื้นที่ขอบเขตรอบจุดข้อมูลที่ระบุ ConcaveHull เป็นพื้นที่ขอบเขตขั้นต่ำโดยอิงตามความแม่นยำ ซึ่งก็คือค่าพารามิเตอร์ในฟังก์ชันนี้
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการใช้ RAWSQL กับข้อมูลเชิงพื้นที่ โปรดดู ฟังก์ชันส่งผ่าน (RAWSQL) หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างฟิลด์ที่คำนวณ โปรดดู สร้างฟิลด์ที่คำนวณ
หมายเหตุ: ฟังก์ชันเชิงพื้นที่ RAWSQL จะใช้งานไม่ได้เมื่อเชื่อมต่อกับ Oracle
หมายเหตุ: อาจเกิดข้อผิดพลาดได้เมื่อใช้ RAWSQL เฉพาะกับฟังก์ชัน PostGIS เมื่อใช้ PostgreSQL + PostGIS
การแก้ปัญหาเกี่ยวกับการเชื่อมต่อเชิงพื้นที่
ปัญหาด้านประสิทธิภาพ
เมื่อทำงานกับคอลัมน์เชิงพื้นที่ที่รวมเข้าด้วยกันซึ่งมีระเบียนข้อมูลจำนวนมาก อาจเกิดเครื่องหมายซ้ำได้ ซึ่งอาจส่งผลให้ประสิทธิภาพการทำงานช้าลง
หากต้องการปรับปรุงประสิทธิภาพ ให้แยกแหล่งข้อมูลที่รวมเข้าด้วยกัน หากต้องการข้อมูลเพิ่มเติม โปรดดูแยกข้อมูลของคุณ
ข้อความแสดงข้อผิดพลาดและวิธีแก้ไขสำหรับ Microsoft SQL Server
ข้อความแสดงข้อผิดพลาด:
เกิดข้อผิดพลาดขณะสื่อสารกับแหล่งข้อมูล '<data source name>’ ของ Microsoft SQL Server
การเชื่อมต่อไม่ดี: Tableau ไม่สามารถเชื่อมต่อกับแหล่งข้อมูลได้
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]การแคลชประเภทตัวถูกดำเนินการ: รูปทรงเรขาคณิตไม่เข้ากันกับภูมิศาสตร์
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]ไม่สามารถเตรียมคำสั่งได้
วิธีแก้ปัญหา:
ส่งออกข้อมูลเชิงพื้นที่จาก Microsoft SQL Server ไปยัง Shapefile แล้วเชื่อมต่อใน Tableau การเชื่อมต่อไฟล์เชิงพื้นที่จะผ่านกระบวนการแปลงข้อมูลที่รองรับการคาดการณ์หลายพันรายการ
ส่งออกข้อมูลจาก Microsoft SQL Server และแปลงข้อมูลโดยใช้เครื่องมือ GIS เช่น QGIS หรือ ArcGIS จากนั้นจึงโหลดตารางกลับเข้าไปใน Microsoft SQL Server
ข้อความแสดงข้อผิดพลาด:
ไม่สามารถดำเนินการให้เสร็จสิ้นได้
การดำเนินการเชิงพื้นที่ส่งผลให้เกิด MixedGeometry หรือ MixedGeography ซึ่ง Tableau ยังไม่รองรับ
การดำเนินการเชิงพื้นที่ส่งผลให้เกิด MixedGeometry หรือ MixedGeography ซึ่ง Tableau ยังไม่รองรับ
วิธีแก้ปัญหา:
ใช้ SQL แบบกำหนดเองเพื่อกรองข้อมูล หากต้องการข้อมูลเพิ่มเติม โปรดดู ตัวอย่าง SQL แบบปรับแต่งเองในหัวข้อหากคุณได้รับข้อผิดพลาดเกี่ยวกับประเภทข้อมูลที่ผสมกัน
ข้อความแสดงข้อผิดพลาด:
เกิดข้อผิดพลาดขณะสื่อสารกับแหล่งข้อมูล '<data source name>' ของ Microsoft SQL Server
การเชื่อมต่อไม่ดี: Tableau ไม่สามารถเชื่อมต่อกับแหล่งข้อมูลได้
ไม่สามารถใช้ฟังก์ชันการรวมในนิพจน์ที่มีการรวมหรือการค้นหาย่อยได้
วิธีแก้ปัญหา:
การวัดผลแบบไม่รวมในการแสดงเป็นภาพ: ให้เลือกการวิเคราะห์ จากนั้นจึงล้างการวัดผลแบบรวม
ข้อความแสดงข้อผิดพลาดและวิธีแก้ปัญหาสำหรับ PostgreSQL + PostGIS, Oracle และ Pivotal Greenplum + PostGIS
ข้อความแสดงข้อผิดพลาด:
เกิดข้อผิดพลาดขณะสื่อสารกับแหล่งข้อมูล '<data source name>' ของ PostgreSQL
การเชื่อมต่อไม่ดี: Tableau ไม่สามารถเชื่อมต่อกับแหล่งข้อมูลได้
ข้อผิดพลาด: การดำเนินการบนรูปทรงเรขาคณิต SRID แบบผสม
เกิดข้อผิดพลาดขณะดำเนินการค้นหา
<query> จาก <datasource>
ข้อผิดพลาด: การดำเนินการบนรูปทรงเรขาคณิต SRID แบบผสม
เกิดข้อผิดพลาดขณะดำเนินการค้นหา
SELECT ST_ForceCollection(ST_Collect("mixed_SRID_geography"."location"::geometry)) AS "clct:location:nk"
FROM "public"."mixed_SRID_geography" "mixed_SRID_geography"HAVING (COUNT(1) > 0)
วิธีแก้ปัญหา:
การวัดผลแบบไม่รวมในการแสดงเป็นภาพ: ให้เลือกการวิเคราะห์ จากนั้นจึงล้างการวัดผลแบบรวม การดำเนินการนี้จะลบข้อความแสดงข้อผิดพลาดและข้อมูลที่ไม่รองรับ SRID
ใน PostgreSQL + PostGIS คุณสามารถเชื่อมต่อกับตารางที่มี SRID ที่ไม่รองรับได้ แต่คอลัมน์รูปทรงเรขาคณิตจะแสดงเป็น "ไม่ทราบ"
วิธีแก้ปัญหา:
ส่งออกข้อมูลเชิงพื้นที่จาก PostgreSQL + PostGIS ไปยัง Shapefile แล้วเชื่อมต่อใน Tableau การเชื่อมต่อไฟล์เชิงพื้นที่จะผ่านกระบวนการแปลงข้อมูลที่รองรับการคาดการณ์หลายพันรายการ
ส่งออกข้อมูลจาก PostgreSQL + PostGIS และแปลงข้อมูลโดยใช้เครื่องมือ GIS เช่น QGIS หรือ ArcGIS จากนั้นจึงโหลดตารางกลับเข้าไปใน PostgreSQL + PostGIS
ข้อความแสดงข้อผิดพลาด:
ข้อผิดพลาด: ขนาดอาร์เรย์เกินขนาดสูงสุดที่อนุญาต (1073741823); เกิดข้อผิดพลาดขณะดำเนินการค้นหา"
SELECT ST_Collect(geom) FROM <data source>
วิธีแก้ปัญหา:
เขียนการคำนวณใหม่ให้มีประสิทธิภาพมากขึ้น โปรดดูแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างการคำนวณใน Tableau หรือสร้างการคำนวณที่มีประสิทธิภาพ
ตัวอย่าง - สร้างแผนที่จากข้อมูลเชิงพื้นที่ของ Microsoft SQL Server
ตัวอย่างต่อไปนี้จะสาธิตวิธีสร้างแผนที่ด้านล่าง ซึ่งแสดงโรงเรียนที่อยู่ภายในระยะ 600 เมตรจากสวนสาธารณะในเมืองซีแอตเทิล รัฐวอชิงตัน
ตัวอย่างนี้ใช้การเชื่อมต่อ Microsoft SQL Server กับฐานข้อมูลที่ชื่อว่า TestSpatial โดยใช้ตารางต่อไปนี้จากฐานข้อมูลนี้
- seattle_schools
- seattle_public_space
ขั้นตอนที่ 1: เชื่อมต่อ
เปิด Tableau Desktop และเชื่อมต่อกับ Microsoft SQL Server
บนหน้าแหล่งข้อมูล ในแผงด้านซ้าย ให้ลาก SQL แบบปรับแต่งเองใหม่มาไว้บนแคนวาส
พิมพ์หรือวางการค้นหาลงในกล่องโต้ตอบ “แก้ไข SQL แบบปรับแต่งเอง” ที่ปรากฏขึ้น
ในตัวอย่างนี้จะใช้การค้นหาต่อไปนี้
SELECT S.[name] as SchoolName, P.[name] as PubSpaceName, S.geog_schools.STBuffer(<Parameters.Radius>) as Geog_School, P.geog_pub_space as Geog_Pub_Space FROM TestSpatial.dbo.seattle_public_schools S FULL JOIN TestSpatial.dbo.seattle_public_space P ON S.geog_schools.STBuffer(<Parameters.Radius>) STIntersects(P.geog_pub_space) = 1
หมายเหตุ: ตัวอย่างนี้อ้างอิงถึงพารามิเตอร์ที่ชื่อ "Radius" หากต้องการข้อมูลเพิ่มเติม โปรดดูหัวข้อ ใช้พารามิเตอร์ในการค้นหา SQL แบบปรับแต่งเอง
ผลลัพธ์การค้นหาจะมีลักษณะดังนี้
ขั้นตอนที่ 2: สร้างแผนที่
ไปที่เวิร์กชีตใหม่
ในแผงข้อมูล ให้ดับเบิลคลิกที่ฟิลด์เชิงพื้นที่
ในตัวอย่างนี้จะใช้ Geog_School เมื่อดับเบิลคลิก ระบบจะเพิ่มลงใน “รายละเอียด” บนการ์ดเครื่องหมายโดยอัตโนมัติ และสร้างมุมมองแผนที่ขึ้น
ในแผงข้อมูล ให้ลากฟิลด์มิติข้อมูลไปยังป้ายกำกับบนการ์ดเครื่องหมาย ในตัวอย่างนี้จะใช้ชื่อโรงเรียน
เลือกการวิเคราะห์ > สร้างฟิลด์ที่คำนวณ
ในตัวแก้ไขการคำนวณที่เปิดขึ้น ให้ทำดังนี้
ตั้งชื่อฟิลด์ที่คำนวณ โดยในตัวอย่างนี้ ฟิลด์ที่คำนวณจะชื่อว่าจุดตัด
ป้อนสูตร RAWSQL ลงไป ตัวอย่างนี้จะใช้สูตรต่อไปนี้:
RAWSQL_SPATIAL ("Select %1.STIntersection(%2)", [Geog_School], [Geog_Pub_Space])
สูตรนี้จะส่งคืนข้อมูลเชิงพื้นที่ที่ไม่ซ้ำกันโดยอิงตามจุดตัดของรูปทรงเรขาคณิต 2 รูป
เมื่อเสร็จแล้ว ให้คลิกตกลง
เลือกการวิเคราะห์ จากนั้นจึงล้างการวัดผลแบบรวม
จากแผงข้อมูล ให้ลากฟิลด์ที่คำนวณใหม่ (ในกรณีนี้คือจุดตัด) ไปยังเลเยอร์ใหม่บนเวิร์กชีต
แผนที่จะอัปเดตข้อมูลด้วยเลเยอร์ใหม่ของรูปหลายเหลี่ยมจากฟิลด์จุดตัด เครื่องหมายจะเป็นรูปทรงเชิงพื้นที่ที่ไม่ซ้ำกันเนื่องจากใช้สูตร RAWSQLในแผงข้อมูล ให้ลากฟิลด์มิติข้อมูลไปยังรายละเอียดบนการ์ดเครื่องหมาย วิธีนี้จะทำให้เครื่องหมายไม่รวมเข้าด้วยกัน
ในตัวอย่างนี้จะใช้มิติข้อมูล PubSpaceName
ในแผงข้อมูล ให้ลากฟิลด์มิติข้อมูลเดียวกันนั้นไปยังสีบนการ์ดเครื่องหมาย
ในตัวอย่างนี้ พื้นที่สาธารณะแต่ละแห่งได้รับการกำหนดสีไว้แล้ว
จัดรูปแบบแผนที่ หากต้องการข้อมูลเพิ่มเติม โปรดดูหัวข้อ ปรับแต่งรูปลักษณ์ของแผนที่ของคุณ
ในตัวอย่างนี้จะใช้การจัดรูปแบบต่อไปนี้
บัฟเฟอร์ของโรงเรียน (Geog_School) เป็นสีเทา
ป้ายกำกับชื่อโรงเรียนเป็นสีขาว
รูปแบบพื้นหลังของแผนที่ตั้งค่าเป็นสีเข้ม
เลเยอร์ถนนและทางหลวงจะแสดงบนแผนที่พื้นหลัง
ตอนนี้แผนที่ก็เสร็จสมบูรณ์แล้ว
ดูเพิ่มเติม
สร้าง Tableau Maps จากไฟล์เชิงพื้นที่
เชื่อมต่อกับการค้นหา SQL แบบปรับแต่งเอง