Sql server 使用DAX,在筛选相关表时如何计算表?

Sql server 使用DAX,在筛选相关表时如何计算表?,sql-server,excel,powerpivot,dax,ssas-tabular,Sql Server,Excel,Powerpivot,Dax,Ssas Tabular,我试图用DAX找到两个结果集的交集,但我真的很难计算出这两个结果集 我有一个事实表FactCheckForUpdate,它与一个名为“Log date”的日期表有关系。FactCheckForUpdate包含机器ID,我想返回过去两个完整月的ID 我可以使用以下公式计算机器ID的不同计数: 2Month Distinct Machines:=CALCULATE ( [Distinct Machine Ids], FILTER( ALL( 'Log Date'

我试图用DAX找到两个结果集的交集,但我真的很难计算出这两个结果集

我有一个事实表FactCheckForUpdate,它与一个名为“Log date”的日期表有关系。FactCheckForUpdate包含机器ID,我想返回过去两个完整月的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 )
    )
)
CALCULATETABLE (
    ADDCOLUMNS (
        SUMMARIZE ( FactCheckForUpdates, FactCheckForUpdates[MachineId] ),
        "meh", CALCULATE ( SUM ( FactCheckForUpdates[CFUPing] ) )
    ),
    FactCheckForUpdates[LogDateKey] > DATE ( 2016, 4, 1 )
)
其中“日志日期”表中的“YearMonthNumber”计算为:

=('Log Date'[YearKey] - MIN('Log Date'[YearKey])) * 12 + 'Log Date'[MonthOfYearKey]
(实际上,这给出了整个日期维度上下文中的月份数)

有人能帮我更新[2个月不同机器]表达式吗?这样,它就不会返回时段内机器ID的不同计数,而是返回一个机器ID表?

我尝试使用CALCULATETABLE函数,但它不接受日期筛选器上的最大聚合。我得到的最接近的公式是:

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 )
    )
)
CALCULATETABLE (
    ADDCOLUMNS (
        SUMMARIZE ( FactCheckForUpdates, FactCheckForUpdates[MachineId] ),
        "meh", CALCULATE ( SUM ( FactCheckForUpdates[CFUPing] ) )
    ),
    FactCheckForUpdates[LogDateKey] > DATE ( 2016, 4, 1 )
)
但我不知道如何使用这里的“日志日期”表

非常感谢您的帮助

这个怎么样:

CALCULATETABLE (
    VALUES(FactCheckForUpdates[MachineId]), 
    FILTER( 
        ALL( 'Log Date' ), 
        ( 'Log Date'[YearMonthNumber] >= MAX( 'Log Date'[YearMonthNumber] ) - 3 ) 
        && ( 'Log Date'[YearMonthNumber] <= MAX( 'Log Date'[YearMonthNumber] ) - 1 )
    )
)
可计算(
值(FactCheckForUpdate[MachineId]),
过滤器(
全部(‘日志日期’),
(“日志日期”[YearMonthNumber]>=最大值(“日志日期”[YearMonthNumber])-3)

&&(“日志日期”[YearMonthNumber]谢谢Greg-我尝试了你的建议,但它返回0行。我认为这可能是由于CALCULATETABLE函数忽略了上下文。我将在另一个表达式中使用该表达式,基本上我希望得到两个机器ID表,然后找到它们的交集并返回交集值的行数。简化形式可能是比如:
CALCULATE(COUNTROWS(INTERSECT(,)))
实际上,在DaxStudio之外和我的模型中尝试你的建议确实有效——我的坏!