Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Power Pivot. Суммироватние с нарастающим итогом по 2м условиям (дата и время).
 
Здравствуйте! Прошу указать на мою ошибку в формуле DAX (во вложении). Нужен аналог функции СУММЕСЛИМН, которая будет суммировать значения по 2м условиям (дата и время). Все это необходимо для расчета показателя нарастающим итогом за сутки по получасам.

В поиске нашел несколько подобных тем, где используются функции ALL и EARLIER. Я не совсем понимаю, что они делают и куда их нужно добавить к моей формуле. Буду благодарен за помощь.
 
EARLIER тут ни при чем, так как вы используете формулу в сводной, а не в вычисляемом столбце
Код
=
CALCULATE (
    SUM ( [Числитель] );
    FILTER (
        ALL ( 'Таблица1'[Дата]; 'Таблица1'[Время] );
        'Таблица1'[Дата] = MAX ( 'Таблица1'[Дата] )
            && 'Таблица1'[Время] <= MAX ( 'Таблица1'[Время] )
    )
)
F1 творит чудеса
 
Спасибо! Можете на пальцах объяснить каждый шаг в формуле, чтобы я смог понять логику?
 
Код
=
CALCULATE (                           /* функция которая вычисляет выражение в первом аргументе применив к нему фильтры из второго аргумента */
    SUM ( [Числитель] );           /* считаем сумму в контексте фильтров заданных ниже */
    FILTER (
        ALL ( 'Таблица1'[Дата]; 'Таблица1'[Время] );                 /* снимаем фильтры по дате и времени, которые задает сводная таблица */
        'Таблица1'[Дата] = MAX ( 'Таблица1'[Дата] )                  /* задаем новый фильтр по дате */
            && 'Таблица1'[Время] <= MAX ( 'Таблица1'[Время] )   /* задаем новый фильтр по времени */
    )
)
Вот горшок пустой, он предмет простой...
 
Большое спасибо! Удалось самому воссоздать данную формулу.
Код
CALCULATE(SUM([Числитель]);FILTER(ALL('Таблица1'[Дата]);'Таблица1'[Дата]=MAX('Таблица1'[Дата]));FILTER(ALL('Таблица1'[Время]);'Таблица1'[Время]<=MAX('Таблица1'[Время])))

Только я по прежнему не понимаю использование функции MAX при фильтрации времени. Все работает верно. Но почему мы в условиях задаем критерий <= MAX, ведь мы считаем нарастающим итогом с начала суток до времени, которое указано в каждой строке, а это время меньше чем MAX время в эти сутках.

Изменено: Murderface_ - 14 Июн 2019 10:33:06
 
Цитата
Murderface_ написал:
а это время меньше чем MAX время в эти сутках
Не в этих сутках, а в этой строке.
Выражение MAX('Таблица1'[Дата]) рассчитывается в стандартном контексте фильтра, т.е. вычисляется максимальное время для этой строки сводной, а вот когда CALCULATE начинает считать сумму, то сначала снимается фильтр сводной, а потом накладывается фильтр по дате и времени, таким образом для каждой новой строки сводной суммируются все строки, которые по времени случились раньше в разрезе конкретных суток.
Изменено: PooHkrd - 14 Июн 2019 11:08:53
Вот горшок пустой, он предмет простой...
 
Большое спасибо! Теперь все предельно ясно.
Изменено: Murderface_ - 14 Июн 2019 11:42:35
 
Здравствуйте! Обнаружил, что при включении общих итогов, итоговое значение считается некорректно, а именно оно равно последнему дневному значению. Это логично, ведь мы именно это и указывали в фильтре. Подскажите пожалуйста, как можно сделать, чтобы было все то же самое, но общий итог считался корректно?
 
Доброе время суток.
Offtop
Интересно, как могут сочетаться два утверждения
Цитата
Murderface_ написал:
Теперь все предельно ясно.
и
Цитата
Murderface_ написал:
Обнаружил, что при включении общих итогов, итоговое значение считается некорректно
Первое по-видимому ложное?
 
Цитата
Murderface_ написал:
итоговое значение считается некорректно ... Это логично, ведь мы именно это и указывали в фильтре
Как у вас такое в голове уживается рядом? Одно же исключает другое.
Цитата
Murderface_ написал:
как можно сделать, чтобы было все то же самое, но общий итог считался корректно?
Вы забыли показать в примере - что это значит с вашей точки зрения.
Изменено: PooHkrd - 17 Июн 2019 09:18:08
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Как у вас такое в голове уживается рядом? Одно же исключает другое.
Я имел ввиду, что общий итог с учетом текущей формулы будет считаться именно так, как это происходит сейчас. В формуле мы используем 2 фильтра: максимальная дата и максимальное время, что будет равно итоговому значению максимальной даты в исходных данных.

