Максимальная разница в группе - PullRequest
0 голосов
/ 07 сентября 2018

Для каждой группы я хотел бы найти максимальное наблюдение для VarB и вычесть первое значение в каждой группе Var A. Max (VarB для group1) - FirstObs (VarA group1). Надеюсь, это имеет смысл. Ниже приведены желаемые результаты в виде таблицы и моя попытка кода

 VarA  VarB  Group  Result    Index
  10     11    1   (10-11=-1)   1
  11      4    1   (10-11=-1)   2
 ...
  12     7     1   (10-11=-1)   5
  9     11     2   (9-11=-2)    6
  13      4    2   (9-11=-2)    7
 ...
  11     7     2   (9-11=-2)    11

Maxdiff = 
   VAR CurrGroup = Table1[Group]
   VAR MaxVal = CALCULATE(MAX(Table1[VarB]), ALL(Table1), Table1[Group] = CurrGroup)
   VAR MinIndex = CALCULATE(MIN(Table1[Index]), ALL(Table1), Table1[Group] = CurrGroup)
   RETURN LOOKUPVALUE(Table1[VarB], Table1[Group], MaxVal) - 
          LOOKUPVALUE(Table1[VarA], Table1[Index], MinIndex)

Я получаю сообщение об ошибке "была предоставлена ​​таблица с несколькими значениями, где ожидалось одно значение"

1 Ответ

0 голосов
/ 07 сентября 2018

Проблема в том, что вы пытаетесь найти значение VarB для Group, которое соответствует вашему MaxVal. Это не имеет смысла, так как вы, вероятно, не хотите сопоставлять число Group со значением VarB. Он возвращает несколько значений, поскольку каждая группа имеет несколько VarB значений, связанных с ней.

Я думаю, вам нужно следующее:

MaxDiff = 
    VAR CurrGroup = Table1[Group]
    VAR MaxVal = CALCULATE(MAX(Table1[VarB]), ALL(Table1), Table1[Group] = CurrGroup)
    VAR MinIndex = CALCULATE(MIN(Table1[Index]), ALL(Table1), Table1[Group] = CurrGroup)
    RETURN MaxVal - LOOKUPVALUE(Table1[VarA], Table1[Index], MinIndex)

Возвращает 1 и 2 для [Group] = 1 и 2. (Ваше вычитание оглядывается назад в вашем вопросе.)

...