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