Power BI - DAX - эксцентричное поведение для расчета с начала года - PullRequest
0 голосов
/ 22 февраля 2019

Попытка использовать простую меру года (YTD).Но все работает не так, как ожидалось.

Модель данных

enter image description here

dim_date (столбец выходных неверен, но принципиально не влияет)

enter image description here

факт

enter image description here

Мера YTD определяется следующим образом:

YTD = CALCULATE(
    SUM('fact'[value]),
    DATESYTD(dim_date[Date])
)

, что дает мне следующие неверные результаты с начала года.

enter image description here

Похоже, вместо расчета YTD для разделения выходных и дня недели.

Учитывая, что есть 16 строк, которые имеютдата, которая обозначена как выходные, а также тот факт, что все они выпадают в одном и том же году, я ожидаю, что значения YTD и value будут идентичны приведенным выше.

Достаточно интересно, если я немногоизмените DAX с помощью dim_date[Date].[Date] вместо просто dim_date[Date], все просто работает как положено.

YTD = CALCULATE(
    SUM('fact'[value]),
    DATESYTD(dim_date[Date].[Date])
)

Может кто-нибудь помочь объяснить, что на самом деле здесь происходит?

Файл примера .pbix находится здесь:

https://drive.google.com/open?id=1y3ndL7yDE7T4x7Z2bPhMsa-NHRgGzYj0

1 Ответ

0 голосов
/ 22 февраля 2019

Как указывает dax.guide ,

DATESYTD ( <Dates>[, <YearEndDate>] )

эквивалентно

DATESBETWEEN (
    <DATES>,
    STARTOFYEAR ( LASTDATE ( <DATES> )[, <YEARENDDATE>] ),
    LASTDATE ( <DATES> )
)

Так что происходит, так как Jan 10 является последним False значение для weekend и Jan 12 является последним True значением для weekend, а функция DATESBETWEEN возвращает непрерывный диапазон, не отфильтрованный с помощью оценочного контекста weekend, вы получаете все даты вплоть до Jan 10 в одном случае и все даты до Jan 12 в другом.

Чтобы в показателе учитывалось значение weekend вместо расчета в непрерывном диапазоне дат, вы можете добавить его в качестве фильтра:

YTD = CALCULATE(
    SUM('fact'[value]),
    DATESYTD(dim_date[Date]),
    dim_date[weekend] IN VALUES(dim_date[weekend])
)
...