|
SSAS Calculation Dimension
#39593426
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: Краснодар
Сообщения: 990
|
|
Привет, запилил Calculation Dimension по подобию https://www.sqlbi.com/articles/datetool-dimension-an-alternative-time-intelligence-implementation/
Он работает на иерархии Calendar YQMD: Year/Quarter/Month/Date. Всё работает класно.
как сделано сейчас
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. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287.
([Dim Date Tool].[Date Tool Name].[YTD])
= AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
PERIODSTODATE
(
[Dim Date].[Calendar YQMD].[Year],
[Dim Date].[Calendar YQMD].CURRENTMEMBER
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[MTD])
= AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
PERIODSTODATE
(
[Dim Date].[Calendar YQMD].[Month],
[Dim Date].[Calendar YQMD].CURRENTMEMBER
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[Last MTD])
= AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
PERIODSTODATE
(
[Dim Date].[Calendar YQMD].[Month],
IIF
(
ISEMPTY(PARALLELPERIOD([Dim Date].[Calendar YQMD].Month, 1, [Dim Date].[Calendar YQMD].CURRENTMEMBER)),
TAIL(DESCENDANTS(ANCESTOR([Dim Date].[Calendar YQMD].CURRENTMEMBER, [Dim Date].[Calendar YQMD].Month).PREVMEMBER, [Dim Date].[Calendar YQMD].[Date], SELF), 1).Item(0),
PARALLELPERIOD([Dim Date].[Calendar YQMD].Month, 1, [Dim Date].[Calendar YQMD].CURRENTMEMBER)
)
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[Last Month])
=
IIF
(
NOT [Dim Date].[Calendar YQMD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar YQMD].[Month],
NULL,
AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
[Dim Date].[Calendar YQMD].CURRENTMEMBER.LAG(1)
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[Past Month])
=
IIF
(
NOT [Dim Date].[Calendar YQMD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar YQMD].[Month],
NULL,
AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
[Dim Date].[Calendar YQMD].CURRENTMEMBER.LAG(2)
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[Last Week])
=
IIF
(
NOT [Dim Date].[Calendar WD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar WD].[Week],
NULL,
AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
[Dim Date].[Calendar WD].CURRENTMEMBER.LAG(1)
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[Past Week])
=
IIF
(
NOT [Dim Date].[Calendar WD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar WD].[Week],
NULL,
AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
[Dim Date].[Calendar WD].CURRENTMEMBER.LAG(2)
)
);
FREEZE;
([Dim Date Tool].[Date Tool Name].[Yesterday])
=
IIF
(
NOT [Dim Date].[Calendar YQMD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar YQMD].[Date],
NULL,
AGGREGATE
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
[Dim Date].[Calendar WD].CURRENTMEMBER.LAG(1)
)
);
FREEZE;
SCOPE ([Dim Date Tool].[Date Tool Name].[Avg 14 days]);
THIS =
IIF
(
NOT [Dim Date].[Calendar YQMD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar YQMD].[Date],
NULL,
AVG
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
LastPeriods(14, [Dim Date].[Calendar YQMD].CURRENTMEMBER.PREVMEMBER)
)
);
--FORMAT_STRING(THIS) = "#,##0.00;-#,##0.00";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[Avg 4 months]);
THIS =
IIF
(
NOT [Dim Date].[Calendar YQMD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar YQMD].[Month],
NULL,
AVG
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
LastPeriods(4, [Dim Date].[Calendar YQMD].CURRENTMEMBER.PREVMEMBER)
)
);
--FORMAT_STRING(THIS) = "#,##0.00;-#,##0.00";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[Avg 6 weeks]);
THIS =
IIF
(
NOT [Dim Date].[Calendar WD].CURRENTMEMBER.LEVEL IS [Dim Date].[Calendar WD].[Week],
NULL,
AVG
(
{[Dim Date Tool].[Date Tool Name].DEFAULTMEMBER} *
LastPeriods(6, [Dim Date].[Calendar WD].CURRENTMEMBER.PREVMEMBER)
)
);
--FORMAT_STRING(THIS) = "#,##0.00;-#,##0.00";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[diff yesterday vs 14 days avg]);
THIS = ([Dim Date Tool].[Date Tool Name].[Yesterday]) - ([Dim Date Tool].[Date Tool Name].[Avg 14 days]);
--FORMAT_STRING(THIS) = "#,##0;-#,##0";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[% diff yesterday vs 14 days avg]);
THIS = IIF(([Dim Date Tool].[Date Tool Name].[Avg 14 days]) = 0, NULL, ([Dim Date Tool].[Date Tool Name].[diff yesterday vs 14 days avg]) / ([Dim Date Tool].[Date Tool Name].[Avg 14 days]));
FORMAT_STRING(THIS) = "Percent";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[diff last week vs past week]);
THIS = ([Dim Date Tool].[Date Tool Name].[Last Week]) - ([Dim Date Tool].[Date Tool Name].[Past Week]);
--FORMAT_STRING(THIS) = "#,##0;-#,##0";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[% diff last week vs past week]);
THIS = IIF(([Dim Date Tool].[Date Tool Name].[Past Week]) = 0, NULL, ([Dim Date Tool].[Date Tool Name].[diff last week vs past week]) / ([Dim Date Tool].[Date Tool Name].[Past Week]));
FORMAT_STRING(THIS) = "Percent";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[diff last week vs 6 weeks avg]);
THIS = ([Dim Date Tool].[Date Tool Name].[Last Week]) - ([Dim Date Tool].[Date Tool Name].[Avg 6 weeks]);
--FORMAT_STRING(THIS) = "#,##0;-#,##0";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[% diff last week vs 6 weeks avg]);
THIS = IIF(([Dim Date Tool].[Date Tool Name].[Avg 6 weeks]) = 0, NULL, ([Dim Date Tool].[Date Tool Name].[diff last week vs 6 weeks avg]) / ([Dim Date Tool].[Date Tool Name].[Avg 6 weeks]));
FORMAT_STRING(THIS) = "Percent";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[diff last month vs past month]);
THIS = ([Dim Date Tool].[Date Tool Name].[Last Month]) - ([Dim Date Tool].[Date Tool Name].[Past Month]);
--FORMAT_STRING(THIS) = "#,##0;-#,##0";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[% diff last month vs past month]);
THIS = IIF(([Dim Date Tool].[Date Tool Name].[Past month]) = 0, NULL, ([Dim Date Tool].[Date Tool Name].[diff last month vs past month]) / ([Dim Date Tool].[Date Tool Name].[Past month]));
FORMAT_STRING(THIS) = "Percent";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[diff last month vs 4 months avg]);
THIS = ([Dim Date Tool].[Date Tool Name].[Last Month]) - ([Dim Date Tool].[Date Tool Name].[Avg 4 months]);
--FORMAT_STRING(THIS) = "#,##0;-#,##0";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[% diff last month vs 4 months avg]);
THIS = IIF(([Dim Date Tool].[Date Tool Name].[Avg 4 months]) = 0, NULL, ([Dim Date Tool].[Date Tool Name].[diff last month vs 4 months avg]) / ([Dim Date Tool].[Date Tool Name].[Avg 4 months]));
FORMAT_STRING(THIS) = "Percent";
FREEZE;
END SCOPE;
SCOPE ([Dim Date Tool].[Date Tool Name].[% total (under construction)]);
THIS = ([Dim Date Tool].[Date Tool Name].DEFAULTMEMBER);
FORMAT_STRING(THIS) = "Percent";
FREEZE;
END SCOPE;
Нужно добавить альтернативные имена для Month и Date, кроме как добавить дополнительные атрибуты Month Name Alternate, и Date Name Alternate в дименшн Dim Date в голову больше ничего не приходит. Но они будут вне иерархии Calendar YQMD. Как бы так заредиректить эти два атрибута на Month и Date в иерархии?
У Руссо по ссылке https://www.sqlbi.com/tools/datetool-dimension/ идут какие-то непонятные мне пляски, если кто-то пояснит был бы рад.
как оно у Руссо
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.
//
// CROSS MONTHS
//
SCOPE ( [Date].[Month of Year].[Month of Year].Members,
[Date].[Month Name].[All],
[DateTool].[Aggregation].AllMembers,
[DateTool].[Comparison].AllMembers );
///////////////////////////////////////////////////////////////////////////////////////
// It should be scoped do:
// SCOPE ( { [DateTool].[Aggregation].[Year To Date], [DateTool].[Aggregation].[Last 12 Months] } );
// but since it is not supported, we use the Except function
SCOPE ([Date].[Year].[Year].Members,
Except( [DateTool].[Aggregation].Members, {[DateTool].[Aggregation].DefaultMember} ) );
THIS = Root( StrToMember( "[Date].[Month Name].&["
+ [Date].[Year].CurrentMember.Properties( 'Key' )
+ "]&["
+ [Date].[Month of Year].CurrentMember.Properties( 'Key' )
+ "]" ) );
END SCOPE;
///////////////////////////////////////////////////////////////////////////////////////
// The FREEZE is necessary to fix the result against possible modifications made by script
// for lower levels of attribute hierarchy
FREEZE;
END SCOPE;
|
|
|