PowerPivot 2013 DAX 求和不同的值和 return 1 个数字

PowerPivot 2013 DAX to sum distinct values and return 1 number for all

我需要 DAX 来计算 品牌总计,这会 return 每个品牌 1 个数字,因为 总共有不同的值,忽略周和产品过滤器。

数据样本:

Brand           Product  Week  Weekly_sales 
Brand_1         Prod_1      1    178 
Brand_2         Prod_3      1    7 
Brand_2         Prod_4      1    7 
Brand_2         Prod_5      1    7 
Brand_2         Prod_6      1    7 
Brand_1         Prod_1      2    224 
Brand_2         Prod_3      2    18 
Brand_2         Prod_4      2    18 
Brand_2         Prod_5      2    18 
Brand_2         Prod_6      2    18 
Brand_1         Prod_1      3    186 
Brand_1         Prod_2      3    186 
Brand_2         Prod_3      3    21 
Brand_2         Prod_4      3    21 
Brand_2         Prod_5      3    21 
Brand_2         Prod_6      3    21 
Brand_1         Prod_1      4    172 
Brand_1         Prod_2      4    172 
Brand_2         Prod_3      4    12 
Brand_2         Prod_4      4    12 
Brand_2         Prod_5      4    12 
Brand_2         Prod_6      4    12 

对于该品牌的任何 week/product,功率枢轴的期望输出是 1 个品牌数字,包括 sub/grand 总计,即枢轴看起来像这样:

我尝试了无数种 FILTER、ALLEXCEPT、SUMX 的组合,最接近的是:

BRAND total:=
CALCULATE( 
        SUMX( ALLEXCEPT( DATA, 
                        Data[Brand], 
                        Data[Week]),    
             [Vol BR max]),   
        VALUES(Data[Brand]) 
      )

其中 [Vol BR max] 是衡量标准:

 [Vol BR max]:= MAX(Data[Weekly_sales])

这个return我想要的每个品牌 1 个数字,但是 这是一个错误的总数 - 不是品牌的不同值之一:

考虑到数据的结构,我认为您的客户的要求有点挑剔。

对于 select 要汇总的行,您必须根据每周不同的品牌数量以特殊方式标记它们,这是您应该在数据源而不是 PowerPivot 中处理的事情或仅用于分析的 DAX。

首先你必须创建一个 RowNumber 列,在 Power Query 中这非常容易,检查这个 Create Index Columns Using Power Query.

现在您的模型中有一个名为 RowNumber 的附加列,它从 1 开始:

每行加 1(样本中有 22 行)

现在使用此 DAX 表达式创建一个名为 BrandWeek 的计算列:

BrandWeek = [Brand]&"-"&[Week]

然后创建另一个计算列 ShouldSum,这将让我们确定每周应该对哪些 Weekly_sales 值求和。

ShouldSum =
CALCULATE (
    COUNTA ( Data[BrandWeek] ),
    FILTER (
        Data,
        [BrandWeek] = EARLIER ( Data[BrandWeek] )
            && [RowNumber] <= EARLIER ( Data[RowNumber] )
    )
)

最后在你的 Pivot 中使用的度量是这样的:

BRAND total :=
CALCULATE (
    SUM ( Data[Weekly_Sales] ),
    FILTER (
        ALL ( Data ),
        COUNTROWS (
            FILTER (
                Data,
                EARLIER ( Data[ShouldSum] ) = 1
                    && EARLIER ( Data[Brand] ) = [Brand]
            )
        )
    )
)

这是你应该得到的:

注意我在 Power BI 中使用矩阵,因为我现在无法访问 Power Pivot。