Excel 比较列返回最大功率查询
我有来自多个供应商的数据,希望进行比较。下图中显示的数据之前已经使用power query通过一系列步骤进行了转换。最后一步是旋转供应商列(在本例中由X、Y、Z组成),以便可以比较这些新列并返回最大值 如何比较X、Y和Z列中的值来执行此操作?重要的是,XY和Z不一定是唯一的供应商。如果我将A作为新供应商添加到原始数据中,将生成一个新的列A,我希望将其包括在比较中,以便在末尾的列处输出每行的最高值。所以从上往下读,在这个例子中,它会读:3,3,1,1,5,0.04,10等等 谢谢 链接到文件 M代码:Excel 比较列返回最大功率查询,excel,comparison,office365,powerquery,customcolumn,Excel,Comparison,Office365,Powerquery,Customcolumn,我有来自多个供应商的数据,希望进行比较。下图中显示的数据之前已经使用power query通过一系列步骤进行了转换。最后一步是旋转供应商列(在本例中由X、Y、Z组成),以便可以比较这些新列并返回最大值 如何比较X、Y和Z列中的值来执行此操作?重要的是,XY和Z不一定是唯一的供应商。如果我将A作为新供应商添加到原始数据中,将生成一个新的列A,我希望将其包括在比较中,以便在末尾的列处输出每行的最高值。所以从上往下读,在这个例子中,它会读:3,3,1,1,5,0.04,10等等 谢谢 链接到文件 M
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Material", type text}, {"Residual Solvents", type text}, {"RMQ", type text}, {"COA", type text}, {"Technical Data Sheet", type text}}),
//Replace Time and null with blank
#"Replaced Value" = Table.ReplaceValue(#"Changed Type","00:00:00","",Replacer.ReplaceText,{"Material", "RMQ", "Residual Solvents", "Technical Data Sheet", "COA"}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value",null,"",Replacer.ReplaceValue,{"Material", "RMQ", "Residual Solvents", "Technical Data Sheet", "COA"}),
//Trims all whitespace from user
#"Power Trim" = Table.TransformColumns(#"Replaced Value1",{{"Material", #"PowerTrim", type text}, {"Residual Solvents", #"PowerTrim", type text}, {"RMQ", #"PowerTrim", type text}, {"COA", #"PowerTrim", type text}, {"Technical Data Sheet",#"PowerTrim", type text}}),
//Unpivot to develop a single column of solvent/metals/date data
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Power Trim", {"Material", "Supplier"}, "Attribute", "Value"),
//split into rows by line feed
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Unpivoted Other Columns",
{{"Value", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Value"),
#"Trimmed Text" = Table.TransformColumns(#"Split Column by Delimiter",{{"Value", Text.Trim, type text}}),
//filter out the blank rows
#"Filtered Rows" = Table.SelectRows(#"Trimmed Text", each ([Value] <> "" and [Value] <> "Not Provided")),
//Add custom column for separating the tables
#"Added Custom" = Table.AddColumn(#"Filtered Rows", "Custom", each try Date.FromText([Value]) otherwise
if [Value] = "Heavy Metals" or [Value] = "Residual Solvents" or [Value] = "Other" then [Value] else null),
#"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", type text}}),
#"Filled Down" = Table.FillDown(#"Changed Type1",{"Custom"}),
//Filter the value and custom columns to remove contaminant type from Value column and remove dates from Custom column
#"Filtered Rows1" = Table.SelectRows(#"Filled Down", each ([Custom] = "Heavy Metals" or [Custom] = "Residual Solvents") and ([Value] <> "Heavy Metals" and [Value] <> "Residual Solvents")),
//split substance from amount
#"Split Column by Delimiter1" = Table.SplitColumn(#"Filtered Rows1", "Value",
Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Substance", "Amount"}),
//Filter for Solvents Table
#"Filtered Rows2" = Table.SelectRows(#"Split Column by Delimiter1", each ([Custom] = "Heavy Metals")),
#"Changed Type2" = Table.TransformColumnTypes(#"Filtered Rows2",{{"Amount", type number}}),
//Group by Material and Substance, then extract the Max contaminant and Source
#"Grouped Rows" = Table.Group(#"Changed Type2", {"Substance","Material", "Supplier"}, {
{"Amount", each List.Max([Amount]), type number},
{"Source", (t) => t[Attribute]{List.PositionOf(t[Amount],List.Max(t[Amount]))}, type text}
}),
#"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Substance", Order.Ascending}}),
//PIVOT to compare suppliers
#"Pivoted Column" = Table.Pivot(#"Sorted Rows", List.Distinct(#"Sorted Rows"[Supplier]), "Supplier", "Amount", List.Sum)
in
#"Pivoted Column"
let
Source=Excel.CurrentWorkbook(){[Name=“Table1”]}[Content],
#“已更改类型”=表.转换列类型(来源,{{“材料”,类型text},{“残留溶剂”,类型text},{“RMQ”,类型text},{“COA”,类型text},{“技术数据表”,类型text}),
//将Time和null替换为空
#“替换值”=表.ReplaceValue(#“更改类型”、“00:00:00”、“替换文本”、“材料”、“RMQ”、“残留溶剂”、“技术数据表”、“COA”}),
#“替换值1”=表.ReplaceValue(#“替换值”,null,”,replace.ReplaceValue,{“材料”,“RMQ”,“残留溶剂”,“技术数据表”,“COA”}),
//修剪用户的所有空白
#“Power Trim”=表格.转换列(#“替换值1”、{“材料”、#“PowerTrim”、类型text}、{“残留溶剂”、#“PowerTrim”、类型text}、{“RMQ”、#“PowerTrim”、类型text}、{“COA”、#“PowerTrim”、类型text}、{“技术数据表”、#“PowerTrim”、类型text}),
//取消PIVOT以开发溶剂/金属/日期数据的单列
#“Unpivoted Other Columns”=表.UnpivotOtherColumns(#“Power Trim”、{“Material”、“Supplier”}、“Attribute”、“Value”),
//按换行方式拆分成行
#“按分隔符拆分列”=Table.ExpandListColumn(Table.TransformColumns)(#“取消拆分其他列”,
{{“Value”,Splitter.SplitTextByDelimiter(“#(lf)”,QuoteStyle.Csv),让itemType=(type nullable text)meta[Serialized.text=true],在类型{itemType}}}中,“Value”),
#“Trimmed Text”=Table.TransformColumns(#“按分隔符拆分列”,{{{“Value”,Text.Trim,键入Text}),
/滤出空白行
#“筛选行”=表格。选择行(#“修剪文本”,每个([Value]“和[Value]“未提供”),
//添加用于分隔表的自定义列
#“添加自定义”=Table.AddColumn(#“筛选行”,“自定义”,每个重试日期)。否则为FromText([Value])
如果[Value]=“重金属”或[Value]=“残留溶剂”或[Value]=“其他”,则[Value]否则为空,
#“Changed Type1”=Table.TransformColumnTypes(#“Added Custom”,{{{“Custom”,type text}),
#“Filled Down”=Table.filledown(#“Changed Type1”,{“Custom”}),
//过滤值列和自定义列,以从值列中删除污染物类型,并从自定义列中删除日期
#“过滤行1”=表格。选择行(#“填充”,每个行([自定义]=“重金属”或[自定义]=“残留溶剂”)和([值]“重金属”和[值]“残留溶剂”),
//分质分量
#“按分隔符拆分列1”=表.拆分列(#“筛选行1”,“值”,
Splitter.SplitTextByEachDelimiter({“”},QuoteStyle.Csv,true),{“物质”,“数量”}),
//溶剂表过滤器
#“筛选行2”=表格。选择行(#“按分隔符1拆分列”,每个([自定义]=“重金属”),
#“Changed Type2”=Table.TransformColumnTypes(#“Filtered Rows2”,{{{“Amount”,type number}),
//按材料和物质分组,然后提取最大污染物和来源
#“分组行”=表组(#“更改类型2”、{“物质”、“材料”、“供应商”}{
{“Amount”,每个List.Max([Amount]),键入number},
{“Source”,(t)=>t[Attribute]{List.PositionOf(t[Amount],List.Max(t[Amount]),键入text}
}),
#“排序行”=表.Sort(#“分组行”,{{“实质”,Order.升序}),
//重点比较供应商
#“数据透视列”=表.Pivot(#“排序行”,List.Distinct(#“排序行”[Supplier]),“Supplier”,“Amount”,List.Sum)
在里面
#“旋转柱”
- 添加一个以零(0)开头的索引列
- 添加自定义列:
- 然后删除索引列
- 生成要求和的相关列名的列表。
- 我们从该列表中排除前三个列名
- 请注意,我们在为列名列表添加索引列之前参考了步骤。如果我们参考前面添加索引列的实际步骤,我们还必须删除最后一个列名
- 选择相关列
将返回与索引号对应的记录{[Index]}
- 将记录转换为列表并使用
list.Max
=List.Max(
Record.ToList(
Table.SelectColumns(#"Added Index",
List.RemoveFirstN(
Table.ColumnNames(#"Pivoted Column"),3)){[Index]}))