Страницы: 1
RSS
DAX: Мера по показателю с учетом наличия данных в связной таблице
 
Всем привет!
Есть два стула две таблицы - факт и план + справочники, их связывающие.
Необходимо посчитать меру, вычисляющую бюджет, который равен факту, если есть факт, и плану, если факта нет.
Вроде все элементарно, но никак не могу совладать с синтаксисом.
Пробовал сделать что-то вроде Бюджет_факт + Бюджет план (фильтр(план; дата = даты в таблице факт, где бюджет факт = 0)), но не выходит.
Поиск похожих тем результатов не дал.
 
По вашим данным:
Факт-прогноз:=CALCULATE([Факт_сумма];FILTER('дата';'дата'[дата]<=TODAY()))+CALCULATE([План_сумма];FILTER('дата';'дата'[дата]>TODAY()))

сегодняшний день и ранее - факт. позднее - план
Изменено: alexleoix - 18.04.2019 15:06:29
 
Добрый день!
спасибо за ответ, но он не подходит, т.к. факт не всегда есть по сегодня, то есть таблицу план надо отфильтровать по дате > максимальной даты в таблице факт, а как это сделать я не могу понять.
 
Доброе время суток
Цитата
PavelZakharov написал:
бюджет, который равен факту, если есть факт, и плану, если факта нет.
А почему не в лоб?
Код
Бюджет1 := IF(ISBLANK([Факт_сумма]); [План_сумма]; [Факт_сумма])
 
Андрей VG,

Проблема в том, что если в периоде есть хотя бы 1 день с фактом, то [факт_сумма] уже не ISBLANK.
Стоит убрать даты из среза, и Ваша формула будет считать только по таблице факт.
А нужно, чтобы вне зависимости от выбранного среза (по дням или же за весь выбранный период) логика подсчета не менялась.
 
Цитата
PavelZakharov написал:
А нужно, чтобы вне зависимости от выбранного среза (по дням или же за весь выбранный период) логика подсчета не менялась
Так вы не стесняйтесь, опишите ту самую логику. Пока всё что имеем
Цитата
PavelZakharov написал:
Необходимо посчитать меру, вычисляющую бюджет, который равен факту, если есть факт, и плану, если факта нет.
 
Андрей VG,
ТЗ не совсем корректное.
Формула должна брать за дни, где есть факт - факт, а за дни, где факта нет - план.
В прикрепленном примере по "товару 2" результат за месяц = 5946
Изменено: PavelZakharov - 26.04.2019 18:12:31
 
Цитата
PavelZakharov написал:
брать за дни, где есть факт - факт, а за дни, где факта нет - план.
Тогда, вариант.

Факт_приближённый := [Факт_сумма] + Calculate([План_сумма]; CalculateTable('дата'; Filter('факт'; IsBlank('факт'[бюджет])))
Поспешишь - людей насмешишь, тем более со смартфона.
Пока лобовое решение.
Код
Факт_приближённый := [Факт сумма] + [План сумма] - CALCULATE([План сумма]; CALCULATETABLE('дата'; 'факт'))
Изменено: Андрей VG - 26.04.2019 20:00:58
 
Такой вариант?
Работает если в таблице план есть дата и продукт
добавляем в таблицу План столбец Fact - сумма столбца [бюджет] в отфильтрованной по полям [дата] и [товар] таблицы Факт текущего контекста строки
Код
Budget:=
SUMX (
    ADDCOLUMNS (
        'план',
        "fact", CALCULATE (
            SUMX (
                FILTER ( 'факт', 'факт'[дата] = [дата] && 'факт'[товар] = [товар] ),
                'факт'[бюджет]
            )
        )
    ),
    IF ( [fact] = BLANK (), [бюджет], [fact] )
)

Изменено: DrillPipq - 26.04.2019 22:28:05
 
Андрей VG,
Ваше решение - то, что нужно, спасибо!

DrillPipq,
добавлять показатель одной таблицы в другую - не вариант, т.к. у двух таблиц разное кол-во группировок (детализаций), в отличие от упрощенного примера.
 
Андрей VG,

Еще вопрос по формуле.
Если в факте в определенные дни совсем нет продаж, а план есть, то он формулой посчитается.
Можно ли написать формулу так, чтобы Бюджет = факт + план (дата > последней даты факта).
И чтобы вместе с тем учитывалось, что по разным позициям последняя дата факта может различаться.
 
Цитата
PavelZakharov написал:
Бюджет = факт + план (дата > последней даты факта)
Версия для Power Pivot 2016 и новее
Код
Бюджет := Var lastFactDate = MAXX( CALCULATETABLE('дата'; 'факт'); 'дата'[дата])
Return [Факт сумма] + CALCULATE([План сумма]; FILTER('дата'; 'дата'[дата] > lastFactDate))
Увы, больше чем полгода с DAX не работаю, как для 2013 и старше идей нет. Да и в той, что привёл, по идее можно попроще сделать, по идее...
Updated
А если припасть к основам.
Код
Бюджет = [Факт_сумма] + CALCULATE([План_сумма]; FILTER('дата'; 'дата'[дата] >LASTDATE('факт'[дата])))

Код
Бюджет = [Факт_сумма] + CALCULATE([План_сумма]; FILTER('дата'; 'дата'[дата] > LASTNONBLANK('дата'[дата]; COUNTROWS('факт'))))
Изменено: Андрей VG - 30.04.2019 23:07:48
 
Цитата
PavelZakharov написал:
Если в факте в определенные дни совсем нет продаж, а план есть, то он формулой посчитается.
А если у вас совсем не будет продаж - на какую дату вы будете считать план? Вам нужно ещё одно условие в формулу добавить - продан ли товар в отчётном периоде возможно с проверкой на определённую дату
 
Цитата
PavelZakharov написал:
DrillPipq , добавлять показатель одной таблицы в другую - не вариант, т.к. у двух таблиц разное кол-во группировок (детализаций), в отличие от упрощенного примера.
Исходя из  вашего первичного условия измерение работает верно

Немного извращенно, но то же работает да же с пропущенными данными в плане или факте
Код
Budget_2:= SUMX (

    ADDCOLUMNS (

        GENERATE ( 'дата'; 'товар' );

        "MaxFact"; CALCULATE ( MAX ( 'факт'[дата] ); ALL ( 'дата' ) );

        "FactRevenue"; CALCULATE ( SUM ( 'факт'[бюджет] ) );

        "PlanRevenue"; CALCULATE ( SUM ( 'план'[бюджет] ) )

    );

    IF ( [дата] < [MaxFact]; [FactRevenue]; [PlanRevenue] )

)
Изменено: DrillPipq - 01.05.2019 09:07:14
Страницы: 1
Наверх