您好,欢迎访问一九零五行业门户网

AMO olap Test C# generate tsql and mdx

通过amo访问online的cube,生成等值的tsql和mdx 自动生成等值的tsql和mdx进行cube测试.其中难度比较大的部分是拼接tsql. 暂时不处理calculations,只除理metrics和regular type的dimension usage. metric的聚合方法只处理(max,min,sum,count,distinct count)
通过amo访问online的cube,生成等值的tsql和mdx
自动生成等值的tsql和mdx进行cube测试.其中难度比较大的部分是拼接tsql.
暂时不处理calculations,只除理metrics和regular type的dimension usage.
metric的聚合方法只处理(max,min,sum,count,distinct count)
以下是问题的记录与处理情况.
1.adventureworks示例cube中,会把date dimension的attributes的表名取成dimtime. 未解决 已经解决此问题
2.如果dimension 表中的attributes引用了其他表的字段,则暂时没有解决这个问题. 解决
使用tablejoin和tablelinks方法来解决这个问题.
tablelinks方法获取dimensionattributes中使用到的字段所在的表与主表的关系链.
tablejoin:生成连接的语句.
或许不完善.
3.新问题 如果hierarchy的level的source attribute用的是calculation,那么现在仍然会报错,我应该判断
这个字段是不是计算成员,如果是计算成员,则要去取计算成员的定义.
4.没有考虑dimension attribute的orderby 属性与name column. 未解决(尽快解决 已经解决此问题)
5.问题 自连接的情况 如果dimension usage 当中事实表和维度表是一个表的话,需要给表加别名.
现在只考虑事实表与维度表相同的情况,其他的暂时不考虑.
6.在某些情况下,sum出来的结果会发生溢出,所以需要提前把它转化为bigint.
可以在判断其列的类型为int时自动将其转化成bigint. 未解决
7.遇到父子dimension会形成死循环,或者类似存在回链关系的dsv维度,忽略掉. 解决:第二次出现的时候直接断开.
以下是生成等值tsql与mdx的运行情况,使用adventurework示例数据仓库ssas进行测试,除了提到的第一个问题外,
生成的tsql均可以运行.
界面介绍:填入olap cube的连接字符串,选择db,cube与dimensions.直接点击生成mdxtsql.
以下贴一些主要的方法(代码)
由于dimension可能引用多个表,所以要把这几个表关联起来,有了以下代码:
private string tablejoin(dimensionattribute da){//根据l找到sourcetablemorejoin = ;string tablelinks = gettablelinks(da.parent);).length3) return ;)[;if (tablelinks.indexof(tablename).equals(0)) return ;string strusedtables = tablelinks.substring(0, tablelinks.indexof(tablename)-1);liststring>();usedtables.remove();dataset ds = da.parent.datasourceview.schema;for (int i = 0; i 0; i++){string childtable = usedtables[0];datarelation dr = ds.relations[i];if (dr.childtable.tablename.equals(childtable)){morejoin = morejoin.append(+ getsourcequerydefinition(da.parent,dr.parenttable.tablename.replacefirstunderlinewithdot())).appendnewline().append();for (int j = 0; j ){morejoin = morejoin.append(dr.parenttable.tablename.replacefirstunderlinewithdot()++ dr.parentcolumns[j].columnname + +dr.childtable.tablename.replacefirstunderlinewithdot() ++ dr.childcolumns[j].columnname).appendnewline();}usedtables.removeat(0);i = 0;}}return morejoin;}private string gettablelinks(dimension dim){hashsetstring> tables = new hashsetstring>();string maintable = ;string tablelinks = string.empty;dataset ds = dim.datasourceview.schema;maintable= dim.keyattribute.keycolumns[)[0];tablelinks = tablelinks.append(maintable+);for (int i = 0; i ){datarelation dr = ds.relations[i];if (dr.childtable.tablename.equals(maintable)){tablelinks = tablelinks.append(dr.parenttable.tablename + );maintable = dr.parenttable.tablename;if (tables.contains(maintable))break;elsetables.add(maintable);i = 0;}}return tablelinks;},
其它类似信息

推荐信息