
PowerBI中,我们经常使用柱形图来进行趋势对比分析,通过柱形图我们可以直观展示每个月之间的差异。
但是在实际需求中,PowerBI原生的柱形图仅能展示一个数据标签,如果我们想要展示同环比的变化情况,往往需要将同环比的度量值放置到工具提示中。
这对用户来说,体验其实是很不友好的,用户期望的往往是一眼可以获取到所有想知道的关键信息。
面对用户的这一需求,我们可以通过计算组来实现。
案例数据:

将其导入到PowerBI中,通过以下代码,添加日期表。
Date =
GENERATE (
CALENDAR ( MIN ( 'Sales'[DATE] ), MAX ( 'Sales'[DATE] ) ),
VAR DA = [Date]
VAR YEAR =
YEAR ( DA )
VAR QUARTER =
"Q" & FORMAT ( DA, "Q" )
VAR MONTE =
FORMAT ( DA, "MM" )
VAR DAY =
DAY ( DA )
RETURN
ROW (
"Year", YEAR,
"Quarter", QUARTER,
"Month", MONTE,
"DayOfMonth", DAY,
"YearQuarter", YEAR & QUARTER,
"YearMonth", YEAR & MONTE,
"YearMonthCount",
YEAR * 12 + MONTE
)
)
模型关系如下:

添加如下基础度量值:
销售数量:
Quantity =
SUM ( Sales[Quantity] )
同比:
Count同比% =
VAR CurrentCount =
SELECTEDVALUE ( 'Date'[YearMonthCount] )
VAR LastYearMonthCount = CurrentCount - 12
VAR LastYearMonthValue =
CALCULATE (
[Quantity],
FILTER ( ALL ( 'Date' ), 'Date'[YearMonthCount] = LastYearMonthCount )
)
VAR Result =
DIVIDE ( [Quantity] - LastYearMonthValue, LastYearMonthValue )
RETURN
Result
环比:
Count环比% =
VAR CurrentCount =
SELECTEDVALUE ( 'Date'[YearMonthCount] )
VAR LastMonthCount = CurrentCount - 1
VAR LastMonthValue =
CALCULATE (
[Quantity],
FILTER ( ALL ( 'Date' ), 'Date'[YearMonthCount] = LastMonthCount )
)
VAR Result =
DIVIDE ( [Quantity] - LastMonthValue, LastMonthValue )
RETURN
Result
将上述度量值在柱形图中展示如下:

到这里,我们的准备工作完成,其实这也是不通过计算组功能所能实现的效果。

在外部工作区,打开Tabular。

选择创建计算组。

添加两个计算项:
同比计算项:
SELECTEDMEASURE()
设置数据展示格式:
IF (
ISBLANK ( [Count同比%] ),
SUBSTITUTE ( SELECTEDMEASURE (), "0", "\0" ),
SUBSTITUTE (
SELECTEDMEASURE () & "("
& FORMAT ( [Count同比%], "0%" ) & ")",
"0",
"\0"
)
)

环比计算项:
SELECTEDMEASURE()
设置数据展示格式:
IF (
ISBLANK ( [Count环比%] ),
SUBSTITUTE ( SELECTEDMEASURE (), "0", "\0" ),
SUBSTITUTE (
SELECTEDMEASURE () & "("
& FORMAT ( [Count环比%], "0%" ) & ")",
"0",
"\0"
)
)

将其保存,应用到PowerBI中,最终展示的效果如下:

解释:
1.IF判断的目的,是为了解决某些时间段不存在同环比的情况;
2.SUBSTITUTE是为了解决因为0导致的数据格式问题;
3.当然,这个需求也可以深挖一下,进行同环比配色,这里就不进行展示了。


这里是白茶,一个PowerBI的初学者。

网友评论