2 table sources in LTS but only 1 in query?

Hi,
I am using obiee 10g.
I have one DIM_A table with some data. DIM_A table is 'SELECT' type on physical layer and data in this table are filtered. I am using ValueOf(NQ_SESSION.USER) variable to filter data in this DIM_A table. Every user can see different data in this table.
In FACT_A table are data for every user so I need to always filter data in FACT_A using values in DIM_A table.
I have properly join in physical layer.
In BMM I have both tables. Every with only one logical table source. I added DIM_A as second "mandatory" source to existing FACT_A table source. So I can see 2 records at general tab of FACT_A table source and also inner join between them.
But when I make query only on FACT_A without dimension, or with some other dimension, DIM_A is not present in generated select so user can see data which are not for him.
I need to make MANDATORY join between FACT_A and DIM_A everytime.
Can you tell me how to simulate mandatory join between these two tables?

I am able to make "mandatory" join between DIM_A and FACT_A table using mentoned filter in security.
So I don't need to add username to BMM tables and I don't want to complicate it...
Thank you.
I would like to ask you on my second question...
"I thought that multiple sources in LTS should have same effect. I saw it somewhere... Now I need to make join as part of mentioned security filter, but I think that inner join in LTS shoul also work..."
Here is explained what I want:
Multiple Sources in BMM Layer
When you add multiple physical tables to one logical source then all these tables will be called when the OBIEE server creates the SQL to send to the database. For instance let's say you have one logical table called "Dim - Account" with one logical source "Dim_W_ORG_D" and this logical source is made up of the physical tables W_ORG_D and W_ORG_DX. When you create a report using this dimension the SQL will always join the two tables together and select from them both. If you have two seperate logical tables for W_ORG_D and W_ORG_DX then these tables will only be included in the SQL when you select a columns from each of those two tables.
I have multiple physical sources for one logical source. Physical sources are joined together. I can see join also in logical table source. But If i make query from this logical table in generated select is only one physical table which is not joined to another one.

