Создание меры для вычисления строк на основе данных «ДО» и «ИЗ» в другой таблице

#powerbi #dax #powerbi-desktop #measure

#powerbi #dax #powerbi-рабочий стол #мера

Вопрос:

У меня есть отчет, который извлекает еженедельные данные. У меня есть таблица недель, которая содержит недели, даты и связи, настроенные с приведенными ниже таблицами.

У меня есть итоговая таблица очередей; Итоговая очередь

У меня есть таблица консьержей;

Консьерж-часы

Часы работы консьержа отличаются изо дня в день, поэтому я сохраняю время начала и окончания в таблице, чтобы мы могли обновлять его динамически.

Я пытаюсь создать меру для вычисления количества взаимодействий, которые у нас были, между часами в таблице ConciergeHours. Имейте в виду, что это еженедельный отчет, поэтому в любой день недели часы могут отличаться.

Вычисление, которое мы выполняем, это;

Количество взаимодействий, принятых в LinkConciergeVQ очереди (итоговая таблица очередей) между начальным и конечным часами в таблице консьержей, МИНУС количество взаимодействий, предлагаемых в LinkVQ очереди (итоговая таблица очередей) между начальным и конечным часами в таблице консьержей

В настоящее время у меня мера выглядит следующим образом. Это работает, но промежутки между часами не соблюдаются должным образом, что, как я понимаю, было бы результатом минимального, МАКСИМАЛЬНОГО.

 m_deflections = 
CALCULATE (
    SUM ( QueueSummary[s_accepted] ),
    QueueSummary[queue] = "LinkConciergeVQ",
    filter(QueueSummary, [hour] >= min(ConciergeHours[starthour])),
    filter(QueueSummary, [hour] < max(ConciergeHours[endhour]))
)
    - CALCULATE (
        SUM ( QueueSummary[s_offered] ),
        QueueSummary[queue] = "LinkVQ",
        filter(QueueSummary, [hour] >= min(ConciergeHours[starthour])),
        filter(QueueSummary, [hour] < max(ConciergeHours[endhour]))
    )
 

Надеюсь, я правильно объяснил это.

Если кто-нибудь может предложить какую-либо помощь !?

Большое спасибо

Ответ №1:

Не уверен, что я понимаю ваши отношения между таблицами, но если это 1: * от консьержей до очередей через дату, тогда я думаю, вы можете использовать эту меру, или, по крайней мере, она ставит вас на правильный путь, я надеюсь:

 m_deflections = 

var s_accept = 
SUMX(
    'ConciergeHours',
    var startH = 'ConciergeHours'[startHour]
    var endH = 'ConciergeHours'[endHour]
    return
    CALCULATE(
        SUM('QueueSummary'[s_accepted]),
        'QueueSummary'[hour] >= startH amp;amp; 'QueueSummary'[hour] < endH
    )
)

var s_offered = 
SUMX(
    'ConciergeHours',
    var startH = 'ConciergeHours'[startHour]
    var endH = 'ConciergeHours'[endHour]
    return
    CALCULATE(
        SUM('QueueSummary'[s_offered]),
        'QueueSummary'[hour] >= startH amp;amp; 'QueueSummary'[hour] < endH
    )
)

return 
s_accepted - s_offered
 

Ответ №2:

Я бы свернул 2 пары функций фильтра в один ФИЛЬТР для каждого ВЫЧИСЛЕНИЯ. Это применит фильтры к starthour и endhour в комбинации (amp;amp; означает И), где я ожидаю, что в настоящее время они применяются как логика OR, поэтому не имеют никакого эффекта.

В соответствии с этим:

 m_deflections =
CALCULATE (
    SUM ( QueueSummary[s_accepted] ),
    QueueSummary[queue] = "LinkConciergeVQ",
    FILTER (
        QueueSummary,
        [hour] >= MIN ( ConciergeHours[starthour] )
            amp;amp; [hour] < MAX ( ConciergeHours[endhour] )
    )
)
    - CALCULATE (
        SUM ( QueueSummary[s_offered] ),
        QueueSummary[queue] = "LinkVQ",
        FILTER (
            QueueSummary,
            [hour] >= MIN ( ConciergeHours[starthour] )
                amp;amp; [hour] < MAX ( ConciergeHours[endhour] )
        )
    )
 

Комментарии:

1. К сожалению, это не сработало. Даже когда я фильтрую по дням, кажется, что он по-прежнему извлекает минимальные и максимальные значения всей таблицы ConciergeHours, а не конкретную дату.

2. Вероятно, ответ от OscarLar ближе.