コード例 #1
0
        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()));
        }
コード例 #2
0
ファイル: CubeSecurity.cs プロジェクト: rsdgjb/GR_PERFICIENT
    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();
    }
コード例 #3
0
    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());
    }
コード例 #4
0
        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());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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
        }
コード例 #10
0
        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));
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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
        }
コード例 #13
0
        public static Tuple Create(Func <TupleBuilder, TupleBuilder> keyTupleBuilder)
        {
            var ktb = new TupleBuilder(new Tuple());

            return(keyTupleBuilder(ktb));
        }