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。
我需要 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 开始:
现在使用此 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。