Цитата
PooHkrd написал:
Вы забыли показать в примере - что это значит с вашей точки зрения.
В строке с общими итогами показатель за получас должен быть равен показателю с нарастающим итогом.
 
Цитата
Андрей VG написал:
Первое по-видимому ложное?
По дням в разрезе получасов все верно. Некорректен лишь общий итог.
 
Код
=
IF (
    ISFILTERED ( 'Таблица1'[Дата] );
    CALCULATE (
        DIVIDE ( SUM ( [Числитель] ); SUM ( [Знаменатель] ); 0 );
        FILTER (
            ALL ( 'Таблица1'[Время] );
            'Таблица1'[Время] <= MAX ( 'Таблица1'[Время] )
        )
    );
    DIVIDE ( SUM ( [Числитель] ); SUM ( [Знаменатель] ); 0 )
)
F1 творит чудеса
 
Большое спасибо! Работает. Вы не могли бы объяснить формулу по шагам, чтобы можно было понять ее логику.

Попробовал воссоздать формулу самостоятельно и у меня заработал ее более простой вариант:
Код
=CALCULATE(DIVIDE(SUM('Таблица1'[Числитель]);SUM('Таблица1'[Знаменатель]);0);FILTER(ALL('Таблица1'[Время]);'Таблица1'[Время]<=MAX('Таблица1'[Время])))
Изменено: Murderface_ - 17 Июн 2019 13:32:29
 
Murderface_, в принципе, и такой вариант возможен, исходя из логики вашей задачи.
Ваша формула считает вот эту простую формулу:
Код
DIVIDE(SUM('Таблица1'[Числитель]);SUM('Таблица1'[Знаменатель]);0)

применяя к ней фильтр по времени:
Код
FILTER(ALL('Таблица1'[Время]);'Таблица1'[Время]<=MAX('Таблица1'[Время]))

В обычной строке этот фильтр оставляет фильтр по дате, который идет из помещенного в строки сводной столбца Дата.
Но по времени он берет все строки времени, меньше-равно того, что у вас в той же строке сводной.
В подитоге (по дате) получается, что берутся все строки этой даты, так как максимальное время за эту дату как раз и есть последнее время суток
В общем итоге получается всё то же самое, что и в подитоге. Фильтра по дате в общем итоге больше нет, поэтому и фильтр по времени тоже берет все строки (ведь максимальное время всех строк как раз отберет все строки)
F1 творит чудеса
 
Максим Зеленский,спасибо Вам!
 
Добрый день! Помогите пожалуйста решить проблему. Появилась необходимость показатель с нарастающим итогом в таблице (который вы мне помогли рассчитать) использовать для вычислений, как одно из условий для столбца Power Pivot. Но это не работает, не могу понять почему. Наверное вот поэтому:

Цитата
Максим Зеленский написал:
EARLIER тут ни при чем, так как вы используете формулу в сводной, а не в вычисляемом столбце

Учитывается только условие показателя за получас.

На выходе в сводной таблице не должно быть красных значений в столбце G.

При этом хотелось бы сохранить совпадение общего итога показателя за получас с общим итогом нарастающего показателя. Буду признателен за помощь.
Изменено: Murderface_ - 27 Июн 2019 10:21:25
 
Цитата
Murderface_ написал:
как одно из условий для столбца Power Pivot
Вам нужен столбец в таблице внутри модели, но не в сводной? Или нужен столбец в сводной?
Цитата
Murderface_ написал:
На выходе в сводной таблице не должно быть красных значений в столбце G.
А не могли бы вы рассказать, почему там одни значения красные, а другие не красные?

Ну и вот тут стало совсем непонятно:
Цитата
Murderface_ написал:
При этом хотелось бы сохранить совпадение общего итога показателя за получас с общим итогом нарастающего показателя.
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Вам нужен столбец в таблице внутри модели, но не в сводной? Или нужен столбец в сводной?
В сводной уже есть столбец (самый правый), который использует показатель с нарастающим итогом как условие, но это условие не срабатывает.

Цитата
Максим Зеленский написал:
А не могли бы вы рассказать, почему там одни значения красные, а другие не красные?
Это сделано просто для наглядности. Если все будет правильно, то в разрезе получасов красных цифр не будет.

Цитата
Максим Зеленский написал:
Ну и вот тут стало совсем непонятно:
Цитата
Murderface_ написал:
В строке с общими итогами показатель за получас должен быть равен показателю с нарастающим итогом.
Изменено: Murderface_ - 27 Июн 2019 12:46:12
 
Цитата
Murderface_ написал:
Цитата
Максим Зеленский написал:
А не могли бы вы рассказать, почему там одни значения красные, а другие не красные?
Это сделано просто для наглядности. Если все будет правильно, то в разрезе получасов красных цифр не будет.
Murderface_, каков критерий покраски? Иными словами, как понять не по цвету, что должно показываться, а что нет?
F1 творит чудеса
 
