首页 > 解决方案 > 基于关系的列表小计

问题描述

我是 App Maker 的新手。我正在尝试找到一种基于数据关系来计算字段总数的方法。我已经根据这个YouTube 教程(7 分钟长)构建了一个基本应用程序。在视频中,它向您展示了如何汇总一系列数字。在那里的例子中,他们使用汽车库存来输入“型号”、“批发价值”和“零售价值”。它计算利润或损失,然后为您提供完整库存的“总利润损失”。基本的东西。

我正试图更进一步。我已经为“汽车公司”(一个)到“汽车库存”(很多)建立了一个关系数据库。所以说我的公司是土星和庞蒂亚克。我有与每家公司相关的不同模型,并在选择时显示土星或庞蒂亚克的正确模型。但我的问题是试图只显示每个特定公司的总价值,而不是所有车辆的全部价值

因此,假设我选择了土星,并且从全部汽车库存中只提取土星模型。我只想看看那些土星车的价值

我不想使用有针对性的“IF”语句,因为尽管现在只有 2 家公司,但我希望它根据列表提取总数,无论我将来有多少家公司。

郑重声明,不,我不是一家二手车经销商,我只是想学习这个程序,这似乎是一种解释它的简单方法。

更新 001

我理解以下建议:

为计算的数据源执行此操作,您将设置一个关键参数并将该密钥提供给计算的 DS 并运行一个查询 where your inventory.carcompany.id._equals = key 参数并重新加载此 DS 并为其提供公司中的新密钥项目更改客户端脚本。

不幸的是,我对语言的理解不足以使脚本做到这一点,而不会在数周的反复试验中迷失方向。这是我在计算查询中的代码:

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。我知道我需要获取该名称并使用该名称重新加载数据源,以将我的计算限制为仅具有该名称的列表。我只是不知道如何正确地说出来。

标签: google-app-maker

解决方案


根据您在此处如何在谷歌应用程序制造商中“添加/求和/总计/计算”动态表的其他答案,您只需要扩展现有脚本并对计算的数据源进行一些非常小的修改。对于一个,您将为您的公司引入一个附加字段(类型字符串),然后执行以下操作:

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;

推荐阅读