点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好,亲爱的社区,
我在计算交叉表中的记录/成员时遇到问题。 我有5个过滤条件:
项目,OEsG,Costcenter,Group和VOS。
示例:
我过滤项目='12345'或项目='56789'正常,计数也正常。 (我在TextBox中创建了计数记录,可以在其中看到行数)。 例如,在这里我得到了1000个成员的计数。 现在,我想使用300到400之间的过滤标准" VOS"过滤数字范围。
交叉表中的成员更改为例如500条记录,但是文本框中的计数仍显示为1000。这仅在我尝试过滤范围时发生。
当我使过滤器标准VOS = 300、310、320、320 ... 400时,它工作正常。
->交叉表中的行更改为500,并且文本框中的计数也更改为500。
应用范围时,我只有计数问题。
能帮我吗?
我用于记录计数的代码如下:
DS_1.reloadData();
DS_1.loadDataSource();
var getarray = DS_1.getMembers(" _ wHEBMOoLEeaB-JtworBC7A",20000);
var membercount = getarray.length;
DS_1.setText("行数:" + membercount);
DS_1.setVisible(true);
嗨Vu
使用 getMembers()并不是对数据结果集中的记录进行计数的可靠方法,因为实际上 getMembers() 从主数据而不是数据结果集中获取成员。 您可以尝试以下一种替代方法:
1)在数据源初始视图中,选择一种度量并将 Calculate Totals As 选项设置为" Total Number of 详细值";
2)在数据源的"更改结果集时"事件脚本中,指定类似于以下内容的代码:
问候,
穆斯塔法。
嗨,穆斯塔法,
我的问题是我无法将范围应用于setVariableValueExt()。
您有一个主意,如何将范围应用于setVariableValueExt()? 在我的"编辑查询规范"中,我具有针对所有过滤条件(项目,OEsG,VOS,组,成本中心)的"在列表中"查询过滤器。
与过滤器有关的第一件事始终是setVariableValueExt(),因为在"初始视图"中有太多数据,因此无法显示。 而且普通滤镜不适用于有缺陷的初始视图。 这就是为什么我首先必须使用setVariableValueExt()的原因。
嗨,穆斯塔法,
对不起,以后我会注意这一点。 顺便说一句,您回答得这么快真的很不错,这非常有帮助。
是的,我的数据源是一个由SAP Information Design Tool构建的Universe。 Universe处理一个Oracle数据库。
我要显示关键绩效指标的过滤器面板和交叉表具有不同的数据源。
此后,我将把筛选器面板的数据源描述为" FP_DS",并将交叉表的数据源描述为" CT_DS"。
为什么我们必须使用两个不同的数据源?
->因为关键绩效指标必须基于300.000多个数据集进行计算。 在这300.000个数据集中,我们要在交叉表中显示大约8列,但是只能在过滤器面板中过滤其中的5列(因此必须将所有8列都放入"编辑查询规范"中 ),因此有超过20.000种可能的组合->过滤器甚至不会显示要过滤的数据。 (交叉表也是如此)。
所以我们制作了两个不同的数据源。
FP_DS包含来自CT_DS的不同值的值列表(否则它将是所有可能组合的交叉连接,并且将超过20.000个允许的组合)。 在"筛选器面板"的"应用时"事件中,我们进行了如下操作:
CT_DS.setVariableValueExt(" pmProject",FP_DS.getFilterExt(" ext_key_of_project"));
我们必须使用setVariableValueExt而不是setFilterExt,因为我们需要首先减少CT_DS中的数据量,否则该过滤器将不适用。 但是,使用setVariableValueExt应用范围不再有效。
希望您也能帮助我解决这个问题。
此致
Vu
你好穆斯塔法,
最后,我得到了它的一些数组解决方法:
var filter = Convert.replaceAll(DS_BZD_FILTER_DERIV.getFilterText(" _ 6wq-cPNyEeam2IYRVom_Uw"),";",",");
var counter = 0;
var filterArray = filter.split(", ");
var filterString ="";
var min ="";
var max ="";
var loopMark = 0;
filterArray.forEach(function( element,index){
if(element.indexOf("-")== -1){
if(counter == 0)
{
filterString = element;
计数器=计数器+1;
}
其他
{
filterString = filterString +";" +元素;
}
}
其他{
min = element.substring(0,element.indexOf("-")-1);
max = element.substring(element.indexOf("-")+ 2);
var loopArray = DS_BZD_FILTER_DERIV.getMembers(" _6wq-cPNyEeam2IYRVom_Uw",100);
loopArray.forEach(function(element2,index2){
if(Convert.stringToInt(element2.text)> = Convert.stringToInt(min)&& Convert.stringToInt (element2.text)<= Convert.stringToInt(max)){
如果(counter == 0){
filterString ="" + element2.text;
counter = counter + 1;
}
else {
filterString = filterString +"; " + element2.text;
}
}
});
}
});
U_FZG_LIST.setVariableValueExt(" pmVOS",filterString);
嗨,穆斯塔法,
我的问题是我无法将范围应用于setVariableValueExt()。
您有一个主意,如何将范围应用于setVariableValueExt()? 在我的"编辑查询规范"中,我具有针对所有过滤条件(项目,OEsG,VOS,组,成本中心)的"在列表中"查询过滤器。
似乎唯一的其他选择是 曾经在Universe IDT中重新定义了输入提示。
Hi Vu,
感谢您共享过滤解决方案。 不幸的是,您不得不跳过那些麻烦。 因此,如果我理解正确,则脚本似乎将范围转换为由单个定界成员值组成的字符串,然后该字符串与输入提示定义兼容。 是吗?
问候,
穆斯塔法。
一周热门 更多>