7.18 PowerBI系列之DAX函数专题 -根据当月已发生数据量预测当月总量

该文详细阐述了一种销售预测方法,通过分析订单数据中的最大月份和产品种类,计算当前月份的最大销售额及剩余天数。然后,根据前期平均销量预测当月剩余天数的销售额。此方法适用于有产品和月份维度的可视化图表,如堆叠柱状图。
摘要由CSDN通过智能技术生成

需求

结果展示
在这里插入图片描述
原始数据结构
在这里插入图片描述

实现

1.生成日历表
在这里插入图片描述
2

预测销售额1=
var v_snp_cnt = sum(sales[销售额])
//求订单数据中的最大月份
var v_max_mth = format(calculate(max(sales[月份]),all(sales[sales])),"yyyy/mm")    
var v_prod_type = selectedvalue(sales[产品种类])
//最大月份对应产品已有销售额,由于最终在视觉对象中显示,会包含外部切片器的筛选条件,因此需要用allselected
var v_max_mth_sum = calculate(sum(sales[销售额]),
							filter(allselected(sales),
							format(sales[月份],"yyyy/mm") = v_max_mth&&sales[产品种类]=v_prod_type))  
//当前月份最大日期													      
var v_max_date = calculate(max(sales[日期]),all(sales))
//当前月一号到当前月最大销售日中有多少个自然日,用没有建立关系的calendar2取值。原因是订单表与calendar建立了关系,calendar的上下文会受视觉对象上下文的影响
var_cnt_day = calculate(count(calendar2[date]), 
						calendar2[year month] = format(v_max_date,"YYYY/MM"),calendar2[date]<=v_max_date)
//当月剩下多少自然日
var v_remain_day = calculate(count(calendar2[date]),
							calendar2[year month] = format(v_max_date,"YYYY/MM"),calendar2[date]>v_max_date)
//根据前面几天的平均销量计算当月剩下天的销量
var v_forecast_snp_cnt = divide(v_max_mth_sum,v_cnt_day)*v_remain_day + vmax_mth_sum
//当前上下文中的月份
var v_mth = selectedvalue(calendar1[year month])
var v_cur_mth = format(v_max_date,"yyyy-mmmm")--最大月份
return if(v_mth = v_cur_mth,v_forecast_snp_cnt,v_snp_cnt)
预测销售额2=
var v_snp_cnt = sum(sales[销售额])
//求订单数据中的最大月份
var v_max_mth = format(calculate(max(sales[月份]),all(sales[sales])),"yyyy/mm")    
var v_prod_type = selectedvalue(sales[产品种类])
//最大月份对应产品已有销售额,由于最终在视觉对象中显示,会包含外部切片器的筛选条件,因此需要用allselected
var v_max_mth_sum = calculate(sum(sales[销售额]),
							filter(allselected(sales),
							format(sales[月份],"yyyy/mm") = v_max_mth&&sales[产品种类]=v_prod_type))  
//当前月份最大日期													      
var v_max_date = calculate(max(sales[日期]),all(sales))
//当前月一号到当前月最大销售日中有多少个工作日
var_cnt_day = calculate(count(calendar2[date]), 
						calendar2[year month] = format(v_max_date,"YYYY/MM"),calendar2[date]<=v_max_date,not calendar2[day of week] in (6,7))
//当月剩下多少自然日
var v_remain_day = calculate(count(calendar2[date]),
							calendar2[year month] = format(v_max_date,"YYYY/MM"),calendar2[date]>v_max_date)
//根据前面几天的平均销量计算当月剩下天的销量
var v_forecast_snp_cnt = divide(v_max_mth_sum,v_cnt_day)*v_remain_day + vmax_mth_sum
//当前上下文中的月份
var v_mth = selectedvalue(calendar1[year month])
var v_cur_mth = format(v_max_date,"yyyy-mmmm")--最大月份
return if(v_mth = v_cur_mth,v_forecast_snp_cnt,v_snp_cnt)

一些知识

1.长度量值要分步调试,可以利用卡片图等简单的视觉对象返回分步结果。
2.不同度量值写法适用于不同的视觉对象,这意味着我们在设计度量值时,已经对展现结果有了相应的预期;因此,当最终展现的视觉对象有变化时,很可能需要对度量值进行修改。
上述度量值适用于图例为产品,横轴为月份的堆叠柱状图(见结果展示图)
对于图例为月份横轴为客户的条形图(如下图),需要修改元度量值v_prod_type为客户
在这里插入图片描述
修改后的度量值如下
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值