Excel数据模型DAX需求:自动筛选周度工单创建/启动数统计
自动统计本周/上周工单数量的DAX解决方案(Excel数据模型)
嗨,刚上手Excel数据模型和DAX确实得慢慢摸门道,我来帮你搞定这个不用手动筛选周数的需求!核心思路是用动态DAX度量值,让它自动根据当前日期计算本周和上周的工单数据,完全不用每周手动调整筛选条件。
第一步:先确认表关系
首先得确保Table_HS和Table_IS通过Product Code字段建立了正确的关联(在数据模型里点击“关系”面板,把两个表的Product Code拖到一起就行),这是透视表能关联维度的基础。
第二步:创建动态DAX度量值
我们直接在数据模型里创建度量值,这些度量值会自动识别当前日期对应的周,不用提前加WEEKNUM字段。
1. 本周创建的工单数量
本周创建工单 = VAR CurrentYear = YEAR(TODAY()) VAR CurrentWeek = WEEKNUM(TODAY(), 2) // 参数2表示周一为一周的开始,可根据需求改成1(周日开始) RETURN CALCULATE( DISTINCTCOUNT(Table_IS[Work Order]), YEAR(Table_IS[Date Created]) = CurrentYear, WEEKNUM(Table_IS[Date Created], 2) = CurrentWeek )
2. 本周启动的工单数量
本周启动工单 = VAR CurrentYear = YEAR(TODAY()) VAR CurrentWeek = WEEKNUM(TODAY(), 2) RETURN CALCULATE( DISTINCTCOUNT(Table_IS[Work Order]), YEAR(Table_IS[Date Started]) = CurrentYear, WEEKNUM(Table_IS[Date Started], 2) = CurrentWeek )
3. 上周创建的工单数量(含跨年处理)
这里要注意跨年的情况:如果当前是当年第1周,上周就是去年的最后一周,所以我们加了逻辑判断来处理这种场景:
上周创建工单 = VAR CurrentYear = YEAR(TODAY()) VAR CurrentWeek = WEEKNUM(TODAY(), 2) VAR LastYear = CurrentYear - 1 VAR LastWeek = IF(CurrentWeek = 1, WEEKNUM(DATE(CurrentYear, 1, 1) - 1, 2), CurrentWeek - 1) VAR LastWeekYear = IF(CurrentWeek = 1, LastYear, CurrentYear) RETURN CALCULATE( DISTINCTCOUNT(Table_IS[Work Order]), YEAR(Table_IS[Date Created]) = LastWeekYear, WEEKNUM(Table_IS[Date Created], 2) = LastWeek )
4. 上周启动的工单数量(含跨年处理)
上周启动工单 = VAR CurrentYear = YEAR(TODAY()) VAR CurrentWeek = WEEKNUM(TODAY(), 2) VAR LastYear = CurrentYear - 1 VAR LastWeek = IF(CurrentWeek = 1, WEEKNUM(DATE(CurrentYear, 1, 1) - 1, 2), CurrentWeek - 1) VAR LastWeekYear = IF(CurrentWeek = 1, LastYear, CurrentYear) RETURN CALCULATE( DISTINCTCOUNT(Table_IS[Work Order]), YEAR(Table_IS[Date Started]) = LastWeekYear, WEEKNUM(Table_IS[Date Started], 2) = LastWeek )
第三步:制作透视表
把Table_HS里的Product Code拖到透视表的行区域,然后把上面创建的4个度量值拖到值区域。这样每次打开文件,度量值都会自动根据当前日期计算本周和上周的工单数量,完全不用手动筛选周数!
小提示
- 如果你的工单编号
Work Order是唯一的,也可以把DISTINCTCOUNT换成COUNT,结果是一样的;用DISTINCTCOUNT是防止表中有重复的工单记录。 - WEEKNUM的第二个参数可以根据你们公司的周定义调整:1=周日为一周开始,2=周一为一周开始,21=ISO标准周(周一为开始,每年至少52周)。
内容的提问来源于stack exchange,提问作者user10732287
相关产品推荐
相关产品推荐

