日历可以放在报表一角,以便阅读者知晓当前日期在当月的位置。下图是一个示例,有星期,有日期,周末为灰色,如果是当天,则有红色背景色并且字体显示为白色。如何在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标签显示日期。