使用DAX,如何在相关表上进行过滤时计算表?

时间:2016-04-12 14:27:48

标签: sql-server excel powerpivot dax ssas-tabular

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

我有一个事实表FactCheckForUpdates,它与名为“Log Date”的日期表有关系。 FactCheckForUpdates包含机器ID,我想返回最近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'表中计算为:

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

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

任何人都可以帮我更新[2Month Distinct Machines]表达式,这样它就不会返回句点中不同的计算机ID数量,而是返回机器ID的表格吗?

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

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

但我不知道如何使用此处的“日志日期”表。

任何帮助都非常感谢!

1 个答案:

答案 0 :(得分: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表达式?它只能在另一个表达式中工作或作为查询的一部分。