Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
CA4
Contributor III
Contributor III

Einzelne Einträge von Excel Tabelle abrufen im Data load editor

Hallo, ich habe eine excel Tabelle in den data load editor geladen. Diese besteht aus Maschine (die einezelnen Namen werden in Spalte A geschrieben) und Geschwindigkeit (in Spalte B). Nun habe ich eine andere Tabelle noch wo die Stückzahl pro Auftrag vorkommt. 

 

Maschine      Geschwindigkeit

      A                          20 (zb <10 Stück)

      B                         20 (zb <10 Stück)

      A                         18 (zb 10-15 Stück)

      B                        18 (zb 10-15 Stück)

      A                         16 (ab 15 Stück)

      B                        16 (ab 15 Stück)

Ich möchte nun im Data load editor folgendes schreiben: 

wenn die Maschine unter 10 Stück produziert, muss die Geschwindigkeit 20 sein. Wenn die Maschine zwischen 10 und 15 Stück produziert muss die Geschwindigkeit 18 sein. Und zum Schluss noch, wenn die Maschine mehr als 15 Stück produziert, dann soll die Geschwindigkeit 16 sein. Ich möchte es dann in Tabellenform im QlikView anzeigen eben wenn ich auf die Maschine klicke und dem Tag, dass mir angezeigt wird mit welcher durchschnittlichen Geschwindigkeit gefahren wurde.

Kann mir hier jemand helfen? ich habe schon mit if schleifen probiert, aber ich komme nicht weiter.. das war mein Ansatz: 

if(Line = 'A' or Line = 'B'and Stück < 10) then
 Geschwindigkeit // Eintrag von Excel Tabelle müsste 20 sein
        elseif Stück>10 and Stück<15 then
        Geschwindigkeit // Eintrag von Excel Tabelle müsste 18 sein
                elseif ActualUnit>15 and Stück<15 then
                Geschwindigkeit // Eintrag von Excel Tabelle müsste 16 sein
                    else

end if

Labels (1)
17 Replies
CA4
Contributor III
Contributor III
Author

Hallo, da zeigt es mir immer die selbe Geschwindigkeit an, immer 0,986... egal wieviel Stück ich mache, immer der selbe wert.. und ich brauche aber, dass je nachdem welche Maschine ich auswähle und welche stückzahl dort produziert wird, dass sich die Geschwindigkeit eben anpasst... 

Ahidhar
Creator III
Creator III

could you share the script along with date

CA4
Contributor III
Contributor III
Author

leider darf ich das nicht, aber ich kann sagen, dass ich im data model viewer eine Tabelle habe die heißt Daten und beinhaltet: 

Datum

Maschine

Stück

 

und nun möchte ich die Geschwindigkeit hinterlegen, da ich hier  pro Maschine ca. 4 unterschiedliche Geschwindigkeiten habe (je nach Stückzahl)... und dann soll es mir wie im Bild oben immer die richtige Geschwindigkeit anzeigen

Ahidhar
Creator III
Creator III

see if this works

