Страницы: 1
RSS
Определение максимального значения в таблице среди определённых условий., Определение максимального значения в таблице среди определённых условий.
 
Друзья, помогите пожалуйста решить вот такую задачку:
Есть таблица в который имеются фамилии и коды торговых точек. По каждой торговой точке проставлено количество отработанных дней сотрудником.
Нужно  понять по какой именно торговой точке сотрудник отработал больше дней.
Важно чтобы в итоговом результате было: ФИО сотрудника, код торговой тт и количество отработанных дней.
Возможно кто-то уже сталкивался с подобным, буду признателен за помощь.
Файл прилагаю.
Изменено: Вадим - 24.04.2022 21:07:37
 
Цитата
Вадим написал:
Файл прилагаю.
И где?
 
Видимо что-то пошло не так, приложил.  
 
Как-то так. (Формула массива).
=INDEX(B$2:B$19;MATCH(LARGE($D$2:$D$19;ROW(A1));$D$2:$D$19;0))
Изменено: memo - 25.04.2022 01:34:21
 
memo, и снова те же ошибки.
MATCH(LARGE($D$2:$D$19;ROW(A3));$D$2:$D$19;0) что будет если будут равные значения у разных ?
Ну и в целом, задача состоит из двух - уникальный список сотрудников , и нахождение по какой точке он отработал больше всего дней.
Последнее можно так
=RIGHT(MAX(IF($B$2:$B$19=F2;$D$2:$D$19*10^4+$C$2:$C$19));4)
По вопросам из тем форума, личку не читаю.
 
Вариант с формулой
Код
=INDEX(C$2:C$2000;AGGREGATE(15;6;ROW($1:$2000)/(D$2:D$2000=AGGREGATE(14;6;$D$2:$D$2000/(B$2:B$2000=G2);1))/(B$2:B$2000=G2);1))
 
Вариант сводной.
Если будет несколько точек с максимальным количеством дней, выведутся все такие точки.
Код
Отработано :=
SUMX (
    VALUES ( 'data'[Фамилия] );
    CALCULATE (
        VAR maxWorked =
            CALCULATE (
                MAX ( 'data'[Количество отработанных дней] );
                ALL ( 'data'[Город]; data[Код Торговой точки] )
            )
        VAR tradePointsWithMaxWorked =
            FILTER ( 'data'; 'data'[Количество отработанных дней] = maxWorked )
        VAR result =
            SUMX ( tradePointsWithMaxWorked; 'data'[Количество отработанных дней] )
        RETURN
            result
    )
)
Изменено: surkenny - 25.04.2022 10:24:51
 
Можно так если 2019 или 365
ячейка F2
Код
=УНИК(B2:B19;ЛОЖЬ;ЛОЖЬ)

ячейка G2
Код
=МАКСЕСЛИ($D$2:$D$19;$B$2:$B$19;F2)

ячейка H2
Код
=ИНДЕКС($A$2:$D$19;ПОИСКПОЗ(F2&G2;$B$2:$B$19&$D$2:$D$19;0);3)

Только не понятно, что делать если сотрудник отработал на двух точках максимальное количество дней
Изменено: Msi2102 - 25.04.2022 12:33:20
 
Power Query
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Город", type text}, {"Фамилия", type text}, {"Код Торговой точки", Int64.Type}, {"Количество отработанных дней", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Фамилия"}, {{"Count", each List.Max([Количество отработанных дней]), type number}}),
    #"Merged Queries" = Table.NestedJoin(#"Grouped Rows",{"Фамилия", "Count"},#"Table1 (2)",{"Фамилия", "Количество отработанных дней"},"NewColumn",JoinKind.LeftOuter),
    #"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"Код Торговой точки"}, {"Код Торговой точки"})
in
    #"Expanded NewColumn"
 
jakim, можно сразу а группировке отобрать строки с максимальным значением (только его вынести в отдельный шаг, чтобы не пересчитывалось для каждой строки). Такой способ будет значительно эффективнее на больших объемах:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content], 
  group = Table.Group (
    src, 
    { "Фамилия" }, 
    {
      {
        "tbl", 
        ( t ) =>
          [
            max    = List.Max ( t[Количество отработанных дней] ), 
            filter = Table.SelectRows ( t, each [Количество отработанных дней] = max )
          ][filter]
      }
    }
  ), 
  combine = Table.Combine ( group[tbl] )
in
  combine
Изменено: surkenny - 25.04.2022 13:39:15
Страницы: 1
Наверх