我们有一张销售表,我们想统计每个月每个门店的销售员的平均销售金额

1.创建日期维度表和门店维度表
日期表 = DISTINCT(
SELECTCOLUMNS(
'销量表',
"日期",
'销量表'[销售日期]
)
)
门店表 = DISTINCT(
SELECTCOLUMNS(
'销量表',
"门店",
'销量表'[门店]
)
)
2.创建度量值,计算每月每门店销售额
每月每门店平均销售 =
VAR Total_Sales = CALCULATE(SUM('销量表'[销售金额(元)]), FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])
))
VAR Count_Person = CALCULATE(SELECTEDVALUE('销量表'[店员数]),FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])
))
RETURN
DIVIDE(Total_Sales,Count_Person,0)
- 拖入矩阵


- 如图,矩阵无法自动计算总计,因为我们是用的度量值计算的平均值。解决方法:使用ISINSCOPE()来手动计算

-
创建度量值,计算某一个门店,所有日期的平均销售,用于总计行展示
门店所有月平均销售 =
VAR Total_Sales = CALCULATE(SUM('销量表'[销售金额(元)]), FILTER(
'销量表',
'销量表'[销售日期] IN ALLSELECTED('日期表'[日期]) //获取所有日期行
&&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])))
VAR Count_Person = CALCULATE(SUM('销量表'[店员数]),FILTER(
'销量表',
'销量表'[销售日期] IN ALLSELECTED('日期表'[日期]) //获取所有日期行
&&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])))
RETURN
DIVIDE(Total_Sales,Count_Person,0)
修改之前的 每月每门店平均销售的RETURN部分,需要分情况显示不同的计算值
每月每门店平均销售 =
VAR Total_Sales = CALCULATE(SUM('销量表'[销售金额(元)]), FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])
))
VAR Count_Person = CALCULATE(SELECTEDVALUE('销量表'[店员数]),FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])
))
RETURN
IF(
ISINSCOPE('日期表'[日期]), //判断是否在行数据块里
DIVIDE(Total_Sales,Count_Person,0), //是,计算每月每门店
[门店所有月平均销售] //不是,总计行
)
效果:

-
创建度量值,计算每月所有门店平均销售,用于总计列
每月所有门店平均销售 =
VAR Total_Sales = CALCULATE(SUM('销量表'[销售金额(元)]), FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] IN ALLSELECTED('门店表'[门店]) //获取所有门店))
VAR Count_Person = CALCULATE(SUM('销量表'[店员数]),FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] IN ALLSELECTED('门店表'[门店]) //获取所有门店
))
RETURN
DIVIDE(Total_Sales,Count_Person,0)
再次修改之前的 每月每门店平均销售的RETURN部分
每月每门店平均销售 =
VAR Total_Sales = CALCULATE(SUM('销量表'[销售金额(元)]), FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])
))
VAR Count_Person = CALCULATE(SELECTEDVALUE('销量表'[店员数]),FILTER(
'销量表',
'销量表'[销售日期] = SELECTEDVALUE('日期表'[日期]) &&
'销量表'[门店] = SELECTEDVALUE('门店表'[门店])
))
RETURN
IF(
NOT ISINSCOPE('日期表'[日期]) && ISINSCOPE('门店表'[门店]), //总计行里
[门店所有月平均销售],
IF(ISINSCOPE('日期表'[日期]) && NOT ISINSCOPE('门店表'[门店]), //总计列里
[每月所有门店平均销售],
DIVIDE(Total_Sales,Count_Person,0)
)
)
效果:

小技巧:
当同时有总计行和总计列时,有同学会头疼ISINSCOPE的条件,我们可以直接在矩阵里输出,帮助我们判断:
ISINSCOPE('日期表'[日期]) & "," & ISINSCOPE('门店表'[门店])
根据得到的值来方便我们判断是否在总计行(列)里:
