PowerPivot 2013 DAX将不同的值相加并为所有值返回1个数字

时间:2017-02-15 17:49:22

标签: excel-2013 powerpivot dax

我需要DAX来计算品牌总数,这将返回每个品牌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 

在该品牌的任何一周/产品中,所需的功率枢轴输出为1个品牌数,包括子/总数,即这是枢轴看起来像:

pivoted result would be like this

我尝试过无数的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])

我按照自己的意愿返回每个品牌1个号码,但总分错误 - 不是品牌明显的价值之一:

MY OUTPUT

1 个答案:

答案 0 :(得分:2)

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

要选择要总结的行,您必须根据每周不同的品牌数量以特殊方式标记它们,这是您应该在数据来源处理的内容,而不是应该使用的PowerPivot或DAX中的数据来源仅供分析。

首先,您必须在RowNumber中创建Power Query列,这非常简单,请查看Create Index Columns Using Power Query

现在,您的模型中有一个名为RowNumber的附加列,每行总计1(样本中的22行),从1开始:

enter image description here

现在使用此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]
            )
        )
    )
)

这是你应该得到的:

enter image description here

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