使用 DAX,如何在过滤相关 table 时计算 table?

Using DAX, how do I calculate a table when filtering on a related table?

我正在尝试使用 DAX 查找两个结果集的交集,但我真的很难计算出这两个结果集。

我有一个事实 table,FactCheckForUpdates,它与名为 'Log Date' 的日期 table 有关系。 FactCheckForUpdates 包含机器 ID,我想 return 最近 2 个完整月的 ID。

我可以使用以下公式计算机器 ID 的非重复计数:

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 Machine Ids' 计算为:

:=DISTINCTCOUNT([MachineId])

其中 'YearMonthNumber' 在 'Log Date' table 上计算为:

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

(实际上这给出了整个日期维度上下文中的月份数)。

任何人都可以帮我更新 [2Month Distinct Machines] 表达式,以便 return 计算该期间机器 ID 的不同计数,它 return 是 table 的机器 ID?

我试过使用 CALCULATETABLE 函数,但它不接受日期过滤器上的 MAX 聚合。我得到的最接近的是这个公式:

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

但是我不知道如何在这里使用 'Log Date' table。

非常感谢任何帮助!

这个怎么样:

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 表达式?它只会在另一个表达式中或作为查询的一部分起作用。