Beispiel #1
0
        public IFieldMapper Parse(JobParser parser, ParseState state)
        {
            var dimension = state.ParseDimension();

            var keyName   = state.AffixName(state.TryGet("KeyName", () => dimension.GetType().Name + "Key"));
            var labelName = state.AffixName(state.TryGet("LabelName", () => dimension.GetType().Name + "Label"));


            return(new LabeledFieldMapper(new XaFieldMapper(dimension, false, keyName), labelName,
                                          XaLabelProvider.FromDimension(dimension, parser.DefaultLanguage), friendlyName: XaFieldMapper.SuggestFriendlyLabelName(labelName)));
        }
Beispiel #2
0
 public IFieldMapper Parse(JobParser parser, ParseState state)
 {
     return(new SimpleFieldMapper(state.AffixName("ContactId"), scope => scope.Current <IVisitAggregationContext>().TryGet(ctx => ctx.Visit.ContactId), typeof(Guid),
                                  valueKind: "ContactId",
                                  calculatedFields: new[]
     {
         new CalculatedField {
             Name = "Unique visitors",
             DaxPattern = string.Format("DISTINCTCOUNT([{0}])", state.AffixName("ContactId")),
             ChildDaxPattern = string.Format("CALCULATE(DISTINCTCOUNT(@Parent[{0}]), @TableName)", state.AffixName("ContactId")),
             FormatString = CalculatedFieldFormat.Integer
         }
     }));
 }
            public IFieldMapper Parse(JobParser parser, ParseState state)
            {
                var selector = state.TryGet("Select", DefaultPath, true);

                if (selector.StartsWith("/"))
                {
                    selector = DefaultPath + selector;
                }

                var getter = parser.CompileGetter(typeof(T), selector);

                var name      = state.TryGet("Name", DefaultName ?? SuggestName(getter.SuggestedName));
                var fieldType = (FieldType)Enum.Parse(typeof(FieldType), state.TryGet("Type", "Dimension"), true);


                IFieldMapper mapper = new SimpleFieldMapper(state.AffixName(name),
                                                            scope => SelectItem(scope).TryGet(item => getter.Getter(item, scope), getter.DefaultValue),
                                                            getter.ValueType, fieldType);

                var labelState = state.Select("Labels");

                if (labelState != null)
                {
                    var labels = labelState.Keys.ToDictionary(labelState.AffixName, key =>
                                                              (ILabelProvider)
                                                              new SitecoreFieldLabelProvider(labelState.TryGet <string>(key), parser.DefaultLanguage));
                    if (labels.Count > 0)
                    {
                        return(new LabeledFieldMapper(mapper, labels));
                    }
                }

                return(mapper);
            }
Beispiel #4
0
        public IFieldMapper Parse(JobParser parser, ParseState state)
        {
            var testIdString = state.Require <string>("TestId", true);

            Guid testId;

            if (!Guid.TryParse(testIdString, out testId))
            {
                throw state.AttributeError("Invalid test id specified ({0})", testIdString);
            }


            var testSet = TestManager.GetTestSet(testId);

            var testMapper = new MvTestFieldMapper(testSet, state.AffixName(state.TryGet("Name", "MvTest")));

            if (state.SelectMany("Fields").Any())
            {
                var splitter = new SplittingFieldMapper(new MvTestSplitter(testId),
                                                        postfix =>
                                                        state.Postfix(postfix).SelectMany("Fields").Select(parser.ParseFieldMapper).ToArray());

                return(new FieldMapperSet(testMapper.Name, true, new IFieldMapper[] { testMapper, splitter }, state.AffixName));
            }

            return(testMapper);
        }
        public IFieldMapper Parse(JobParser parser, ParseState state)
        {
            var name = state.AffixName(state.TryGet("Name", "Count", true));

            var scopeOffset = Math.Abs(state.TryGet("Scope", 0));

            return(new SimpleFieldMapper(name, ctx =>
            {
                if (scopeOffset == 0)
                {
                    return 1;
                }
                var p = ctx;
                for (var i = 0; i < scopeOffset && p != null; i++)
                {
                    p = p.Parent;
                }
                if (p != null)
                {
                    return ctx.OncePerScope(p, 1);
                }

                return 0;
            }, typeof(int), FieldType.Fact));
        }
