Изменение кода DAX с вычисляемого столбца на показатель - PullRequest
1 голос
/ 26 марта 2019

У меня есть таблица фактов со столбцами payment_date, product_id, service_id, location_id, ticket_id и srv_adjusted_earning.

Я определил запрос DAX для создания вычисляемого столбца, который суммирует столбец srv_adjusted_earning за диапазон дат: дата расчета и дата расчета - 27 дней (т. Е. Окно 4 недели) как:

=CALCULATE(
    SUM(factService[SRV_ADJUSTED_EARNING]),
    DATESBETWEEN
    (
        factService[SETTLEMENT_DATE],
        DATEADD(factService[SETTLEMENT_DATE], -27, DAY), 
        factService[SETTLEMENT_DATE]
    ),
    FILTER(factService, factService[PRO_ID] = EARLIER(factService[PRO_ID])),
    FILTER(factService, factService[SER_ID] = EARLIER(factService[SER_ID])),
    FILTER(factService, factService[LOC_ID_SELLING] = 
        EARLIER(factService[LOC_ID_SELLING])),
    FILTER(factService, factService[TIS_ID] = EARLIER(factService[TIS_ID]))
)

Я пытаюсь преобразовать этот вычисленный столбец DAX в меру, и я попробовал следующее:

blob:=CALCULATE
(
    SUM(factService[SRV_ADJUSTED_EARNING]),
    DATESBETWEEN
    (
        factService[SETTLEMENT_DATE], 
        DATEADD(factService[SETTLEMENT_DATE], -27, DAY), 
        factService[SETTLEMENT_DATE]
    ),
    ALLEXCEPT(factService, factService[PRO_ID]),
    ALLEXCEPT(factService, factService[SER_ID]),
    ALLEXCEPT(factService, factService[LOC_ID_SELLING]),
    ALLEXCEPT(factService, factService[TIS_ID])
)

Но я получаю: Ошибка: ошибка вычисления в мере «factService» [blob]: невозможно определить одно значение для столбца «SETTLEMENT_DATE» в таблице «factService». Это может произойти, когда формула меры ссылается на столбец, содержащий много значений, без указания агрегации, такой как min, max, count или sum, для получения одного результата.

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 26 марта 2019

Как упоминается в сообщении об ошибке, проблема связана с factService[SETTLEMENT_DATE].В показателе отсутствует контекст строки, чтобы он знал, о какой дате вы говорите, поэтому вам нужно как-то ее указать.Я бы предложил использовать переменную в следующих строках:

blob :=
VAR SettleDate = MAX ( factService[SETTLEMENT_DATE] )
RETURN
    CALCULATE (
        SUM ( factService[SRV_ADJUSTED_EARNING] ),
        DATESBETWEEN (
            factService[SETTLEMENT_DATE],
            SettleDate - 27,
            SettleDate
        ),
        ALLEXCEPT (
            factService,
            factService[PRO_ID],
            factService[SER_ID],
            factService[LOC_ID_SELLING],
            factService[TIS_ID]
        )
    )

Здесь переменная выбирает максимальную дату расчета в текущем контексте фильтра.Если это не совсем то, что вам нужно, измените определение соответствующим образом.

...