2015-03-31 87 views
2

我試圖創建一個指示符,它是已下訂單的客戶的不同計數。蒙德里安架構的相關部分如下:在Mondrian 4中創建MeasureExpression時的表別名

<Measure name="Active Customers" formatString="#" aggregator="distinct-count"> 
    <MeasureExpression> 
    <SQL dialect="mysql"> 
     CASE WHEN <Column name ='placed_count'/> &gt; 0 THEN 1 END 
    </SQL> 
    </MeasureExpression> 
</Measure> 

出於某種原因,列名沒有被它的列名,包括表的別名替換。我可以檢查在日誌中:

Caused by: mondrian.olap.MondrianException: Mondrian Error:Internal error: Error while loading segment; sql=[select `v_dm_calendar`.`calendar_date` as `c0`, count(distinct CASE WHEN > 0 THEN 1 END) as `m0` from `v_dm_calendar` as `v_dm_calendar`, `fc_customer_activity_sportsbook` as `fc_customer_activity_sportsbook` where `fc_customer_activity_sportsbook`.`bet_date` = `v_dm_calendar`.`calendar_date` and `v_dm_calendar`.`calendar_date` = '2015-03-30' group by `v_dm_calendar`.`calendar_date`] 
     at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:972) 
     at mondrian.olap.Util.newInternal(Util.java:2404) 
     at mondrian.olap.Util.newError(Util.java:2420) 
     at mondrian.rolap.SqlStatement.handle(SqlStatement.java:353) 
     at mondrian.rolap.SqlStatement.execute(SqlStatement.java:253) 
     at mondrian.rolap.RolapUtil.executeQuery(RolapUtil.java:350) 
     at mondrian.rolap.agg.SegmentLoader.createExecuteSql(SegmentLoader.java:625) 
     ... 8 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '> 0 THEN 1 END) as `m0` from `v_dm_calendar` as `v_dm_calendar`, `fc_customer_ac' at line 1  

我是否缺少語法的東西?我在官方文檔和蒙德里安書中都找不到任何東西。

回答

1

它會是這樣的蒙德里安3定義:

<MeasureExpression> 
    <SQL dialect="generic"> 
     <![CDATA[case when placed_count > 0 then 1 else 0 end]]> 
    </SQL> 
</MeasureExpression> 

蒙德里安4你需要添加calculated column到一個事實表的申報和創建measure based upon it

<Table name="??"> 
    <ColumnDefs> 
     <CalculatedColumnDef name="active_customers"> 
      <ExpressionView> 
       <SQL dialect="generic"> 
        (case when <Column name="placed_count"/> &gt; 
        0 then 1 end) 
       </SQL> 
      </ExpressionView> 
     </CalculatedColumnDef> 
    </ColumnDefs> 
</Table> 

<Measure name="Active Customers" aggregator="distinct-count" column="active_customers" formatString="#"> 

欲瞭解更多信息,請參閱Mondrian 4Mondrian 3文檔中的3.2 Measures

+0

非常感謝!那就是訣竅 – jmriego 2015-03-31 14:11:04