DAX Measure计算汇总数据,但按案例ID分组

时间:2019-07-15 16:59:13

标签: powerbi dax

所以我有一个变量

var varSubItem = CALCULATE (MAX(Outages[SubItem]), Outages[DATE] >= DATE(2019, 07, 14) )

计算出在1天内发生故障的项目。见下文。

然后我还有另一个变量

var data =
CALCULATE (
    COUNT ( Outages[CASE_ID] ),
    ALLSELECTED ( Outages ),
    Outages[SubItem] = devices
)

这使我可以回溯过去两年中设备的停机次数。这只是最近两年,因为我的表格视觉效果具有针对该时间范围的过滤器。

我祈祷我有道理,因为我已经尝试这样做了两个星期。

Devices w Outages 2Yr =
VAR devices =
    CALCULATE ( MAX ( Outages[DEVICE_ID] ), Outages[DATE] >= DATE ( 2019, 07, 14 ) )
VAR data =
    CALCULATE (
        COUNT ( Outages[CASE_ID] ),
        ALLSELECTED ( Outages ),
        Outages[DEVICE_ID] = devices
    )
RETURN data

我明白了

| Area   | Item | SubItem | Case      | Date            | Outage Count |
|--------|------|---------|-----------|-----------------|--------------|
| XXXXX' | ABC1 | 123A    | 123456789 | 7/14/19 1:15 AM | 1            |
|        | ABC2 | 123B    | 132456798 | 7/14/19 3:20 AM | 1            |
|        | ABC3 | 123C    | 984561325 | 7/14/19 6:09 PM | 1            |
|        | ABC4 | 123D    | 789613453 | 7/14/19 3:54 PM | 3            |
|        | ABC5 | 123E    | 335978456 | 7/14/19 2:10 PM | 2            |
| Total  |      |         |           |                 | 8            |

当我应该得到这个时,

| Area   | Item | SubItem | Case      | Date            | Outage Count |
|--------|------|---------|-----------|-----------------|--------------|
| XXXXX' | ABC1 | 123A    | 123456789 | 7/14/19 1:15 AM | 1            |
|        | ABC2 | 123B    | 132456798 | 7/14/19 3:20 AM | 1            |
|        | ABC3 | 123C    | 984561325 | 7/14/19 6:09 PM | 1            |
|        | ABC4 | 123D    | 789613453 | 7/14/19 3:54 PM | 1            |
|        | ABC4 | 123D    | 789613211 | 4/19/18 4:20 AM | 1            |
|        | ABC4 | 123D    | 789611121 | 9/24/17 5:51 AM | 1            |
|        | ABC5 | 123E    | 335978456 | 7/14/19 2:10 PM | 1            |
|        | ABC5 | 123E    | 335978111 | 2/21/19 7:19 AM | 1            |
| Total  |      |         |           |                 | 8            |

1 个答案:

答案 0 :(得分:1)

我认为您想要的更接近此:

Devices w Outages 2Yr =
VAR devices =
    CALCULATETABLE (
        VALUES ( Outages[SubItem] ),
        ALLSELECTED ( Outages ),
        Outages[DATE] >= TODAY() - 1
    )
RETURN
    CALCULATE (
        COUNT ( Outages[Case] ),
        FILTER ( Outages, Outages[SubItem] IN devices )
    )

这将创建一个SubItem值列表,而不是您从MAX获得的值列表,这就是您的ALLSELECTED函数需要使用的位置。


编辑:要在SubItem级进行总计,请尝试以下调整:

Devices w Outages 2Yr =
VAR devices =
    CALCULATETABLE (
        VALUES ( Outages[SubItem] ),
        ALLSELECTED ( Outages ),
        Outages[DATE] >= TODAY() - 1,
        VALUES ( Outages[SubItem] )
    )
RETURN
    CALCULATE (
        COUNT ( Outages[Case] ),
        ALLSELECTED ( Outages ),
        Outages[SubItem] IN devices
    )

对于初学者DAX用户而言,这里的确切逻辑有些复杂,但是请记住,DAX完全是关于过滤器的。

对于变量devices,我们想要一个受日期约束的当前上下文中所有SubItem值的列表。 CALCULATETABLE函数允许我们修改过滤器上下文。 ALLSELECTED函数是表过滤器,它从视觉上删除任何过滤器上下文,以便包括所有未由切片器或页面/报告级别过滤器过滤掉的DateCase值。否则,对于日期在TODAY()-1之前的行,您将获得空白。日期值布尔过滤是不言自明的,但是我在末尾添加了另一个表过滤器VALUES(Outages[SubItem]),以便从视觉对象中添加回SubItem上下文。

CALCULATE的功能类似。在更改过滤器上下文以删除CaseCase上的过滤器上下文之后,我们仅对变量中生成的列表中的Date值进行计数,然后对所有SubItem值进行计数。