将计算数据模型关联到云 SQL 模型
Relate calculated data model to Cloud SQL model
我需要创建一个 table 并排显示来自云 SQL 数据模型和计算数据模型的值,就好像数据模型是相关的一样。
费用Table
我有一个名为 'Costs' 的计算数据模型,它是从电子表格中填充的。此 table 中的数据如下所示:
PROJECT_ID, ACCRUED_COSTS, REMAINING_COSTS
0001 , 10000 , 25000
0002 , 25000 , 2000
0003 , 15000 , 5000
我用来生成计算模型的代码在这里:
return getSSData();
function getSSData(){
var values = SpreadsheetApp.openById("SPREADSHEET_ID").getSheetByName("SHEET_NAME").getRange("RANGE").getValues();
var ssData = [];
for (var i = 0; i<values.length; i++){
var newRecord = app.models.costsTable.newRecord();
// add all fields to the new record
newRecord.project = values[i][0].toString();
newRecord.projectID = values[i][1].toString();
newRecord.actual = values[i][2];
newRecord.estimate = values[i][3];
ssData.push(newRecord);
}
// return the array of the model.newRecord objects that would be consumed by the Model query.
return ssData;
}
项目Table
我还有一个名为 'Projects' 的 Cloud SQL 数据模型。此 table 中的数据如下所示:
PROJECT_ID, PROJECT_NAME , PROJECT_BUDGET
0001 , project_alpha , 50000
0002 , project_beta , 30000
0003 , project_charlie, 19000
合并Table
我需要创建一个包含 table 小部件的页面,它像这样并排显示来自两个 table 的所有数据列:
PROJECT_ID, PROJECT_NAME , PROJECT_BUDGET, ACCRUED_COSTS, REMAINING_COSTS
0001 , project_alpha , 50000 , 10000 , 25000
0002 , project_beta , 30000 , 25000 , 2000
0003 , project_charlie, 19000 , 15000 , 5000
问题
如果 table 可以相互关联,这将很容易,但遗憾的是计算模型不支持关联。
根据之前的评论,您有两种选择来完成此任务。无论哪种方式,将附加字段(如“Project_Name”和“Project_Budget”添加到您的计算模型中。
方案一(用索引函数获取所有记录):
function getSSData(){
var values = SpreadsheetApp.openById("SPREADSHEET_ID").getSheetByName("SHEET_NAME").getRange("RANGE").getValues();
var projects = app.models.Projects.newQuery().run();
var ids = projects.map(function(p){return p.PROJECT_ID;});
var ssData = [];
for (var i = 0; i<values.length; i++){
var newRecord = app.models.costsTable.newRecord();
// add all fields to the new record
newRecord.project = values[i][0].toString();
newRecord.projectID = values[i][1].toString();
newRecord.actual = values[i][2];
newRecord.estimate = values[i][3];
var index = ids.indexOf(values[i][1].toString());
if(index !== -1) {
var project = projects[index];
newRecord.Project_Name = project.PROJECT_NAME;
newRecord.Project_Budget = project.PROJECT_Budget;
}
ssData.push(newRecord);
}
// return the array of the model.newRecord objects that would be consumed by the Model query.
return ssData;
}
选项 2(运行 订单项查询):
function getSSData(){
var values = SpreadsheetApp.openById("SPREADSHEET_ID").getSheetByName("SHEET_NAME").getRange("RANGE").getValues();
var ssData = [];
for (var i = 0; i<values.length; i++){
var newRecord = app.models.costsTable.newRecord();
var query = app.models.Projects.newQuery();
query.filters.PROJECT_ID._equals() = values[i][1].toString();
var results = query.run();
// add all fields to the new record
newRecord.project = values[i][0].toString();
newRecord.projectID = values[i][1].toString();
newRecord.actual = values[i][2];
newRecord.estimate = values[i][3];
if(results.length > 0) {
var project = results[0];
newRecord.Project_Name = project.PROJECT_NAME;
newRecord.Project_Budget = project.PROJECT_BUDGET;
}
ssData.push(newRecord);
}
// return the array of the model.newRecord objects that would be consumed by the Model query.
return ssData;
}
我鼓励你两者都试试。在开始时为 startdate = new Date() 创建一个变量,然后在 return 数据执行 console.log(new Date() - startdate) 之前,这将为您提供以毫秒为单位的时差总脚本执行。这样你也可以自己找出哪个过程更快。
我需要创建一个 table 并排显示来自云 SQL 数据模型和计算数据模型的值,就好像数据模型是相关的一样。
费用Table
我有一个名为 'Costs' 的计算数据模型,它是从电子表格中填充的。此 table 中的数据如下所示:
PROJECT_ID, ACCRUED_COSTS, REMAINING_COSTS 0001 , 10000 , 25000 0002 , 25000 , 2000 0003 , 15000 , 5000
我用来生成计算模型的代码在这里:
return getSSData();
function getSSData(){
var values = SpreadsheetApp.openById("SPREADSHEET_ID").getSheetByName("SHEET_NAME").getRange("RANGE").getValues();
var ssData = [];
for (var i = 0; i<values.length; i++){
var newRecord = app.models.costsTable.newRecord();
// add all fields to the new record
newRecord.project = values[i][0].toString();
newRecord.projectID = values[i][1].toString();
newRecord.actual = values[i][2];
newRecord.estimate = values[i][3];
ssData.push(newRecord);
}
// return the array of the model.newRecord objects that would be consumed by the Model query.
return ssData;
}
项目Table
我还有一个名为 'Projects' 的 Cloud SQL 数据模型。此 table 中的数据如下所示:
PROJECT_ID, PROJECT_NAME , PROJECT_BUDGET 0001 , project_alpha , 50000 0002 , project_beta , 30000 0003 , project_charlie, 19000
合并Table
我需要创建一个包含 table 小部件的页面,它像这样并排显示来自两个 table 的所有数据列:
PROJECT_ID, PROJECT_NAME , PROJECT_BUDGET, ACCRUED_COSTS, REMAINING_COSTS 0001 , project_alpha , 50000 , 10000 , 25000 0002 , project_beta , 30000 , 25000 , 2000 0003 , project_charlie, 19000 , 15000 , 5000
问题
如果 table 可以相互关联,这将很容易,但遗憾的是计算模型不支持关联。
根据之前的评论,您有两种选择来完成此任务。无论哪种方式,将附加字段(如“Project_Name”和“Project_Budget”添加到您的计算模型中。
方案一(用索引函数获取所有记录):
function getSSData(){
var values = SpreadsheetApp.openById("SPREADSHEET_ID").getSheetByName("SHEET_NAME").getRange("RANGE").getValues();
var projects = app.models.Projects.newQuery().run();
var ids = projects.map(function(p){return p.PROJECT_ID;});
var ssData = [];
for (var i = 0; i<values.length; i++){
var newRecord = app.models.costsTable.newRecord();
// add all fields to the new record
newRecord.project = values[i][0].toString();
newRecord.projectID = values[i][1].toString();
newRecord.actual = values[i][2];
newRecord.estimate = values[i][3];
var index = ids.indexOf(values[i][1].toString());
if(index !== -1) {
var project = projects[index];
newRecord.Project_Name = project.PROJECT_NAME;
newRecord.Project_Budget = project.PROJECT_Budget;
}
ssData.push(newRecord);
}
// return the array of the model.newRecord objects that would be consumed by the Model query.
return ssData;
}
选项 2(运行 订单项查询):
function getSSData(){
var values = SpreadsheetApp.openById("SPREADSHEET_ID").getSheetByName("SHEET_NAME").getRange("RANGE").getValues();
var ssData = [];
for (var i = 0; i<values.length; i++){
var newRecord = app.models.costsTable.newRecord();
var query = app.models.Projects.newQuery();
query.filters.PROJECT_ID._equals() = values[i][1].toString();
var results = query.run();
// add all fields to the new record
newRecord.project = values[i][0].toString();
newRecord.projectID = values[i][1].toString();
newRecord.actual = values[i][2];
newRecord.estimate = values[i][3];
if(results.length > 0) {
var project = results[0];
newRecord.Project_Name = project.PROJECT_NAME;
newRecord.Project_Budget = project.PROJECT_BUDGET;
}
ssData.push(newRecord);
}
// return the array of the model.newRecord objects that would be consumed by the Model query.
return ssData;
}
我鼓励你两者都试试。在开始时为 startdate = new Date() 创建一个变量,然后在 return 数据执行 console.log(new Date() - startdate) 之前,这将为您提供以毫秒为单位的时差总脚本执行。这样你也可以自己找出哪个过程更快。