Измерение в DAX для вычисления YTD для выбранного месяца только для Power BI

Как построить меру DAX для расчета суммы значения YTD для конкретного месяца?

здесь мы FactTable сгруппированы по месяцам. FactTable заполняется как фактическими данными, так и прогнозными данными. Единственный способ узнать, когда фактический конец-это информация в таблице [вырезать дату] в столбце [конец YTD]. В таблице [Cut of date] в столбце [End of YTD] – это таблица с одним значением – у нас есть интересный выбранный месяц, для которого мы хотим увидеть расчет YTD. В нашем случае это Март. FactTable обновляется нерегулярно каждый месяц с задержкой обычно на один месяц. Нет никакого способа связать его с функциями времени, как сегодня из-за нерегулярного обновления.

enter image description here enter image description here Мы хотели бы иметь правильное значение YTD, отображаемое в желтой карточке Visual для месяца [конец YTD]. Когда мы нажимаем на слайсер на "2018-03", мы получаем почти то, что хотим – правильное значение 66 в желтой карточке. Однако это решение не является автоматическим. Я хочу чтобы автоматически видеть правильное значение при изменении [конца YTD] месяца, в нашем случае в апреле или мае. Я не хочу, чтобы это делал пользователь.

мои отчаянные усилия можно загрузить из файла:DAX YTD.pbix

я преследовал оленя по-разному:

  1. С помощью фильтр функция в измерениях DAX. Но кажется, что Функция фильтра к жестковатому. Сначала применяется к таблице фактов, выбираем только один месяц, а потом вычисление значения YTD ошибочно. Так что если был бы любой вариант для форсирование порядка расчета и фильтрации там будет будь надеждой.
  2. пробовал переключатель функция для отображения правильного результата для определенного месяца и 0 или null для других месяцев. Хотя Я преуспев в этом, я не смог этим воспользоваться. Когда это в фильтровании я был так же безнадежен, как и прежде. Кстати, я бы смог чтобы сделать это, если переключатель произвел итоги в конце таблицы, но он не. Удивительный образом.
  3. Я возлагаю некоторые надежды на по теме функция для отображения правильных результатов в таблице [дата отключения]. Я еще не вышел из тумана.

Я был бы признателен за вашу помощь.

обновление до баунти. Переход на более высокий уровень. Я ввел столбец категории В FactTable. Пожалуйста, скачайте DAX YTD по категориям.pbix. Так что фильтрация усложняется. Я хотел бы иметь правильные цифры YTD для категории яблок.

3 ответов


вы используете С Calendar таблица, вместо одной из FactTable?

если вы используете столбец дата с FactTable, когда вы применяете фильтр на дату, он будет фильтровать записи фактов, которые находятся в марте, а затем выполнить расчет впоследствии, следовательно, результат 33.

если вы используете один из Calendar, когда вы применяете фильтр на нем, он фильтрует записи по Calendar (который вы хотите показать в диаграмме), поэтому основной расчет останется нетронутым.


пример:

Calendar = CALENDAR(DATE(2010, 1, 1), DATE(2020, 12, 31))

date

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

Total = SUM(FactTable[Value])
MTD = TOTALMTD([Total], 'Calendar'[Date])
YTD = TOTALYTD([Total], 'Calendar'[Date])

results


обновление:

мне гораздо яснее, чего вы хотите достичь сейчас, но это все еще кажется проблема по XY в мне.

Я понимаю, что вы хотите показать приборную панель как есть, чтобы пользователям не нужно было нажимать/вводить каждый раз, чтобы увидеть то, что они должны видеть. Вот почему я не понимаю, почему вам нужно создать новую таблицу для хранения Cut off date (End of YTD). Как это будет поддерживаться автоматически?

на relative date filtering решение выше на самом деле все еще работает .файл pbix, которым вы поделились. Если вы перетащите С Calendar таблица к фильтрам визуального уровня для желтого цвета карта и добавить относительную фильтрацию даты, он должен работать, как показано ниже:

yellow card

на End of YTD visual, вы можете использовать следующие меры чтобы получить первый день последнего календарного месяца, поэтому вам не нужно создавать для него другую таблицу:

End of YTD = EOMONTH(TODAY(), -2) + 1

и, надеюсь, это то, что вы хотите достичь:

final result

обновленный файл для вашего ссылка.


обновление:

Я думаю, вам придется написать свой собственный YTD расчет вместо использования встроенного, так что вы можете использовать дату отсечения вы определили в другой таблице. Здесь я предполагаю, что у вас есть одна и только одна строка в 'Cut off date'[End of YTD]. Обратите внимание, что я добавил ALL() к фильтру, так что желтая карточка остается той же (66), а не пустой, когда некоторые другие строки / фильтры щелчок:

YTD_Special = 
CALCULATE(
    [Total],
    FILTER(
        ALL(FactTable),
        FactTable[Date] >= DATE(YEAR(VALUES('Cut off date'[End of YTD])), 1, 1) &&
        FactTable[Date] <= VALUES('Cut off date'[End of YTD])
    )
)

ytd special


Я бы разрешил это, добавив вычисляемый столбец в таблицу календаря, чтобы классифицировать каждую строку в "YTD" или "Other", например

Is YTD =
IF (
    [Date] >= DATE ( YEAR ( DISTINCT ( 'Cut off date'[End of YTD] ) ), 1, 1 )
        && [Date] <= DISTINCT ( 'Cut off date'[End of YTD] ),
    "YTD",
    "Other"
)

затем я бы добавил новый Is YTD поле для фильтров визуального уровня вашей карты visual и выберите YTD из основного списка фильтрации. Показанная мера может быть вашей простой в общей сумме мера: сумма(FactTable[значение]).

Это гораздо более гибкое и resuable разрешение чем любая конкретная мера гимнастики. Вам не понадобится взрыв мер, чтобы применить требуемую логику поверх каждой базовой меры - все они будут работать естественно. Фильтр можно применить на любом уровне: визуальном, странице, отчете или поместить в срез для управления конечным пользователем.

Я предпочитаю возвращать текстовые результаты, например, "YTD"/"Other" (а не 1/0, True/False или Yes / No), так как это позволяет легко расширять другие требования, например, "до YTD" (1 января 2017 до 1 марта 2017). Это также яснее, когда используется в визуальных эффектах.

на самом деле я не должен претендовать на кредит для этого дизайна - это примерно следует за тем, как относительная функциональность Cognos Transformer работала еще в 90-х годах.


Я сделал что-то подобное в моем периодическом отчете/YTD (последний лист):http://ciprianbusila.ro/

я использовал значение индекса выбранного месяца (диапазон 1-12), и на основе этого я создал меру с помощью функции max пожалуйста, смотрите код ниже:

ACT = var 
ACT_periodic=calculate([Value],Scenarios[Scenario]=values(Scenarios[Scenario]))

var max_month=max(Periods[Period Order])
var ACT_YTD=CALCULATE([Value],Scenarios[Scenario]=VALUES(Scenarios[Scenario]),all(Periods[Month]),Periods[Period Order]<=max_month)

var myselection=if(HASONEVALUE(MRD_view[.]),values(MRD_view[.]),"PERIODIC")
return
switch(
true(),
myselection="PERIODIC",ACT_periodic,
myselection="YEAR TO DATE",ACT_YTD,

ACT_periodic
)