-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexplicit-time-intelligence-measures-all.csx
More file actions
77 lines (69 loc) · 3.53 KB
/
Copy pathexplicit-time-intelligence-measures-all.csx
File metadata and controls
77 lines (69 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// source: https://github.com/PowerDAX/tabular-editor
// altered to allow overwrite
// altered for our environment
// altered to set format strings properly
// altered to use all base measures from all tables
// variables
// 1 overwrites existing measures, 0 preserves existing measures
// proposed enhancement: utilize an annotation to determine if a measure should be overwritten. this would allow you to overwrite all measures except for those annotated to not overwrite.
// proposed enhancement: do not delete measure, just set values
var overwriteExistingMeasures = 0;
// enter your calculation group
// proposed enhancement: change to a list to allow for multiple calculation groups
var timeIntelligenceCalculationGroup = "Time Intelligence";
var timeIntelligenceCalculationItem = "Time Calculation";
// used to ensure we do not create explicit time intelligence measures for measures outside of the base measures
// proposed enhancement: change to a list to allow for multiple base measure display folders
var baseMeasuresDisplayFolder = "Measures";
// create measures from calculation items
// filters out some tables and measures that match a string
// proposed enhancement: change to a list to allow for multiple tables
// proposed enhancement: change to a list to allow for multiple strings
var baseMeasures = Model.AllMeasures.Where(
m => (m.DisplayFolder.StartsWith(baseMeasuresDisplayFolder)
&& !m.Table.Name.StartsWith("Parameter")
&& !m.Table.Name.StartsWith("Dynamic")
&& !m.Table.Name.StartsWith("Dim Calendar")
&& !m.Name.Contains("Latest")
&& !m.Name.Contains("Growth")
&& !m.IsHidden)).ToList();
foreach(var measure in baseMeasures)
{
var baseMeasureTable = measure.Table;
{
foreach(var calcItem in (Model.Tables[timeIntelligenceCalculationGroup] as CalculationGroupTable).CalculationItems)
{
// measure name
string measureName = measure.Name + " " + calcItem.Name;
if( overwriteExistingMeasures == 1 )
{
foreach( var m in Model.AllMeasures.Where( m => m.Name == measureName ).ToList() )
{
m.Delete();
}
}
// only if the measure is not yet there (think of reruns)
if(!Model.AllMeasures.Any(x => x.Name == measureName && !x.IsHidden))
{
// add measure
var newMeasure = baseMeasureTable.AddMeasure(
// measure name = base measure name + calculation item name
measure.Name + " " + calcItem.Name,
// dax expression = CALCULATE( base measure, calculation group = calculation item )
"CALCULATE( " + measure.DaxObjectFullName + ", '" + timeIntelligenceCalculationGroup + "'[" + timeIntelligenceCalculationItem + "]= \"" + calcItem.Name + "\" )"
);
// set display folder = calculation group name + measure name
newMeasure.DisplayFolder = measure.DisplayFolder.Replace(baseMeasuresDisplayFolder,timeIntelligenceCalculationGroup) + "\\" + measure.Name;
// set format string
if(calcItem.Name.Contains("%"))
// = % if name includes % (i.e. YOY %, etc.)
{
newMeasure.FormatString = "#,##0.00 %;(#,##0.00 %)";
} else {
newMeasure.FormatString = measure.FormatString;
}
// otherwie, to the format string of the base measure
}
}
}
}