Beispiel #6
0
        public IFieldMapper Parse(JobParser parser, ParseState state)
        {
            var tableName = state.Require <string>("Name");
            var inline    = state.TryGet("Inline", false);

            var fieldState = state.Clone();

            var affix = state.TryGet("AffixNames", true);

            if (affix)
            {
                tableName = state.AffixName(tableName);
            }
            else
            {
                fieldState = fieldState.ClearAffix();
            }

            var fieldPrefix = state.TryGet("Prefix", "");


            return(new FieldMapperSet(tableName, inline,
                                      fieldState.SelectMany("Fields").Select(parser.ParseFieldMapper), state.AffixName,
                                      fieldNamePrefix: fieldPrefix)
            {
                Key = state.TryGet("Key", false)
            });
        }
Beispiel #7
0
        public IFieldMapper Parse(JobParser parser, ParseState state)
        {
            var name = state.AffixName(state.TryGet("Name", "Index", true));

            var scopeOffset = Math.Abs(state.TryGet("Scope", -1, true));

            return(new SimpleFieldMapper(name, ctx =>
            {
                if (scopeOffset == 0)
                {
                    return ctx.GlobalIndex;
                }

                var p = ctx;
                for (var i = 0; i < scopeOffset && p != null; i++)
                {
                    p = p.Parent;
                }
                if (p != null)
                {
                    return ctx.Index(p);
                }

                return 0;
            }, typeof(int), FieldType.Dimension));
        }
Beispiel #8
0
 protected override IFieldMapper Parse(Func <ProcessingScope, DateTime?> selector, string defaultName,
                                       JobParser parser, ParseState state)
 {
     return(new TimeDimension(
                state.AffixName(state.TryGet("Name", defaultName + "Time")),
                selector,
                inlineFields: state.TryGet <bool>("Inline"),
                cultureInfo: parser.DefaultLanguage.CultureInfo,
                detailLevel: state.TryGet("Resolution", TimeDetailLevel.Hour, true)));
 }
 protected override IFieldMapper Parse(Func<ProcessingScope, DateTime?> selector, string defaultName,
     JobParser parser, ParseState state)
 {
     return new TimeDimension(
         state.AffixName(state.TryGet("Name", defaultName + "Time")),
         selector,
         inlineFields: state.TryGet<bool>("Inline"),
         cultureInfo: parser.DefaultLanguage.CultureInfo,
         detailLevel: state.TryGet("Resolution", TimeDetailLevel.Hour, true));
 }
 protected override IFieldMapper Parse(Func<ProcessingScope, DateTime?> selector, string defaultName,
     JobParser parser, ParseState state)
 {           
     return new DateDimension(
             state.AffixName(state.TryGet("Name", defaultName)),
             selector,
             useDateForKey: state.TryGet("DateKey", true),
             inlineFields: state.TryGet("Inline", false),                    
             cultureInfo: parser.DefaultLanguage.CultureInfo,
             key: state.TryGet("Key", false),
             detailLevel:
                  state.TryGet("Resolution", DateDetailLevel.Date, true));
 }
 protected override IFieldMapper Parse(Func <ProcessingScope, DateTime?> selector, string defaultName,
                                       JobParser parser, ParseState state)
 {
     return(new DateDimension(
                state.AffixName(state.TryGet("Name", defaultName)),
                selector,
                useDateForKey: state.TryGet("DateKey", true),
                inlineFields: state.TryGet("Inline", false),
                cultureInfo: parser.DefaultLanguage.CultureInfo,
                key: state.TryGet("Key", false),
                detailLevel:
                state.TryGet("Resolution", DateDetailLevel.Date, true)));
 }
