SSAS表格模型中按日期筛选计算最新产品线日期对应产品销售额总和
SSAS表格模型DAX计算方案
数据模型表结构
| 表名 | 字段信息 |
|---|---|
| F_Sales | Invoice_key(外键), AMT |
| D_Invoice | Invoice_key(主键), Productline_key(外键) |
| D_ProductLine | ProductLine_key(主键), Prd_key(外键), ProductLine_Type, ProductLine_Date |
| D_Product | Prd_key(主键), Prd_Code |
| D_Situation | Situation_key, ProductLine_key(外键), Situation_Type, Situation_Date |
用户筛选条件
- 必选:日期(需满足
Situation_date <= 所选日期) - 可选:指定
ProductLine_Type
需求目标
按每个 Prd_Code 统计 F_Sales 中 AMT 的总和,同时返回该产品对应的最近的ProductLine_Date及关联的ProductLine_Type,且需符合筛选条件。
DAX度量值实现
1. 销售额计算
销售额 = SUM(F_Sales[AMT])
2. 最近产品线日期
最近产品线日期 = VAR 筛选日期 = MAX('日期表'[Date]) -- 替换为实际使用的日期筛选字段 VAR 符合条件的产品线 = CALCULATETABLE( DISTINCT(D_ProductLine[ProductLine_key]), D_Situation[Situation_Date] <= 筛选日期, ALLSELECTED(D_ProductLine[ProductLine_Type]) -- 应用可选的产品线类型筛选 ) VAR 最新日期产品线 = TOPN( 1, CALCULATETABLE(D_ProductLine, D_ProductLine[ProductLine_key] IN 符合条件的产品线), D_ProductLine[ProductLine_Date], DESC ) RETURN MAXX(最新日期产品线, D_ProductLine[ProductLine_Date])
3. 对应产品线类型
对应产品线类型 = VAR 筛选日期 = MAX('日期表'[Date]) -- 替换为实际使用的日期筛选字段 VAR 符合条件的产品线 = CALCULATETABLE( DISTINCT(D_ProductLine[ProductLine_key]), D_Situation[Situation_Date] <= 筛选日期, ALLSELECTED(D_ProductLine[ProductLine_Type]) ) VAR 最新日期产品线 = TOPN( 1, CALCULATETABLE(D_ProductLine, D_ProductLine[ProductLine_key] IN 符合条件的产品线), D_ProductLine[ProductLine_Date], DESC ) RETURN MAXX(最新日期产品线, D_ProductLine[ProductLine_Type])
使用说明
- 确保模型中表关系已正确建立:
F_Sales↔D_Invoice↔D_ProductLine↔D_Product,D_ProductLine↔D_Situation。 - 若未使用单独日期表,将代码中的
MAX('日期表'[Date])替换为筛选所用的日期字段(如MAX(D_Situation[Situation_Date]))。 - 在报表中,将
D_Product[Prd_Code]拖入行区域,再添加上述三个度量值,即可得到需求结果。
内容的提问来源于stack exchange,提问作者Borri
相关产品推荐
相关产品推荐

