หน้านี้อธิบายแนวคิดและการใช้บทบาทในตารางข้อมูลในแผนภูมิ
บทบาทคืออะไร
ตอนนี้ออบเจ็กต์ DataTable และ DataView ของ Google รองรับบทบาทของคอลัมน์ที่กำหนดไว้อย่างชัดแจ้งแล้ว บทบาทคอลัมน์อธิบายวัตถุประสงค์ของข้อมูลในคอลัมน์นั้น เช่น คอลัมน์อาจเก็บข้อมูลที่อธิบายข้อความเคล็ดลับเครื่องมือ คำอธิบายประกอบจุดข้อมูล หรือตัวบ่งชี้ความไม่แน่นอน บทบาทส่วนใหญ่ของคอลัมน์จะมีผลกับคอลัมน์ "ข้อมูล" ที่นำหน้าอยู่ ไม่ว่าจะอยู่ก่อนคอลัมน์นั้นหรืออยู่ก่อนคอลัมน์บทบาทกลุ่มแรกที่อยู่ติดกัน ตัวอย่างเช่น คุณอาจมีคอลัมน์ 2 คอลัมน์ตามหลังคอลัมน์ "ข้อมูล" คอลัมน์หนึ่งสำหรับ "เคล็ดลับเครื่องมือ" และอีกคอลัมน์สำหรับ "คำอธิบายประกอบ" แต่หลังจากคอลัมน์ "domain" โดยทั่วไปแล้ว เรายังอนุญาตให้มีบทบาทคอลัมน์ "annotation" และ "annotationText" ด้วย
หมายเหตุ: หากคุณต้องการควบคุมเนื้อหาของเคล็ดลับเครื่องมือที่ปรากฏเมื่อผู้ใช้วางเมาส์เหนือแผนภูมิ โปรดดูเคล็ดลับเครื่องมือ
ก่อนหน้านี้มีเพียง 2 บทบาทที่พร้อมใช้งานสำหรับคอลัมน์ ได้แก่ "โดเมน" ซึ่งระบุค่าแกนหลัก และ "ข้อมูล" ซึ่งระบุความสูงของแท่ง ความกว้างของชิ้นส่วนแผนภูมิ และอื่นๆ บทบาทเหล่านี้ได้รับการกำหนดบทบาทโดยปริยายตามลำดับและประเภทของคอลัมน์ในตาราง อย่างไรก็ตาม ความสามารถในการมอบหมายบทบาทคอลัมน์อย่างชัดแจ้งทำให้เพิ่มคอลัมน์ที่ไม่บังคับซึ่งมีฟีเจอร์ใหม่ๆ ที่น่าสนใจในแผนภูมิได้แล้ว เช่น ป้ายกำกับคำอธิบายประกอบที่กำหนดเอง ข้อความโฮเวอร์ และแถบความไม่แน่นอน
หากคุณไม่ได้มอบหมายบทบาทของคอลัมน์อย่างชัดแจ้ง บทบาทของคอลัมน์จะได้รับการอนุมานตามลำดับของคอลัมน์ในตารางตามข้อกำหนดรูปแบบข้อมูลของแผนภูมิ หน้านี้จะแสดงบทบาทที่คุณสามารถกำหนดอย่างชัดแจ้ง และวิธีมอบหมายบทบาท
ต่อไปนี้คือการเปรียบเทียบสิ่งที่คุณทำได้กับแผนภูมิเส้นโดยใช้เฉพาะบทบาทที่อนุมานเริ่มต้นเท่านั้น เมื่อเทียบกับบทบาทเพิ่มเติมที่มอบหมายอย่างชัดแจ้ง
รูปแบบตารางข้อมูลแผนภูมิเส้น
คอลัมน์ 0 | คอลัมน์ที่ 1 | ... | คอลัมน์ N | |
---|---|---|---|---|
วัตถุประสงค์ |
|
ค่าบรรทัดที่ 1 | ... | ค่าบรรทัด N |
ประเภทข้อมูล |
|
ตัวเลข | ... | ตัวเลข |
บทบาท | โดเมน | ข้อมูล | ... | ข้อมูล |
บทบาทในคอลัมน์ ที่รองรับซึ่งไม่บังคับ |
|
|
... |
|
แผนภูมิที่ไม่มีบทบาทคอลัมน์ที่ชัดเจน | แผนภูมิที่มีบทบาทคอลัมน์ที่ชัดเจน |
---|---|
|
|
แผนภูมินี้ไม่ได้แสดงบทบาทอย่างชัดเจน ดังนั้นจึงใช้ได้เฉพาะข้อมูลพื้นฐานและเค้าโครงคอลัมน์ของโดเมนที่แสดงด้านบน ตารางข้อมูล: var data = new google.visualization.DataTable(); data.addColumn('string', 'Month'); // Implicit domain label col. data.addColumn('number', 'Sales'); // Implicit series 1 data col. data.addRows([ ['April',1000], ['May', 1170], ['June', 660], ['July', 1030] ]); |
แผนภูมินี้จะมอบหมายบทบาทอย่างชัดเจน จึงจะเพิ่มคอลัมน์ที่ไม่บังคับได้ แผนภูมินี้มีคอลัมน์ที่ไม่บังคับสำหรับแนบคำอธิบายประกอบ, descriptionText, ช่วงเวลา และความแน่นอน
ตารางข้อมูล: var data = new google.visualization.DataTable(); data.addColumn('string', 'Month'); // Implicit domain label col. data.addColumn('number', 'Sales'); // Implicit series 1 data col. data.addColumn({type:'number', role:'interval'}); // interval role col. data.addColumn({type:'number', role:'interval'}); // interval role col. data.addColumn({type:'string', role:'annotation'}); // annotation role col. data.addColumn({type:'string', role:'annotationText'}); // annotationText col. data.addColumn({type:'boolean',role:'certainty'}); // certainty col. data.addRows([ ['April',1000, 900, 1100, 'A','Stolen data', true], ['May', 1170, 1000, 1200, 'B','Coffee spill', true], ['June', 660, 550, 800, 'C','Wumpus attack', true], ['July', 1030, null, null, null, null, false] ]); |
บทบาทที่ใช้ได้
ตารางต่อไปนี้แสดงบทบาททั้งหมดที่ Google Charts สนับสนุน แผนภูมิบางประเภทไม่รองรับบทบาททั้งหมด เอกสารประกอบของแผนภูมิแต่ละรายการจะอธิบายว่าบทบาทใดที่ใช้ได้และบทบาทใด โดยบทบาทจะแสดงผลแตกต่างกันสำหรับแผนภูมิประเภทต่างๆ
บทบาท | คำอธิบาย | ตัวอย่าง |
---|---|---|
คำอธิบายประกอบ | ข้อความที่จะแสดงในแผนภูมิใกล้จุดข้อมูลที่เกี่ยวข้อง ข้อความจะแสดงโดยไม่มีการโต้ตอบของผู้ใช้ คำอธิบายประกอบและข้อความคำอธิบายประกอบสามารถกำหนดให้ได้ทั้งจุดข้อมูลและหมวดหมู่ (ป้ายกำกับแกน) คำอธิบายประกอบมี 2 รูปแบบ ได้แก่ จุด (ค่าเริ่มต้น) ที่วาดคำอธิบายประกอบใกล้กับจุดที่ระบุ และเส้น ซึ่งจะวาดข้อความคำอธิบายประกอบบนเส้นที่ตัดแบ่งพื้นที่แผนภูมิ คุณระบุรูปแบบเส้นได้โดยตั้งค่าตัวเลือกแผนภูมิ ประเภทข้อมูล: สตริง ค่าเริ่มต้น: สตริงว่าง |
ข้อมูล: label: 'Year', 'Sales', null, null, 'Expenses', null, null
role: โดเมน, ข้อมูล, คำอธิบายประกอบ, คำอธิบายประกอบ, ข้อมูล, คำอธิบายประกอบ, '2004', 1000, null, null, 400, null, null, '200
"A" และ "B" ในแผนภูมินี้คือหมายเหตุ วางเมาส์เหนือคำอธิบายประกอบเพื่อดูข้อความคำอธิบายประกอบ โปรดทราบว่าคุณต้องวางเมาส์เหนือคำอธิบายประกอบเพื่อแสดงค่า descriptionText ไม่ใช่จุดข้อมูลที่นำไปใช้ ระบบยอมรับค่า Null สำหรับทั้งเซลล์คำอธิบายประกอบและเซลล์ข้อความคำอธิบายประกอบ อย่างไรก็ตาม หากคุณมีค่า assetText คุณจะต้องมีค่าคำอธิบายประกอบที่เชื่อมโยงกัน |
annotationText | ข้อความแบบขยายที่จะแสดงเมื่อผู้ใช้วางเมาส์เหนือคำอธิบายประกอบที่เกี่ยวข้อง คุณกำหนดคำอธิบายประกอบและข้อความคำอธิบายประกอบให้กับทั้งจุดข้อมูลและหมวดหมู่ (ป้ายกำกับแกน) ได้ คุณต้องมีคอลัมน์คำอธิบายประกอบ คุณต้องมีคอลัมน์คำอธิบายประกอบด้วย ในทางตรงกันข้าม ข้อความเคล็ดลับเครื่องมือจะปรากฏเมื่อผู้ใช้วางเมาส์เหนือจุดข้อมูลที่เกี่ยวข้องในแผนภูมิ ประเภทข้อมูล: สตริง ค่าเริ่มต้น: สตริงว่าง |
|
ความแน่นอน | ระบุว่าจุดข้อมูลเป็นค่าที่แน่นอนหรือไม่ วิธีการแสดงจะขึ้นอยู่กับประเภทของแผนภูมิ เช่น อาจแสดงด้วยเส้นประหรือสีเติมเป็นลายเส้น สำหรับแผนภูมิเส้นและแผนภูมิพื้นที่ กลุ่มระหว่างจุดข้อมูล 2 จุดจะแน่นอนหากและต่อเมื่อจุดข้อมูลทั้ง 2 จุดตรงกัน ประเภทข้อมูล: บูลีน เมื่อเป็น "จริง" มีความแน่นอน ส่วน "เท็จ" คือไม่แน่นอน ค่าเริ่มต้น: true |
|
การเน้นย้ำ | เน้นจุดข้อมูลในแผนภูมิที่ระบุ แสดงเป็นเส้นหนาและ/หรือจุดขนาดใหญ่ สำหรับแผนภูมิเส้นและแผนภูมิพื้นที่ ระบบจะเน้นส่วนระหว่างจุดข้อมูล 2 จุดหากมีการเน้นจุดข้อมูลทั้ง 2 จุดเท่านั้น ประเภทข้อมูล: บูลีน ค่าเริ่มต้น: เท็จ |
ข้อมูล: label: 'Year', 'Sales', null, 'Expenses', null role: domain, data, emphasis, data, emphasis '2004', 1000, true, 400, false '2005', 1170, true, 460, true '2006', 660, false, 1120, true '2007', 1030, false, 540, true ในแผนภูมินี้ ชุด "ยอดขาย" ประกอบด้วยส่วนที่เน้นหนึ่งส่วน ซึ่งกำหนดโดยคอลัมน์ที่ 3, แถวที่ 1 และ 2 กลุ่ม "ค่าใช้จ่าย" ประกอบด้วยส่วนที่เน้นสองส่วน กำหนดโดยคอลัมน์ที่ 5, แถว 2, 3 และ 4 โปรดสังเกตการเน้นวิธีเน้นย้ำจุดเชื่อมโยงทั้ง 2 จุด |
ช่วงเวลา | ระบุช่วงข้อมูลที่เป็นไปได้สำหรับจุดที่เฉพาะเจาะจง ช่วงมักจะแสดงเป็นตัวบ่งชี้ช่วงของรูปแบบ I-bar คอลัมน์ช่วงคือคอลัมน์ตัวเลข เพิ่มคอลัมน์ช่วงเป็นคู่เพื่อทำเครื่องหมายค่าต่ำสุดและสูงของแถบ ควรเพิ่มค่าช่วงในการเพิ่มมูลค่าจากซ้ายไปขวา ประเภทข้อมูล: ตัวเลข ค่าเริ่มต้น: ไม่ช่วงเวลา |
ข้อมูล: label: 'Day', 'Stock value', null, null role: domain, data, interval, interval 'Mon', 38, 20, 45 'Tue', 55, 31, 66 'Wed', 77, 50, 80 'Thurs', 66, 50, 77 ในแผนภูมินี้ ค่าช่วงจะกำหนดแท่ง I-B รอบจุดต่างๆ ค่าจะเพิ่มขึ้นจากซ้ายไปขวา ช่วงสูงสุดและต่ำสุดรอบจุดจะทำเครื่องหมายไว้ที่ด้านบนและด้านล่างของแถบ หมายเหตุ: สำหรับรายละเอียดทั้งหมดเกี่ยวกับช่วงเวลา ให้ดูที่ช่วงเวลา |
ขอบเขต | ระบุว่าจุดอยู่ในหรืออยู่นอกขอบเขต หากจุดอยู่นอกขอบเขต ก็ตัดส่วนนั้นออกไปเลย สำหรับแผนภูมิเส้นและแผนภูมิพื้นที่ กลุ่มระหว่างจุดข้อมูล 2 จุดอยู่ในขอบเขตหากปลายทางอันใดอันหนึ่งอยู่ในขอบเขต ประเภทข้อมูล: บูลีน โดยที่ "จริง" หมายถึงอยู่ในขอบเขต ค่าเริ่มต้น: true |
ข้อมูล: label: 'Year', 'Sales', null, 'Expenses', null role: domain, data, scope, data, scope '2004', 1000, false, 400, true '2005', 1170, false, 460, false '2006', 660, true, 1120, false '2007', 1030, true, 540, false คอลัมน์ขอบเขตแรกใช้กับคอลัมน์ข้อมูล "ยอดขาย" ทางด้านซ้าย กลุ่มแรกแสดงผลอยู่นอกขอบเขตเนื่องจากจุดขอบเขตทั้ง 2 จุดอยู่นอกขอบเขต คอลัมน์ขอบเขตที่ 2 จะใช้กับคอลัมน์ข้อมูล "ค่าใช้จ่าย" ทางด้านซ้าย ส่วนแรกได้รับการทำเครื่องหมายเป็นอยู่ในขอบเขตเนื่องจากมีจุดขอบเขตหนึ่งจุดอยู่ในขอบเขต ส่วนที่เหลือของเส้นอยู่นอกขอบเขตเพราะจุดอื่นๆ ทั้งหมดถูกทำเครื่องหมายว่าอยู่นอกขอบเขต |
สไตล์ [style] |
จัดรูปแบบพร็อพเพอร์ตี้บางอย่างของข้อมูลในด้านต่างๆ ค่าเหล่านั้นได้แก่
ประเภทข้อมูล: สตริง ซึ่งใช้ได้หลายรูปแบบโดยใช้ไวยากรณ์ ค่าเริ่มต้น: null |
ข้อมูล: label: 'Character', 'Popularity', 'Style', role: domain, data, style, 'Hulk', 50, 'color: green', 'Captain America', 75, 'color: #0000cf;' + 'stroke-color: #cf001d', 'Wolverine', 90, 'opacity: 0.5;' + 'stroke-width: 5;' + 'stroke-color: #01a0ff;' + 'fill-color: #fff600', 'Iron Man', 60, 'color: #db9500;' + 'stroke-width: 10;' + 'stroke-color: #a30300', 'Spider Man', 100, 'bar {' + 'fill-color: #c8001d;' + 'stroke-width: 3;' + 'stroke-color: #1800c8}'
ในแผนภูมินี้ แต่ละแท่งจะมีการจัดรูปแบบเป็นอิสระจากกันโดยใช้บทบาทคอลัมน์ หมายเหตุ: บันทึกรายละเอียดเพิ่มเติมไว้ที่อื่นเกี่ยวกับวิธีปรับแต่งรูปแบบของจุด เส้น และแถบ นอกจากนี้ โปรดดูตัวเลือกสำหรับแผนภูมิแต่ละประเภทที่สามารถระบุรูปแบบสำหรับเอนทิตีประเภทอื่นๆ ได้ เช่น พื้นที่ ข้อความ และกล่อง |
เคล็ดลับเครื่องมือ |
ข้อความที่จะแสดงเมื่อผู้ใช้วางเมาส์เหนือจุดข้อมูลที่เชื่อมโยงกับแถวนี้ หมายเหตุ: การแสดงภาพแผนภูมิฟองอากาศไม่รองรับ เนื้อหาของเคล็ดลับเครื่องมือ HTML ของแผนภูมิฟองอากาศไม่สามารถปรับแต่งได้ ประเภทข้อมูล: สตริง ค่าเริ่มต้น: ค่าจุดข้อมูล |
ข้อมูล: label: 'Year', 'Sales', null, 'Expenses', null role: domain, data, tooltip, data, tooltip '2004', 1000, '1M$ sales, 400, '$0.4M expenses in 2004' in 2004' '2005', 1170, '1.17M$ sales, 460, '$0.46M expenses in 2005' in 2005' '2006', 660, '.66$ sales, 1120, '$1.12M expenses in 2006' in 2006' '2007', 1030, '1.03M$ sales, 540, '$0.54M expenses in 2007' in 2007' วางเมาส์เหนือจุดข้อมูลเพื่อแสดงข้อความเคล็ดลับเครื่องมือ ระบบจะกำหนดข้อมูลเคล็ดลับเครื่องมือให้กับทุกจุดในทั้ง 2 บรรทัด ในคอลัมน์ 3 และ 5 หมายเหตุ: ดูรายละเอียดเพิ่มเติมเกี่ยวกับการปรับแต่งเคล็ดลับเครื่องมือได้ที่เคล็ดลับเครื่องมือ |
โดเมน | คุณไม่ควรต้องมอบหมายบทบาทนี้อย่างชัดแจ้ง เว้นแต่จะออกแบบแผนภูมิหลายโดเมน (แสดงที่นี่) รูปแบบพื้นฐานของตารางข้อมูลจะช่วยให้เครื่องมือทำแผนภูมิอนุมานคอลัมน์ที่เป็นคอลัมน์ได้ อย่างไรก็ตาม คุณควรทราบว่าคอลัมน์ใดเป็นคอลัมน์โดเมนเพื่อให้ทราบว่ามีคอลัมน์อื่นๆ ใดบ้างที่แก้ไขได้ คอลัมน์โดเมนจะระบุป้ายกำกับตามแกนหลักของแผนภูมิ บางครั้งสามารถใช้คอลัมน์โดเมนหลายรายการเพื่อรองรับสเกลหลายแบบภายในแผนภูมิเดียวกัน ประเภทข้อมูล: โดยปกติจะเป็นสตริง แต่บางครั้งอาจป้อนตัวเลขหรือวันที่ |
ข้อมูล: label: '2009, '2009, '2009, '2008, '2008 '2008 Quarter', Sales', Expenses', Quarter', Sales', Expenses' role: domain, data, data, domain, data, data 'Q1/09', 1000, 400, 'Q1/08', 800, 300 'Q2/09', 1170, 460, 'Q2/08', 750, 400 'Q3/09', 660, 1120, 'Q3/08', 700, 540 'Q4/09', 1030, 540, 'Q4/08', 820, 620 ตัวอย่างนี้แสดงแผนภูมิหลายโดเมน คอลัมน์ข้อมูล 2 คอลัมน์แรกจะแก้ไขโดเมนแรก ("ไตรมาส 2009") และคอลัมน์ข้อมูล 2 คอลัมน์สุดท้ายจะแก้ไขโดเมนที่สอง ("ไตรมาสปี 2008") โดเมนทั้งสองซ้อนทับบนสเกลแกนเดียวกัน |
ข้อมูล | คุณไม่ควรมอบหมายบทบาทนี้อย่างชัดแจ้ง เนื่องจากรูปแบบพื้นฐานของตารางข้อมูลจะช่วยให้เครื่องมือสร้างแผนภูมิอนุมานคอลัมน์ใดเป็นคอลัมน์โดเมนได้ อย่างไรก็ตาม คุณควรทราบว่าคอลัมน์ใดเป็นคอลัมน์ข้อมูล เพื่อจะได้ทราบว่าคอลัมน์ใดแก้ไขได้บ้าง คอลัมน์บทบาทข้อมูลระบุข้อมูลชุดที่จะแสดงในแผนภูมิ สำหรับแผนภูมิส่วนใหญ่ 1 คอลัมน์ = 1 ชุด แต่อาจแตกต่างกันไปตามประเภทแผนภูมิ (เช่น แผนภูมิกระจายต้องมีคอลัมน์ข้อมูล 2 คอลัมน์สำหรับชุดแรก และอีกคอลัมน์หนึ่งสำหรับชุดเพิ่มเติมแต่ละชุด แผนภูมิแท่งเทียนต้องมีคอลัมน์ข้อมูล 4 คอลัมน์สำหรับแต่ละชุด) ประเภทข้อมูล: ตัวเลข |
ลำดับชั้นบทบาทและการเชื่อมโยง
แผนภาพต่อไปนี้แสดงคอลัมน์บทบาทที่ใช้กับคอลัมน์บทบาทอื่นๆ ได้ คอลัมน์ทั้งหมดยกเว้นคอลัมน์โดเมนจะใช้กับเพื่อนบ้านด้านซ้ายสุดที่ใช้ได้
เช่น คอลัมน์ scope จะมีผลกับคอลัมน์ data ที่ใกล้ที่สุดทางซ้าย คอลัมน์ annotationText จะนําไปใช้กับคอลัมน์ annotation ที่ใกล้ที่สุดทางซ้ายของคอลัมน์ annotation จะนําไปใช้กับคอลัมน์ data หรือ domain ที่ใกล้ที่สุด
การมอบหมายบทบาท
บทบาทจะได้รับมอบหมายเป็นพร็อพเพอร์ตี้ของคอลัมน์ในออบเจ็กต์ DataTable การสร้างคอลัมน์บทบาททำได้หลายวิธี แต่วิธีที่ใช้กันมากที่สุดมีดังนี้
เทคนิค 2 ประการแรกจะวาดแผนภูมิต่อไปนี้
เมธอด DataTable.addColumn
ตัวอย่างต่อไปนี้สร้างแผนภูมิแท่งโดยมีเครื่องหมายช่วงเวลาบนแท่ง 3 แท่ง เครื่องหมายช่วงเวลาจะระบุโดยคอลัมน์ที่ 3 และ 4 โดยใช้เมธอด DataTable.addColumn()
var data = new google.visualization.DataTable();
data.addColumn('string', 'Month'); // Implicit domain column.
data.addColumn('number', 'Sales'); // Implicit data column.
data.addColumn({type:'number', role:'interval'});
data.addColumn({type:'number', role:'interval'});
data.addColumn('number', 'Expenses');
data.addRows([
['April',1000, 900, 1100, 400],
['May', 1170, 1000, 1200, 460],
['June', 660, 550, 800, 1120],
['July', 1030, , , 540]
]);
var chart = new google.visualization.BarChart(
document.getElementById('visualization'));
chart.draw(data,
{width: 800, height: 600, title: 'Company Performance'});
สัญกรณ์ตรงตัว JavaScript
ใน JSON ลิเทอรัล คุณต้องระบุพร็อพเพอร์ตี้ p
ของคอลัมน์ที่มีค่า "role":"role-type"
ตัวอย่างต่อไปนี้แสดงวิธีระบุบทบาทโดยใช้สัญกรณ์ตรงตัวของ JavaScript ซึ่งทำได้ในขณะสร้างตารางเท่านั้น
{"cols":[ {"id":"","label":"Month","pattern":"","type":"string"}, {"id":"","label":"Sales","pattern":"","type":"number"}, {"id":"","label":"","pattern":"","type":"number","p":{"role":"interval"}}, {"id":"","label":"","pattern":"","type":"number","p":{"role":"interval"}}, {"id":"","label":"Expenses","pattern":"","type":"number"}], "rows":[ {"c":[ {"v":"April","f":null}, {"v":1000,"f":null}, {"v":900,"f":null}, {"v":1100,"f":null}, {"v":400,"f":null}]}, {"c":[ {"v":"May","f":null}, {"v":1170,"f":null}, {"v":1000,"f":null}, {"v":1200,"f":null}, {"v":460,"f":null}]}, {"c":[{"v":"June","f":null}, {"v":660,"f":null}, {"v":550,"f":null}, {"v":800,"f":null}, {"v":1120,"f":null}]}, {"c":[ {"v":"July","f":null}, {"v":1030,"f":null}, {"v":null,"f":null}, {"v":null,"f":null}, {"v":540,"f":null}]}], "p":null }
เมธอด DataView.setcolumn
ขณะสร้างข้อมูลพร็อพเพอร์ตี้ คุณสามารถกำหนดบทบาทของคอลัมน์ได้อย่างชัดเจน ซึ่งจะเป็นประโยชน์เมื่อสร้างคอลัมน์ใหม่ที่คำนวณแล้ว ดูข้อมูลเพิ่มเติมได้ที่ DataView.setColumns()