Power Query 自定义函数,没有增加,一切都是 1/0:为什么?

Power Query custom function, no incrementation made, everything is either 1/0: why?

我对文件和自定义列感到非常沮丧。我不明白什么不起作用。

我有一个包含一列 ID 的文件,我试图根据名为“地理”的列中的值继续该文件。

地理包含国家和地区。

意大利和英国是我的两个国家。 区域用字母标记: - ItalyZ 指定一个区域,ItalyB 指定另一个区域。 - UKM指定一个地区,UKY指定另一个地区。

我有另一个名为 "ID" 的列,其中包含与国家/地区匹配的代码(AB 等于意大利,BC 等于英国)。

数字范围表示该地区事件的发生次数。 意大利的 Z 区从 0 开始到 4000 结束 意大利B区3000以上开始到6000结束

英国的 M 区从 0 开始到 5000 结束 英国的 Y 区开始于 5000 以上,结束于 9999

我试图用匹配的国家/地区代码(AB、BC...)和出现次数从逻辑上继续我的专栏。

这里是对数据的描述:

  |---------------------|------------------|------------------|---------------------|    
  |      Nap            |       Wourf      |       ID         |      Geography      |
  |---------------------|------------------|------------------|---------------------|
  |     Uofvduba        |     Uofvduba     |    AB0000        |        ItalyZ       |
  |---------------------|------------------|------------------|---------------------|
  |      OIofvduba      |     OIofvduba    |    AB4041        |       ItalyB        |
  |---------------------|------------------|------------------|---------------------|
  |   gttrg             |      gttrg       |    BC0000        |        UKY          |
  |---------------------|------------------|------------------|---------------------|
  |      VDba           |     VDba         |    BC4001        |         UKM         |
  |---------------------|------------------|------------------|---------------------|
  |      SVuDba         |      NULL        |   NULL           |      ItalyZ         |
  |---------------------|------------------|------------------|---------------------|
  |      SnoVDGGuba     |     NULL         |   NULL           |           ItalyZ    |
  |---------------------|------------------|------------------|---------------------|
  |      SFSnouba       |       NULL       |    NULL          |         UKY         |
  |---------------------|------------------|------------------|---------------------|
  |      GDSnouba       |       NULL       |   NULL           |        UKY          |
  |---------------------|------------------|------------------|---------------------|  

我有以下 M 代码,但我不明白为什么我的自定义列的输出只是 1 或 0,而不是在最后出现的最高值上加一:

 #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Snouba", type text}, {"Snurp", type text}, {"Nabou", type number}, {"Favou 1", Int64.Type}, {"Favou 2", Int64.Type}, {"Favou 3", Int64.Type}, {"Favou 4", Int64.Type}, {"fsfsfsrewrw", type text}, {"Lamfew", type number}, {"gergerer", type text}, {"FERGT", type text}, {"SuperSum", type text}, {"GDGD", type text}, {"Geography", type text}, {"ID", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Prefix", each Text.Middle([ID],0,2), type text),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Number", each Number.FromText(Text.Middle([ID],2,5))),
    #"Added Index" = Table.AddIndexColumn(#"Added Custom1", "Index", 1, 1),
    #"Added Conditional Column" = Table.AddColumn(#"Added Index", "Number AB", each if [Prefix] = "AB" then [Number] else 0),
    #"Added Conditional Column1" = Table.AddColumn(#"Added Conditional Column", "Number BC", each if [Prefix] = "BC" then [Number] else 0),
    #"Added Conditional Column2" =  Table.AddColumn(#"Added Conditional Column1", "Number AB range below 4000", each if [Number AB] < 3999 then [Number AB] else 0),
    #"Added Conditional Column3" =  Table.AddColumn(#"Added Conditional Column2", "Number AB range above 4000", each if [Number AB] > 3999 then [Number AB] else 0),
    #"Added Conditional Column4" =  Table.AddColumn(#"Added Conditional Column3", "Number BC range above 5000", each if [Number BC] > 4999 then [Number BC] else 0),
    #"Added Conditional Column5" =  Table.AddColumn(#"Added Conditional Column4", "Number BC range below 5000", each if [Number BC] > 4999 then [Number BC] else 0),
    #"Reordered Columns" = Table.ReorderColumns(#"Added Conditional Column5",{"Snouba", "Snurp", "Nabou", "Favou 1", "Favou 2", "Favou 3", "Favou 4", "fsfsfsrewrw", "Lamfew", "gergerer", "FERGT", "SuperSum", "GDGD", "Prefix", "Number", "Number AB", "Number BC", "Number AB range below 4000", "Number AB range above 4000", "Number BC range above 5000", "Number BC range below 5000", "Index", "Geography", "ID"}),
    #"Added Custom2" = Table.AddColumn(#"Reordered Columns", "Sum", each if [Geography] = "UKM" then [Number AB range below 4000] + 1 
else if [Geography] = "UKY" then [Number AB range above 4000] + 1 
else if [Geography] = "ItalyB" then [Number BC range above 5000]
else [Number BC range below 5000] + 1)
in
    #"Added Custom2"

我添加了以下自定义列,但它也不起作用,最大数字的递增在整个列中不断重复:

if #"Changed Type1"[Geography] = "UKM" then List.Max(#"Changed Type1"[Number AB range below 4000]) + 1 
else if #"Changed Type1"[Geography] = "UKY" then List.Max(#"Changed Type1"[Number AB range above 4000]) + 1 
else if #"Changed Type1"[Geography] = "ItalyB" then List.Max(#"Changed Type1"[Number BC range above 5000]) + 1
else List.Max(#"Changed Type1"[Number BC range below 5000]) + 1

您正在对上一步进行操作,并希望它们像引用上一行的 Excel 列一样被迭代应用。

例如,在下面,应用于上一步的 List.Max 是一个常量值,不依赖于您在当前步骤中调用它的行:

List.Max(#"Changed Type1"[Number AB range below 4000]) + 1

(问问自己,为什么您会期望不同行的最大值 return 不同。)


这些查询的 M 语言并未设计为像您期望的那样递归操作。也就是说,它仍然是可能的,只是不是你想的那样。

这就是您要问的"Why"。对于确实有效的东西,我建议写一个引用这个问题的新问题,但要用一个简化的例子来清晰和易于回答(这里有太多分散注意力的细节)。