protected void setUp() throws Exception { super.setUp(); // parent setUp enabled agg propSaver.set(propSaver.properties.EnableNativeCrossJoin, true); propSaver.set(propSaver.properties.EnableNativeNonEmpty, true); propSaver.set(propSaver.properties.GenerateFormattedSql, true); TestContext.instance().flushSchemaCache(); }
static TestContext setupMultiColDimCube( String aggName, String yearCols, String qtrCols, String monthCols, String monthProp, String defaultMeasure) { String cube = "<?xml version=\"1.0\"?>\n" + "<Schema name=\"FoodMart\">\n" + " <Dimension name=\"Store\">\n" + " <Hierarchy hasAll=\"true\" primaryKey=\"store_id\">\n" + " <Table name=\"store\"/>\n" + " <Level name=\"Store Country\" column=\"store_country\" uniqueMembers=\"true\"/>\n" + " <Level name=\"Store State\" column=\"store_state\" uniqueMembers=\"true\"/>\n" + " <Level name=\"Store City\" column=\"store_city\" uniqueMembers=\"false\"/>\n" + " <Level name=\"Store Name\" column=\"store_name\" uniqueMembers=\"true\">\n" + " <Property name=\"Street address\" column=\"store_street_address\" type=\"String\"/>\n" + " </Level>\n" + " </Hierarchy>\n" + " </Dimension>\n" + " <Dimension name=\"Product\">\n" + " <Hierarchy hasAll=\"true\" primaryKey=\"product_id\" primaryKeyTable=\"product\">\n" + " <Join leftKey=\"product_class_id\" rightKey=\"product_class_id\">\n" + " <Table name=\"product\"/>\n" + " <Table name=\"product_class\"/>\n" + " </Join>\n" + " <Level name=\"Product Family\" table=\"product_class\" column=\"product_family\"\n" + " uniqueMembers=\"true\"/>\n" + " <Level name=\"Product Department\" table=\"product_class\" column=\"product_department\"\n" + " uniqueMembers=\"false\"/>\n" + " <Level name=\"Product Category\" table=\"product_class\" column=\"product_category\"\n" + " uniqueMembers=\"false\"/>\n" + " </Hierarchy>\n" + " </Dimension>\n" + "<Cube name=\"ExtraCol\" defaultMeasure='#DEFMEASURE#'>\n" + " <Table name=\"sales_fact_1997\">\n" + " #AGGNAME# " + " </Table>" + " <Dimension name=\"TimeExtra\" foreignKey=\"time_id\">\n" + " <Hierarchy hasAll=\"false\" primaryKey=\"time_id\">\n" + " <Table name=\"time_by_day\"/>\n" + " <Level name=\"Year\" #YEARCOLS# type=\"Numeric\" uniqueMembers=\"true\"" + " levelType=\"TimeYears\">\n" + " </Level>\n" + " <Level name=\"Quarter\" #QTRCOLS# uniqueMembers=\"false\"" + " levelType=\"TimeQuarters\">\n" + " </Level>\n" + " <Level name=\"Month\" #MONTHCOLS# uniqueMembers=\"false\" type=\"Numeric\"" + " levelType=\"TimeMonths\">\n" + " #MONTHPROP# " + " </Level>\n" + " </Hierarchy>\n" + " </Dimension>\n" + " <Dimension name=\"Gender\" foreignKey=\"customer_id\">\n" + " <Hierarchy hasAll=\"true\" primaryKey=\"customer_id\">\n" + " <Table name=\"customer\"/>\n" + " <Level name=\"Gender\" column=\"gender\" uniqueMembers=\"true\"/>\n" + " </Hierarchy>\n" + " </Dimension> " + " <DimensionUsage name=\"Store\" source=\"Store\" foreignKey=\"store_id\"/>" + " <DimensionUsage name=\"Product\" source=\"Product\" foreignKey=\"product_id\"/>" + "<Measure name=\"Unit Sales\" column=\"unit_sales\" aggregator=\"sum\"\n" + " formatString=\"Standard\" visible=\"false\"/>\n" + "<Measure name=\"Avg Unit Sales\" column=\"unit_sales\" aggregator=\"avg\"\n" + " formatString=\"Standard\" visible=\"false\"/>\n" + " <Measure name=\"Store Cost\" column=\"store_cost\" aggregator=\"sum\"\n" + " formatString=\"#,###.00\"/>\n" + "<Measure name=\"Customer Count\" column=\"customer_id\" aggregator=\"distinct-count\" formatString=\"#,###\"/>" + "</Cube>\n" + "</Schema>"; cube = cube.replace("#AGGNAME#", aggName) .replace("#YEARCOLS#", yearCols) .replace("#QTRCOLS#", qtrCols) .replace("#MONTHCOLS#", monthCols) .replace("#MONTHPROP#", monthProp) .replace("#DEFMEASURE#", defaultMeasure); return TestContext.instance().withSchema(cube); }
public void testExplicitAggPropertiesOnAggTable() throws SQLException { TestContext testContext = setupMultiColDimCube( " <AggName name=\"exp_agg_test_distinct_count\">\n" + " <AggFactCount column=\"FACT_COUNT\"/>\n" + " <AggMeasure name=\"[Measures].[Unit Sales]\" column=\"unit_s\" />\n" + " <AggMeasure name=\"[Measures].[Customer Count]\" column=\"cust_cnt\" />\n" + " <AggLevel name=\"[TimeExtra].[Year]\" column=\"testyear\" />\n" + " <AggLevel name=\"[Gender].[Gender]\" column=\"gender\" />\n" + " <AggLevel name=\"[Store].[Store Country]\" column=\"store_country\" />\n" + " <AggLevel name=\"[Store].[Store State]\" column=\"store_st\" />\n" + " <AggLevel name=\"[Store].[Store City]\" column=\"store_cty\" />\n" + " <AggLevel name=\"[Store].[Store Name]\" column=\"store_name\" >\n" + " <AggLevelProperty name='Street address' column='store_add' />" + " </AggLevel>\n" + " </AggName>\n", "column=\"the_year\"", "column=\"quarter\"", "column=\"month_of_year\" captionColumn=\"the_month\" ordinalColumn=\"month_of_year\"", ""); String query = "with member measures.propVal as 'Store.CurrentMember.Properties(\"Street Address\")'" + "select { measures.[propVal], measures.[Customer Count], [Measures].[Unit Sales]} on columns, " + "non empty CrossJoin({[Gender].Gender.members},{[Store].[USA].[WA].[Spokane].[Store 16]}) on rows " + "from [ExtraCol]"; assertQuerySql( testContext, query, mysqlPattern( "select\n" + " `exp_agg_test_distinct_count`.`gender` as `c0`,\n" + " `exp_agg_test_distinct_count`.`store_country` as `c1`,\n" + " `exp_agg_test_distinct_count`.`store_st` as `c2`,\n" + " `exp_agg_test_distinct_count`.`store_cty` as `c3`,\n" + " `exp_agg_test_distinct_count`.`store_name` as `c4`,\n" + " `exp_agg_test_distinct_count`.`store_add` as `c5`\n" + "from\n" + " `exp_agg_test_distinct_count` as `exp_agg_test_distinct_count`\n" + "where\n" + " (`exp_agg_test_distinct_count`.`store_name` = 'Store 16')\n" + "group by\n" + " `exp_agg_test_distinct_count`.`gender`,\n" + " `exp_agg_test_distinct_count`.`store_country`,\n" + " `exp_agg_test_distinct_count`.`store_st`,\n" + " `exp_agg_test_distinct_count`.`store_cty`,\n" + " `exp_agg_test_distinct_count`.`store_name`,\n" + " `exp_agg_test_distinct_count`.`store_add`\n" + "order by\n" + " ISNULL(`exp_agg_test_distinct_count`.`gender`) ASC, `exp_agg_test_distinct_count`.`gender` ASC,\n" + " ISNULL(`exp_agg_test_distinct_count`.`store_country`) ASC, `exp_agg_test_distinct_count`.`store_country` ASC,\n" + " ISNULL(`exp_agg_test_distinct_count`.`store_st`) ASC, `exp_agg_test_distinct_count`.`store_st` ASC,\n" + " ISNULL(`exp_agg_test_distinct_count`.`store_cty`) ASC, `exp_agg_test_distinct_count`.`store_cty` ASC,\n" + " ISNULL(`exp_agg_test_distinct_count`.`store_name`) ASC, `exp_agg_test_distinct_count`.`store_name` ASC")); testContext.assertQueryReturns( "Store Address Property should be '5922 La Salle Ct'", query, "Axis #0:\n" + "{}\n" + "Axis #1:\n" + "{[Measures].[propVal]}\n" + "{[Measures].[Customer Count]}\n" + "{[Measures].[Unit Sales]}\n" + "Axis #2:\n" + "{[Gender].[F], [Store].[USA].[WA].[Spokane].[Store 16]}\n" + "{[Gender].[M], [Store].[USA].[WA].[Spokane].[Store 16]}\n" + "Row #0: 5922 La Salle Ct\n" + "Row #0: 45\n" + "Row #0: 12,068\n" + "Row #1: 5922 La Salle Ct\n" + "Row #1: 39\n" + "Row #1: 11,523\n"); // Should use agg table for distinct count measure assertQuerySql( testContext, query, mysqlPattern( "select\n" + " `exp_agg_test_distinct_count`.`testyear` as `c0`,\n" + " `exp_agg_test_distinct_count`.`gender` as `c1`,\n" + " `exp_agg_test_distinct_count`.`store_name` as `c2`,\n" + " `exp_agg_test_distinct_count`.`unit_s` as `m0`,\n" + " `exp_agg_test_distinct_count`.`cust_cnt` as `m1`\n" + "from\n" + " `exp_agg_test_distinct_count` as `exp_agg_test_distinct_count`\n" + "where\n" + " `exp_agg_test_distinct_count`.`testyear` = 1997\n" + "and\n" + " `exp_agg_test_distinct_count`.`store_name` = 'Store 16'")); }