Промежуточный итог для даты и нарезанной категории - возвращаются неверные даты - PullRequest
0 голосов
/ 30 апреля 2019

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

enter image description here

enter image description here

Job:

enter image description here

Моя модель данных:

enter image description here

Я хочу написать меру для расчета промежуточных итогов для Forecast.Qty и Actual.Qty, чтобы также учесть срезы в Job.Job

Так что, если я выберу задание 1, мне нужно получить:

Date      ActualQty1  ForecastQty1
01/01/19  0           25
15/02/19  2.5         25
26/02/19  2.5         33
12/03/19  13.5        33

Однако я получаю все возвращаемые даты из таблицы дат, а не только даты с соответствующим значением для Forecast.Qty или Actual.Qty в базовых таблицах

Мои меры:

ActualQty1 =
VAR a =
    CALCULATE (
        SUM ( 'Actual'[Qty] ),
        FILTER ( ALL ( Dates ), 'Dates'[Date] <= MAX ( 'Dates'[Date] ) )
    )
RETURN
    IF ( ISBLANK ( a ), 0, a )

ForecastQty1 =
VAR a =
    CALCULATE (
        SUM ( 'Forecast'[Qty] ),
        FILTER ( ALL ( Dates ), 'Dates'[Date] <= MAX ( 'Dates'[Date] ) )
    )
RETURN
    IF ( ISBLANK ( a ), 0, a )

Пример PBIX здесь:

Файл PBIX

Есть ли способ вернуть только те даты, когда выбранное задание имеет значение для Forecast.Qty или Actual.Qty?

1 Ответ

1 голос
/ 30 апреля 2019

Предполагая, что вы ищете итоговую общую сумму с начала года - что-то вроде этого должно работать, если я правильно понял вашу модель данных.

ActualQty = TOTALYTD ( SUM ( 'Actual'[Qty] ), 'DatesTable'[Date] )

Редактировать: Соответствовать последним изменениям, внесенным в вашувопрос, если вы хотите вернуть значения только для дат, которые существуют в ваших таблицах фактов, вы можете заключить меру в IF(), например так:

ActualQty =
IF (
    SUM ( 'Actual'[Qty] ) + SUM ( 'Forecast'[Qty] ) = BLANK(),
    BLANK(),
    TOTALYTD ( SUM ( 'Actual'[Qty] ), 'DatesTable'[Date] )
)

Это проверяет, имеет ли дата значение дляAcual или Forecast, и возвращает значение, только если присутствует хотя бы одно.

Edit (Naz): Просто уточните его, чтобы получить 0 01.01.19 для ActualQty:

ActualQty3 =

IF (
    SUM ( 'Actual'[Qty] ) + SUM ( 'Forecast'[Qty] )
        = BLANK (),
    BLANK (),
    IF (
        TOTALYTD ( SUM ( 'Actual'[Qty] ), 'Dates'[Date] ) = BLANK (),
        0,
        TOTALYTD ( SUM ( 'Actual'[Qty] ), 'Dates'[Date] )
    )
)

Edit (Naz): Только что понял, что использует функцию TOTALYTD, которая мне не нужна, так как это не мое требование.Так что изменили это далее, используя логику Рори, чтобы теперь дать мне:

ActualQty = 
var a=
CALCULATE (
    SUM ( 'Actual'[Qty] ),
    FILTER (    ALL(Dates),'Dates'[Date]<=MAX('Dates'[Date]))
    )
RETURN
IF (
    calculate(SUM ( 'Actual'[Qty] )) + calculate(SUM ( 'Forecast'[Qty] ))
        = BLANK (),
    BLANK (),
    IF (
        a = BLANK (),
        0,
        a
    )
)
...