Sử dụng API trực quan hóa của Google, tôi sử dụng google.visualization.data.group để tạo các bảng phụ dựa trên dữ liệu thô của tôi. Dữ liệu thô của tôi sử dụng mẹo {v: "US", f: "Hoa Kỳ"} để hiển thị thông tin khác ngoài giá trị, nhưng khi tôi sử dụng hàm tổng hợp, định dạng được loại bỏ chỉ để lại phần "Hoa Kỳ".Giữ lại định dạng bằng cách sử dụng nhóm theo tổng hợp trong API hình ảnh hóa của Google
Có cách nào để giữ nguyên định dạng ban đầu hay cách dễ dàng để thêm lại dữ liệu trên DataTables được tạo bằng cách sử dụng tổng hợp nhóm không?
dữ liệu mẫu:
[2010, {v:"MA", f:"Morocco"}, {v:"002", f:"Africa"}, {v:"002", f:"Northern Africa"}, 21.12724],
[2010, {v:"AW", f:"Aruba"}, {v:"019", f:"Americas "}, {v:"019", f:"Caribbean"}, 0.98],
[2010, {v:"AF", f:"Afghanistan"}, {v:"142", f:"Asia"}, {v:"142", f:"Southern Asia"}, 0.9861],
[2010, {v:"AO", f:"Angola"}, {v:"002", f:"Africa"}, {v:"002", f:"Middle Africa"}, 5.11774],
Aggregation Chức năng:
var countryData = google.visualization.data.group(
rawData,
[0, 1],
[{'column': 4, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
Edit:
On suy nghĩ xa hơn, nó có thể là bất khả thi vào nhóm với định dạng vì không có gì đảm bảo rằng các định dạng cho mỗi giá trị sẽ nhất quán. Với ý nghĩ đó, có lẽ tốt hơn (hoặc chỉ có thể) để viết một hàm sẽ thêm các định dạng vào mỗi cột dữ liệu của tôi. Vì vậy, câu hỏi trở thành, "Làm thế nào tôi có thể làm điều đó?"
Tôi thực sự không muốn tạo dữ liệu thô của mình dưới dạng giá trị chưa định dạng một mình và sau đó là các bảng bổ sung để tìm kiếm định dạng cho từng giá trị. Điều đó sẽ yêu cầu thêm 2 bảng (một cho các vùng là 28 hàng, một cho các quốc gia có trên 240 hàng) và sau đó tạo hai hàm để xem xét từng giá trị trong bảng được nhóm (sẽ có 30 năm dữ liệu, có nghĩa là hàng ngàn dòng) thêm các giá trị.
Điều đó có vẻ giống như một giải pháp thực sự phức tạp.
Có cách nào để thực hiện điều này với các chức năng bổ trợ không? Tôi có thể viết một hàm trả về mỗi giá trị trong bảng dưới dạng đối tượng được định dạng {v: "US", f: "Hoa Kỳ"} không? Hoặc là có một cách dễ dàng để viết một định dạng cột sẽ tìm kiếm giá trị thích hợp trong bảng ban đầu của tôi và áp dụng định dạng đó? Mà sẽ gây ra đau đầu ít nhất cho cả tôi (người đã viết nó), và cho người sử dụng (những người phải tải nó)?
EDIT 2:
Dường như tôi sẽ có thể tạo ra một định dạng cho bảng mới sử dụng một cái gì đó như thế này:
function (dt, row) {
return {
v: (dt.getValue(row, 1)/1000000),
f: (dt.getValue(row, 1)/1000000) + 'M'
}
}
Nhưng vấn đề trở nên rằng kể từ khi tôi không làm việc với số định dạng, tôi sẽ phải tạo một số loại bảng tra cứu sẽ lấy giá trị, tra cứu nó trong bảng tra cứu, và sau đó trả về định dạng thích hợp. Nó cũng có vẻ như tôi có thể phải lặp qua toàn bộ bảng, hàng theo hàng, đó là hàng ngàn dòng.
Tôi không thể tưởng tượng rằng không có cách dễ dàng để làm điều này mà không có một số vòng lặp brute force và gán giá trị.
CHỈNH SỬA 3:
Vì vậy, tôi đã thử một số điều khó khăn. Thay vì thiết lập mỗi hàng dưới dạng giá trị/định dạng, tôi đã tạo phần giá trị/định dạng dưới dạng một chuỗi và sau đó sau khi nhóm eval() được sử dụng để đánh giá các đối tượng. Điều này làm việc tuyệt vời.Đây là dữ liệu:
[2010, "{v: 'MA', f: 'Morocco'}", 21.13],
[2010, "{v: 'AW', f: 'Aruba'}", 0.98],
[2010, "{v: 'AF', f: 'Afghanistan'}", 0.99],
[2010, "{v: 'AO', f: 'Angola'}", 5.12],
đây là đoạn code mới:
var countryCount = countryData.getColumnRange(0).count;
for (var i = 0; i <= countryCount; i++) {
countryData.setValue(i, 1, eval('(' + countryData.getValue(i,1) + ')'));
};
Vấn đề là khi tôi ra này vào một DataTable Google, nó cho thấy {v: 'AE', f: ' Các Tiểu vương quốc Ả Rập Thống nhất '} mặc dù thực tế rằng việc kiểm tra kết quả với eval đúng cho tôi:
>>> eval('(' + countryData.getValue(i,1) + ')')
Object v="AE" f="United Arab Emirates"
Vì vậy, tôi đang làm gì sai ở đây?