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。
我一直在 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。