Crosstab Funktionen

Hallo,
in meiner Kreuztabelle möchte ich die Werte von zwei Spalten in einer Dritten miteinander verrechnen. Ich dachte dazu könnte ich die Funktion Crosstab.Value(0,-1) verwenden. Der Wert von der linken Spalte steht auch als “Wert” drin und nicht nur als “Darzustellender Inhalt”. Leider bekomme ich von der Funktion keine Werte.
Bei anderen Funktionen bekomme ich seltsame Werte, z.B. von Crosstab.Cells.Max(True,2,0) einen sehr kleinen Wert (e-308). Ich habe das Problem in der Beispielanwendung nachgebaut und hoffe, jemand kann mir die Augen öffnen, was ich hier übersehen habe.
Ich weiß, dass ich in meinem Beispiel einfach die Werte UnitPrice*Quantity verrechnen könnte. Da mein realer Fall komplizierter ist, suche ich nach einer Lösung mit Verweis auf andere Zellen in der Kreuztabelle. Probiert habe ich es mit Version LL27 und LL28.
image
Crosstab.Cells.Max.lsr (76.6 KB)
Viele Grüße
Silas

Hallo Silas,

wir empfehlen dir für die dritte Spalte die gleiche Formel wie für die erste und zweite Spalte zu verwenden. Der Grund dafür ist, dass die Spalten auf der gleichen Zellebene gleichzeitig berechnet werden und es daher nicht möglich ist, den Inhalt einer Spalte auf eine andere zu beziehen. Es ist jedoch möglich auf Werte “weiter oben” (Gruppentexte, Summenspalten, …) in der Zellenhierarchie zu verweisen, jedoch nicht auf relative Zellen innerhalb derselben Zellebene.

Wie bereits erwähnt wäre hier die Wiederholung der “komplexeren” Formel die Lösung. Diese kannst du zur Vereinfachung in einer Benutzervariablen speichern. Zusätzlich solltest du die Option LL_OPTION_USERVARS_ARE_CODESNIPPETS auf 1 setzen, da es hier in der Vergangenheit einen Bug gab.

Hallo Andreas,
danke für deine Idee, die Berechnung in eine Benutzervariable zu packen. Das macht die Sache schon viel übersichtlicher. :slight_smile:

Nun würde ich meine Zelle gerne einfärben. Dabei ist mir aufgefallen, dass in der bedingten Formatierung LL.CurrentValue genutzt wird. Dieser berechnet sich aber nicht, wie erwartet, aus dem “Wert” der Zelle, sondern aus Val(“Dargestellter Inhalt”) bei dem ich eigentlich ein Symbol vor meinen Wert schreiben möchte. Durch mein Symbol wird der LL.CurrentValue = 0 und die bedingte Formatierung falsch.
Wenn ich dort meine @benutzervariable verwende, verrutscht die bedingte Formatierung um eine Zeile nach unten… Ist das der erwähnte Bug? Ähnliches passiert auch, wenn ich eine Formel in der Farbe der Schrift verwenden möchte.

Könntest du mir bitte noch helfen, die Option zu setzen? Meine C# Variante kompiliert zwar, aber wirkt anscheinend noch nicht.

LL.Core.LlSetOptionString(1, "LL_OPTION_USERVARS_ARE_CODESNIPPETS");
Vielleicht kannst du mir ein .NET Beispiel nennen, in dem eine String Option gesetzt wird, oder die option int, die diese Option hat?

Vielen Dank!

Hallo Silas,

die Option LL_OPTION_USERVARS_ARE_CODESNIPPETS kannst du wie folgt auf 1 setzen:

LL.Core.LlSetOption(132,1); // LL_OPTION_USERVARS_ARE_CODESNIPPETS

Zusätzlich kannst du mit der Option LL_OPTION_CROSSTAB_USE_CELLVALUE_INSTEAD_OF_DISPLAYVALUE = 1, die dir ab der aktuellen List & Label 28 Version zur Verfügung steht, entscheiden, welcher Wert verwendet werden soll. Du kannst diese Option wie folgt setzen:

LL.Core.LlSetOption(308, 1); // LL_OPTION_CROSSTAB_USE_CELLVALUE_INSTEAD_OF_DISPLAYVALUE

Als kleiner Tipp: Die oben genannten Zahlen (Options) findest auch du in der Datei cmbtLL29.h, die du in deinem List & Label Installationsordner unter C:\Program Files (x86)\combit\LL29\Beispiele\Visual C++ findest.