Страницы: 1
RSS
РР. Поиск максимального условия и суммирование значений
 
Всем привет!
Есть Excel с перечень проектов, в эти проекты периодически заносятся (обновляются) данные.
Мне нужно найти последнюю запись по каждому проекту, а потом просуммировать все значения.
Решение нужно через пивот.
Вроде (классика) через SUMMARIZE нужно решать, а не получается.

Буду благодарен за помощь!  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, не знаю, как Вам нужно решить. А точнее, будет ли зависеть от срезов результат. То есть пользователь выбрал Индексы 1-2, то у всех нужно найти максимальный среди 1-2.

Если нет, то оптимальнее решить вычисляемым столбцом (он один раз вычислится) и простой мерой:
Код
is_last_record =
VAR curProj = data[Номер проекта]
VAR curInd = data[Индекс (№записи)]
VAR lastInd =
    MAXX ( FILTER ( data; data[Номер проекта] = curProj ); data[Индекс (№записи)] )
VAR result = curInd = lastInd
RETURN
    result

Код
meas_1:=CALCULATE ( SUM ( data[Значение] ); data[is_last] )


Если же зависит, то (будет менее производительной):
Код
meas_2:=
SUMX (
    VALUES ( data[Номер проекта] );
    CALCULATE (
        SUM ( data[Значение] );
        LASTNONBLANK ( data[Индекс (№записи)]; COUNTROWS ( data ) )
    )
)
 
Крутое решение. Работает.
Благодарю!  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Мой вариант.
1. Доп. столбец "Последнее значение"
Код
= 
VAR cond =  CALCULATE(
                   MAX('Таблица1'[Индекс (№записи)]);
                   ALLEXCEPT('Таблица1'; 'Таблица1'[Номер проекта]))
RETURN 
IF('Таблица1'[Индекс (№записи)] = cond; CALCULATE(SUM('Таблица1'[Значение])); BLANK())


2. Мера =

Код
=SUM('Таблица1'[Последнее значение])


Норм?
Изменено: Дмитрий Никитин - 25.04.2024 23:24:18
Шлюхогон42
 
Дмитрий Никитин, норм, но
CALCULATE(SUM('Таблица1'[Значение]))
Замените на просто
'Таблица1'[Значение]

Во-первых, с точки зрения производительности. Иначе Вы будете всю таблицу фильтровать по контексту текущей строки, чтобы вытащить значение из текущей строки. Зачем?)
Во-вторых, что будет в Вашем расчете в случае двух полностью одинаковых строк в данных (являющихся последними по индексу)? :) Подумайте.
 
Цитата
surkenny написал:
Замените на просто'Таблица1'[Значение]
Спасибо за подсказку! Я ещё не такой опытный юзер DAX, чтобы замечать такие тонкости :)

Цитата
surkenny написал:
что будет в Вашем расчете в случае двух полностью одинаковых строк в данных (являющихся последними по индексу)?  Подумайте.
Вы намекаете на то, что сумма задвоится? Но ведь индекс будет разным, значит не должно.
Вот я добавил ещё 2 значения в проект АЛЬФА и последнее (с индексом 6) тоже 360 - как и у ЗЕТА
скрин

и всё корректно посчиталось.
Шлюхогон42
 
Дмитрий Никитин, я же и не придирался, учитесь, конечно :)
Второй пункт я написал, скорее, для общего случая, где аналог столбца «индекс» будет не уникальным внутри проекта. То есть задублируется при равенстве и индексов.
 
surkenny, я с вашего позволения ещё поспрашиваю по этой задачке.
Я пытался сделать это (то есть вывести значения по максимальному индексу в разрезе проекта)  в одно действие по примеру формулы нарастающего итога.
Код
=CALCULATE(
      sum('Таблица1'[Значение]);
      FILTER(
              ALL('Таблица1');
              'Таблица1'[Индекс (№записи)] = MAX('Таблица1'[Индекс (№записи)])))

Вопрос: почему не получается? Можно ли как-то задать одной формулой (без если) вывод значения по максимальному индексу в разрезе проекта?
Изменено: Дмитрий Никитин - 26.04.2024 15:56:08
Шлюхогон42
Страницы: 1
Наверх