Страницы: 1
RSS
Не удается создать накопительную меру
 
Доброго времени суток. Пересмотрел кучу тем на форуме и в интернете, но так и не могу сделать меру, которая была бы аналогична столбцу с накоплением. Чтобы было понятно, что хочу получить, прикладываю файл.
В сводной таблице два поля значений "Приток прогноз" и "мера1". Нужно, чтобы мера1 считалась точно также как Приток прогноз. Стандартный механизм с дополнительным вычислением не подходит, так как для меры1 нужно будет потом делать доп. вычисление - отличие.

Создаю меру:
Код
=CALCULATE(
   SUM(income[dds_inc_dynamic]);
   FILTER(
      ALL(income[tstamp_inc]); income[tstamp_inc] <= MAX(income[tstamp_inc])
   )
)
Но с накоплением правильно считаются только общие итоги. В разрезе статей прихода накопление не учитывается.
Подскажите, пожалуйста, кто знает.
Изменено: Den_v - 29.10.2020 22:40:09
 
Доброе время суток.
Всё дело в разности трактовок какие измерения дат по tstamp_inc существуют. Стандартный движок сводных использует что-то своё, а power pivot ведёт себя так, как это есть в структуре данных. Если Максим Зеленский заглянет в теме, то возможно и объяснит, что к чему.
Некоторое костыльное приближение да втором суррогатном календаре.
Изменено: Андрей VG - 30.10.2020 11:27:39
 
Андрей VG, спасибо. Очень помогли. Решение не костыльное, а в самую точку. На самом деле, я и планировал сделать отдельную таблицу для временных меток (tstamp), так как они будут в двух таблицах. Просто не дошел до этого и решил опробовать на одной.
Однако, удивлен, что это работает только так.
 
Не, там все проще и сложнее одновременно.

На сводную действует фильтр по столбцу dds_inc_dynamic <>0. Соответственно все строки в которых в этом столбце 0, заранее исключаются из рассмотрения.
поэтому при фильтре "процент по депозиту" (item_id = 69) вообще нет строк, соответствующих какой-либо дате tstamp_inc, кроме 10.03. Поэтому и
Код
FILTER(
      ALL(income[tstamp_inc]); income[tstamp_inc] <= MAX(income[tstamp_inc])
не возвращает ничего (что легко проверить, создав меру countrows(filter....) ).
этого можно было бы избежать, переписав меру так:
Код
мера1 :=
CALCULATE (
    CALCULATE (
        SUM ( income[dds_inc_dynamic] );
        FILTER (
            ALL ( income[tstamp_inc] );
            income[tstamp_inc] <= MAX ( income[tstamp_inc] )
        )
    );
    ALL ( income[dds_inc_dynamic] )
)
Но это не подойдет, если вам действительно нужен фильтр по dds_inc_dynamic (а не только убрать 0). Чтобы убрать 0 нужно в этом столбце от них избавиться заменив 0 на BLANK (чтобы не выводить 0 там, где ничего нет). Это стоит сделать в любом случае.

Другая беда - дело в том, что по "вклад в уставной капитал" (item_id = 1) вообще нет ни одной строки в таблице income, которая соответствовала бы tstamp_inc=10.03.2020
Поэтому опять же FILTER возвращает тут пустую таблицу и мера не считается. Иными словами, для tstamp_inc=10.03.2020 формула MAX(income[tstamp_inc]) здесь будет пусто, соответственно FILTER пустой.

Поэтому правильное решение - как написал Андрей VG, сделать отдельный календарик для tstamp_inc, и использовать в заголовках столбцов сводной его, переписав соответственно меру. В таком случае не сработает AUTOEXIST (принцип, запрещающий выводить данные для несуществующих сочетаний, когда мы рассматриваем столбцы из одной таблицы, такие как dds_inc_dynamic и tstamp_inc).

Почему срабатывает встроенная мера  с накоплением - там не DAX, там MDX, и другой способ построения расчетов.
F1 творит чудеса
 
Максим Зеленский, благодарю за детальное разъяснение. Теперь вроде дошло. Думаю такие тонкости будут многим интересны.
Создав календарь timestamp, связанный с таблицей income (timestamp[tstamp] = income[tstapm_inc]) и поправив меру1, получил именно то, что хотел.
Страницы: 1
Наверх