DAX - 通过在多列上使用过滤器来计算计数

DAX - Calculate counts by using filter on multible columns

我正在尝试通过表格中的过滤器获取不同的计数。场景如下。

ID ¦ProductName ¦ color ----------¦ ------------------ ¦------ 1 ¦Crankarm ¦ NA 2 ¦Bearing Ball ¦ Black 1 ¦Bearing Ball ¦ Black 3 ¦Bearing Ball ¦ Black 4 ¦Blade ¦ Black 2 ¦Crankarm ¦ Black 5 ¦Bearing Ball ¦ Black 6 ¦Bearing Ball ¦ Black 6 ¦Blade ¦ Black 7 ¦Blade ¦ Black 7 ¦Blade ¦ Black 3 ¦Blade ¦ Black 5 ¦Crankarm ¦ Black 9 ¦Decal ¦ NA

我想获得 'ID' 的 3 个不同的不同计数。过滤器如下: 1. ProductName ='Bearing Ball' and Color = 'Black' >(ID=2,1,3,5,6 > Distinct count:5) 2. ProductName ='Blade' and Color = 'Black' >(ID=4,6,7,7,3 > Distinct count:4) 3. ProductName ='Crankarm' and Color = 'Black' >(ID=2,5 > Distinct count:2) 并将对所有 3 个不同的计数求和。我测量的最终结果将是:5+4+2 = 11.

我通过以下代码分别计算了所有 3 种产品的测量值。和其他措施中的 3 个措施的 SUM 结果。(FinalResult:= [BB]+[BL]+[CR] )但它没有用。

BB:= CALCULATE ( DISTINCTCOUNT ( Product[ID] ), FILTER ( VALUES (Product ), Product[ProductName] = "Bearing Ball" && Product[Color] = "Black" ) ) BL:= CALCULATE ( DISTINCTCOUNT ( Product[ID] ), FILTER ( VALUES (Product ), Product[ProductName] = "Blade" && Product[Color] = "Black" ) )

CR:= CALCULATE ( DISTINCTCOUNT ( Product[ID] ), FILTER ( VALUES (Product ), Product[ProductName] = "Crankarm" && Product[Color] = "Black" ) )

我无法通过添加 OR 在同一查询中获得不同的计数,因为不同的 ProductName 可以具有相同的 ID。如果在同一个查询中使用,我将丢失它们。

一种简单的方法是像这样创建一个计算列:

IDNameColor = [ID] &"-"& [ProductName]  & "-" & [Color]

然后在这样的度量中使用该计算列来获取产品数量:

Total Count :=
CALCULATE (
    DISTINCTCOUNT ( 'Product'[IDNameColor] ),
    FILTER (
        ALL ( 'Product' ),
        ( [Color] = "Black"
            && [ProductName] = "Bearing Ball" )
            || ( [Color] = "Black"
            && [ProductName] = "Blade" )
            || ( [ProductName] = "Crankarm"
            && [Color] = "Black" )
    )
)

如果您想让 ALL('Product') 函数受到过滤器的影响,您可以删除它。

或者,如果您不想创建计算列,则度量可以是这样的:

Total Count :=
COUNTAX (
    FILTER (
        DISTINCT ( 'Product' ),
        ( [Color] = "Black"
            && [ProductName] = "Bearing Ball" )
            || ( [Color] = "Black"
            && [ProductName] = "Blade" )
            || ( [ProductName] = "Crankarm"
            && [Color] = "Black" )
    ),
    [ID] & [ProductName]
        & [Color]
)