如何使用Excel PowerQuery通过引用列位置将派生列添加到数据透视表

如何使用Excel PowerQuery通过引用列位置将派生列添加到数据透视表,excel,pivot,powerquery,Excel,Pivot,Powerquery,我正在使用Excel中的PowerQuery创建包含数据透视的常规报告。pivot以日期顺序将最近四个季度作为列名(例如,2018年9月30日、2018年12月31日、2019年3月31日、2019年6月30日)。每个日期列中的值都是数字。每次运行报告时,列名都会更改,因为…新日期 行代表不同的实体(例如,妈妈银行、爸爸银行、爷爷银行)。我需要创建几个派生列来计算最近一个季度列(最后一列)和前一个季度列(例如3个月移动、6个月移动)之间的差异。以下是一些示例数据: 这是数据在透视之前的样子: E

我正在使用Excel中的PowerQuery创建包含数据透视的常规报告。pivot以日期顺序将最近四个季度作为列名(例如,2018年9月30日、2018年12月31日、2019年3月31日、2019年6月30日)。每个日期列中的值都是数字。每次运行报告时,列名都会更改,因为…新日期

行代表不同的实体(例如,妈妈银行、爸爸银行、爷爷银行)。我需要创建几个派生列来计算最近一个季度列(最后一列)和前一个季度列(例如3个月移动、6个月移动)之间的差异。以下是一些示例数据:

这是数据在透视之前的样子:

Entity_Name       Quarter Date    Value
Bank of Dad       30/09/2018      4
Bank of Dad       31/12/2018      2
Bank of Dad       31/03/2019      3
Bank of Dad       30/06/2019      3
Bank of Grandpa   30/09/2018      4
Bank of Grandpa   31/12/2018      6
Bank of Grandpa   31/03/2019      1
Bank of Grandpa   30/06/2019      2
Bank of Mum       30/09/2018      5
Bank of Mum       31/12/2018      5
Bank of Mum       31/03/2019      4
Bank of Mum       30/06/2019      4
Entity_Name       30/09/2018     31/12/2018     31/03/2019     30/06/2019
Bank of Grandpa   4              6              1              2
Bank of Mum       5              5              4              4
Bank of Dad       4              2              3              3
在枢轴之后:

Entity_Name       Quarter Date    Value
Bank of Dad       30/09/2018      4
Bank of Dad       31/12/2018      2
Bank of Dad       31/03/2019      3
Bank of Dad       30/06/2019      3
Bank of Grandpa   30/09/2018      4
Bank of Grandpa   31/12/2018      6
Bank of Grandpa   31/03/2019      1
Bank of Grandpa   30/06/2019      2
Bank of Mum       30/09/2018      5
Bank of Mum       31/12/2018      5
Bank of Mum       31/03/2019      4
Bank of Mum       30/06/2019      4
Entity_Name       30/09/2018     31/12/2018     31/03/2019     30/06/2019
Bank of Grandpa   4              6              1              2
Bank of Mum       5              5              4              4
Bank of Dad       4              2              3              3
这是我想要达到的目标(最近一个季度减去三个月前和六个月前):

我在互联网上进行了一次很好的搜索,我发现了类似但不完全相同的例子(通常与重命名列或从列中筛选值有关)。我的问题实际上比我发现的要简单得多,所以我觉得这应该是相对简单的,我只是缺少了一些其他人不需要质疑的明显的东西。我是第一次在PowerQuery中工作的pandas/python女孩(我需要将此报告交给客户定期运行,因此我需要报告来“谈论”他们的语言,即excel)。PowerQuery在某些方面做得非常好(在excel中加入并分组?——酷!)。其他的事情都有点打架——就像这样

我从两个方面研究了这个问题——首先,在透视之前尝试这样做,这样我就不会为更改列名而绞尽脑汁了。这是卷的。如果只有一个实体,它可能会更简单,但多个实体使它变得棘手。我的首选方法是从数据透视数据中派生列,这与以前编写此报表的方式(在excel中,而不是使用power query)一致。为此,我需要在添加新列时按位置引用列

如果我可以通过位置引用来解决返回一个包含另一个列的值的列的问题,那么我就有99%的能力,所以我正在寻找帮助来解决这个问题的特定部分

i、 e.通过使用列的位置引用(而不是显式列名)达到这一点:

这就是我尝试过的:

let
     Source = Excel.CurrentWorkbook(){[Name="Table14"]}[Content],
     #"Changed Type" = Table.TransformColumnTypes(Source,{{"Entity name", type text}, {"Quarter date", type date}, {"Value", Int64.Type}}),
      #"Sorted Rows" = Table.Sort(#"Changed Type",{{"Entity name", Order.Ascending}, {"Quarter date", Order.Ascending}}),
     #"PrevTable" = Table.Pivot(Table.TransformColumnTypes(#"Sorted Rows", {{"Quarter date", type text}}, "en-NZ"), List.Distinct(Table.TransformColumnTypes(#"Sorted Rows", {{"Quarter date", type text}}, "en-NZ")[#"Quarter date"]), "Quarter date", "Value", List.Sum),
     #"Column names" = Table.ColumnNames(#"PrevTable"),
     #"Test 1" = Table.AddColumn(#"PrevTable", "Test1", each #"Column names"{1}),
     #"Test 2" = Table.AddColumn(#"Test 1", "Test2", each Table.SelectRows(#"PrevTable", each(Record.Field(_,Table.ColumnNames(#"PrevTable"){1}))))
in
     #"Test 2"
测试1:我已经成功地创建了一个列名列表并通过索引引用它们——但是返回的是一列值,这些值是列名,而不是实际值!哈哈

测试2:我还尝试了另一种方法,以查看是否可以检索行值(尝试重新编写我发现的代码,该代码也用于筛选),但返回的表中没有列

下面是我从代码中得到的表格:

Entity_Name        30/09/2018    ...    Test1        Test2   
Bank of Dad        4             ...    30/09/2018   [Table]
Bank of Grandpa    4             ...    30/09/2018   [Table]
Bank of Mum        5             ...    30/09/2018   [Table]
如果我点击“表”值,我会得到这种类型的响应:

表达式.错误:无法将值4转换为逻辑类型


任何帮助都将不胜感激——这么多的学习工具,这么少的大脑

只花了3个小时的谷歌搜索和写一个很长的问题,不知何故,奇迹般地,我找到了答案的线索

以下是我创建(其中一个)派生列的方式:

#"Quarterly movement" = Table.AddColumn(#"PrevTable", "Quarterly change", each (Record.Field(_, Table.ColumnNames(#"PrevTable"){4}) - Record.Field(_, Table.ColumnNames(#"PrevTable"){3})))

如果我只是想创建一个列,使用位置引用(问题的核心)镜像另一个列的值:


我花了三个小时在谷歌上搜索,写了一个很长的问题。不知何故,奇迹般地,我找到了答案的线索

以下是我创建(其中一个)派生列的方式:

#"Quarterly movement" = Table.AddColumn(#"PrevTable", "Quarterly change", each (Record.Field(_, Table.ColumnNames(#"PrevTable"){4}) - Record.Field(_, Table.ColumnNames(#"PrevTable"){3})))

如果我只是想创建一个列,使用位置引用(问题的核心)镜像另一个列的值: