public override MdxExpression Process(MdxExpression expr) { if (expr == null) return null; MdxExpression filter = new MdxUnaryExpression ("NOT" , new MdxFunctionExpression ("ISANCESTOR" , new MdxObjectReferenceExpression(args.Member.UniqueName) , new MdxObjectReferenceExpression(args.Member.HierarchyUniqueName + ".CURRENTMEMBER") ) ); var tupleBase = GenTupleBase(); if (tupleBase.Members.Count > 0) { filter = new MdxBinaryExpression (filter , new MdxUnaryExpression ("NOT" , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) ) , "OR" ); } return new MdxFunctionExpression ("FILTER" , expr , filter ); }
public override MdxExpression Process(MdxExpression expr) { if (expr == null) return null; string uniqueName = args.Member.UniqueName; string hierarchyUniqueName = args.Member.HierarchyUniqueName; var drillDownExpr = new MdxFunctionExpression ("Distinct" , new MdxFunctionExpression ("DrillDownMember" , expr , new MdxObjectReferenceExpression(uniqueName) ) ); MdxExpression filter = new MdxFunctionExpression ("IsAncestor" , new MdxObjectReferenceExpression(uniqueName) , new MdxObjectReferenceExpression(hierarchyUniqueName + ".CURRENTMEMBER") ); MdxExpression isSelf = new MdxBinaryExpression (new MdxObjectReferenceExpression(uniqueName) , new MdxObjectReferenceExpression(hierarchyUniqueName + ".CURRENTMEMBER") , "IS" ); if (HideSelf) { isSelf = new MdxBinaryExpression (isSelf , new MdxFunctionExpression ("IsLeaf" , new MdxObjectReferenceExpression(uniqueName) ) , "AND" ); }; filter = new MdxBinaryExpression (filter , isSelf , "OR" ); if (!SingleDimension) { var tupleBase = GenTupleBase(); if (tupleBase.Members.Count > 0) { filter = new MdxBinaryExpression (filter , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) , "AND" ); } } return new MdxFunctionExpression("FILTER", drillDownExpr, filter); }
public override MdxExpression Process(MdxExpression expr) { if (expr == null) return null; var tuple = GenTuple(); if (tuple.Members.Count == 1) { return new MdxFunctionExpression ("DRILLDOWNMEMBER" , expr , tuple ); } expr = new MdxBinaryExpression (expr , new MdxFunctionExpression( "DRILLDOWNMEMBER" , new MdxFunctionExpression ("FILTER" , expr , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) ) , new MdxObjectReferenceExpression(args.Member.UniqueName) ) , "+" ); return expr; }