tab2:
load date(date#(Date,'DD/MM/YYYY'),'DD/MM/YYYY') as Date
,Machine,Piece,
if(Match(Machine,'A','B') and Piece<10,20,
if(Match(Machine,'A','B') and Piece>=10 and Piece<=15,18,
if(Match(Machine,'A','B') and Piece>=15 and Piece<=20,17,
if(Match(Machine,'A','B') and Piece>20,16)))) as Speed;
load * Inline
[
Date,Machine,Piece
12/11/2023,A,2
12/11/2023,B,2
12/11/2023,A,11
12/11/2023,B,11
12/11/2023,A,17
12/11/2023,B,17
];

Ahidhar_0-1703076763668.png

 

CA4
Contributor III
Contributor III
Author

ja, bei mir ist es laut Bild immer der selbe Wert, weil ich möchte hier nicht alle Stückzahlen händisch eingeben, da die Variable Stück aus 100000 Zahlen besteht.. Wenn ich eben das Datum auswähle und die Maschine, dann möchte ich die dazugehörige Stückzahl sehen und die Geschwindigkeit... 

marcus_sommer

Für mich sieht das nach zwei Baustellen aus. Zum einen sind es die (passenden) Verknüpfungen im Datenmodell und dann die Zuordnungen der Geschwindigkeit nach Stückzahlen.

Falls du die passenden Verknüpfungen der Tabellen bereits hast und hier nur nicht erwähnt wurden, kannst du das Thema überspringen - ansonsten wäre hier zuerst anzusetzen. Das meint, sowohl die Maschinen als auch die Aufträge und ihre Datums-Stempel müssen korrekt assoziiert sein.

Die Geschwindigkeitszuordnungen sind prinzipiell sehr simple und können mit If-Schleifen abgearbeitet werden - jedoch wird es schnell unhandlich und unübersichtlich mehr als 4 - 5 verschachtelte Schleifen zu definieren. Etwas übersichtlicher wären hier dann pick(match()) Logiken, aber noch einfacher wäre ein entsprechendes Mapping zu nutzen, wie:

m: mapping load Maschine & '|' & Von + iterno() - 1 as Lookup, Geschwindigkeit inline [
Maschine, Von, Bis, Geschwindigkeit
A, 1, 10, 20
A, 11, 15, 18
...
] while Von + iterno() - 1 <= Bis;

Hierbei wird für jede Maschinen + Stückzahl Kombination ein Datensatz generiert und dann später per applymap() - funktioniert sehr ähnlich zum SVERWEIS() - die jeweilige Geschwindigkeit hinzugefügt, wie:

t: load *, applymap('m', Maschine & '|' & Stück, 'Fehler') as Geschwindigkeit from X;

CA4
Contributor III
Contributor III
Author

Hallo, das klingt sehr interessant, aber für mich sehr schwierig.. 

Vielleicht nochmal kurz, ich habe im Data model viewer ein paar Tabellen.. eine heißt "Data" und dort sind die Stück, die Maschine, das Datum angegeben... dann gibt es noch eine Tabelle, mit der alle anderen Tabellen verknüpft sind, die heißt "$Syn 6 Table"- dort stehen diese Variablen auch drin... 

Nun weiß ich nicht ob ich die Excel Tabelle brauche oder nicht (habe ein Bild angehängt)... ich möchte da eben ein Script schreiben im data load editor, dass ich dann im QlikView nur noch die Variablen in der Tabelle als Dimensionen festlegen kann und mir dann automatisch zur Linie und je nachdem wieviel Stück produziert wurden die Speed angezeigt wird... Ich habs mit dem mapping versucht.. scheitere aber immer.. vielleicht können Sie mir helfen und genau meine Variablen hernehmen und alle so reinschreiben damit ich es verstehe? vielen dank, sie sind echt ein Genie!

marcus_sommer

So eine Excel kann gut für ein Mapping genutzt werden, allerdings benötigt man zwei Zuweisungsspalten. Denn der Grundgedanke hinter einem Mapping ist, nicht die Werte gegen <= und/oder >= zu prüfen, wie man das in If-Logiken macht, sondern nur gegen = bzw. einem identischen Wert.

Hierfür benötigt man dann für jeden möglichen Wert innerhalb des Abfragebereichs (obere/untere Ausreißer könnte man mit Range-Funktionen abfangen) auch einen Mapping-Wert. Wie im oberen Beispiel gezeigt, kann man dies sehr einfach mit einem while-loop umsetzen. Dies mag jetzt umständlicher erscheinen, als die If-Logiken, ist es aber nicht. Prinzipiell ginge es auch ohne eine explizite Zuweisung, sei es mit If-Logiken oder einem Mapping, über eine Werte-Auflösung per IntervalMatch - Qlik Community - 1464547. Die Umsetzung für dein Szenario wäre aber vermutlich komplexer, als mit dem vorgeschlagenen Mapping - die Logik hinter diesen Werte-Auflösungen wird in dem Posting aber sehr gut erklärt.

Ich nehme mal an, dass auch wenn es mehrere hundert Maschinen mit jeweils n Geschwindigkeitsstufen gibt, es vermutlich nur so etwa 2 dutzend distinkte Geschwindigkeits-Zuordnungen gibt und man so einen Von-Bis Bereich dann auch sehr schnell in Excel erstellt hat - einfach die Liste Filtern und die Von + Bis Werte eintragen und runterkopieren und dann die nächsten. Selbstverständlich ginge das auch per Skript, aber der Extra-Aufwand hierfür ist es eher nicht Wert - jedenfalls nicht am Start eines solchen Projektes.

Insofern, passe mal die Excel so an und nehme eine komplett neue Anwendung, um diese dort einzuladen und diese dann mit einem while-loop entsprechend aufzulösen. Neue und noch nicht wirklich durchdrungene Logiken in eine bestehende Anwendung zu implementieren, wird in jeden Fall schwieriger, als sie vorher separat zu erproben.

Wenn das dann die erwarteten Resultate bringt (vielleicht mit 2 - 3 Text- und/oder List-Boxen in der Oberfläche) und der Weg dorthin verstanden wurde, dann lade hierzu mal eine weitere Tabelle aus dem ursprünglichen Datenmodell hinzu und versuche sie mit der bestehenden Tabelle zu verbinden - als Tabellen-Assoziation und/oder über eine Kombination der Tabellen (Felder per join/mapping anfügen und/oder Datensätze per concatenate untereinander hängen). Auch hierbei wieder Schritt für Schritt und nicht alles auf einmal. Auf gar keinen Fall sollten synthetische Tabellen und/oder Zirkelbezüge zwischen den Tabellen auftreten. Dies bedeutet auch, dass ich dein bestehendes Datenmodell mit mindestens 6 synthetische Tabellen als nicht valide ansehe.