我有一个Excel数据透视表(以及后面的表数据集),其结构类似于下面的结构。如何仅过滤/显示带有产品(Col B)1 AND 2 AND 3的公司(Col A)?听起来很简单,但找不到解决方法。通过使用Power Query(在Power BI或Excel中可用)实现这一点没问题。
A1: Company 1 | B1: Product 1
A2: Company 1 | B2: Product 2
A3: Company 1 | B3: Product 3
A4: Company 1 | B4: Product 4
A5: Company 2 | B5: Product 1
A6: Company 3 | B6: Product 1
A7: Company 4 | B7: Product 1
A8: Company 4 | B8: Product 2
A9: Company 4 | B9: Product 3
A10: Company 4 | B9: Product 4
A11: Company 4 | B9: Product 5
答案 0 :(得分:1)
这是使用Power Query的一种方法。
首先,将其从Excel中的表引入Power Query:
然后我按公司分组(“转换”>“分组依据”):
然后,我添加一个新的自定义列(添加列>自定义列)以标记每个公司是否在其关联的分组表的“产品”列中包含3种产品:
然后我从新的自定义列中过滤掉FALSE条目(使用“自定义”列右上方的按钮):
然后,从“ AllData”列的嵌入式表中展开“产品”列(使用“ AllData”列右上方的按钮)。
然后我删除“自定义”列:
这是M代码:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Company", type text}, {"Product", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Company"}, {{"AllData", each _, type table}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each List.ContainsAll([AllData][Product], {"Product 1","Product 2","Product 3"})),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = true)),
#"Expanded AllData" = Table.ExpandTableColumn(#"Filtered Rows", "AllData", {"Product"}, {"Product"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded AllData",{"Custom"})
in
#"Removed Columns"
答案 1 :(得分:1)
基本上,您需要做一些事情才能完全在Excel中做到这一点:
VLOOKUP
中是否标记了产品,一个来指示公司是否具有所有3个标记的产品:
=VLOOKUP([@Product],tProducts,2,FALSE)
之类的公式。=COUNTIFS([Company],[@Company],[Product Flagged],TRUE)>=3
之类的公式。在D列中带有TRUE
的行分别具有1个产品,2个和3个产品(除非您的行具有重复的公司/产品组合,否则行将更加棘手):
在数据透视表中,您可以按以下帮助列进行过滤: