Good idea.. If you have some requirement that Kylin can not support currently, change datasource by creating views to will be always works...
2015-09-04 22:31 GMT+08:00 周千昊 <[email protected]>: > Hi, Sebastien, > Actually your requirement is kind of UDF which kylin currently cannot > support. > However as a workaround, you can get the result following: > lets say you have > a table: t1 > with several columns: c1, c2 ... cn > and 2 measures: m1, m2 > 1. create a view v1 for t1 > with columns: c1, c2, ... cn > and 2 new measures: m3(= m1*m2), m4(=m1-m2) > 2. create cube base on v1 > 3. then you can do query like SELECT column, sum(m3) FROM facts GROUP > BY column to get what you want > > Sébastien Jelsch <[email protected]>于2015年9月4日周五 下午9:58写道: > > > Hi Luke, > > > > thanks for you answer. > > > > I don’t get the correct results. > > > > Example: > > ==================== > > || m1 || m2 || m1 * m2 || > > ----------------------------------- > > || 3 || 17 || 51 || > > || 4 || 24 || 96 || > > ==================== > > > > Result that I want: 3*17 + 4*24 = 51 + 96 = 147. > > Result I get with the expression sum(measure1) * sum(measure2): 3+4 * > > 17+24 = 7 * 41 = 287 . > > > > So, is it possible to add some logic to aggregate functions? > > > > Best regards, > > Sébastien > > > > > > > > > Am 04.09.2015 um 15:20 schrieb Luke Han <[email protected]>: > > > > > > try to use > > > SELECT column, sum(measure1) * sum(measure2) FROM facts GROUP BY > column > > > SELECT column, sum(measure1) - sum(measure2) FROM facts GROUP BY column > > > > > > since there's only those two measures in cube. > > > > > > Thanks. > > > > > > > > > Best Regards! > > > --------------------- > > > > > > Luke Han > > > > > > On Fri, Sep 4, 2015 at 9:09 PM, Sébastien Jelsch < > > [email protected] > > >> wrote: > > > > > >> Hi community, > > >> > > >> are that kind of expressions possible in Kylin? > > >> > > >> SELECT column, sum(measure1 * measure2) FROM facts GROUP BY column > > >> SELECT column, sum(measure1 - measure2) FROM facts GROUP BY column > > >> > > >> While trying to execute I get this exception: > > >> null while executing SQL: SELECT column, sum(measure1 * measure2) FROM > > >> facts GROUP BY column > > >> > > >> Using Kylin 0.7.3 and cube created with measures sum(measure1) and > > >> sum(measure2). > > >> > > >> Thanks in advance, > > >> Sébastien > > >> > > >> -------------------------- > > >> Error Stack Trace: > > >> > > >> [http-bio-7070-exec-9]:[2015-09-04 > > >> > > > 14:58:39,797][ERROR][org.apache.kylin.rest.controller.BasicController.handleError(BasicController.java:46)] > > >> - > > >> org.apache.kylin.rest.exception.InternalErrorException: null > > >> while executing SQL: "select "ORDERDATE“."YEAR", > > sum(FACTS.QUANTITY * > > >> FACTS.DISCOUNT) from "FACTS" join "ORDERDATE" on "FACTS"."ORDERDATE" = > > >> "ORDERDATE“."ID" where "ORDERDATE"."YEAR" = '1992' group by > > >> "ORDERDATE"."YEAR" LIMIT 50000" > > >> at > > >> > > > org.apache.kylin.rest.controller.QueryController.doQueryInternal(QueryController.java:219) > > >> at > > >> > > > org.apache.kylin.rest.controller.QueryController.doQuery(QueryController.java:165) > > >> at > > >> > > > org.apache.kylin.rest.controller.QueryController.query(QueryController.java:87) > > >> at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source) > > >> at > > >> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > >> at java.lang.reflect.Method.invoke(Method.java:606) > > >> at > > >> > > > org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) > > >> at > > >> > > > org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) > > >> at > > >> > > > org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) > > >> at > > >> > > > org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) > > >> at > > >> > > > org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) > > >> at > > >> > > > org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) > > >> at > > >> > > > org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) > > >> at > > >> > > > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) > > >> at > > >> > > > org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) > > >> at > > >> > > > org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) > > >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) > > >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > >> at > > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) > > >> at > > >> > > > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) > > >> at > > >> > > > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:91) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) > > >> at > > >> > > > org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) > > >> at > > >> > > > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) > > >> at > > >> > > > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > >> at > > >> > > > org.apache.kylin.rest.filter.KylinApiFilter.doFilterInternal(KylinApiFilter.java:66) > > >> at > > >> > > > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > >> at > > >> > com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:195) > > >> at > > >> > com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:266) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > > >> at > > >> > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > > >> at > > >> > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) > > >> at > > >> > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) > > >> at > > >> > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) > > >> at > > >> > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) > > >> at > > >> > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) > > >> at > > >> > > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) > > >> at > > >> > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) > > >> at > > >> > > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) > > >> at > > >> > > > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) > > >> at > > >> > > > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) > > >> at > > >> org.apache.tomcat.util.net > > .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) > > >> at > > >> > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > > >> at > > >> > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > > >> at > > >> > > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > > >> at java.lang.Thread.run(Thread.java:745) > > > > -- > Best Regard > ZhouQianhao >
