2016-04-12 3 views
0

Я пытаюсь найти пересечение двух результирующих наборов, используя DAX, но я действительно изо всех сил пытаюсь вычислить два результата.Использование DAX, как вычислить таблицу при фильтрации по связанной таблице?

У меня есть таблица фактов, FactCheckForUpdates, которая имеет отношение к таблице дат, называемой «Дата регистрации». FactCheckForUpdates содержит идентификаторы машины, и я хочу вернуть идентификаторы за последние 2 полных месяца.

можно вычислить подсчет различных идентификаторов машин, использующих эту формулу:

2Month Distinct Machines:=CALCULATE (
    [Distinct Machine Ids], 
    FILTER( 
     ALL('Log Date'), 
     ('Log Date'[YearMonthNumber] >= MAX('Log Date'[YearMonthNumber]) - 3) 
     && ('Log Date'[YearMonthNumber] <= MAX('Log Date'[YearMonthNumber]) - 1) 
    ) 
) 

Где Distinct машина Идентификаторы 'вычисляется как:

:=DISTINCTCOUNT([MachineId]) 

и где «YearMonthNumber» вычисляется на Таблица «Дата регистрации»:

=('Log Date'[YearKey] - MIN('Log Date'[YearKey])) * 12 + 'Log Date'[MonthOfYearKey] 

(фактически это дает номер месяца в контекст всего измерения даты).

Может ли кто-нибудь помочь мне обновить выражение [2Month Distinct Machines], чтобы вместо того, чтобы возвращать определенное количество идентификаторов машины за этот период, возвращается таблица идентификаторов машины?

Я пробовал использовать функцию РАСЧЕТОВ, но он не будет принимать агрегат МАКС в фильтр даты. Ближайший я получил это формула:

CALCULATETABLE (
    ADDCOLUMNS (
     SUMMARIZE (FactCheckForUpdates, FactCheckForUpdates[MachineId]), 
     "meh", CALCULATE (SUM (FactCheckForUpdates[CFUPing])) 
    ), 
    FactCheckForUpdates[LogDateKey] > DATE (2016, 4, 1) 
) 

, но я не знаю, как использовать таблицу «Log Date» здесь.

Любая помощь массово ценится!

ответ

0

Как об этом:

CALCULATETABLE (
    VALUES(FactCheckForUpdates[MachineId]), 
    FILTER( 
     ALL('Log Date'), 
     ('Log Date'[YearMonthNumber] >= MAX('Log Date'[YearMonthNumber]) - 3) 
     && ('Log Date'[YearMonthNumber] <= MAX('Log Date'[YearMonthNumber]) - 1) 
    ) 
) 

Где вы называете это выражение DAX от? Он будет работать только внутри другого выражения или как часть запроса.

+0

Спасибо, Грег. Я пробовал ваше предложение, но он возвращает 0 строк. Я думаю, что это возможно из-за функции CALCULATETABLE, игнорирующей контекст. Я использую выражение внутри другого, в основном хочу получить две таблицы идентификаторов машины, затем найти их пересечение и вернуть количество строк пересекающихся значений. Упрощенная форма будет выглядеть примерно так: 'КАЛЬКУЛЯЦИЯ (COUNTROWS (INTERSECT (, )))' –

+0

Собственно, попытка вашего предложения за пределами DaxStudio и в моей модели действительно работала - моя плохо! –

Смежные вопросы