Best way to JOIN with OWB 10.2

Hi Gurus,
im a newbie in working with OWB and i also apologize for my englisch. I have the following Issue. Im using Oracle warehousebuilder and i want to load data in a new Table as Table3 from two distinct source table Table1 and Table2.
It should look like this: Table3.col1 = Table1.col2 ; Table3.col2 = Table1.col3; Table3.col3 = Table2.colb.
I mean it is a kind of JOIN but the column from Table3 have to be just the same as the column from Table1 and Table2 and no other combination.
Table1 : col1 | col2 | col3
Table2: cola | colb | colc
Table3: Table1.col2 | Table1.col3 | Table2.colb
Can someone help me?
Thx

Vinzsanity,
The problem is that you are trying to model a query that requires something more than a simple join as you seem to hope..
Joining based on simple table row order is not something relational databases are really designed to do well. They join on values. For example, if you simply try to write basic SQL to make your join you discover the problem:
select t1.col1, t2.colb
from   table1 a,
         table2  b
where a.rownum = b.rownum ;What you get is an ORA-01747 error as the rownum psuedocolumn is not valid in this context. But if you don't find a way to join on roworder you get the crossproduct - which is NOT what you want.
The simplest pure SQL join to get your results as described in your sample data is:
select a.col1, b.cola
from   (select rownum rnum, s.* from table1 s) a,
         (select rownum rnum, t.* from table2 t) b
where a.rnum(+) = b.rnum;but this only implies a possible one-way outer join to meet your described data sample. If you want a full outer join to handle the possibilities where either table could have more or less rows than the other, then
select a.col1, b.cola
from   ((select rownum rnum, s.* from table1 s) a
         full outer join
       (select rownum rnum, t.* from table2 t) b
       on (a.rnum = b.rnum))Now, clearly this is NOT going to me modelled as just a simple join in OWB. First, you need to find a way to add the rownum pseudocolumn to both table result sets in order to be able to join on them. For example, you could use an expression object for each table, dump all of the fields straight from the expression input to the expression output, and then add a rownum column to the output as well. Then join the two with a joiner defined as full outer join on the two rownum fields and map the required columns to the target table.
Or, you could create a view:
Create or replace view table1_And_2_outer_join as
select a.*, b.*
from   ((select rownum rnum1, s.* from table1 s) a
         full outer join
       (select rownum rnum2, t.* from table2 t) b
       on (a.rnum = b.rnum))And use that view as the source object in your mapping.
Or create two views:
Create or replace view table1_with_rownum as
select rownum rnum1, s.* from table1;
Create or replace view table2_with_rownum as
select rownum rnum2, t.* from table2 tAnd then use the two views as your sources and join them together using the joiner object defined as outer join on the rownumber values.
Any of those three options will get you what you seem to want.
Cheers,
Mike

