Преобразовать оператор DAX if в Power Query (или M)? - PullRequest
0 голосов
/ 29 февраля 2020

Мне нужно создать вычисляемый столбец, чтобы отфильтровать таблицу табличной модели со следующей структурой:

Table1

| ID  | Attr A    | Attr B | Value |
|-----|-----------|--------|-------|
| 123 | text here | blah   | 130   |
| 123 | blah      | blah   | 70    |
| 456 | blah      | blah   | 90    |
| 456 | blah      | blah   | 110   |

И я хочу следующее создается новый столбец:

| ID  | Attr A    | Attr B | Value | MaxValue |
|-----|-----------|--------|-------|----------|
| 123 | text here | blah   | 130   | TRUE     |
| 123 | blah      | blah   | 70    | FALSE    |
| 456 | blah      | blah   | 90    | FALSE    |
| 456 | blah      | blah   | 110   | TRUE     |

Я хотел бы создать вычисляемый столбец, используя Power Query, эквивалентный следующему утверждению DAX, которое возвращает TRUE, если столбец Значения является наибольшим для дано ID , иначе - ЛОЖЬ.

= IF(CALCULATE(MAX('Table1'[Value]),ALLEXCEPT('Table1','Table1'[ID])) = 'Table1'[Value], TRUE(), FALSE())

PS Я использовал редактор языка M по умолчанию для генерации оператора if shell, так что это похоже на то, что я ищу:

= Table.AddColumn(#"Changed Type", "MaxValue", each if [#"[Value]"] = 'some logic here' then true else false)

1 Ответ

1 голос
/ 02 марта 2020

Если ваша исходная таблица настроена так и называется Table1:

enter image description here

Тогда этот M-код должен делать то, что вы просите:

let
    Source = Table1,
    #"Grouped Rows" = Table.Group(Source, {"ID"}, {{"ValueMax", each List.Max([Value]), type number}, {"AllData", each _, type table [ID=text, Attr A=text, Attr B=text, Value=number]}}),
    #"Expanded AllData" = Table.ExpandTableColumn(#"Grouped Rows", "AllData", {"Attr A", "Attr B", "Value"}, {"Attr A", "Attr B", "Value"}),
    #"Added Custom" = Table.AddColumn(#"Expanded AllData", "MaxValue", each [ValueMax]=[Value]),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"ID", "Attr A", "Attr B", "Value", "MaxValue"})
in
    #"Removed Other Columns"

Он должен дать вам такой результат:

enter image description here

...