Similar Messages

  • Help on locking MySQL tables (many can read, but only one can write) Java

    Hi there,
    I have a question regarding locking of tables so that only one person can write to the file, but many are able to read the files (or tables entities).
    I am not sure if I need to lock the tables in my Java code or do I lock the tables within the MySQL syntax. I'm just a little confused on the matter.
    This java code is a working prototype of inserting a customer data into the database and that works fine. I just don't know how to implement it so that only one person can update the table at a time.
    Here is the Customer.java code that I have written.
    Help would be greatly appreciated, thanks so much.
    package business;
    //~--- non-JDK imports --------------------------------------------------------
    import shared.info.CustomerInfo;
    //~--- JDK imports ------------------------------------------------------------
    import java.sql.*;
    * @author
    public class Customer {
        static Connection    con  = DBConnection.getConnection();
        private CustomerInfo info = new CustomerInfo();
        private String               customerID;
        private String               firstName;
        private String               lastName;
        private String               email;
        private String               addressID;
        private String               homePhone;
        private String               workPhone;
        private String               unitNum;
        private String               streetNum;
        private String               streetName;
        private String               city;
        private String               provinceState;
        private String               country;
        private String               zipPostalCode;
        public Customer(String id) {
            try {
                PreparedStatement pstmt = con.prepareStatement("SELECT * FROM " +
                        "Customer NATURAL JOIN Address WHERE CustomerID = ?");
                pstmt.setString(1, id);
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    customerID    = rs.getString("CustomerID");
                    firstName     = rs.getString("FirstName");
                    lastName      = rs.getString("LastName");
                    homePhone     = rs.getString("HomePhone");
                    workPhone     = rs.getString("WorkPhone");
                    email         = rs.getString("Email");
                    city          = rs.getString("City");
                    provinceState = rs.getString("ProvinceState");
                    country       = rs.getString("Country");
                    zipPostalCode = rs.getString("ZipPostalCode");
                    unitNum       = rs.getString("UnitNum");
                    streetNum     = rs.getString("StreetNum");
                    streetName    = rs.getString("StreetName");
                    addressID     = rs.getString("AddressId");
            } catch (SQLException e) {
                e.printStackTrace();
            info.setCustomerID(customerID);
            info.setFirstName(firstName);
            info.setLastName(lastName);
            info.setHomePhone(homePhone);
            info.setWorkPhone(workPhone);
            info.setEmail(email);
            info.setCity(city);
            info.setProvinceState(provinceState);
            info.setCountry(country);
            info.setZipPostalCode(zipPostalCode);
            info.setUnitNum(unitNum);
            info.setStreetNum(streetNum);
            info.setStreetName(streetName);
            info.setAddressID(addressID);
        public static void addCustomer(CustomerInfo cust) {
            try {
                int id = -1;
                PreparedStatement pstmt = con.prepareStatement("INSERT INTO Address" +
                        "(UnitNum, StreetNum, StreetName, City, ProvinceState, Country," +
                        " ZipPostalCode) VALUES(?, ?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, cust.getUnitNum());
                pstmt.setString(2, cust.getStreetNum());
                pstmt.setString(3, cust.getStreetName());
                pstmt.setString(4, cust.getCity());
                pstmt.setString(5, cust.getProvinceState());
                pstmt.setString(6, cust.getCountry());
                pstmt.setString(7, cust.getZipPostalCode());
                pstmt.executeUpdate();
                ResultSet rs = pstmt.getGeneratedKeys();
                rs.next();
                id = rs.getInt(1);
                pstmt = con.prepareStatement("INSERT INTO Customer" +
                        "(FirstName, LastName, HomePhone, WorkPhone, Email, AddressID)"
                        + "VALUES(?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, cust.getFirstName());
                pstmt.setString(2, cust.getLastName());
                pstmt.setString(3, cust.getHomePhone());
                pstmt.setString(4, cust.getWorkPhone());
                pstmt.setString(5, cust.getEmail());
                pstmt.setInt(6, id);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
        public void setFirstName(String newName) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET FirstName = ? WHERE CustomerID = ?");
                pstmt.setString(1, newName);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            firstName = newName;
        public void setLastName(String newName) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET LastName = ? WHERE CustomerID = ?");
                pstmt.setString(1, newName);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            lastName = newName;
        public String getFirstName() {
            return firstName;
        public String getLastName() {
            return lastName;
        public void setHomePhone(String number) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET HomePhone = ? WHERE CustomerID = ?");
                pstmt.setString(1, number);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            homePhone = number;
        public String getHomePhone() {
            return homePhone;
        public void setWorkPhone(String number) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET WorkPhone = ? WHERE CustomerID = ?");
                pstmt.setString(1, number);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            workPhone = number;
        public String getWorkPhone() {
            return workPhone;
        public void setEmail(String email) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer" + " SET Email = ? WHERE CustomerID = ?");
                pstmt.setString(1, email);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            this.email = email;
        public String getEmail() {
            return email;
        public void setUnitNum(String num) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET UnitNum = ? WHERE AddressId = ?");
                pstmt.setString(1, num);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            unitNum = num;
        public String getUnitNum() {
            return unitNum;
        public void setCity(String city) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET City = ? WHERE AddressId = ?");
                pstmt.setString(1, city);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            this.city = city;
        public String getCity() {
            return city;
        public void setStreetNum(String num) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET StreetNum = ? WHERE AddressId = ?");
                pstmt.setString(1, num);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            streetNum = num;
        public String getStreetNum() {
            return streetNum;
        public void setStreetName(String name) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address"
                                              + " SET StreetName = ? WHERE AddressId = ?");
                pstmt.setString(1, name);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            streetName = name;
        public String getStreetName() {
            return streetName;
        public void setZipPostalCode(String code) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address"
                                              + " SET ZipPostalCode = ? WHERE AddressId = ?");
                pstmt.setString(1, code);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            zipPostalCode = code;
        public String getZipPostalCode() {
            return zipPostalCode;
        public CustomerInfo getInfo(){
            return info;
        static void deleteCustomer(String customerId) {
            try{
                PreparedStatement pstmt = con.prepareStatement("DELETE FROM Customer" +
                        " WHERE CustomerId = ?");
                pstmt.setString(1, customerId);
                pstmt.executeUpdate();
            }catch(SQLException e){
                e.printStackTrace();
        static void updateCustomer(CustomerInfo custInf) {
            try{
                PreparedStatement pstmt = con.prepareStatement("UPDATE customer" +
                        " SET firstName = ?, SET lastName = ?," +
                        " SET homePhone = ?, SET workPhone = ?, SET email = ?" +
                        " WHERE CustomerId = ?");
                pstmt.setString(1, custInf.getFirstName());
                pstmt.setString(2, custInf.getLastName());
                pstmt.setString(3, custInf.getHomePhone());
                pstmt.setString(4, custInf.getWorkPhone());
                pstmt.setString(5, custInf.getEmail());
                pstmt.setString(6, custInf.getCustomerID());
                pstmt.executeUpdate();
                pstmt = con.prepareStatement("UPDATE address" +
                        " SET unitNum = ?, SET StreetNum = ?, SET StreetName = ?," +
                        " SET city = ?,SET Province = ?,SET country = ?,SET ZipPostalCode = ?" +
                        " WHERE AddressId = ?");
                pstmt.setString(1, custInf.getUnitNum());
                pstmt.setString(2, custInf.getStreetNum());
                pstmt.setString(3, custInf.getStreetName());
                pstmt.setString(4, custInf.getCity());
                pstmt.setString(5, custInf.getProvinceState());
                pstmt.setString(6, custInf.getCountry());
                pstmt.setString(7, custInf.getZipPostalCode());
                pstmt.setString(8, custInf.getAddressID());
                pstmt.executeUpdate();
            }catch(SQLException e){
                e.printStackTrace();
    }In addition, here is my customer sql table.
    -- Table structure for table `customer`
    DROP TABLE IF EXISTS `customer`;
    CREATE TABLE `customer` (
    `CustomerID` mediumint(9) NOT NULL auto_increment,
    `FirstName` varchar(20) NOT NULL,
    `LastName` varchar(20) NOT NULL,
    `HomePhone` varchar(11) NOT NULL,
    `WorkPhone` varchar(11) default NULL,
    `Email` varchar(20) NOT NULL,
    `AddressID` mediumint(9) default NULL,
    PRIMARY KEY (`CustomerID`),
    KEY `AddressID` (`AddressID`),
    CONSTRAINT `customer_ibfk_1` FOREIGN KEY (`AddressID`) REFERENCES `address` (`AddressID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    -- Dumping data for table `customer`
    LOCK TABLES `customer` WRITE;
    /*!40000 ALTER TABLE `customer` DISABLE KEYS */;
    /*!40000 ALTER TABLE `customer` ENABLE KEYS */;
    UNLOCK TABLES;

    to the best of my knowledge, this is something related to the database and not the programming. If you'd want to be the only user to read and edit the table, speicify only one user with that privilege and make it password protected. User must enter the password to write to the tables.

  • Filter on the same logical table source on two logical tables is not working properly

    Hi,
    In the RPD, assume that I have a physical table named Employee_fact, created an Alias called D0 Employee Fact
    In the BMM I've two logical tables called Employee_fact_Type1 and Employee_fact_Type2
    Each of these logical tables has the same Logical table source - D0 Employee
    But in each logical table source, I've a filter in where clause
    such as, for Employee_fact_Type1  employee_type = 'XXX'
                 for Employee_fact_Type2 employee_type='YYY'
    These two facts are present in the same BMM and each of them are connected to two dimensions
    such as
    Dept_type1 <- Employee_fact_type_1 -> Tenure_type1
    Dept_type2 <- Employee_fact_type_2 -> Tenure_type2
    In analysis, When I query the columns from Dept_type1 and Tenure_type1, the database query generated shows the condition employee_type='YYY' instead of employee_type='XXX' .
    But, adding the columns from Dept_Type1, Employee_fact_type_1, Tenure_type1 it shows proper filter.
    I checked the relationships, presentation layer for the sources of presentation tables and everything looks good.
    Can anybody tell me what goes wrong here?

    did you set the content level as well?

  • Dragging the columns to existing logical table source.....

    Hi,
    I am just learning OBIEE 11g and I am using a turorial from oracle it is
    "Creating a Repository Using the Oracle BI 11g Administration Tool" for practice purpose.
    In this tutorial it is saying that drag that columns from phscial layer to Logica Table Source
    in BMM Layer to avoid creating a second logical table source.. But when I am trying to drag the columns to
    existing logical source it is disabling I mean which it is not allowing .. is there any other technique to
    do it... or Am i wrongly approaching.. .The below is brief description in the
    tutorial.
    "Drag all six columns from D50 Sales Rep in the Physical layer to D5 Sales Rep in the BMM layer. This action
    creates logical columns and adds a D50 Sales Rep logical table source to D5 Sales Rep.
    Rename the D50 Sales Rep logical table source to LTS1 Sales Rep.
    In the Physical layer, expand D52 Sales Rep Position.
    Drag POSTN_DESC and POSTN_LEVEL from D52 Sales Rep Position to LTS1 Sales Rep. Note that you are
    dragging the columns to the logical table source, not the logical table. Dragging to the logical table would create a
    second logical table source.
    Drag DISTANCE from D51 Sales Rep Parent Child to LTS1 Sales Rep. Again, you drag the column to the logical
    table source, not the logical table."
    help would be appreciated.
    Thanks and Regards,
    Sri_Oracle.

    Hi Sri,
    When you are dragging a physical column onto an existing Logical table source and if it does not let you do so, then it means that there is no physical join between the existing physical table(which the logical source is pointing to already) and new physical table (from which you are dragging the column now). So, please make sure, you have the join in place.
    Hope this helps.
    Thank you,
    Dhar

  • I'm trying to open a 900kb Word doc (240pages) in Pages but get this error message:  Import Warning - A table was too big. Only the first 40 columns and 1,000 rows were imported.

    I'm trying to open a 900kb Word doc (240pages) in Pages but get this error message:  Import Warning - A table was too big. Only the first 40 columns and 1,000 rows were imported.

    Julian,
    Pages simply won't support a table with that many rows. If you need that many, you must use another application.
    Perhaps the originator could use a tabbed list rather than a table. That's the only way you will be able to contain a list that long in Pages. You can do the conversion yourself if you open the Word document in LibreOffice, Copy the Table, Paste the Table into Numbers, Export the Numbers doc to CSV, and import to Pages. In Pages Find and Replace the Commas with Tabs.
    There are probably other ways, but that's what comes to mind here.
    Jerry

  • I Cant insert all values to the table But only Default Values r inserted?

    Hai,
    i can insert only default values to the database. Other values are not shown in DB.
    Steps I have done so far:
    I have created EO based on VO and VO has the query : select * from emp. Attached to AM.
    That AM is attached to the Page. The page consists of employeed details and SAVE button.
    Set controller for that page and CO-PR calls create method in AM .
    Default values for who columns and SLNo also set through sequence.
    In CO-PFR I call apply method which commits the data.
    when i run the page and giving values it is not inserted into table but only default values are inserted.
    I checked with System.out.println(getattribute("my attr").toString()). It send output correctly.
    But y other values are not inserted.?
    Anybody plz plz help me in this regard. I am struggling with this for last 1 week. I have to apply this to another realtime scenorio? Deadline is near.
    Regards,
    Lakshmi Chandiran

    Hai Prince,
    Thanks for your immediate response. pls find my codes written in EO,AM,CO.
    In VO i havent added anythig xcept the query.
    The following fields are only getting inserted in the table.
    My EOImpl code:
    public void create(AttributeList attributeList) {
    super.create(attributeList);
    System.out.println("NOW I AM IN CREATE METHOD");
    OADBTransaction transaction = getOADBTransaction();
    Number EMP_ID = transaction.getSequenceValue("Employeeid");
    setEmpId(EMP_ID);
    setCreationDate(transaction.getCurrentDBDate());
    setStartDate(transaction.getCurrentDBDate());
    setLastUpdateDate(transaction.getCurrentDBDate());
    setCreationDate(transaction.getCurrentDBDate());
    VO:
    select * from emp1
    AM:
    public void saveForm()
    OAViewObjectImpl empvo = getEMP_VO();
    System.out.println("NOW I AM IN AM SAVEFORM OF EMTS");
    if ( !empvo.isPreparedForExecution())
    empvo .executeQuery();
    Row prow = empvo .createRow();
    empvo .insertRow(prow);
    prow.setNewRowState(Row.STATUS_INITIALIZED) ;
    System.out.println("NOW I AM IN ROW CREATED");
    public void commitdata()
    System.out.println("commitMethod()") ;
    getDBTransaction().commit();
    CO:PR & PFR:
    public void processRequest(OAPageContext pageContext, OAWebBean webBean)
    super.processRequest(pageContext, webBean);
    if(!pageContext.isFormSubmission())
    pageContext.getApplicationModule(webBean).invokeMethod("saveForm",null);
    public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
    super.processFormRequest(pageContext, webBean);
    OAApplicationModule EMP_AM = pageContext.getApplicationModule(webBean);
    OAViewObject vo = (OAViewObject)EMP_AM.findViewObject("EMP_VO");
    if ( pageContext.getParameter("BtnSave") != null )
    pageContext.getApplicationModule(webBean).invokeMethod("commitdata");
    s1 = (String)vo.first().getAttribute("Empname");
    s12 = (String)vo.first().getAttribute("Emptype");
    s3 = (String)vo.first().getAttribute("Emporg");
    s4 = (String)vo.first().getAttribute("Empcity");
    System.out.println(" values are " + s1+s2+s3+s4);
    here i can get the values correctly printed in output as entered in the form.
    I dont know where the problem is.
    plz help me.
    Thanks in advance,
    Regards,
    Lakshmi Chandiran

  • Drag and Drop with mulitiple drag sources but only one correct answer?

    I've created two drag sources (in a Type group) for one drop target. I want to be able to drag only one or the other onto the drop target. I changed the correct answers from 2 to 1, but I can still drag both onto the drop target. Is there a way to reject the second drag source?
    Is there a way to select the same drag sources and have the same situation for a different drop target?
    Plus, if I have the drop target set to not visible, is there a way to change it to visible once a drag source is dropped on it?
    Sorry for the newbie questions. Thanks for any help.

    No, I made the target invisible, not the drag object.
    I have sample text (a paragraph missing periods). I created an image file of the period (essentially, a dot within a square with the same color background as my slide). The reason I created the image (and not just a round filled shape) is because if I can get this to work, I'd like to use other punctuation mark images. I imported the period image and made 3 copies of it (4 separately named images). Two of the images (the drop targets) I placed where they belong in the sample paragraph and made them invisible. The other two images are visible and would be the drag sources. I want students to be able to choose either copy of the drag source and place them on either of the drop targets (no specific order, but only one being able to be dropped onto one target). With the correct answer, I'd like to make the target visible. In the drag settings, I unchecked "send back to original location" and then set it to absolute. This is so the student would be able to place the period in other areas of the sample paragraph (but not be able to "find" the active areas that would automatically pull them into place over the target. Sorry, I don't have access to the program at this minute, so I can't remember what the other setting was instead of absolute that "pulled" the drag source onto the target.) Anyway, if set to absolute, the dropped items do not line up properly (because they land where they were dropped, obviously). So, I'm looking for a way to then make the target (that was invisible) visible when one correct period is dropped onto it, plus then reject any other periods being dropped onto it.
    I'm open to suggestions if there is a better way to do this.

  • Question related to Logical table source

    Hi All,
    I have very basic questions -
    (1) When do we create multiple logical table sources within a dimension?
    (2) If a dimension has more than one logical table sources , when do we need to map the underlying table to other underlying table of logical table sources.
    For exp consider these tables XLE_Entity_Profile, XLE_REgistration , AP_Invoice_ALL
    AP_Invoice_All is a fact table. relationship between XLE_Entity_Profile & XLE_REgistration is (1:M).
    Join info is as below -
    (a) XLE_Entity_Profile.Legal_entity_id = AP_Invoice_ALL.Legal_entity_id
    to get the registration of LE the where clause is as below-
    (b) XLE_Entity_Profile..Legal_entity_id = XLE_REgistration.Source_id and XLE_REgistration.Source_table = 'XLE_Entity_Profile'
    I have created the alias of XLE_REgistration as XLE_REgistration_LE.
    With in a dimension , i have 2 logical table source - XLE_Entity_Profile & XLE_REgistration_LE.
    logical table source 'XLE_REgistration_LE' has where clause 'XLE_REgistration.Source_table = 'XLE_Entity_Profile'
    When i query , LE name , LE Registration Name, i get error like -
    State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 14070] Cannot find logical table source coverage for logical columns: [LE_NAME]. Please check more detailed level keys are mapped correctly. (HY000)
    Le Name is from XLE_Entity_Profile and LE Registration Name is from XLE_REgistration_LE.
    But when using the properties of logical table source ' XLE_REgistration_LE' , i map it to 'XLE_Entity_Profile' ,i get the correct result.
    I am not able to understand why am i getting error in first way of modeling.
    Thanks , Ashish

    Hi Ashish,
    first about logical table sources (lts): you can create different lts for aggregation and/or fragmentation. Aggregation means that data is aggregated on another level among different physical tables. Fragmentation means that the content is different over different tables (other rows).
    In your case, I think the problem is that your dimension is not denormalized, which results in a snowflake.
    What I understand is that you have the following (physical diagram):
    Invoice (fact table) >----- Entity (Dim) >----- Registration (Dim)
    You have the following joins:
    invoice.entity_id = entity.entity_id
    and entity.entity_id = registration.source_id and registration.source = 'something'
    First idea:
    I would create the following join (in physical diagram):
    Invoice (fact table) >---- Registration (Dim)
    Where:
    invoice.entity_id = registration.source_id and registration.source = 'something'.
    Then in your Entity dimension you should create a hierarchy:
    Grand Total Level
    Entity
    Registration.
    In your dimension you should create the first lts: Entity
    Set the aggregation content of this lts to Entity.
    This lts contains only one physical table.
    Map only the entity columns to the Entity physical table.
    Then create the second lts:
    Entity and Registration.
    Set the aggregation content of this lts to Registration.
    This lts must contain two physical tables, Entity and Registration.
    Map the entity columns to the Entity physical table and the registration columns to the registration physical table.
    Let me know if it works or not.
    Regards,
    Stijn

  • Logical table source in BMM

    Hello,
    I am using obiee 11g.
    I have few doubts In RPD with respect to logical table Source.
    Consider i have tableA,tableB,tableC in PL.
    Now in my BMM i dragged tableA now i want one column from the tableB.
    So which method is correct?
    1>
    Go to the logical table source properties of tableA->then there + sign click and then add tableB left outer join with tableA.
    Here in the logical table source we see only one table tableA.
    2> Drag the tableB column so that we have 2 logical table source.
    Now what i am more interested is which method is selected on what basis?
    Any help?
    Thanks

    Thanks a lot for the reply
    Second case can u just elaborate more.
    First case i think i understood.
    My main confusion is ok ill explain my situation.
    I have tableA,TableB,TableC all are connected.
    Now i have one fact table.In that fact table i would like to create 10 measures.5 From tableA,3 from tableB and 2 from tableC.
    So
    First i created 5 measures from tableA.
    Second i created 3 measures from tableB.
    Third i created 2 measures from tableC.
    Till now i have 3 logical table source sources in one LTS.
    Now in my report when i combine columns from tableA and tableB , tableB column shows no data.
    When i see in the sql i see tableB col is not taken itself.
    Then i need to go to tableB,then go to General tab and then click + sign add tableA and then go to column mapping and map atleast one col of tableA here.
    So on what basis here i should do mapping.
    Since i have 3 logical table source sources in one LTS.Each time i click on sources->tableB->i could see even the
    tableA columns but not mapped?
    Is that every column from tableA should be mapped to tableB and tableB to tableC and tableC to tableA?I mean in the column mapping
    This is something which i am feeling very difficult to understand?
    Pls help me out?
    Thanks

  • Logical Table source source query

    In OBIEE 10g we can have multiple logical table sources and we can also add multiple tables into a single logical table source(logical table source source). I wanted to know the difference between doing so and having multiple logical table sources for each logical source.
    Hope I made myself clear.
    Cheers
    Rem

    Hi Rem,
    When data is duplicated across different physical tables add them as separate LTS with column mapping pointing to most economical sources. Specifying the most economical source is about the idea that a single column exists in more than one table, based on the column mappings BI server picks up those LTS's which could satisfy the request with minimal joins.
    When the data is not duplicated add them in a single LTS source. When the physical sources are added in a single LTS, you have the flexibility of using outer joins. But specifying a join as outer join makes BI Server to include this source even if its not required otherwise when the join is inner, the sources will not be included if not required to satisfy the query.
    Hope this helps.
    Thanks!

  • Max number of logical table sources

    Hi,
    I have one logical table based (a fact table) on 8 logical table sources. This is done to simulate some partitioning as my customer does not have an partition set up on data base level.
    Anyway my challenge is that a request fired in answers does not seem to take all logical table sources into account when building the physical SQL.
    The missing logical table source (the one not being part of the physical SQL) does not differ from the other logical table sources.
    Is there a limit of how many logical table sources BIEE can handle under one logical table?
    BIEE version: 10.1.3.4

    Alastair,
    thanks for replying.
    The logical tables sources partition the data by year. The aggregation level is the same for all LTS, the check for using this with other sources at this level is set and I've tried to force a result from every LTS (not combined but each LTS for itself). Forcing the results is done by using a dashboard prompt in answers filtering on year.
    The whole 'LTS-setup' works in combination with Oracle Warehouse Builder. What I mean by this is the following: In OWB I split the data from one table into 8 different tables, each containing 3 years of data (except for the oldest data where the number of years and amount of data will grow over time).
    This is done by comparing values of a year column with the actual year. E.g. the most actual table would contain data for the years 2010 - 2008, the next would contain data for 2007 - 2005, and so on.
    Now as the years in the different tables will change, I decided to establish an equaly changing counterpart in BIEE. Basically I defined some repository variables: actaul_year, three_years_ago, six_years_ago, 9_years_ago, etc.
    The fragmentation content of the different LTS is defined like this:
    most actual data: MyModel.Year.Year >= VALUEOF("3_years_ago")d
    next table: VALUEOF("3_years_ago") > MyModel.Year.Year AND MyModel.Year.Year >= VALUEOF("6_years_ago")
    next table: VALUEOF("6_years_ago") > MyModel.Year.Year AND MyModel.Year.Year >= VALUEOF("9_years_ago")
    etc.
    The funny thing is that the missing table is the one containing years 13 - 15. All the other tables (e.g. 16 - 18 years and 19 - 21 years) are represented in the physical SQL. This particular table is not even represented in the physical SQL.
    I haven't yet tried to take one of the 'working' tables out to see if this helps (getting an idea if there is a limit on number of LTS per logical table).
    Any idea?
    Thanks
    regards
    Andy

  • Union of more than 2 fragments/Logical Table Sources in BMM Layer

    Hi,
    I have come across many blogs which explain how to union two fragments/physical tables in a logical table source.
    Currently, i have a requirement where i have to combine/union 4 fragments/physical tables in a logical table source, say T1, T2, T3, T4 dimension tables.
    All have the same table structure, but differ in data.
    The requirement is to define dashboard prompt on the union of these tables and populate the values from all the tables.
    I am able to union two of the tables using a '>' and a '<' condition on a key column.
    But, am not able to union the other two tables.
    If i try to put more than 2 LTS, then the union fails.
    Please share your thoughts.
    thanks,
    Varun

    Hi Varun,
    What do you mean by the Union fails?
    You can have a logical table source in your business layer with 4 different tables as a source.
    Import the tables in the physical layer and create your joins.
    Then create a logical table in the Business layer and go in the table properties you will see that you can add as much tables as you want into the source (Map to these tables).there you can add all of your 4 tables and specify what type of join you want to have between them (inner, outer...)
    Regards
    Adil

  • Confused about logical table source

    Hi,
    I'm confused about logical table source(LTS), there are 'General', 'Column Mapping', 'Content' tabs in
    LTS, in General tab ,there are some information,like 'Map to there tables' and 'joins',
    just here, we have created relationships in physical layer and BMM layer, so I would like to ask what's the use of the 'joins' here?

    Hi Alpha,
    Valid query, when you establish a complex join it is always between a logical fact and dimension table.Consider a scenario,
    Example:w_person_dx is an extension table not directly joined to a fact but joins to a dimension w_person_d.
    When you model the person_d tables in BMM, you ll have a single logical table with w_person_d as source.If you have to pull columns from both w_person_d and w_person_dx tables in a report, you add dx table as inner join to persond table in the general tab.Now when you check your physical query, you can see the inner join fired between the two dimensions.
    Rgds,
    Dpka

  • Invalid data from serveral fact logical table sources after upgrade to 11g

    Hi,
    We have a situation after upgrade from 10g to 11g. Answers' querys works fine in 10g environment, but in 11g, generated SQL is not correct.
    Our example is something like that: we have orders fact table, customers and time dimensions. Customer have an hierarchy like: Customer Total -> Customer Country -> Customer Region -> Customer Detail (each level in one different physical table).
    Order's logical table source has two table sources. One sets to Customer Country level, second one Customer Region level, both with different WHERE clauses in Content tab inside LTS configuration. Both at same level of Time dimension.
    The issue is that, at dimension level, SQL is getting correct table to resolve Customer data (Customer Region level), but then, is getting the WHERE clause sets in LTS set to Customer Country level, so we are getting error data. Priority is the same to both LTS at fact table, sets to 0 (default).
    How to know the way Oracle BI Server takes one LTS instead of another one? It's supposed to take the LTS defined at the same granularity level... but is not correct this case.
    Thanks.

    Can you try one of these options:
    Try to set the priority group of lowest granular dimension to 1
    or disable the LTS that is getting the where clause and check if it works fine and then enable again.

  • Financial Analytics -- Multiple logical table sources

    we have two logical sources for Fact table. The two sources are Aggreates - one is at Invoice level and other one is at Supplier level. Each column in the fact is the derived column and is getting mapped to both the tables. My problem is when i use supplier name and invoice amount and other fact columns data , one of the fact column comes as Zero even though the back end query that BI server is firing is returning expected result. But some how when it comes on the report the data becomes zero. This doesnot happen when we specifically add a filter on the table at lower level of Aggregation (Invoice). This tells Bi server to fetch the data from table lower level of Aggregation .
    The RPD that we are using is OOTB.

    Scenario # 1: In BMM the two tables form a logical table called CUSTOMER with 2 different logical table sources which are CUSTOMER & ADDRESS.
    -->In this case; based on the columns select source is defined in the physical query
    possible case would be CUSTOMER , ADDRESS, and CUSTOMER & ADDRESS
    -->Used in DE-normalized scenarios
    --> BI uses intelligence based on content tab settings
    Scenario # 2: In BMM the two tables form a logical table called CUSTOMER with 1 logical table source called CUSTOMER only.
    -->In this case; CUSTOMER properties->General tab used both CUSTOMER & ADDRESS, in your physical query both tables present irrespective of column selection
    -->Used in normalized scenarios
    -->Forcing BI to follow our way, since we wont set content tab settings
    Hope this helps

Maybe you are looking for