我需要编写一个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。
答案 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]
);