6.6、计算成员避免无限循环与solve_order
来源:互联网 发布:钱咖淘宝返利 编辑:程序博客网 时间:2024/06/06 01:42
计算成员避免无限循环与solve_order
1 Avoiding Infinite Recursion 避免无限循环
计算成员如下:
withmember [Date].[Month Num Of Year].[hours] as ([Hour].[HourKey].&[11])+([Hour].[Hour Key].&[12]) select [Measures].[In Count]on 0 ,[Date].[Month Num OfYear].allmembers on 1from [Park]
该计算成员挂在层次结构[Date].[MonthNum Of Year]下,目的是计算两个局部元组【11时】与【12时】的和。但是执行后,我们会发现计算成员报错了,点击单元格后提示【检测到无限递归。依赖关系循环是: hours -> hours】
这是为什么呢?我们必须从【计算成员的实现原理】来分析。因为计算成员[hours]挂在[Date].[Month Num Of Year]【层次结构】下,所以当使用[Date].[MonthNum Of Year].allmembers时,将访问到[hours]成员,结合select后生成一个局部元组,补齐后如下:
( [Date].[Month Num Of Year].[hours], [Measures].[In Count], [Hour].[Hour Key].[ALL], ……)
由于[hours]计算成员由两个局部元组构成,所以以上的局部元组将被拆分成两个局部元组,而根据【引用当前环境下没有的引用】这点来补齐元组的话,只有[Hour].[Hour Key].[ALL]成员会被替换,结果如下:
( [Date].[MonthNum Of Year].[hours], [Measures].[In Count], [Hour].[Hour Key].&[11], ......)+( [Date].[MonthNum Of Year].[hours], [Measures].[In Count], [Hour].[Hour Key].&[12], ......)
我们发现[Hour].[HourKey].[ALL]被替换了,但是[Date].[Month Num Of Year].[hours]计算成员仍然在,那么ssas又要对其进行解析,如此又陷入了上面的过程,从而出现循环错误
而要解决这样的冲突也很简单,就是把计算成员层次结构下的成员引用到局部元组中即可,如下
withmember[Date].[Month Num Of Year].[hours] as ([Hour].[Hour Key].&[11], [Date].[Month Num Of Year].[All]) + ([Hour].[Hour Key].&[12], [Date].[Month Num Of Year].[All]) select [Measures].[In Count] on 0 ,[Date].[Month Num Of Year].allmemberson 1from [Park]
2 Solve_order 控制计算成员的执行顺序
有时候,行的计算结果必须依赖列的计算结果,或者反过来,这时可以通过solve_order来控制计算成员的执行顺序,否则会引发数据错误,如下:
withmember[Date].[Month Num Of Year].[total] as sum([Date].[Month Num Of Year].members),solve_order=1member [in-out] as [Measures].[In Count]/[Measures].[OutCount],solve_order=2 select { [Measures].[In Count], [Measures].[Out Count], [in-out] } on 0 ,[Date].[Month Num Of Year].allmemberson 1from [Park]
- 6.6、计算成员避免无限循环与solve_order
- 限制递归次数,避免无限循环
- 死循环与无限递归
- 缓冲区溢出与无限循环
- viewpager无限循环与ViewPagerIndicator
- 循环的中断与无限循环
- 私有成员变量在block如何避免循环引用
- AutoScrollViewPager与PageIndicator无限循环混合使用
- 程序员面试金典: 9.10 扩展性与存储限制 10.5如果要设计一个网络爬虫程序,该怎么样避免陷入无限循环。
- python再计算无限循环小数的循环节
- 无限循环
- 如果要设计一个网络爬虫程序,该怎么避免陷入无限循环
- 如果让你设计一个网络爬虫,你怎么避免陷入无限循环?
- js-计算保留小数点一两位并避免出现无限小数的bug
- Android ViewPager的无限循环与自动滚动实现
- java学习10--循环结构-for与while区别、无限循环、循环应用
- iOS开发---私有成员变量在block如何避免循环引用
- 1.if与switch 2.利用for嵌套--倒立三角3.循环与无限循环
- CMS内容管理系统开发-JavaScript相关知识及小游戏开发实例
- 理解LinkedHashMap
- JS实现复选框的全选和批量删除功能
- PHP工作笔记:Yii2框架设置页面的关键词和描述
- Java类之AtomicBoolean
- 6.6、计算成员避免无限循环与solve_order
- HDU3427
- 从零到百亿互联网金融架构发展史
- 洛谷P1509明明的随机数c++
- 使用 PureMVC 和 Cocos2d-js 构建游戏项目 II
- 安卓组件------列表选择框
- easyui仿百度搜索提示框
- HashMap在Java里是怎么工作的
- 解析数论引论 第2章 数论函数和狄利克雷乘积