Решение для достижения плана свыше 100% и отображения целевого значения через SVG в матрице.
достигатор =
VAR __Percent = [выполнение %] --ваша мера выполнения
var num_1 = INT(IF(__Percent>1,100,__Percent*100))
VAR __Colour =
SWITCH(
TRUE(),
num_1<=60, "#901F1F", -- красный
num_1<=80, "#DFB228", --желтый
"#6C882A" --зеленый
)
VAR __JP = 90 --- целевое значение, можно заменить на меру
return
"
data:image/svg+xml;utf8,
<svg width='100' height='20' viewBox='0 0 100 20' fill='none' xmlns='http://www.w3.org/2000/svg'>
<rect width='100' height='20' rx ='5' fill='#D9D9D9'/>
<rect width='"&num_1&"' height='20' rx ='5' fill='"&__Colour&"'/>
<line x1='"&__JP&"' y1='0' x2='"&__JP&"' y2='"&__JP&"' stroke='black' stroke-width='2'/>
"
&
IF(num_1>=100, --если значение больше 100%, то рисуется звезда
"<path d='M10 0L13.1153 5.71221L19.5106 6.90983L15.0406 11.6378L15.8779 18.0902L10 15.3L4.12215 18.0902L4.9594 11.6378L0.489435 6.90983L6.88474 5.71221L10 0Z' fill='#FFFFFF'/>")
&"
</svg>
"
❤61🔥45👍21👏4💯1
Сложность этой svg заключается в генерации остатка серых прямоугольников. Мне красиво, но пока не оптимально скорее всего.
P. S. : Наверное, это как-то можно запихнуть в REPT(), но я не могу сморщить мозг так, чтобы избежать цикла.
1000. SVG KPI Sales =
VAR __Measure = INT([% Выполнения]*100)
VAR __Color =
SWITCH(
TRUE(),
__Measure<=50, "#FF6B6B",
__Measure<=70, "#FFB000",
"#00B097"
)
VAR __FirstSVG = "data:image/svg+xml,<svg width='340' height='20' viewBox='0 0 230 20' fill='none' xmlns='http://www.w3.org/2000/svg'>"
VAR __10 = "<rect width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __20 = "<rect x='24' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __30 = "<rect x='48' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __40 = "<rect x='72' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __50 = "<rect x='96' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __60 = "<rect x='120' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __70 = "<rect x='144' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __80 = "<rect x='168' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __90 = "<rect x='192' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR __100 = "<rect x='216' width='14' height='20' rx='4' fill='"&__Color&"'/>"
VAR _10 = "<rect width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _20 = "<rect x='24' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _30 = "<rect x='48' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _40 = "<rect x='72' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _50 = "<rect x='96' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _60 = "<rect x='120' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _70 = "<rect x='144' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _80 = "<rect x='168' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _90 = "<rect x='192' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _100 = "<rect x='216' width='14' height='20' rx='4' fill='#D9D9D9'/>"
VAR _Text =
"<text x='280' y='15' font-size='15' text-anchor='end' fill='black' font-family='sans-serif' >" & __Measure &"%" & "</text>"
VAR __EndSVG = "</svg>"
VAR __SwitchPart=
SWITCH(
TRUE(),
__Measure<10, _10&_20&_30&_40&_50&_60&_70&_80&_90&_100,
__Measure<20, __10&_20&_30&_40&_50&_60&_70&_80&_90&_100,
__Measure<30, __10&__20&_30&_40&_50&_60&_70&_80&_90&_100,
__Measure<40, __10&__20&__30&_40&_50&_60&_70&_80&_90&_100,
__Measure<50, __10&__20&__30&__40&_50&_60&_70&_80&_90&_100,
__Measure<60, __10&__20&__30&__40&__50&_60&_70&_80&_90&_100,
__Measure<70, __10&__20&__30&__40&__50&__60&_70&_80&_90&_100,
__Measure<80, __10&__20&__30&__40&__50&__60&__70&_80&_90&_100,
__Measure<90, __10&__20&__30&__40&__50&__60&__70&__80&_90&_100,
__Measure<100, __10&__20&__30&__40&__50&__60&__70&__80&__90&_100,
__10&__20&__30&__40&__50&__60&__70&__80&__90&__100
)
RETURN __FirstSVG & __SwitchPart &_Text& __EndSVG
P. S. : Наверное, это как-то можно запихнуть в REPT(), но я не могу сморщить мозг так, чтобы избежать цикла.
👍28❤19🔥11