将自定义字段添加到“数据透视表”中-Power Query

时间:2018-10-24 14:32:58

标签: excel powerquery

我已经使用Power Query将自定义字段添加到由2个合并表组成的表中,以模拟数据透视表。但是,我似乎无法在最终表中添加过滤器。还有另一种方法吗?

我尝试使用Excel中的数据透视表,但似乎无法按需插入计算字段。

这是我的Excel文件: https://ufile.io/x2v1j

1 个答案:

答案 0 :(得分:0)

我将从一个免责声明开始,我不确定我是否知道你要做什么。但是无论如何我还是被刺了。

我认为您在分组之前试图在T_Catégories查询中过滤月份;所以我在那里添加了手动过滤步骤。当我这样做并取消选择月份时,您的 T_Final 查询中断了。原因是因为在我筛选出数月后,它还筛选出了 T_Final 查询所依赖的列名称类别。例如,这影响了您依赖列名称的计算。我必须更改您的 T_Final 查询,以便它可以动态确定列名。

同样,我不确定您要执行的操作,因此在计算方面我可能弄错了,但这至少可以使您更接近。

就像我说的那样,在T_Catégories中,我添加了过滤器:

enter image description here

enter image description here

那是 T_Final 崩溃的时候。因此,在 T_Final 中,我需要:

将步骤 Valeurremplacée1更改为= Table.ReplaceValue(#"Colonne dynamique",null,0,Replacer.ReplaceValue,Table.ColumnNames(#"Colonne dynamique")) (我非常确定您使用的是上一步 Colonne dynamique 产生的列。)

将步骤Personnaliséeajoutée3更改为= Table.AddColumn(#"Valeur remplacée1", "Total général", each List.Sum(List.RemoveFirstN(Record.ToList(_),1))) (这是从记录中创建一个列表,然后删除列表的第一项并汇总列表中剩余的内容。)

将步骤 Colonnespermutées更改为= Table.ReorderColumns(#"Personnalisée ajoutée3",Table.ColumnNames(#"Personnalisée ajoutée3")) (我很确定您使用的是上一步Personnaliséeajoutée3产生的列。)

将步长Personnaliséeajoutée更改为= Table.AddColumn(#"Colonnes permutées", "Indisponibilté", each List.Sum(List.RemoveLastN(List.RemoveFirstN(Record.ToList(_),1),2))) (这是从记录中创建一个列表,然后删除列表的第一个条目,然后删除列表的最后两个条目,并对列表中剩余的内容求和。尤其是在我不确定添加项目的地方您想要的。至少您可以看到我在不使用静态列名的情况下添加列的操作。)

这是三个查询的m代码:

T_Catégories:

let
Source = Excel.CurrentWorkbook(){[Name="T_Catégories"]}[Content],
#"Type modifié" = Table.TransformColumnTypes(Source,{{"Métier", type text}, {"Code absence", Int64.Type}, {"Date", type date}, {"Catégorie", type text}}),
#"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié",{"Code absence", "Date"}),
#"Filtered Rows" = Table.SelectRows(#"Colonnes supprimées", each true),
#"Lignes groupées" = Table.Group(#"Filtered Rows", {"Métier", "Catégorie"}, {{"Nombre", each Table.RowCount(_), type number}})
in
#"Lignes groupées"

T_métiers:

let
Source = Excel.CurrentWorkbook(){[Name="T_métiers"]}[Content],
#"Type modifié" = Table.TransformColumnTypes(Source,{{"Métier", type text}, {"Nombre", Int64.Type}})
in
#"Type modifié"

T_Final:

let
Source = Table.Combine({T_Catégories, T_métiers}),
#"Valeur remplacée" = Table.ReplaceValue(Source,null,"Nombre employés",Replacer.ReplaceValue,{"Catégorie"}),
#"Colonne dynamique" = Table.Pivot(#"Valeur remplacée", List.Distinct(#"Valeur remplacée"[Catégorie]), "Catégorie", "Nombre"),
#"Valeur remplacée1" = Table.ReplaceValue(#"Colonne dynamique",null,0,Replacer.ReplaceValue,Table.ColumnNames(#"Colonne dynamique")),
#"Personnalisée ajoutée3" = Table.AddColumn(#"Valeur remplacée1", "Total général", each List.Sum(List.RemoveFirstN(Record.ToList(_),1))),
#"Colonnes permutées" = Table.ReorderColumns(#"Personnalisée ajoutée3",Table.ColumnNames(#"Personnalisée ajoutée3")),
#"Personnalisée ajoutée" = Table.AddColumn(#"Colonnes permutées", "Indisponibilté", each List.Sum(List.RemoveLastN(List.RemoveFirstN(Record.ToList(_),1),2))),
#"Personnalisée ajoutée1" = Table.AddColumn(#"Personnalisée ajoutée", "Disponibilté", each [Nombre employés]*7.5),
#"Personnalisée ajoutée2" = Table.AddColumn(#"Personnalisée ajoutée1", "Taux disponibilté (%)", each (1-[Indisponibilté]/[Disponibilté])*100),
#"Type modifié" = Table.TransformColumnTypes(#"Personnalisée ajoutée2",{{"Indisponibilté", Int64.Type}, {"Disponibilté", type number}, {"Taux disponibilté (%)", type number}})
in
#"Type modifié"

我认为您可以从这里取得很好的进展。