public double RatioToParent(Set axis, Expression exp) { Hierarchy h = null; // Iterate over all hierarchies in the set int cHier = axis.Hierarchies.Count; int iHier; for (iHier = cHier - 1; iHier >= 0; iHier--) { h = axis.Hierarchies[iHier]; // and find the hierarchy where the current member is not yet at the highest possible level if (h.CurrentMember.ParentLevel.LevelNumber > 0) { break; } } // If there were no such hierarchy found - report ratio of 100% if (h == null || iHier < 0) { return(1); } // Since current member in this hierarchy is not yet at the highest level, we can safely call .Parent TupleBuilder tb = new TupleBuilder(h.CurrentMember.Parent); // and divide value at current cell by the value of its parent return((double)exp.Calculate(null) / (double)exp.Calculate(tb.ToTuple())); }
public Set GetFunctionalDepartmentSetByUser() { SetBuilder sb = new SetBuilder(); try { DataSet dsUsersFunctionalDepartments = GetGACSFunctionDepartmentsByUser(); if (dsUsersFunctionalDepartments.Tables.Count == 1) // if the dataset is populated with one datatable (which should be the case) { DataTable dtUsersFunctionalDepartments = dsUsersFunctionalDepartments.Tables[0]; foreach (DataRow row in dtUsersFunctionalDepartments.Rows) // loop through each functional department returned by GACS { MemberCollection members = Context.CurrentCube.Dimensions["Functional Department"].Hierarchies["Functional Department"].Levels[1].GetMembers(); // Context.CurrentCube.Dimensions["Functional Department"].AttributeHierarchies["FunctionalDepartmentHierarchy"].Levels["FunctionalDepartment"].GetMembers(); foreach (Member m in members) // foreach functional department returned by the cube { if (String.Compare(row[0].ToString(), m.Name, true) == 0) // if CUBE.FunctionalDepartmentName = GACS.FunctionalDepartmentName { TupleBuilder tb = new TupleBuilder(); tb.Add(new Expression(string.Format(m.UniqueName)).CalculateMdxObject(null).ToMember()); sb.Add(tb.ToTuple()); } } } } } catch (Exception e) { // because sb is outside the scope of the try statement, in the event of an exception an empty set should be returned, i.e.: no access to any functional departments } return sb.ToSet(); }
public Set GetFunctionalDepartmentSetByUser() { SetBuilder sb = new SetBuilder(); try { DataSet dsUsersFunctionalDepartments = GetGACSFunctionDepartmentsByUser(); if (dsUsersFunctionalDepartments.Tables.Count == 1) // if the dataset is populated with one datatable (which should be the case) { DataTable dtUsersFunctionalDepartments = dsUsersFunctionalDepartments.Tables[0]; foreach (DataRow row in dtUsersFunctionalDepartments.Rows) // loop through each functional department returned by GACS { MemberCollection members = Context.CurrentCube.Dimensions["Functional Department"].Hierarchies["Functional Department"].Levels[1].GetMembers(); // Context.CurrentCube.Dimensions["Functional Department"].AttributeHierarchies["FunctionalDepartmentHierarchy"].Levels["FunctionalDepartment"].GetMembers(); foreach (Member m in members) // foreach functional department returned by the cube { if (String.Compare(row[0].ToString(), m.Name, true) == 0) // if CUBE.FunctionalDepartmentName = GACS.FunctionalDepartmentName { TupleBuilder tb = new TupleBuilder(); tb.Add(new Expression(string.Format(m.UniqueName)).CalculateMdxObject(null).ToMember()); sb.Add(tb.ToTuple()); } } } } } catch (Exception e) { // because sb is outside the scope of the try statement, in the event of an exception an empty set should be returned, i.e.: no access to any functional departments } return(sb.ToSet()); }
public Set AsymmetricDrillDown(Set InputSet, int TupleIndex, int HierarchyIndex) { int cHier = InputSet.Hierarchies.Count; if (HierarchyIndex >= cHier) { throw new System.ArgumentOutOfRangeException("Specified hierarchy index is out of range"); } SetBuilder sb = new SetBuilder(); int i = 0; foreach (Tuple t in InputSet.Tuples) { sb.Add(t); if (i == TupleIndex) { Member m = t.Members[HierarchyIndex]; foreach (Member child in m.GetChildren()) { TupleBuilder tb = new TupleBuilder(); for (int iHier = 0; iHier < cHier; iHier++) { if (iHier != HierarchyIndex) { tb.Add(t.Members[iHier]); } else { tb.Add(child); } } sb.Add(tb.ToTuple()); } } i++; } return(sb.ToSet()); }
private ICode CreateSpecificEntityIdBody(EntityIdDescriptor entity) { ICode value; if (entity.Fields.Count == 1) { value = CreateEntityIdProperty(entity.Fields[0]); } else { value = TupleBuilder .New() .AddMemberRange(entity.Fields.Select(CreateEntityIdProperty)); } return MethodCallBuilder .New() .SetReturn() .SetNew() .SetMethodName(TypeNames.EntityId) .AddArgument(_type) .AddArgument(value); }
public Set InverseHierarchility(Set InputSet) { int c = InputSet.Hierarchies.Count; if (c < 2) { return(InputSet); } SetBuilder sb = new SetBuilder(); foreach (Tuple t in InputSet.Tuples) { TupleBuilder tb = new TupleBuilder(); for (int i = c - 1; i >= 0; i--) { tb.Add(t.Members[i]); } sb.Add(tb.ToTuple()); } return(sb.ToSet()); }
private void AddBuildDataMethod( CSharpSyntaxGeneratorSettings settings, InterfaceTypeDescriptor resultNamedType, ClassBuilder classBuilder) { var concreteType = CreateResultInfoName( resultNamedType.ImplementedBy.First().RuntimeType.Name); MethodBuilder buildDataMethod = classBuilder .AddMethod() .SetPrivate() .SetName("BuildData") .SetReturnType($"({resultNamedType.RuntimeType.Name}, {concreteType})") .AddParameter(_obj, x => x.SetType(TypeNames.JsonElement)); if (settings.IsStoreEnabled()) { buildDataMethod.AddCode( AssignmentBuilder .New() .SetLefthandSide($"var {_entityIds}") .SetRighthandSide(MethodCallBuilder .Inline() .SetNew() .SetMethodName(TypeNames.HashSet) .AddGeneric(TypeNames.EntityId))) .AddCode( AssignmentBuilder .New() .SetLefthandSide($"{TypeNames.IEntityStoreSnapshot} {_snapshot}") .SetRighthandSide("default!")); } buildDataMethod.AddEmptyLine(); CodeBlockBuilder storeUpdateBody = CodeBlockBuilder.New(); if (settings.IsStoreEnabled()) { foreach (PropertyDescriptor property in resultNamedType.Properties.Where(prop => prop.Type.IsOrContainsEntity())) { var variableName = $"{GetParameterName(property.Name)}Id"; buildDataMethod .AddCode(AssignmentBuilder .New() .SetLefthandSide(CodeBlockBuilder .New() .AddCode(property.Type.ToStateTypeReference()) .AddCode(variableName)) .SetRighthandSide("default!")); storeUpdateBody .AddCode(AssignmentBuilder .New() .SetLefthandSide(variableName) .SetRighthandSide(BuildUpdateMethodCall(property))); } storeUpdateBody .AddEmptyLine() .AddCode(AssignmentBuilder .New() .SetLefthandSide(_snapshot) .SetRighthandSide($"{_session}.CurrentSnapshot")); buildDataMethod .AddCode(MethodCallBuilder .New() .SetMethodName(_entityStore, "Update") .AddArgument(LambdaBuilder .New() .AddArgument(_session) .SetBlock(true) .SetCode(storeUpdateBody))); } buildDataMethod .AddEmptyLine() .AddCode( AssignmentBuilder .New() .SetLefthandSide($"var {_resultInfo}") .SetRighthandSide( CreateResultInfoMethodCall(settings, resultNamedType, concreteType))) .AddEmptyLine() .AddCode( TupleBuilder .Inline() .SetDetermineStatement(true) .SetReturn() .AddMember(MethodCallBuilder .Inline() .SetMethodName(_resultDataFactory, "Create") .AddArgument(_resultInfo)) .AddMember(_resultInfo)); }
public void FBE_REGISTERACTION(FIZZBUZZENTERPRISENET_OPERANDS operand, FIZZBUZZENTERPRISENET_NUMBERS number) { FactoryFactory MASTERFACTORY = new FactoryFactory(); ACTIONCHAIN.Add(((FBE_IDEFINITION <Tuple <FIZZBUZZENTERPRISENET_OPERANDS, FIZZBUZZENTERPRISENET_NUMBERS> >)TupleBuilder <FIZZBUZZENTERPRISENET_OPERANDS, FIZZBUZZENTERPRISENET_NUMBERS> .@new <FIZZBUZZENTERPRISENET_OPERANDS, FIZZBUZZENTERPRISENET_NUMBERS>(MASTERFACTORY).item1(operand, MASTERFACTORY).item2(number, MASTERFACTORY).Build()).Evaluate()); }
private static Set buildAsymmetricSet(params Member[] memberList) { Context.TraceEvent(100, 0, "AsymmetricSet: Starting"); // build a list of all the unique Hierarchies from the members in memberList. List<Hierarchy> hierList = new List<Hierarchy>(); foreach (Member m in memberList) { // Check that the member variable is correctly populated. If the user passes // in a non-existant member we get a member object whose properties are all // null or empty strings. if (m.UniqueName.Length > 0) { if (!hierList.Exists(delegate(Hierarchy h) { if (h.UniqueName == m.ParentLevel.ParentHierarchy.UniqueName) return true; else return false; })) hierList.Add(m.ParentLevel.ParentHierarchy); } } // SetBuilder & TupleBuilder are IDisposeable so we ensure they // are disposed by utilizing a using block. using (SetBuilder asymSet = new SetBuilder()) { foreach (Member paramMbr in memberList) { if (paramMbr.UniqueName.Length > 0) { // create a tuple for each member that was passed in, // combined with the default member from the other hierarchies. using (TupleBuilder tb = new TupleBuilder()) { foreach (Hierarchy h in hierList) // for each unique hierarchy { Hierarchy paramHier = paramMbr.ParentLevel.ParentHierarchy; if (paramHier.UniqueName == h.UniqueName) { //System.Diagnostics.Trace.WriteLine("Adding member " + paramMbr.UniqueName); tb.Add(paramMbr); } else { Member defMbr = MDX.StrToSet(h.DefaultMember).Tuples[0].Members[0]; //System.Diagnostics.Trace.WriteLine("Adding default member " + defMbr.UniqueName); tb.Add(defMbr); } } Tuple t = tb.ToTuple(); // if the members added to the TupleBuilder will result in a non-existant tuple // (eg. [Calendar Quarter 1] and [December]) the ToTuple method returns a Tuple // containing 0 members. If such a tuple is added to the SetBuilder, the // SetBuilder.ToSet will throw an exception if (t.Members.Count > 0) { asymSet.Add(tb.ToTuple()); } }// using tb } } //foreach paramMbr Context.TraceEvent(100, asymSet.Count, "AsymmetricSet: Finished (" + asymSet.Count.ToString() + " tuples generated)"); return asymSet.ToSet(); } //using SetBuilder }
private void AddBuildDataMethod( InterfaceTypeDescriptor resultNamedType, ClassBuilder classBuilder) { var concreteType = CreateResultInfoName(resultNamedType.ImplementedBy.First().RuntimeType.Name); MethodBuilder buildDataMethod = classBuilder .AddMethod() .SetPrivate() .SetName("BuildData") .SetReturnType($"({resultNamedType.RuntimeType.Name}, {concreteType})") .AddParameter(_obj, x => x.SetType(TypeNames.JsonElement)) .AddCode( AssignmentBuilder .New() .SetLefthandSide($"using {TypeNames.IEntityUpdateSession} {_session}") .SetRighthandSide( MethodCallBuilder .Inline() .SetMethodName(_entityStore, nameof(IEntityStore.BeginUpdate)))) .AddCode( AssignmentBuilder .New() .SetLefthandSide($"var {_entityIds}") .SetRighthandSide(MethodCallBuilder .Inline() .SetNew() .SetMethodName(TypeNames.HashSet) .AddGeneric(TypeNames.EntityId))) .AddEmptyLine(); foreach (PropertyDescriptor property in resultNamedType.Properties.Where(prop => prop.Type.IsEntityType())) { buildDataMethod.AddCode( AssignmentBuilder .New() .SetLefthandSide(CodeBlockBuilder .New() .AddCode(property.Type.ToEntityIdBuilder()) .AddCode($"{GetParameterName(property.Name)}Id")) .SetRighthandSide(BuildUpdateMethodCall(property))); } buildDataMethod .AddEmptyLine() .AddCode( AssignmentBuilder .New() .SetLefthandSide($"var {_resultInfo}") .SetRighthandSide( CreateResultInfoMethodCall(resultNamedType, concreteType))) .AddEmptyLine() .AddCode( TupleBuilder .Inline() .SetDetermineStatement(true) .SetReturn() .AddMember(MethodCallBuilder .Inline() .SetMethodName( _resultDataFactory, nameof(IOperationResultDataFactory <object> .Create)) .AddArgument(_resultInfo)) .AddMember(_resultInfo)); }
private ICode FormatSpecificEntityIdBody(EntityIdDescriptor entity) { var body = CodeBlockBuilder .New(); body.AddAssigment($"using var {_writer}") .SetRighthandSide( MethodCallBuilder .Inline() .SetNew() .SetMethodName(TypeNames.ArrayWriter)); body.AddAssigment($"using var {_jsonWriter}") .SetRighthandSide( MethodCallBuilder .Inline() .SetNew() .SetMethodName(TypeNames.Utf8JsonWriter) .AddArgument(_writer) .AddArgument(_options)); body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.WriteStartObject)); body.AddEmptyLine(); body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.WriteString)) .AddArgument(WellKnownNames.TypeName.AsStringToken()) .AddArgument($"{_entityId}.Name"); body.AddEmptyLine(); if (entity.Fields.Count == 1) { ScalarEntityIdDescriptor?field = entity.Fields[0]; body.AddMethodCall() .SetMethodName(_jsonWriter, GetWriteMethod(field)) .AddArgument(field.Name.AsStringToken()) .AddArgument($"({field.SerializationType}){_entityId}.Value"); } else { body.AddAssigment($"var {_entityIdValues}") .SetRighthandSide(CodeBlockBuilder .New() .AddCode("(") .AddCode(TupleBuilder .New() .AddMemberRange( entity.Fields.Select(x => x.SerializationType.ToString()))) .AddCode($"){_entityId}.Value")); body.AddEmptyLine(); for (var index = 0; index < entity.Fields.Count; index++) { ScalarEntityIdDescriptor field = entity.Fields[index]; body.AddMethodCall() .SetMethodName(_jsonWriter, GetWriteMethod(field)) .AddArgument(field.Name.AsStringToken()) .AddArgument($"{_entityIdValues}.Item{index + 1}"); body.AddEmptyLine(); } } body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.WriteEndObject)); body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.Flush)); body.AddEmptyLine(); body.AddMethodCall() .SetReturn() .SetMethodName(TypeNames.EncodingUtf8, nameof(Encoding.UTF8.GetString)) .AddArgument(MethodCallBuilder.Inline().SetMethodName(_writer, "GetInternalBuffer")) .AddArgument("0") .AddArgument($"{_writer}.Length"); return(body); }
private static Set buildAsymmetricSet(params Member[] memberList) { Context.TraceEvent(100, 0, "AsymmetricSet: Starting"); // build a list of all the unique Hierarchies from the members in memberList. List <Hierarchy> hierList = new List <Hierarchy>(); foreach (Member m in memberList) { // Check that the member variable is correctly populated. If the user passes // in a non-existant member we get a member object whose properties are all // null or empty strings. if (m.UniqueName.Length > 0) { if (!hierList.Exists(delegate(Hierarchy h) { if (h.UniqueName == m.ParentLevel.ParentHierarchy.UniqueName) { return(true); } else { return(false); } })) { hierList.Add(m.ParentLevel.ParentHierarchy); } } } // SetBuilder & TupleBuilder are IDisposeable so we ensure they // are disposed by utilizing a using block. using (SetBuilder asymSet = new SetBuilder()) { foreach (Member paramMbr in memberList) { if (paramMbr.UniqueName.Length > 0) { // create a tuple for each member that was passed in, // combined with the default member from the other hierarchies. using (TupleBuilder tb = new TupleBuilder()) { foreach (Hierarchy h in hierList) // for each unique hierarchy { Hierarchy paramHier = paramMbr.ParentLevel.ParentHierarchy; if (paramHier.UniqueName == h.UniqueName) { //System.Diagnostics.Trace.WriteLine("Adding member " + paramMbr.UniqueName); tb.Add(paramMbr); } else { Member defMbr = MDX.StrToSet(h.DefaultMember).Tuples[0].Members[0]; //System.Diagnostics.Trace.WriteLine("Adding default member " + defMbr.UniqueName); tb.Add(defMbr); } } Tuple t = tb.ToTuple(); // if the members added to the TupleBuilder will result in a non-existant tuple // (eg. [Calendar Quarter 1] and [December]) the ToTuple method returns a Tuple // containing 0 members. If such a tuple is added to the SetBuilder, the // SetBuilder.ToSet will throw an exception if (t.Members.Count > 0) { asymSet.Add(tb.ToTuple()); } } // using tb } } //foreach paramMbr Context.TraceEvent(100, asymSet.Count, "AsymmetricSet: Finished (" + asymSet.Count.ToString() + " tuples generated)"); return(asymSet.ToSet()); } //using SetBuilder }
public static Tuple Create(Func <TupleBuilder, TupleBuilder> keyTupleBuilder) { var ktb = new TupleBuilder(new Tuple()); return(keyTupleBuilder(ktb)); }