PREVIOUSMONTH返回空行/错误数据:Azure成本跨月对比问题排查
Azure资源当月与上月成本对比DAX问题解决
我需要对比Azure Cost Management中各资源的当月(12月)与上月(11月)成本,识别成本降低的资源,同时满足以下显示规则:
- 仅12月存在的dev数据库:当月显示成本数据,上月为空
- 10-11月存在的preview数据库:上月显示成本数据,当月为空
- 用红绿颜色标识成本变化:降本为绿色,升本为红色
已尝试的DAX公式及问题
公式1:返回空列
PreviousMonth = CALCULATE( SUM('Usage details'[costInBillingCurrency]), PREVIOUSMONTH('Usage details'[date].[Date]))
公式2:返回错误数据
PreviousMonth = CALCULATE( SUM('Usage details'[costInBillingCurrency]), PREVIOUSMONTH('Usage details'[date].[Date]), ALLEXCEPT('Usage details','Usage details'[subscriptionName],'Usage details'[resourceGroupName],'Usage details'[ResourceName] ))
公式3:返回空列
Measure = CALCULATE( SUM('Usage details'[costInBillingCurrency]), MONTH('Usage details'[date])=MONTH(TODAY())-1, YEAR('Usage details'[date])=YEAR(TODAY()))
解决方案
1. 创建并标记独立日期表
PREVIOUSMONTH函数依赖标记为日期表的独立维度表,不能直接使用业务表中的date列。先创建日期表:
DateTable = CALENDAR(MIN('Usage details'[date]), MAX('Usage details'[date]))
在Power BI建模选项卡中将DateTable标记为日期表,再与Usage details表的date列建立一对一关系。
2. 编写核心成本度量值
上月成本 = CALCULATE( SUM('Usage details'[costInBillingCurrency]), PREVIOUSMONTH(DateTable[Date]), ALLEXCEPT('Usage details', 'Usage details'[subscriptionName], 'Usage details'[resourceGroupName], 'Usage details'[ResourceName]) )
当月成本 = SUM('Usage details'[costInBillingCurrency])
3. 处理特殊资源的显示逻辑
针对dev和preview数据库的特殊显示要求,编写条件度量值:
显示上月成本 = VAR ResourceName = SELECTEDVALUE('Usage details'[ResourceName]) VAR CurrentMonth = MONTH(MAX(DateTable[Date])) RETURN IF( ResourceName = "preview数据库" && CurrentMonth = 12, [上月成本], IF( ResourceName = "dev数据库" && CurrentMonth = 12, BLANK(), [上月成本] ) )
显示当月成本 = VAR ResourceName = SELECTEDVALUE('Usage details'[ResourceName]) VAR CurrentMonth = MONTH(MAX(DateTable[Date])) RETURN IF( ResourceName = "preview数据库" && CurrentMonth = 12, BLANK(), IF( ResourceName = "dev数据库" && CurrentMonth = 12, [当月成本], [当月成本] ) )
4. 设置成本变化颜色标识
创建用于条件格式的度量值:
成本变化标识 = VAR Change = [显示当月成本] - [显示上月成本] RETURN SWITCH( TRUE(), Change < 0, "绿色", Change > 0, "红色", "黑色" )
在Power BI可视化面板中,为成本差值列添加条件格式,基于成本变化标识度量值分配对应颜色。
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

