Я только начал изучать скрипт/JavaScript для Google Apps и хотел бы знать, как изменить форму, манипулировать многомерными данными из Google Spreadsheets. Я прочитал некоторые сообщения, например, this one, говорящие, что GAS не является гибким с манипуляциями с данными. Но пост немного устарел, поэтому я задаюсь вопросом, есть ли какие-либо новые изменения/дополнения к функциям GAS.Манипулирование данными таблицы для визуализации
Ниже приведен функциональный код. Он может успешно провести диаграмму ниже. Но то, что я действительно хочу это:
- группы по "Weekday" (
dayOfWeek(toDate(A))
) и "Пункт" (column B
) использования "Пункт" в качестве фильтра
Я попытался с помощью PIVOT B
, GROUP BY dayOfWeek(toDate(A)),
но он вернулся либо One or more participants failed to draw()×
сообщения об ошибке или неожиданный формат.
<html>
<head>
<title>
Test
</title>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('visualization', '1', {'packages': ['table', 'controls', 'corechart']});
google.setOnLoadCallback(initialize);
function initialize() {
var url = 'https://docs.google.com/spreadsheets/d/1_mSbT87MVWOiX2cfKX_x3dgTnToY5ulCWeGGCVn13iQ/gviz/tq?sheet=Sheet1&tq='
var queryStringDaily = encodeURIComponent("SELECT dayOfWeek(toDate(A)), sum(C), sum(D), sum(E), sum(F), sum(G), sum(H) GROUP BY dayOfWeek(toDate(A)) LABEL dayOfWeek(toDate(A)) 'Weekday' ");
var queryDaily = new google.visualization.Query(url+ queryStringDaily);
queryDaily.send(drawDaily);
}
function drawDaily(dailyTicket) {
//prepare data
var dailyTicket_table = dailyTicket.getDataTable(firstRowIsHeader = true);
// Create a dashboard.
var dashboard = new google.visualization.Dashboard(
document.getElementById('dashboard_div2'));
// Create a filter
var categoryFilter = new google.visualization.ControlWrapper({
'controlType': 'CategoryFilter',
'containerId': 'filter_div2',
'options': {
'filterColumnLabel': 'Weekday'
}
});
//create chart
var dailyChart = new google.visualization.ChartWrapper({
'chartType': 'LineChart',
'containerId': 'current_day',
'options': {
'title': 'Tickets by Rep, Item, and Weekday',
'legend': {position: 'right'},
//reformat x-axis tickmarks
'hAxis': {'viewWindow': {'min': 1.5, 'max': 6.5},
'ticks': [//{v: 1, f: 'Sunday'},
{v: 2, f: 'Monday'},
{v: 3, f: 'Tuesday'},
{v: 4, f: 'Wednesday'},
{v: 5, f: 'Thursday'},
{v: 6, f: 'Friday'},
//{v: 7, f: 'Saturday'}
]
},
}
});
// bind charts and controls to dashboard
dashboard.bind(categoryFilter, dailyChart);
// Draw the dashboard.
dashboard.draw(dailyTicket_table);
}
</script>
</head>
<body>
<!--Div that will hold the dashboard-->
<div id="dashboard_div2"></div>
<!--Divs that will hold each control and chart-->
<div id="filter_div2"></div>
<div id="current_day" style="align: center; width: 500px; height: 250px;"></div>
</body>
</html>
, если все остальное терпит неудачу, и вы не можете построить запрос с помощью GQL (https://developers.google.com/chart/interactive/docs/querylanguage), вы всегда можете получить все данные диапазон и фильтр/группу с javascript. –
Пятно на, Зиг - это техника, которую я использовал чаще всего. – Mogsdad
@Mogsdad, большое спасибо за ваши предложения. Я был вдохновлен вашими комментариями и повторил проблему, используя columnChart. Как было сказано выше, я думаю, что в какой-то степени он решил мою проблему, и я все уши, если вы считаете, что коды могут быть улучшены дальше. Заранее спасибо! – Lily