Similar Messages

  • What is the best way to work with Word documents in The InDesign CS4???

    I work in Microsoft Word 2007 and all my documents have *.doc format.
    What is the best way to work with Word documents in InDesign CS4???
    David Blatner says to avoid copying and pasting text from Word instead of placing it (Ctrl+D).
    How about pasting RTF or Text Document???
    I want to make book's layout in ID CS4 and its main feature is that there is the left page with text and the right - with graphics.
    So, as I understand to place the text on each page I must create for example 70 Word documents and place each item on 70 left pages???
    It loks like wasting time. I sthere another way of making such layout???  What kind????

    It's best to place any text.
    You can have all of your text in one file and use auto-flow to add threaded text frames and pages as required (Hold down the Shift key when you click the loaded text cursor), but it's a little non-standard to have the thread only on one side of the spread from the auto-flow perspective, so you'll have to set up properly.
    This is one case where a master text frame will work to your advantage. On your master page spread, add a text frame to the left page, but not to the right (or at least not threaded to one on the right -- for some other project you might actually want two independent text threads). Hold the loaded cursor over a frame on the left side of a document page and auto-flow. ID will add new spreads as necessary, but only put the text on the left side.
    Peter

  • How is the best way to deal with duplicate photos

    I am using a new retina 27" iMac 16gb ram OS X 10.10.1
    Aperture 3.6
    What is the best way to deal with duplicates that get in Aperture Vaults
    I have used Gemini and it finds duplicates, but I have no way of telling if the original are still there.
    I don't want to go through 15000 photos to try to find the duplicate.
    Thanks Charlie

    You mean - one image in a vault, one in a library?  Or duplicates in the same library?
    Photo Sweeper can scan several libraries or folders at the same time and display the duplicates side by side to let you pick which to keep.  You can define rules to mark photos for automatic deletion as well.
    http://overmacs.com/photosweeper.html

  • What's the best way to deal with floating point errors?

    What's the best way to deal with the decimal number errors in Flex?
    Lets say I have:
    var number1:Number = 1.1;
    var number2:Number = 1;
    var result:Number = number1 - number2;
    trace(result);
    I get "0.10000000000000009".
    What's the best way to deal with this so that i get the right result?
    Using the trick: result = Math.round( result * Math.pow(10,13) ) / Math.pow(10,13); is not useful as such when using big numbers.
    For example, If number1 = 100000000001.1, and number2 = 0.2, I get "100000000000.90001" as result. The previous rounding fixes rounding errors after 13th decimal, but here the first rounding errors come after 4 digits.
    The toPrecision method in Number and NumberFormatter dont seem be of use by themselves because of the same reason.
    So I'd have to check how big the number is, and then round the number based on that.
    So far I've constructed a method that does that with logarithms like this:
    public function floatFix(number:Number):Number{
          var precision:int = 14-Math.floor(Math.log(Math.abs(number))*Math.LOG10E);
          var precisionFactor:Number = Math.pow(10, precision);
          return Math.round(Number(number*precisionFactor))/precisionFactor;
    It just seems rather odd that one would have to create and use something like that to just count 1.1-1; There's a lot of calculating in that method, and i'm guessing that having to use that in a loop could slow down a program quite a bit.
    I think there really should be a pre-built method in flex for something like this, but I can't find any.
    Anyone know any better/faster ways?

    Use the application server database pooling services to create a datasource that can be access using JNDI.
    Move the database access code to a Servlet so that a JSP submits a form to the Servlet that does the database access and packages the data into a bean which is passed to another JSP to be displayed.

  • Best way to deal with Mutating table exception with Row Level Triggers

    Hello,
    It seems to be that the best way to deal with Mutating Table exception(s) is to have to put all the trigger code in a package & use it in conjunction with a Statement level trigger .
    This sounds quite cumbersome to me . I wonder is there any alternative to dealing with Mutating table exceptions ?
    With Regards

    AskTom has a good article about this,
    http://asktom.oracle.com/tkyte/Mutate/index.html

  • What is the best way to deal with memory leak issue in sql server 2008 R2

    What is the best way to deal with memory leak issue in sql server 2008 R2.

    What is the best way to deal with memory leak issue in sql server 2008 R2.
    I have heard of memory leak in OS that too because of some external application or rouge drivers SQL server 2008 R2 if patched to latest SP and CU ( may be if required) does not leaks memory.
    Are you in opinion that since SQL is taking lot of memory and then not releasing it is a memory leak.If so this is not a memory leak but default behavior .You need to set proper value for max server memory in sp_configure to limit buffer pool usage.However
    sql can take more memory from outside buffer pool if linked server ,CLR,extended stored procs XML are heavily utilized
    Any specific issue you are facing
    Please mark this reply as the answer or vote as helpful, as appropriate, to make it useful for other readers

  • What is the best way to work with AVCHD 720 24p footage in FCE4.1?

    Hi I have a Panasonic HMC-150 and I've been shooting 720 24p footage at 21 mbps transfer rate.
    I was wondering what is the best way to work with this material in FCE 4.1? I see that in the easy set up menu they only have the option of 1440X1080i at 50 or 60 fps or 1920X1080i at 50 or 60 fps.
    Also in the rates drop down menu there is only 50 or 29.97.
    So I was wondering which is the best choice for 720 24p footage and will it look alright in any of them? Also is it possible to customize these settings?
    And finally can you work with faster transfer rates (21mbps) in FCE?

    Yikes, this is going to be tricky since FCE does not support native 24p editing.
    The work around for some of us is that AVCHD material that is 24p is often recorded to disc at 60i using telecine, in which case it can be editing at 29.97 frames per second, and then detelecined afterward for final export at 23.98 fps. The problem is that I think your camera actually records real 24p - not 24p packed into 60i. When you import the material from the camera what does QuickTime report the framerate as?

  • What is the best way to work with mixed media in 1080 timeline?

    Hi there,
    I have a project shot mostly in 1080 24p but a bit of 720 24p and 4x3 30p footage.
    What is the best way to work with this mixed media?
    Thanks!
    Steven

    Hi Shane,
    Ok just to recap (thanks for being patient by the way)...I have put some questions in here...feel free to write in caps to respond and we'll put this baby to rest!
    1) I will work in a 1080p FCP sequence, correct?
    2) HD 1080p footage captured as applepro res hq I will leave as is and work with?
    3) HD 720p footage which was captured as applepro res hq. Can I just drop in 1080 timeline and let FCP do its work? Or should i run through compressor, if so what setting shall I submit it too?
    4) I dont have a budget for an external hardware to convert SD to HD...should I capture my SD Beta through Final Cut and just leave and let FCP do its work? Or should I run through compressor? If so what setting shall I submit it too?
    5) For for my master sequence in FCP am I not using an I-Frame format apple pro res if I am using my apple pro res hq 1080 footage as my formatted sequence? I am not sure what you mean by GOP?
    6) I also found some 60p footage 1080p XDCAM compressor shot with the same XDCAM camera. I put in the 1080p 24p timeline but it was pretty choppy...any ideas of this conform?
    Thanks very much for all your help it has gone along way,
    Steven
    Saying what CODECS you are working with was my question. 1080, 720, 4:3...really says nothing. There are a dozen 1080 codecs, another dozen 720 codecs, and nearly 100 4:3 formats.
    Best to capture all the footage to one uniform codec.
    Second best is to work with one format and let FCP conform the rest to that...IF and only IF that format is an I-Frame format like ProRes. GOP formats as master sequence formats cause TONS of issues.
    What I'd do is work 1080 ProRes, just add the 720p footage (Use Compressor to convert it if you didn't have a lot, but if you had a lot, just add it), but I'd capture all the SD 4:3 footage via a Kona 3 or Matrox MXO2 as 1080 ProRes. Hardware conversion of SD to HD is much better than anything FCP can do. AE might do good as well. But then use Compressor to convert 29.97 footage captured (you can't convert 29.97 to 23.98 when you capture) to get to 23.98.

  • Best way to deal with hard coded variables in a package

    There is a plsql package that reads a line from a file, parses the data, does a ton of sql operation with it (select update, inserts, calculations) and then writes the output to an output file.
    The file names and the firectories are retieved from a database table.
    Example:
    select location,file_name into loc_in,file_in from temp_tbl;
    p_File_handle := utl_file.fopen (loc_in, file_in, 'W');
    My co worker is suggesting that getting the variable values from the table is not a good practice. He suggests that the values should be hard-coded in the program. Now you might ask what would happen if the file name or directory changes. His suggestion is to have a build file and do a token substitution of those hard coded values in the program and then load in to the DB. In short the process will involve the following steps:
    -Get the package from the repostory.
    -Change the file name and directory in the token file.
    -Run the build process that will replace the values in the package .
    -Load the new file (with the updated values) in to the DB.
    Example:
    This way the program will be initially coded like this:
    p_File_handle := utl_file.fopen ('${loc_in}', '${file_in}', 'W');
    After the build file runs, it will replace the values as
    p_File_handle := utl_file.fopen ('C:/test', 'testfile.dat', 'W');
    Once the file has changed with the new updated values, compile that into the database.
    Ideas/comments?

    Re: Best way to deal with hard coded variables in a package: why have you reposted using a new profile?
    Neither post provides enough clear information on what the actual requirement is. We need more data in order to comment on your idea, your co-worker's, or to suggest alternatives.
    My co worker is suggesting that getting the variable
    values from the table is not a good practice.His reasons for this are...?
    "variable values": Why do they vary? How often do they change?
    The file names and the directories are retrieved from
    a database table.How do the values get into the table? What is the volume of the data?
    Oracle version? Operating system?

  • Best way to deal with multi-track clips?

    Hi,
    I'm editing a documentary using pre edited program masters and have been supplied the audio stems. Can anyone recommend the best way to deal with them so I can access any of the tracks within the main edit.
    I've tried creating a compound clip and adding the stems but I only access to a mono track when using the clip in my main project. I've also tried creating a multicam clip but as my stems need to be split and spaced to line up with the main Pro Res file I don't seem to be able to insert slugs into multicam clip.
    Has anyone found an elegant way to do this?
    Many thanks,
    Leigh

    Hi leiski,
    Happy New Year, and Welcome to the Support Communities!
    Compound clips are still the best way to approach this, because you have access to the stems at any time with a double-click. 
    The following resources may provide additional information:
    Audio editing overview
    http://help.apple.com/finalcutpro/mac/10.1/#verdcd1cc1
    Advanced multichannel audio editing
    Final Cut Pro automatically groups channels into audio components according to how the channels are configured for the clip. You can expand the audio portion of clips to reveal and edit audio components down to the individual channel level. This allows you to apply different effects to different components and streamlines the process for making quick sound cutouts to a single microphone input or other fine adjustments. 
    Important:  Many digital audio file formats, such as AAC and MP3, use interleaved stereo files, which do not contain separate left and right channels. These files appear as a single audio component unless you change the clip’s channel configuration. 
    Keep in mind the following when editing audio components in Final Cut Pro:You view and change the audio channel configuration of your clips in the Audio inspector. You can change audio component names, add or remove audio components, and configure channels in mono, stereo, and surround formats. See Configure audio channels.
    Configure Audio Channels
    http://help.apple.com/finalcutpro/mac/10.1/#verc1fab5f6
    Using Roles to organize clips and export audio files
    http://help.apple.com/finalcutpro/mac/10.1/#verc1faa7ce
    Cheers,
    - Judy

  • Best way to deal with same members having different parents/children

    We have a situation where some nodes need to have different parents for different application but they exist in the main hierarchy. What is the best way to deal with it? The nodes used are pretty much the same.
    Is it best to create a new hierarchy within the same version and let the nodes have different parents in it?
    -- A

    Every node has a parent in the hierarchy. You said that some nodes need different parents for different applications.
    Do these 'different parents' exist further up the tree? If they do then you can create a boolean input property that flags the nodes that exist JUST for the application. Create a new property (call it NewAppParent, let's say) with a formula that recursively climbs up the tree to find its next parent for the application, and export NewAppParent as the parent value.
    If the parent does not exist in the hierarchy then you should create an alternate hierarchy.
    If the parent exists in the hierarchy and is not an ancestor of the node then you're out of luck. Unless you create an alternate hierarchy with unique parent names.
    D

  • "Built In " battery ... what is the best way to deal with it ?

    Hi ... I just bought this laptop envy6-1100se with a built in battery and I actually heard alot of diffrent opinions about the best way to deal with the battery and charging and I don't know what to trust to make my batterylife the longest   so hope u can help me with that .. I want to know also if there is any damage to the battery if I kept it plugged to Ac Power even after it's totally charged ... ??

    You want to minimize the number of charge/discharge cycles so yes it is actually a real good idea to have it plugged in whenever you can. Just to illustrate, Samsung makes several models with integrated batteries and they actually have a setting in the BIOS where you can choose to cut off charging at 80% battery power. If it never goes above 80%, then discharging and charging below the 80% level never registers as a cycle. The battery has a smart chip that counts cycles. After a certain number, say 500, the battery will no longer work. This is to minimize the fire hazard from older Li-ion batteries. In other words, you trade runtime on a "full" charge for longevity of the battery. You might go from 5 hours to 4 on a single charge but the battery will last 4 years instead of two and a half. The battery can actually be replaced but it is a huge pain. The "Samsung" solution is not available on HP's that I have been able to determine.
    So, as I said there is not much you can do except use AC power as much as possible and treat the battery like your life savings; use it sparingly.
    And I recognize that when it comes to batteries on laptops, it is like a discussion of religion. There is more than one respectable opinion but this is mine.

  • What is the best way to deal with different audio sample rates on the same timeline ?

    what is the best way to deal with different audio sample rates on the same timeline ?

    You don't have to do anything special. If possible, start your project with a clip that has the desired target frame rate and audio sample rate, and your project parameters will be set automatically. Other sample rates will be converted under the covers.
    For example, if your video is shot at 48khz, you can add music files at 44.1khz with no problem.
    If you are recording audio that you want to synch with video (multicam), you will get best results if everything is 48khz, but you can use 44.1 if that is all you have. Once I forgot to reset my Zoom to 48,000 and it still worked.

  • Best way to deal with Storm 9530 problems?

    Hi there,
    i'm having numerous problems with my Storm from freezeups to random reboots to an inability to connect via USB (Windows reports a problem with the connection).  Before I replace the phone I thought I would restore the phone to factory defaults to see if that solves any problems.
    Is that the best way to deal with these problems?  Can someone please point out the best way to backup my data (given that I can't connect via USB anymore) and restore the phone?
    Thanks in advance.
    [L] 

    Anyone?
    [L] 

  • What is the best way of dealing with an "implicit coercion" of an array to a sprite?

    Hello everyone!
         With continued help from this forum I am getting closer to having a working program. I look forward to being able to help others like myself once I finish learning the AS3 ropes.
         I will briefly explain what I am trying to achieve and then follow it up with my question.
    Background
         I have created a 12 x 9 random number grid that populates each cell with a corresponding image based on each cell's numeric value. I have also created a shuffle button that randomizes the numbers in the grid. The problem I am running into is getting my button-click event to clear the current images off the grid in order to assign new ones (i.e. deleting the display stack objects in order to place news ones in the same locations).
    Question
         My question is this: what is the best way to handle an implicit coercion from an array to a sprite? I have pasted my entire code below so that you can see how the functions are supposed to work together. My trouble apparently lies with not being able to use an array value with a sprite (the sprite represents the actual arrangement of the grid on the display stack while the array starts out as a number than gets assigned an image which should be passed to the sprite).
    ============================================================================
    package 
    import flash.display.MovieClip;
    import flash.display.DisplayObject;
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.utils.getDefinitionByName;
    public class Blanko extends MovieClip
          // Holds 12*9 grid of cells.
          var grid:Sprite;
          // Holds the shuffle button.
          var shuffleButton:Sprite;
          // Equals 12 columns, 9 rows.
          var cols:int = 12;
          var rows:int = 9;
          // Equals number of cells in grid (108).
          var cells:int = cols * rows;
          // Sets cell width and height to 40 pixels.
          var cellW:int = 40;
          var cellH:int = 40;
          // Holds 108 cell images.
          var imageArray:Array = [];
          // Holds 108 numerical values for the cells in the grid.
          var cellNumbers:Array = [];
          // Constructor calls "generateGrid" and "makeShuffleButton" functions.
          public function Blanko()
               generateGrid();
               makeShuffleButton();
      // Creates and displays the 12*9 grid.
      private function generateGrid():void
           grid = new Sprite;
           var i:int = 0;
           for (i = 0; i < cells; i++)
                cellNumbers.push(i % 9 + 1);
           trace("Before shuffle: ", cellNumbers);
           shuffleCells(cellNumbers);
           trace("After shuffle: ", cellNumbers);
           var _cell:Sprite;
           for (i = 0; i < cells; i++)
                // This next line is where the implicit coercion occurs. "_cell" is a sprite that tries
                   to temporarily equal an array value.
                _cell = drawCells(cellNumbers[i]);
                _cell.x = (i % cols) * cellW;
                _cell.y = (i / cols) * cellH;
                grid.addChild(_cell);
      // Creates a "shuffle" button and adds an on-click mouse event.
      private function makeShuffleButton():void
           var _label:TextField = new TextField();
           _label.autoSize = "center";
           TextField(_label).multiline = TextField(_label).wordWrap = false;
           TextField(_label).defaultTextFormat = new TextFormat("Arial", 11, 0xFFFFFF, "bold");
           _label.text = "SHUFFLE";
           _label.x = 4;
           _label.y = 2;
           shuffleButton = new Sprite();
           shuffleButton.graphics.beginFill(0x484848);
           shuffleButton.graphics.drawRoundRect(0, 0, _label.width + _label.x * 2, _label.height +
                                                _label.y * 2, 10);
           shuffleButton.addChild(_label);
           shuffleButton.buttonMode = shuffleButton.useHandCursor = true;
           shuffleButton.mouseChildren = false;
           shuffleButton.x = grid.x + 30 + grid.width - shuffleButton.width;
           shuffleButton.y = grid.y + grid.height + 10;
           this.addChild(shuffleButton);
           shuffleButton.addEventListener(MouseEvent.CLICK, onShuffleButtonClick);
      // Clears cell images, shuffles their numbers and then assigns them new images.
      private function onShuffleButtonClick():void
       eraseCells();
       shuffleCells(cellNumbers);
       trace("After shuffle: ", cellNumbers);
       for (var i:int = 0; i < cells; i++)
        drawCells(cellNumbers[i]);
      // Removes any existing cell images from the display stack.
      private function eraseCells(): void
       while (imageArray.numChildren > 0)
        imageArray.removeChildAt(0);
      // Shuffles cell numbers (randomizes array).
      private function shuffleCells(_array:Array):void
       var _number:int = 0;
       var _a:int = 0;
       var _b:int = 0;
       var _rand:int = 0;
       for (var i:int = _array.length - 1; i > 0; i--)
        _rand = Math.random() * (i - 1);
        _a = _array[i];
        _b = _array[_rand];
        _array[i] = _b;
        _array[_rand] = _a;
      // Retrieves and assigns a custom image to a cell based on its numerical value.
      private function drawCells(_numeral:int):Array
       var _classRef:Class = Class(getDefinitionByName("skin" + _numeral));
       _classRef.x = 30;
       imageArray.push(_classRef);
       imageArray.addChild(_classRef);
       return imageArray;
    ===========================================================================
         Any help with this is greatly appreciated. Thanks!

    Rothrock,
         Thank you for the reply. Let me address a few things here in the hopes of allowing you (and others) to better understand my reasoning for doing things in this manner (admittedly, there is probably a much better/easier approach to what I am trying to accomplish which is one of the things I hope to learn/discover from these posts).
         The elements inside my "imageArray" are all individual graphics that I had imported, changed their type to movie clips using .Sprite as their base class (instead of .MovieClip) and then saved as classes. The reason I did this was because the classes could then be referenced via "getDefinitionByName" by each cell value that was being passed to it. In this grid every number from 1 to 9 appears randomly 12 times each (making the 108 cells which populate the grid). I did not, at the time (nor do I now), know of a better method to implement for making sure that each image appears in the cell that has the corresponding value (i.e. every time a cell has the value of 8 then the custom graphic/class "skin8" will be assigned to it so that the viewer will be able to see a more aesthetically pleasing numerical representation, that is to say a slightly more fancy looking number with a picture behind it). I was advised to store these images in an array so that I could destroy them when I reshuffle the grid in order to make room for the new images (but I probably messed up the instructions).
         If the "drawCell" function only returns a sprite rather than the image array itself, doesn't that mean that my "eraseCells" function won't be able to delete the array's children as their values weren't first returned to the global variable which my erasing function is accessing?
         As for the function name "drawCells," you have to keep in mind that a) my program has been redesigned in stages as I add new functionality/remove old functionality (such as removing text labels and formatting which were originally in this function) and b) that my program is called "Blanko."
         I will try and attach an Illustrator exported JPG file that contains the image I am using as the class "skin7" just to give you an example of what I'm trying to use as labels (although it won't let me insert it here in this post, so I will try it in the next post).
    Thank you for your help!

