Power BI做一个日历图表

2021-11-26 11:12:20 浏览数 (1)

日历可以放在报表一角,以便阅读者知晓当前日期在当月的位置。下图是一个示例,有星期,有日期,周末为灰色,如果是当天,则有红色背景色并且字体显示为白色。如何在Power BI中实现呢?

首先,新建一个日期表:

代码语言:javascript复制
日期表 = 
ADDCOLUMNS(CALENDAR(DATE(2021,1,1),DATE(2021,12,31)),
"月",MONTH([Date]),
"日",DAY([Date]),
"星期",RIGHT(FORMAT([Date],"AAA"),1),
"星期值",WEEKDAY([Date],2),
"第几周",WEEKNUM([Date],2) 
)

表格显示为:

在Power BI中设置一个矩阵,字段如下:

去除总计,显示效果为:

为当前日期设置个背景色条件格式:

代码语言:javascript复制
背景色 = IF(SELECTEDVALUE('日期表'[Date])=TODAY(),"Tomato",BLANK())

再设置字体颜色条件格式,周六日为灰色,当前日期为白色:

代码语言:javascript复制
字体颜色 = IF(SELECTEDVALUE('日期表'[Date])=TODAY(),"White",IF(SELECTEDVALUE('日期表'[星期值])>=6,"Grey","Black")

拖动鼠标,隐藏第几周列:

效果为:

大体上上也能使用,如果背景色想要变成圆形,则不需要这么多度量值,只下面这个可以完成:

代码语言:javascript复制
SVG日 = 
"data:image/svg xml;utf8,"&"
<svg xmlns='http://www.w3.org/2000/svg' height='100' width='100'>"&
    IF(SELECTEDVALUE('日期表'[Date])=TODAY(),"<circle cx='50' cy='50' r='40' fill='Tomato'/>",BLANK())&"
<text x='50' y='50' font-size='30' text-anchor='middle' dominant-baseline='middle' fill='"&
        IF(SELECTEDVALUE('日期表'[Date])=TODAY(),"White",IF(SELECTEDVALUE('日期表'[星期值])>=6,"Grey","Black"))&        "'>"&SELECTEDVALUE('日期表'[日])&"
</text>
</svg> "

把SVG日设置为图像URL,矩阵中的值替换为该度量值,即显示为如下效果:

原理是将所有日期转换为SVG格式进行显示,看上去是数字,实际上是图片。Circle标签按照条件填充背景,text标签显示日期。

svg

0 人点赞