当前位置: 首页 > 知识库问答 >
问题:

GoogleSheets:将数据从主分类账排序到子表中

越飞鸾
2023-03-14

我想创建一个主订单簿,记录我对不同类型资产的购买。假设订单簿包含以下列:

  1. 日期
  2. 资产名称
  3. 资产类型(资产A,资产B,资产C)
  4. 数量
  5. 价格/单位

现在,我希望根据资产类型将这些资产分为不同的子表。假设它是资产A,然后是资产名称,每当我在订单簿中输入数据时,数量会自动填充到资产A的子表中。所有资产页面的前两列都有资产名称和数量。我从股票组合视频中找到了一个代码,该代码有助于自动填充股票页面,但它仅限于一个股票资产,但我希望在相应的资产页面中包含上述详细信息,并且没有资产页面重复订单。

股票组合代码示例:

function MyPortfolio(tickers, values) {
  var total = []
  var sums = {}

  for(i=0; i<tickers.length; i++){
    
    var t = tickers[i].toString()

    if(t !="Cash"){

      if(t in sums){
        sums[t] += Number(values[i])
      }
      else{
        sums[t] = Number(values[i])
      }
    }
  }
  for(var ticker in sums){
    if(sums[ticker]>0){
      total.push([ticker,sums[ticker]])
    }
  }
  return total
}

我的第一种方法是将此代码继承到三个单独的函数中,示例如下:

function asset_a_logger(tickers,type, values) {
  var total = []
  var sums = {}
  for(i=0; i<type.length; i++){
    
    var t = type[i].toString()
    var x = type[i].toString()
    if(t !="Gold"){
      if(t!="Crypto"){
      var x = tickers[i].toString()  
        if(x in sums){
          sums[x] += Number(values[i])
        }
        else{
          sums[x] = Number(values[i])
        }
    }
  }
  for(var ticker in sums){
    if(sums[ticker]>0){
      total.push([ticker,sums[ticker]])
    }
  }
  return total
}
}

我也尝试了以下代码,但它们不起作用,请解释原因。在一个例子中,我试着在一个列表上做条件反射,但所有的资产页面都有订单。

function asset_a_logger(tickers,type, values) {
  var total = []
  var sums = {}
  for(i=0; i<type.length; i++){
    
    var t = type[i].toString()

    if(t !="Asset B"||"Asset C"){
     
      var x = tickers[i].toString()  
        if(x in sums){
          sums[x] += Number(values[i])
        }
        else{
          sums[x] = Number(values[i])
        }
    }
  }
  for(var ticker in sums){
    if(sums[ticker]>0){
      total.push([ticker,sums[ticker]])
    }
  }
  return total
}
function asset_a_logger(tickers,type, values) {
  var total = []
  var sums = {}
  var prop = ["Asset C", "Asset B"]
  for(i=0; i<type.length; i++){
    
    var t = type[i].toString()

    if(!(t in prop)){
     
      var x = tickers[i].toString()  
        if(x in sums){
          sums[x] += Number(values[i])
        }
        else{
          sums[x] = Number(values[i])
        }
    }
  }
  for(var ticker in sums){
    if(sums[ticker]>0){
      total.push([ticker,sums[ticker]])
    }
  }
  return total
}

我知道有一些循环约束出错了,但我以前没有JavaScript方面的经验。这在Python中太容易了,我希望在google sheets中有一个干净、响应迅速的投资组合经理。

谢谢你的耐心!

共有1个答案

汪理
2023-03-14

QUERY功能将为您执行此操作。

在相关资产负债表的A1单元中通常是这样的:

=query(OrderBookSheet!A:E,“选择B,D,其中C包含B的‘资产A’订单”,1)

查询可以通过不同的列更改为订单,例如,按描述、Bwhere子句中的其他项排序,以便根据需要对其进行进一步筛选,如按日期,例如,其中C包含“资产A”和A

上述示例中的日期可以是单元格中的值(例如。单元格N1),将'2021-05-01'替换为'"

如果资产A包含相同名称的项目(在列B中),则可以使用如下方式对其进行分组:

=query(OrderBookSheet!A:E,“选择B,求和(D),其中C包含“资产A”组,B标签为求和(D)“数量”,1)

查询(子句)的组件需要按特定顺序进行:

https://developers.google.com/chart/interactive/docs/querylanguage#language-条款

 类似资料:
  • 我想创建一个包含类别的列表,并将类别悬停在需要显示子类别的类别上。我能够在列表中显示父类别。但我不知道如何获得子类别。在我的表中有category\u id、parent\u id列和一些其他列。如果父类别id为“0”,则它是主类别,对于子类别,它包含类别id。因此,现在我需要显示主类别的子类别。我不明白该如何进行。谁能给我提建议。

  • 我正在使用一个表在Jaspersoft Studio 5.6.1中创建简单的报告。 通过 JRBeanCollectionDataSource 从 Java 向此报告发送数据。 在报告中,我已经可以获取此数据 vie 字段:报告- 现在我可以显示输入的数据了。 但如果我想在表中执行,我需要创建数据集(为什么?)并选择“使用用于填充主报告的相同连接”。将相同的字段添加到新数据集没有帮助,也没有为数据

  • 分页 使用 limit 和 offset 来控制分页数据: limit 指定该请求返回的结果个数 offset 偏移量,指定该请求返回的结果的起始位置 默认 limit 为 20, offset 为 0,我们也可以手动指定 limit 和 offset 来控制。例如,每页展示 100 条数据,需要获取第五页的数据,将 limit 设置为 100、offset 设置为 400 即可。limit 最大

  • {% tabs first=”SDK 1.1.0 及以上版本”, second=”SDK 1.1.0 以下版本” %} {% content “first” %} SDK 1.1.0 及以上版本 分页 使用 limit 和 offset 来控制分页数据: limit 指定该请求返回的结果个数 offset 偏移量,指定该请求返回的结果的起始位置 默认 limit 为 20, offset 为 0,

  • 我已经创建了表的结构,在第2页中,源数据是一个JSON,包含产品及其属性列表。我想将JSON数据显示到表中,实际上有一个包含表的子报表,但不知道如何将JSON数据传递到子报表,并根据JSON数据中的productList键进行填充。报告从接收用户数据的java类填充。 我不知道如何填写第 2 页的表格,有人可以帮助我吗? 这是我在Jaspersoft Studio 6.10中的代码 主报告 子报表