Пользовательская функция Power Query, без увеличения, все либо 1/0: почему? - PullRequest
1 голос
/ 28 апреля 2020

Я очень разочарован файлом и пользовательским столбцом. Я не понимаю, что не работает.

У меня есть файл с одним столбцом, идентификатор которого я пытаюсь продолжить, основываясь на значениях в столбце под названием География.

География содержит страны и регионы.

Италия и Великобритания - две мои страны. Регионы обозначены буквой: - ИталияZ обозначает регион, Италия - другой регион. - UKM обозначает регион, UKY обозначает другой регион.

У меня есть еще один столбец под названием «ID» с кодом, который соответствует стране (AB равен Италии, B C равен Великобритании).

Диапазон чисел обозначает происшествия в регионе. Регион Z в Италии начинается с 0 и заканчивается на 4000 Регион B в Италии начинается с 3000 и заканчивается на 6000

Регион M в Великобритании начинается с 0 и заканчивается на 5000 Регион Y в Великобритании начинается с 5000 и заканчивается на 9999

Я пытаюсь логически продолжить мой столбец с соответствующими кодами стран (AB, B C ...) и номером вхождения.

Вот описание данных:

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

1 Ответ

1 голос
/ 28 апреля 2020

Вы выполняете операции на предыдущем шаге и ожидаете, что они будут применяться итеративно, как столбец Excel, ссылающийся на предыдущую строку.

Например, в следующем примере List.Max, примененный к предыдущему шагу, представляет собой постоянное значение и не зависит от того, из какой строки вы вызываете его на текущем шаге:

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

(Спросите себя, почему вы ожидаете, что это возвратит разные максимальные значения для разных строк.)


Язык M этих запросов не предназначен для рекурсивной работы, как вы ожидаете. Тем не менее, это все еще возможно, просто не так, как вы думаете.

Это «Почему», который вы спрашиваете. Для чего-то, что работает, я бы предложил написать новый вопрос, ссылающийся на этот, но с упрощенным примером для ясности и простоты ответа (здесь слишком много отвлекающих деталей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...