如何使用日期范围和行筛选器编写MDX查询

时间:2016-05-09 17:27:23

标签: mdx pentaho olap

我需要编写一个MDX查询,在WHERE中按日期范围过滤,按“esquema”列过滤行。

分别针对日期范围或“esquema”列的查询效果很好。例如日期范围:

SELECT 
 NON EMPTY {[Measures].[Importe]} ON COLUMNS, 
 NON EMPTY 
   Crossjoin([Bancos].[All Bancoss].Children, 
     Crossjoin([Fechas de Cobro].[All Fechas de Cobros].Children, 
       Crossjoin([Fechas de Emisión].[All Fechas de Emisións].Children, 
         Crossjoin([Destinatarios].[All Destinatarioss].Children, 
           Crossjoin([Comprobantes].[All Comprobantess].Children, [Conceptos].[All Conceptoss].Children))))) ON ROWS 
FROM [Cubrir Bancos] 
WHERE 
  (
    $['[Filtro Esquemas.Esquema]].[' 
      + (parameters.esquema!'All Filtro Esquemas.Esquemas') + ']]'], $['[Filtro Bancos.Banco]].[' 
      + (parameters.banco!'All Filtro Bancos.Bancos') + ']]'], $['[Filtro Fechas.Fecha de Cobro]].[' 
      + (parameters.startDate!'All Filtro Fechas.Fecha de Cobros') + ']]'] : $['[Filtro Fechas.Fecha de Cobro]].[' 
     + (parameters.endDate!'All Filtro Fechas.Fecha de Cobros') + ']]']
  )

并仅按行过滤:

SELECT NON EMPTY {[Measures].[Importe]} ON COLUMNS, 
NON EMPTY Crossjoin([Bancos].[All Bancoss].Children, 
          Crossjoin([Fechas de Cobro].[All Fechas de Cobros].Children, 
          Crossjoin([Fechas de Emisión].[All Fechas de Emisións].Children, 
          Crossjoin([Destinatarios].[All Destinatarioss].Children, 
          Crossjoin([Comprobantes].[All Comprobantess].Children, [Conceptos].[All Conceptoss].Children))))) ON ROWS 
FROM [Cubrir Bancos] 
WHERE ($['[Filtro Esquemas.Esquema]].[' + (parameters.esquema!'All Filtro Esquemas.Esquemas') + ']]'], 
       $['[Filtro Bancos.Banco]].[' + (parameters.banco!'All Filtro Bancos.Bancos') + ']]'])

但是当我把它放在一起时它不起作用,查询是:

SELECT NON EMPTY {[Measures].[Importe]} ON COLUMNS, 
NON EMPTY Crossjoin([Bancos].[All Bancoss].Children, 
          Crossjoin([Fechas de Cobro].[All Fechas de Cobros].Children, 
          Crossjoin([Fechas de Emisión].[All Fechas de Emisións].Children, 
          Crossjoin([Destinatarios].[All Destinatarioss].Children, 
          Crossjoin([Comprobantes].[All Comprobantess].Children, [Conceptos].[All Conceptoss].Children))))) ON ROWS 
FROM [Cubrir Bancos] 
WHERE ({$['[Filtro Esquemas.Esquema]].[' + (parameters.esquema!'All Filtro Esquemas.Esquemas') + ']]'], $['[Filtro Bancos.Banco]].[' + (parameters.banco!'All Filtro Bancos.Bancos') + ']]'], $['[Filtro Fechas.Fecha de Cobro]].[' + (parameters.startDate!'All Filtro Fechas.Fecha de Cobros') + ']]'] : $['[Filtro Fechas.Fecha de Cobro]].[' + (parameters.endDate!'All Filtro Fechas.Fecha de Cobros') + ']]']}
       $['[Filtro Esquemas.Esquema]].[' + (parameters.esquema!'All Filtro Esquemas.Esquemas') + ']]'], 
       $['[Filtro Bancos.Banco]].[' + (parameters.banco!'All Filtro Bancos.Bancos') + ']]']))

如何在MDX中使用2种类型的过滤器?

我正在使用Pentaho 6 CE和Pivot4J。

1 个答案:

答案 0 :(得分:0)

也许尝试这样的事情:

WITH MEMBER [Filtro Fechas.Fecha de Cobro].[All].[dts] AS
  SUM(
    $['[Filtro Fechas.Fecha de Cobro]].[' 
      + (parameters.startDate!'All Filtro Fechas.Fecha de Cobros') + ']]'] : $['[Filtro Fechas.Fecha de Cobro]].[' 
     + (parameters.endDate!'All Filtro Fechas.Fecha de Cobros') + ']]']
  )
SELECT 
 NON EMPTY {[Measures].[Importe]} ON COLUMNS, 
 NON EMPTY 
   Crossjoin([Bancos].[All Bancoss].Children, 
     Crossjoin([Fechas de Cobro].[All Fechas de Cobros].Children, 
       Crossjoin([Fechas de Emisión].[All Fechas de Emisións].Children, 
         Crossjoin([Destinatarios].[All Destinatarioss].Children, 
           Crossjoin([Comprobantes].[All Comprobantess].Children, [Conceptos].[All Conceptoss].Children))))) ON ROWS 
FROM [Cubrir Bancos] 
WHERE 
(
  $['[Filtro Esquemas.Esquema]].[' + (parameters.esquema!'All Filtro Esquemas.Esquemas') + ']]']
, $['[Filtro Bancos.Banco]].[' + (parameters.banco!'All Filtro Bancos.Bancos') + ']]']
, $['[Filtro Esquemas.Esquema]].[' + (parameters.esquema!'All Filtro Esquemas.Esquemas') + ']]']
, $['[Filtro Bancos.Banco]].[' + (parameters.banco!'All Filtro Bancos.Bancos') + ']]']
, [Filtro Fechas.Fecha de Cobro].[All].[dts]
);