Beispiel #12
0
        public ITableMapper Parse(JobParser parser, ParseState state)
        {
            var dimension = state.ParseDimension();

            var extraFields = state.SelectMany("Fields").Select(parser.ParseFieldMapper);

            var name = state.TryGet("Name", XaTableMapper.SuggestFriendlyTableName(dimension.GetType().Name));

            return(new XaTableMapper(dimension,
                                     state.AffixName(name),
                                     state.TryGet <string>("Name"),
                                     state.TryGet <bool>("HashKey", true),
                                     keyName: state.TryGet <string>("KeyName"),
                                     labelName: state.TryGet <string>("LabelName"),
                                     additionalFields: extraFields,
                                     factTypes: XaFactsFieldFactory.ParseFactTypes(state.TryGet("Facts", new string[0])),
                                     labelProvider: XaLabelProvider.FromDimension(dimension, parser.DefaultLanguage)
                                     ));
        }
        public ITableMapper Parse(JobParser parser, ParseState state)
        {
            var source = state.TryGet <string>("Select", mainParameter: true) ?? "Pages";

            var type = state.TryGet("Type", "CoOccurrence");

            var name = state.TryGet("Name", source + type);

            var selector = Selectors.SelectFromName(source);

            Func <ProcessingScope, IEnumerable <Tuple <object, object> > > matrix;

            if (type.Equals("cooccurrence", StringComparison.InvariantCultureIgnoreCase))
            {
                matrix = scope => MatrixTypes.CoOcurrence(selector(scope));
            }
            else if (type.Equals("links", StringComparison.InvariantCultureIgnoreCase))
            {
                matrix = scope => MatrixTypes.Links(selector(scope));
            }
            else
            {
                throw state.AttributeError("Unkown matrix type '{0}'", type);
            }


            var facts = state.SelectMany("CommonFields").Select(parser.ParseFieldMapper).ToList();

            if (state.Select("CommonFields") == null)
            {
                facts.Add(new SimpleFieldMapper("Count", s => 1, typeof(int), FieldType.Fact));
            }

            return(new MatrixTableMapper(state.AffixName(name), matrix, postfix =>
                                         state.Postfix(postfix).SelectMany("Fields", true).Select(parser.ParseFieldMapper).ToArray(), facts));
        }
        public ITableMapper Parse(JobParser parser, ParseState state)
        {
            var table = new TableDefinition(state.TryGet("Name", "Funnel"));

            var stepDefinitions = new List <FunnelStepDefinition>();
            var i = 1;

            foreach (var step in state.SelectMany("Steps", true))
            {
                var def = new FunnelStepDefinition {
                    Name = step.TryGet("Name", "Step " + i)
                };
                def.Events = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);
                foreach (var name in step.Require <string[]>("Events"))
                {
                    def.Events.Add(name);
                }
                stepDefinitions.Add(def);
                ++i;
            }

            var helper = new FunnelHelper(stepDefinitions);

            table.FieldMappers = new List <IFieldMapper>();

            table.FieldMappers.Add(
                new SimpleFieldMapper(state.AffixName("StepNumber"), scope => scope.Current <FunnelStep>().Number, typeof(int)));

            table.FieldMappers.Add(
                new SimpleFieldMapper(state.AffixName("Step"), scope => scope.Current <FunnelStep>().Name, typeof(string), sortBy: state.AffixName("StepNumber")));

            table.FieldMappers.Add(
                new SimpleFieldMapper(state.AffixName("Continued"), scope => scope.Current <FunnelStep>().Continued, typeof(int), FieldType.Fact,
                                      calculatedFields: new[]
            {
                new CalculatedField {
                    Name         = state.AffixName("Continued %"),
                    FormatString = CalculatedFieldFormat.Percentage,
                    DaxPattern   =
                        String.Format("IF(SUM([{0}])=0,Blank(),SUM([{1}])/SUM([{0}]))", state.AffixName("Potential"), state.AffixName("Continued"))
                }
            }));

            table.FieldMappers.Add(
                new SimpleFieldMapper(state.AffixName("Fallout"), scope => scope.Current <FunnelStep>().Fallout, typeof(int), FieldType.Fact,
                                      calculatedFields: new[]
            {
                new CalculatedField {
                    Name         = state.AffixName("Fallout %"),
                    FormatString = CalculatedFieldFormat.Percentage,
                    DaxPattern   =
                        String.Format("IF(SUM([{0}])=0,Blank(),SUM([{1}])/SUM([{0}]))", state.AffixName("Potential"), state.AffixName("Fallout"))
                }
            }));

            table.FieldMappers.Add(
                new SimpleFieldMapper(state.AffixName("Potential"), scope => scope.Current <FunnelStep>().Fallout + scope.Current <FunnelStep>().Continued, typeof(int), FieldType.Fact));



            foreach (var fm in state.SelectMany("Fields").Select(parser.ParseFieldMapper))
            {
                table.FieldMappers.Add(fm);
            }


            return(new SimpleTableMapper(helper.GetSteps, table));
        }