Google Apps 脚本转置和笛卡尔积

Google Apps Script Transpose & Cartesian Product

我一直在 Google 表格中构建项目资源管理解决方案。 这个想法是,团队经理将每周在单行上输入每个项目的资源需求。对于最终用户而言,这是一种非常人性化且简单的解决方案。有关输入 sheet 的描述,请参见下图。 Input_Sheet

由于我的组织有多个团队,我们希望每个团队都有一个单独的 sheet。为了仍然保持报告集中,我将每个 sheet 连接到 BigQuery 中,我在其中组合来自不同 sheet 的数据并最终在 Power BI 中创建报告。

目前,我正在混合使用 google 函数,例如 QUERY、ARRAYFORMULA、SPLIT、FLATTEN 将数据转换为适合数据库的格式,即如下图所示。为了将数据存储在数据库中,我需要将数据从水平格式转换为垂直格式。 Result_Sheet

我当前的问题是可能有大约 300 行和 100 列,此时一个简单的 google 函数变得太重而无法 运行。我现在正在寻找一种使用应用程序脚本进行处理的解决方案,如果这将被证明是一种更有效的解决方案,并且可以让我添加一些关于脚本 运行.

频率的逻辑

尊敬的专家,您是否看到在应用程序脚本中可以执行类似的操作?应该如何执行?我有一些编码经验,但我是应用程序脚本的新手。我在生产笛卡尔积方面尤为挣扎,这将使我能够 link 与需求约会。

我在下面的示例 sheet 中添加了 link。

Link 到 sheet:https://docs.google.com/spreadsheets/d/1XKyt3BAo5L2RsK2vYpqrlBuEZoehIztGJ_Nl2DN-h-8/edit?usp=sharing

使用 { array expression },像这样:

=arrayformula( query( 
  { 
    Input_Sheet!B2:D2 \ "Date" \ "Demand";
    flatten( iferror(Input_Sheet!E3:H / 0; Input_Sheet!B3:B) ) \ 
    flatten( iferror(Input_Sheet!E3:H / 0; Input_Sheet!C3:C) ) \ 
    flatten( iferror(Input_Sheet!E3:H / 0; Input_Sheet!D3:D) ) \ 
    flatten( to_date( iferror(Input_Sheet!E3:H / 0; Input_Sheet!E2:H2) ) ) \
    flatten(Input_Sheet!E3:H) 
  }; 
  "where Col5 is not null 
   order by Col1"; 
  1 
) )

这不是 Cartesian product。它更像是 unpivot。

在样本分布中查看新 Solution sheetsheet。