基于关系的列表小计
Sub total of list based on relations
我是应用制作工具的新手。我正在尝试找到一种基于数据关系来总计字段的方法。我基于此 YouTube tutorial (7min long) 构建了一个基本应用程序。在视频中,它向您展示了如何汇总一系列数字。在该示例中,他们使用的汽车库存为 "Model"、"wholesale value" 和 "Retail value" 获取输入。它计算利润或损失,然后为您提供完整库存的 "Total profit loss"。基本的东西。
我正在尝试更进一步。我已经为 "Car companies"(一个)到 "Car inventory"(多个)建立了一个关系数据库。所以说我的公司是 Saturn & Pontiac。我有与每个公司相关的不同模型,并在选择时显示 Saturn 或 Pontiac 的正确模型。但我的问题是试图只显示每个特定公司的总价值,而不是所有车辆的全部价值
所以假设我选择了 Saturn,并且从所有汽车库存中它只拉出 Saturn 模型。我只想看看那些土星车辆的价值
我不想使用有针对性的 "IF" 语句,因为虽然现在只有 2 家公司,但我希望它根据列表提取总数,而不管我将来有多少家公司。
郑重声明,不,我不去二手车经销店,我只是想学习这个程序,这似乎是一种简单的解释方法。
更新 001
我理解以下建议:
Doing this for a calculated datasource you would set a key parameter
and feed that key to the calculated DS and run a query where your
inventory.carcompany.id._equals = key parameter and reload this DS and
feeding it a new key in the company on item change client script.
不幸的是,我对语言的理解程度不足以让脚本做到这一点而不会在数周的反复试验中迷失方向。这是我在计算查询中的代码:
var totals = {wholesale:0, retail:0, profit:0};
var records = app.models.autos.newQuery().run();
records.forEach(function( item ){
totals.wholesale += item.wholesale;
totals.retail += item.retail;
totals.profit += (item.retail - item.wholesale);
});
var record = app.models.totals.newRecord();
record.wholesale = totals.wholesale;
record.retail = totals.retail;
record.profit = totals.profit;
return [record];
我知道我需要为公司名称创建一个新的变量。我知道我需要获取该名称并使用该名称重新加载数据源以将我的计算限制为仅具有该名称的列表。我只是不知道如何正确地说出来。
根据您在此处的其他回答 ,您只需要扩展现有脚本并对计算数据源进行一些非常小的修改。对于其中一个,您将为您的公司引入一个附加字段(类型字符串),然后执行以下操作:
var query = app.models.company.newQuery(); // Should this not be models.company.newQuery as there is no datasource named "carcompanies" ?
query.prefetch.autos._add();
var results = query.run();
var calculatedRecords = []; //contained a capitalization error here
results.forEach(function(company) {
var totals = {wholesale:0, retail:0, profit:0};
var records = company.autos;
records.forEach(function(item) {
totals.wholesale += item.wholesale;
totals.retail += item.retail;
totals.profit += (item.retail - item.wholesale);
});
var record = app.models.totals.newRecord();
record.Company = company.name;
record.wholesale = totals.wholesale;
record.retail = totals.retail;
record.profit = totals.profit;
calculatedRecords.push(record);
});
return calculatedRecords;
我是应用制作工具的新手。我正在尝试找到一种基于数据关系来总计字段的方法。我基于此 YouTube tutorial (7min long) 构建了一个基本应用程序。在视频中,它向您展示了如何汇总一系列数字。在该示例中,他们使用的汽车库存为 "Model"、"wholesale value" 和 "Retail value" 获取输入。它计算利润或损失,然后为您提供完整库存的 "Total profit loss"。基本的东西。
我正在尝试更进一步。我已经为 "Car companies"(一个)到 "Car inventory"(多个)建立了一个关系数据库。所以说我的公司是 Saturn & Pontiac。我有与每个公司相关的不同模型,并在选择时显示 Saturn 或 Pontiac 的正确模型。但我的问题是试图只显示每个特定公司的总价值,而不是所有车辆的全部价值
所以假设我选择了 Saturn,并且从所有汽车库存中它只拉出 Saturn 模型。我只想看看那些土星车辆的价值
我不想使用有针对性的 "IF" 语句,因为虽然现在只有 2 家公司,但我希望它根据列表提取总数,而不管我将来有多少家公司。
郑重声明,不,我不去二手车经销店,我只是想学习这个程序,这似乎是一种简单的解释方法。
更新 001
我理解以下建议:
Doing this for a calculated datasource you would set a key parameter and feed that key to the calculated DS and run a query where your inventory.carcompany.id._equals = key parameter and reload this DS and feeding it a new key in the company on item change client script.
不幸的是,我对语言的理解程度不足以让脚本做到这一点而不会在数周的反复试验中迷失方向。这是我在计算查询中的代码:
var totals = {wholesale:0, retail:0, profit:0};
var records = app.models.autos.newQuery().run();
records.forEach(function( item ){
totals.wholesale += item.wholesale;
totals.retail += item.retail;
totals.profit += (item.retail - item.wholesale);
});
var record = app.models.totals.newRecord();
record.wholesale = totals.wholesale;
record.retail = totals.retail;
record.profit = totals.profit;
return [record];
我知道我需要为公司名称创建一个新的变量。我知道我需要获取该名称并使用该名称重新加载数据源以将我的计算限制为仅具有该名称的列表。我只是不知道如何正确地说出来。
根据您在此处的其他回答
var query = app.models.company.newQuery(); // Should this not be models.company.newQuery as there is no datasource named "carcompanies" ?
query.prefetch.autos._add();
var results = query.run();
var calculatedRecords = []; //contained a capitalization error here
results.forEach(function(company) {
var totals = {wholesale:0, retail:0, profit:0};
var records = company.autos;
records.forEach(function(item) {
totals.wholesale += item.wholesale;
totals.retail += item.retail;
totals.profit += (item.retail - item.wholesale);
});
var record = app.models.totals.newRecord();
record.Company = company.name;
record.wholesale = totals.wholesale;
record.retail = totals.retail;
record.profit = totals.profit;
calculatedRecords.push(record);
});
return calculatedRecords;