Максим Зеленский, критерий тот же, что и в вычисляемом поле "Знаменатель с 2 условиями":
Код
=IF([Показатель за получас (DAX)]>=0,8&&[Показатель нарастающим итогом]>=0,82;[Знаменатель])

это сделано просто для наглядности, чтобы было видно неработоспособность второго условия

Код
&&[Показатель нарастающим итогом]>=0,82

Не обращайте пожалуйста вообще внимание на форматирование, если оно сбивает с толку.

Вот более наглядно

Скрытый текст

В столбце "Знаменатель с 2 условиями" в выделенной строке должно быть пусто, согласно условиям, но 2 условие не срабатывает. Именно второе условия ссылается на формулу рассчета накопительного показателя. Это значит, что необходимо редактировать его формулу.
Изменено: Murderface_ - 27 Июн 2019 14:04:09
 
елки палки. Так вам В ИТОГЕ нужен столбец в таблице в модели данных (если да, то зачем?) или мера в сводной?
Если ваша задача получить такой столбец в сводной, это одно решение. Если в сводной он не нужен и нужно только добавить его в модель данных, это другое решение
F1 творит чудеса
 
Максим Зеленский,возможно я изначально неправильно объяснил и ввел в заблуждение. Мера нужна для отображения в сводной показателя в разрезе получасов нарастающим итогам по суткам. Но, на основании значений этого показателя будут производиться дальнейшие вычисления, также с последующим отображением в сводной в качестве других показателей, которые зависят от значения меры. Мера у нас есть в сводной таблице и показатель в сводной считается верно. Теперь нужно сделать другой рассчет ссылаясь на эту меру.
Изменено: Murderface_ - 27 Июн 2019 15:49:29
 
Если нельзя одну и ту же меру использовать и для сводной и в качестве условия, то может тогда лучше создать вторую меру, только для условия в вычисляемом столбце.

Максим Зеленский, упростил пример.
Изменено: Murderface_ - 28 Июн 2019 08:42:25
 
Что должно быть в итоге за день по этому столбцу - сумма получасовых "правильных" знаменателей за день, или для итога за день должна выполняться своя проверка?
Аналогично по итогу за все дни - что должно быть в этом столбце - сумма получасовых правильных знаменателей за каждый день, или своя проверка?
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
сумма получасовых "правильных" знаменателей за день
Цитата
Максим Зеленский написал:
сумма получасовых правильных знаменателей за каждый день
 
Мера
Код
=
SUMX (
    ADDCOLUMNS (
        SUMMARIZE ( 'Таблица1'; 'Таблица1'[Время]; 'Таблица1'[Дата] );
        "column"; IF (
            [Показатель за получас (DAX)] >= 0,8
                && [Показатель нарастающим итогом] >= 0,82;
            CALCULATE ( SUM ( [Знаменатель] ) )
        )
    );
    [column]
)
F1 творит чудеса
 
Максим Зеленский,спасибо! Но это не совсем то, что мне нужно. Нужна мера, но чтобы я мог сослаться на нее как на условие в вычисляемом столбце. Ваш вариант выдает уже готовое значение в сводной.

Например я создаю столбец в Power Pivot с формулой:
Код
=IF([Показатель за получас (DAX)]>0,8;1)
где Показатель за получас (DAX) это мера. Мы видим, что на получасовых интервалах где показатель >80%, появились единицы.

То же самое требуется и с мерой Показатель нарастающим итогом. Чтобы я указал ее в качестве условия для столбца Power Pivot, например:
Код
=IF([Показатель нарастающим итогом]>0,8;1)

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

Изменено: Murderface_ - 28 Июн 2019 10:30:27
 
1) #22
Цитата
Максим Зеленский написал:
вам В ИТОГЕ нужен столбец в таблице в модели данных (если да, то зачем?) или мера в сводной?
2)
Цитата
Murderface_ написал:
будут производиться дальнейшие вычисления, также с последующим отображением в сводной в качестве других показателей
3) мне надоело ходить по кругу и выпрашивать, что же надо. Это последняя помощь в этой теме.
Код
Вычисляемый столбец Знаменатель с двумя условиями =
IF (
    AND (
        IF (
            'Таблица1'[Числитель] > 'Таблица1'[Знаменатель];
            1;
            DIVIDE ( 'Таблица1'[Числитель]; 'Таблица1'[Знаменатель]; 0 )
        ) >= 0,8;
        CALCULATE (
            DIVIDE ( SUM ( [Числитель] ); SUM ( [Знаменатель] ); 0 );
            FILTER (
                ALLEXCEPT ( 'Таблица1'; 'Таблица1'[Дата] );
                'Таблица1'[Время] <= EARLIER ( 'Таблица1'[Время] )
            )
        ) >= 0,82
    );
    'Таблица1'[Знаменатель]
)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Это последняя помощь в этой теме
:cry:  
Страницы: 1
Читают тему (гостей: 1)
Наверх