运用Deek Seeker协助数据分析
我的数据源有两张表,一个是每日销售表(字段有日期、产品名称、实际销量),一个是每月目标表(字段有年度月份、产品名称、目标销量);我的需求是,按月、按年来统计每个产品的目标完成情况请问用PowerBl进行分析,应该如何建立数据模型?
在Power BI中分析按月/年的产品目标完成情况,需合理构建数据模型。以下是分步解决方案:
1. 数据准备与清洗
每日销售表处理
-
添加月份字段:在Power Query中使用
Date.ToText([日期], "yyyy-MM")
,生成与目标表匹配的“年度月份”字段(如“2023-01”)。 -
按产品+月份聚合实际销量:在Power Query中按“产品名称”和“年度月份”分组,对“实际销量”求和。
每月目标表处理
-
确保“年度月份”格式与销售表一致。
-
检查重复项:确保每个“产品+年度月份”组合唯一。
2. 创建维度表
日期表
-
用DAX自动生成日期表:
DAX
复制
日期表 = CALENDAR(MIN('每日销售表'[日期]), MAX('每日销售表'[日期]))
复制
- 添加列:年份(`YEAR([日期])`)、月份(`FORMAT([日期], "yyyy-MM")`)、季度等。 #### **产品表** - 提取唯一产品列表: ```DAX 产品表 = DISTINCT(UNION(DISTINCT('每日销售表'[产品名称]), DISTINCT('每月目标表'[产品名称])))
3. 建立数据模型关系
-
关系图:
-
日期表[日期]
1→N关联到每日销售表[日期]
。 -
产品表[产品名称]
1→N关联到每日销售表[产品名称]
和每月目标表[产品名称]
。 -
每月目标表[年度月份]
需通过桥接字段(如月份首日)关联到日期表
,或直接与聚合后的销售表关联。
-
4. 创建关键度量值
实际销量(按月汇总)
DAX
复制
总实际销量 = SUM('每日销售表'[实际销量])
目标销量
DAX
复制
总目标销量 = SUM('每月目标表'[目标销量])
完成率
DAX
复制
目标完成率 = DIVIDE([总实际销量], [总目标销量], 0)
5. 可视化与交互
-
矩阵/表格:行字段为“产品名称”,列字段为“日期表”的年份和月份,值显示完成率。
-
折线图/柱状图:展示趋势对比(实际 vs 目标)。
-
切片器:添加年份和产品筛选器。
6. 注意事项
-
数据一致性:确保“产品名称”在两表中完全一致,可创建统一维度表。
-
空值处理:若某些月份无目标,用
IF(ISBLANK([总目标销量]), "无目标", [目标完成率])
标记。 -
性能优化:对大表预先聚合,避免实时计算影响速度。
通过以上步骤,用户可灵活分析各产品在不同时间维度的目标达成情况,同时保证模型的扩展性和可维护性。