我有一个由prod名称组成的数据集(来自本地国家'数据库)和列,所有数字都是从他们的名字中解析出来的。
我正在构建一个数据映射器,它将产品名称重建为中央数据库中使用的标准。 Aka ProdName Size PackSize [mix optional]
产品尺寸= SUM(尺寸(i)x NumPacks(i)),i = [1,10]
数据示例(列数可以是1-10之间的任何值):
NULL
挑战在于一些数字将无关紧要,即条形码,折扣,品牌名称的部分痕迹。
我需要找到一种识别方法
如果是这样,并且回归数量超过1,则返回总大小,包的总数和"混合"。 Prod 1场景将返回 Prod1 120g包装5混合(因为120 = 20x2 + 25x2 + 30,5和5是包2 + 2 + 1的总数)。
如果回归量的数量仅为1(即数字3或更少),我想返回回归量(不是总数!)大小和packize。 即产品2方案:返回名称是 Prod2 200g包2 (而不是ProdName 400包2)
我正在构建一组辅助列。 现在我只有一个想法如何计算Prod2的情况,当有3个或更少的数字时。我正在寻找解决方案,但计划是:
还不确定Prod1的复杂案例。
我想知道你们中是否有人知道一个巧妙的伎俩?
提前致谢!
答案 0 :(得分:1)
为了得到一个好的答案,人们应该知道所有类型的可能组合。 对于提供的2个示例,这将起作用:
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "NonNullCount", each List.NonNullCount(Record.FieldValues(_))),
#"Added Conditional Column" = Table.AddColumn(#"Added Custom", "Output", each if [NonNullCount] = 4 then [ProdName] & " " & Text.From([num2]) & "g pack of "&Text.From([num1]) else [ProdName] & " "& Text.From(List.Max(List.Skip(Record.FieldValues(_),1))) & "g pack of "&Text.From([num1]) & " (mix)")
in
#"Added Conditional Column"
答案 1 :(得分:1)
这是另外两个想法。 获取值列表,添加最大值和最小值,快速分析值的列表(您可以在此处添加逻辑):
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
AddValuesList = Table.AddColumn(Source, "ValList", (x)=>
List.SelectValues(Record.ToList(Record.RemoveFields(x, "ProdName")),
(y)=> y <> null)),
AddMax = Table.AddColumn(AddValuesList, "MaxVal", each List.Max([ValList])),
AddMin = Table.AddColumn(AddMax, "MinVal", each List.Min([ValList])),
AddCnt = Table.AddColumn(AddMin, "ItemCount",
if List.Contains(List.Select([ValList], (x)=> x <> [MaxVal] and x <> [MinVal])
, [MaxVal]/[MinVal])
then [MaxVal]/[MinVal]
else null)
in
AddCnt