Maybe you are looking for

  • Safari doesn't open

    It says it quit unexpectedly last time. It presents options ignore, report an re-open. But except ignore nothing works. Here is a report. Process:               Safari [671] Path:                  /Applications/Safari.app/Contents/MacOS/Safari Identi

  • HT201250 Why won't Time Machine won't restore my iphoto library [says there is not enough room on my hard drive.]  Any ideas?

    I've got 20,000 plus photos on my HD [yes, I know, way tooo many].  I'm trying to clean up by storing them on an external HD, but for several months I've not been able to export iphoto [even geniuses can't figure out why].  So as a work around, I'm t

  • Extjs installation in apex 4.1.1

    Dear Friends Can anybody tell me what version of extjs is to install in apex 4.1 and also how to install in apex 4.1 step by step.

  • How to understand buffer swaps

    In SAP training materials, it says that buffer swaps occur when buffer content is deleted from the buffer and is replaced by other content. It's no relation at all to the swapping mechanism on OS level. I am confused about the source and target of bu

  • Anybody know where I can find Draw Multiple Lines.vi?

    I don't mean the actual function itself. I know you just right-click and scroll through the menus for that. But I want to find a VI that showcases how the Draw Multiple Lines.vi is used. As of yet I can't find one anywhere. I've read the Detailed Hel