2016-12-13 2 views
0

Я пытаюсь создать вычисляемое поле в PowerPivot Excel, и у меня возникают проблемы с получением результатов, которые я хочу. В частности, я пытаюсь получить имя элемента с наивысшим значением из последующего столбца в результатах предложения суммирования или groupby.Как получить идентификатор максимального значения при использовании Summarize

Образец данных:

Sample Data:

Расчет в два этапа:

  1. просуммировать # Часов по проекту
  2. Возвращает имя/ID проекта с максимальной суммой

В этом примере конечный результат должен быть «D», так как «D» s Sum of Hours является самым высоким (10).

Я могу определить, наибольшее количество часов с помощью этого вычисляемого поля:

Test:=MAXX(Summarize(ExampleTable, [Project], "TotalHours", Sum([Hours])), [TotalHours])

я не уверен, как либо изменить это вычисляемое поле или создать новое вычисляемое поле, чтобы вернуться " D».

Дальнейшее усложнение результатов, результаты должны принимать текущий контекст фильтра в пример, чтобы результаты всегда были правильными, независимо от того, что делает пользователь. Вот более широкий набор образцов данных и ожидаемых результатов:

Complicated Example

Вот ожидаемые результаты в плане часов. Для каждой желтой ячейки я хочу, чтобы результатом вычисленного поля было название проекта (A-E).

Expected results

Вот пример фактического отчета, показывающий MaxHours вместо названия проекта. Моя цель - показать название проекта вместо MaxHours. (Не забудьте проигнорировать промежуточные итоги).

Sample Report

MaxHours:=MAXX(SUMMARIZE(Table1,[Project],"Total Hours",sum([Hours])),[Total Hours])

Вот этот пример без подытог:

Sample results

ПРИМЕЧАНИЯ: Мы не можем предположить, никаких связей для целей данного вопроса.

+0

В этой сводной таблице, что вы поделились, кажется, что вы уже используете «Проект» в качестве параметра строки. Вы имели в виду группу? Например, в строке 4 у вас есть проект D, так как значения будут чем-то другим, кроме проекта D? – RedVII

+0

@ RedVII - хороший вопрос. Я использую «Проект» как измерение строки ТОЛЬКО для иллюстрации желаемых результатов. Окончательный отчет НЕ будет иметь проект в сводной таблице ... просто другие измерения. Имеет ли это смысл. Если это полезно, я могу опубликовать изображение этого (так как я могу рассчитать желаемые часы, а не проект) – KingOfTheNerds

+0

Gotcha, я думаю, я понимаю, что вы имели в виду. Я отправлю свою попытку немного. – RedVII

ответ

1

Я думаю, что самый простой способ определить проект с максимальным количеством часов может быть выполнен с использованием встроенных инструментов в таблицах сводных таблиц, таких как верхний N или сортировки.

Однако это решение рассчитывается исключительно с использованием DAX.

Сначала создайте вычисляемый столбец:

Rank = 
RANKX (
    ExampleTable, 
    CALCULATE (
     SUM (ExampleTable[Hours]), 
     FILTER (ExampleTable, [Project] = EARLIER (ExampleTable[Project])) 
    ), 
    , 
    , 
    DENSE 
) 

Затем использовать этот столбец для определения Id проекта/Name пути создания мер:

Max Hours Project = 
CALCULATE (
    FIRSTNONBLANK (ExampleTable[Project], 0), 
    FILTER (ExampleTable, [Rank] = 1) 
) 

В этом случае я использовал FIRSTNONBLANK потому что имя проекта в вашем примере - это текст. Если это число, вы можете вместо этого заменить его на функцию MAX.

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

Дайте мне знать, если это поможет.

+0

Отличный ответ, вы сделали это гораздо проще, чем я собирался подойти к нему! – RedVII

+0

Я очень ценю предложения, однако я не верю, что это работает, потому что ранг должен измениться в зависимости от текущего контекста фильтра. Использование расчетного столбца не позволяет этого сделать. Я обновлю свой первоначальный вопрос, чтобы включить пример того, как это влияет на вещи. Кроме того, я не могу использовать собственные возможности PivotTable (например, сортировку), потому что это необходимо включить в более крупный отчет. – KingOfTheNerds

+0

@ RedVII, К сожалению, первоначальная версия OP была очень короткой относительно полных запросов. Вы тоже подходили к ней, и функция TOPN пришла мне в голову, но я ее не реализовал. Удачи! –

1

Хорошо, вот мое решение, представленное ниже. Кажется, это работает. Обратите внимание, что в этих данных есть связи (например, у собак и баров есть связи между A и C, поэтому он выбрал A), но вы, надеюсь, не будете иметь эту проблему в своем реальном наборе данных.

enter image description here

Решение:

1) Создайте меру, я назвал его "Часы Total". Важно указать ALLEXCEPT() для всех полей, которые вы хотите, чтобы иметь возможность просверлить это путем (в данном случае, это будет «лицо» и «Тип»:

CALCULATE(SUM([Hours]),ALLEXCEPT(ExampleTable,ExampleTable[Project],ExampleTable[Person],ExampleTable[Type])) 

2) Создать меру, я назвал его «Top Project». Это измеряет просто вычисляет верхний проект, используя функцию TOPN(), используя предыдущую меру. В случае связей я завернул FIRSTNONBLANK() вокруг него.

=FIRSTNONBLANK(TOPN(1,VALUES(ExampleTable[Project]),[Hours Total]),1) 

Надеется, что это помогает

+0

Большое спасибо - это отличный вариант, но мне интересно, есть ли способ сделать это, не указывая все возможные размеры, поскольку это может быть нецелесообразным?Я пытаюсь сделать что-то вроде этого: https://www.powerpivotpro.com/2012/06/top-selling-product-using-firstnonblank/, за исключением того, что часть VALUES() должна исходить от чего-то вроде SUMMARIZE/CALCULATETABLE/GROUPBY вместо самих необработанных данных. Мы можем игнорировать проблемы, создаваемые связями. – KingOfTheNerds

+0

Хм, вы знаете, в этом случае, если я изменю эту первую меру просто как SUM ([Hours]), тогда она все равно будет работать точно так же, потому что в этом случае ALLEXCEPT() не требуется даже, поскольку часы сокращаются по всем размерам, которые нас волнуют. Так что, возможно, вам удастся избежать использования ALLEXCEPT. К сожалению, это то, где мои знания тоже заканчиваются, мне действительно не нужно было указывать кучу столбцов в некоторых запросах, но пока я не знаю об обходном пути. – RedVII

Смежные вопросы