前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Power BI展示时间进度及其拓展

Power BI展示时间进度及其拓展

作者头像
wujunmin
发布2022-04-06 15:00:19
1.2K0
发布2022-04-06 15:00:19
举报
文章被收录于专栏:wujunmin

在网上看到个很简约的全年时间进度图表,尝试在Power BI当中实现,效果如下,上方是进度卡片,下方分十二行代表十二个月,已发生天数高亮显示。

加个播放效果,可以体验时间飞逝感

把下方度量值放入Image by CloudScope这个视觉对象即可正常显示圆点进度,制作逻辑见注释。

代码语言:javascript
复制
日期进度 = 
VAR ThisYear=YEAR(TODAY())//今夕是何年
VAR CalendarTable = 
ADDCOLUMNS(CALENDAR(DATE(ThisYear,1,1),DATE(ThisYear,12,31)),
"年",YEAR([Date]),
"月",MONTH([Date]),
"日",DAY([Date])
)//全年日历表
VAR t=
  ADDCOLUMNS(CalendarTable,
    "Circle",
     "<circle cx='"&5*[日]&"' cy='"&5*[月]&"' r='1' fill='DarkTurquoise' fill-opacity='"&IF([Date]<=today(),1,0.2)&"'/>")//日历的每天加个圆圈,cx是圆心的横坐标,cy是圆心的纵坐标,r是半径,fill是填充色,公众号wujunmin,fill-opacity是透明度
VAR Chart=
"data:image/svg+xml;utf8,"&
"<svg xmlns='http://www.w3.org/2000/svg' width='160' height='65'>"&
    CONCATENATEX(t,[Circle])&"
</svg> " //把所有圆串起来
RETURN
    Chart

这个度量值没有使用外部数据源。上方的三个卡片比较简单,在此不做展开。

在此基础上,可以进一步优化,可以放大今天的圆点:

把度量值中的半径(r值)加个条件判断,当日期为今天时,r值返回2否则返回1。

代码语言:javascript
复制
日期进度_今天放大 = 
VAR ThisYear=YEAR(TODAY())
VAR CalendarTable = 
ADDCOLUMNS(CALENDAR(DATE(ThisYear,1,1),DATE(ThisYear,12,31)),
"年",YEAR([Date]),
"月",MONTH([Date]),
"日",DAY([Date])
)
VAR t=
  ADDCOLUMNS(CalendarTable,
    "Circle",
    "<circle cx='"&5*[日]&"' cy='"&5*[月]&"' r='"&IF([Date]=TODAY(),2,1)&"' fill='DarkTurquoise' fill-opacity='"&IF([Date]<=today(),1,0.2)&"'/>")
VAR Chart=
"data:image/svg+xml;utf8,"&
"<svg xmlns='http://www.w3.org/2000/svg' width='160' height='65'>"&
    CONCATENATEX(t,[Circle])&"
</svg> "
RETURN
    Chart

写完上面度量值之后,我陷入了沉思,这东西有什么用?对业务有什么价值?这种展示方式占据了整个画布空间,仅仅为了显示时间进度有些得不偿失。如果放在上方,作为销售报告的一部分,可能更加实用。

上图展示了2月截止当前的进度,仅仅占据了很窄的空间,其余画布空间可以放置销售数据。这里有两个修改要点:第一,圆心的Y坐标不需要随数据变化,只有一行,X坐标随日期变化而变化;第二,每个月的日期数量不一样,图表的整体宽度width需要随着日期数量变化而变化。完整度量值如下:

代码语言:javascript
复制
日期进度_一行 = 
VAR ThisYear=YEAR(TODAY())//今夕是何年
VAR ThisMonth=MONTH(TODAY())//今夕时何月
VAR CalendarTable = 
ADDCOLUMNS(CALENDAR(DATE(ThisYear,ThisMonth,1),EOMONTH(DATE(ThisYear,ThisMonth,1),0)),
"月",MONTH([Date]),
"日",DAY([Date])
)//全月日历表
VAR t=ADDCOLUMNS(CalendarTable,
"Circle",
"<circle cx='"&5*[日]&"' cy='5' r='1' fill='DarkTurquoise' fill-opacity='"&IF([Date]<=today(),1,0.2)&"'/>")//日历的每天加个圆圈,cx是圆心的横坐标,cy是圆心的纵坐标,r是半径,fill是填充色,fill-opacity是透明度
VAR Chart=
"data:image/svg+xml;utf8,"&
"<svg xmlns='http://www.w3.org/2000/svg' width='"& 5* COUNTROWS(CalendarTable)+5 &"' height='10'>"&
    CONCATENATEX(t,[Circle])&"
</svg> " //把所有圆串起来
RETURN
    Chart

接着继续思考,这个时间进度图表能不能价值更大化?比如,不仅显示时间进度,还能显示截止当前的每天业绩达成,如下图所示:

这里改动很小,之前圆圈的颜色是固定色,切换为按业绩达成进行条件格式显示即可:

代码语言:javascript
复制
<circle cx='"&5*[日]&"' cy='5' r='1' fill='"&IF([Date]<TODAY(),IF([虚拟业绩达成]>=1,"DarkCyan","Tomato"),"Grey")&"'/>"

还有没有更多玩法?还可以改造下样式,用来查看天气中的降水分布,当天如果降雨,形状变为雨滴:

技巧在于将度量值中的形状按天气进行变化,之前形状全部是圆圈。现在当遇到雨天时,变为圆圈和三角形的结合(看上去像一滴雨),当不是雨天时,只显示一个灰色的圆圈:

代码语言:javascript
复制
IF([虚拟天气]="雨",
"<circle cx='"&5*[日]&"' cy='5' r='2' fill='DarkTurquoise'/>"&
"<polygon points='"&5*[日]-2&",5 "&5*[日]+2&",5 "&5*[日]&",1' fill='DarkTurquoise'/>",
 "<circle cx='"&5*[日]&"' cy='5' r='2' fill='Grey'/>")

此处polygon通过三个点定义了一个三角形。对靠天吃饭的行业,有这么一个天气信息提示也很有帮助。

最后读者可以思考一个问题,某一天雨很大,业绩却很好,如何微调上方的度量值达到天气与业绩结合的展示目的?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 wujunmin 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档