Vor einigen Wochen hatte ich die Anfrage alle "zukünftigen" Balken in einem gestapelten Balkendiagramm transparent darzustellen. Konkret ging es um Lagerbewegungen die bis in die Zukunft projiziert werden. Die Transparenz soll dem Anwender helfen zu sehen, ab welchem Monat es sich um "Forecast"-Zahlen handelt.
Aufgrund der Vielzahl an Produkten war es nicht gewünscht bereits im Skript Farben für jedes Produkt zu hinterlegen. Deswegen wollten wir die Standardfarben von QlikView benutzen.
Mein erster Ansatz funktionierte, verlangt aber viele unschöne Stringoperationen:
Aus der aktuellen Farbe des Balkens color(rowno()) schneidet die Formel die Stellen für RGB aus, und füge Sie mit Transparenz 120 wieder in die ARGB()-Formel ein.
Was auf den ersten Blick nach einer zufälligen Dezimalzahl aussieht, ist bei näherer Betrachtung eine Bit-Darstellung einer ARBG-Farbe. QlikView bietet fertige Funktionen um Zahlen in beliebigen Zahlenbasen darzustellen. Mit der Funktion =num(black(),'(hex)') bekommt man den aussagekräftigeren Hexadezimalen-Wert für die Farbe Schwarz: ff000000!
QlikView liefert also für jede Farbe einen ARGB-Wert zurück. Insgesamt haben wir als für jede Farbinformation 1 Byte = 8 Bit zur Verfügung. black() ist also nichts anderes als Rot=0, Grün=0, Blau=0 mit einer vollen Deckkraft von A=FF(hex)
Die Farbe Schwarz binär dargestellt liefert QlikView mit der Funktion =num(black(),'(bin)').
Man erinnere sich an seine Informatik-Ausbildung: 1Hex-Stelle sind 4 bit!
Zurückkommend auf die ursprüngliche Fragestellung, kann man jetzt komplett ohne String-Operationen auskommen. Die Formel um die Balken halb-transparent darzustellen lautet nun
Download Beispiel
Aufgrund der Vielzahl an Produkten war es nicht gewünscht bereits im Skript Farben für jedes Produkt zu hinterlegen. Deswegen wollten wir die Standardfarben von QlikView benutzen.
![]() |
Die Aufgabenstellung: Ab November (aktuelles Monat) die Balken transparent darstellen) |
Mein erster Ansatz funktionierte, verlangt aber viele unschöne Stringoperationen:
if(Month >= month(today()),
argb(120,
mid(color(rowno()),5,3),
mid(color(rowno()),9,3),
mid(color(rowno()),13,3)
)
,
color(rowno())
)
Aus der aktuellen Farbe des Balkens color(rowno()) schneidet die Formel die Stellen für RGB aus, und füge Sie mit Transparenz 120 wieder in die ARGB()-Formel ein.
Farben in QlikView
Für eine bessere Lösung muss man sich zuerst klar werden, wie Farben in QlikView funktionieren. Jede Farbfunktion in QlikView liefert eine Zahl zurück. Ruft man etwa =num(black()) auf, bekommt man folgenden dezimalen Output:Was auf den ersten Blick nach einer zufälligen Dezimalzahl aussieht, ist bei näherer Betrachtung eine Bit-Darstellung einer ARBG-Farbe. QlikView bietet fertige Funktionen um Zahlen in beliebigen Zahlenbasen darzustellen. Mit der Funktion =num(black(),'(hex)') bekommt man den aussagekräftigeren Hexadezimalen-Wert für die Farbe Schwarz: ff000000!
QlikView liefert also für jede Farbe einen ARGB-Wert zurück. Insgesamt haben wir als für jede Farbinformation 1 Byte = 8 Bit zur Verfügung. black() ist also nichts anderes als Rot=0, Grün=0, Blau=0 mit einer vollen Deckkraft von A=FF(hex)
Die Farbe Schwarz binär dargestellt liefert QlikView mit der Funktion =num(black(),'(bin)').
Man erinnere sich an seine Informatik-Ausbildung: 1Hex-Stelle sind 4 bit!
Transparent rechnen
Mit diesem Wissen lässt sich nun die Transparenz viel einfacher manipulieren. Um den Transparentwert beispielsweise zu "dreivierteln" könnte man das 30. bit auf 0 setzen. Um das zu erreichen, kann man von der Farbe 2 hoch 30 abziehen: =num(black() - pow(2,30),'(bin)')Zurückkommend auf die ursprüngliche Fragestellung, kann man jetzt komplett ohne String-Operationen auskommen. Die Formel um die Balken halb-transparent darzustellen lautet nun
if(Month >= month(today()),
color(rowno()) - pow(2,31)
,
color(rowno())
)
![]() |
Das fertige Chart |
Download Beispiel