【问题标题】:Add custom field to a "pivot table" - Power Query将自定义字段添加到“数据透视表” - Power Query
【发布时间】:2018-10-31 05:07:48
【问题描述】:

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

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

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

【问题讨论】:

  • Excel 的数据透视表不是您想要的,没错。从您的描述中不清楚您想对您的桌子做什么。在 Excel 和 PowerQuery 中都可以向结果表添加筛选器。只有使用 PowerQuery 才能将函数添加为过滤器。

标签: excel powerquery


【解决方案1】:

我将首先声明我不确定我是否知道您要做什么;但无论如何我都尝试了这一点。

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

再说一次,我不太确定你想做什么,所以我可能在计算方面弄错了,但这至少可以帮助你更接近。

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

这就是 T_Final 的事情发生的时候。所以在T_Final中,我需要:

将步骤Valeur remplacée1更改为= Table.ReplaceValue(#"Colonne dynamique",null,0,Replacer.ReplaceValue,Table.ColumnNames(#"Colonne dynamique")) (我很确定您使用的是上一步产生的列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ée3。)

将步骤Personnalisée ajoutée更改为= Table.AddColumn(#"Colonnes permutées", "Indisponibilté", each List.Sum(List.RemoveLastN(List.RemoveFirstN(Record.ToList(_),1),2))) (这是从记录中创建一个列表,然后删除列表的第一个条目,然后删除列表的最后两个条目,并对列表中剩余的内容求和。尤其是在我不确定是否添加了项目的情况下你本来打算的。至少你可以看到我做了什么来能够在不使用静态列名的情况下添加列。)

这是三个查询的 m 代码:​​

T_Categories:

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é"

我认为你可以从这里取得相当好的进展。

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多