我搜索了很多寻找解决这个问题的方法,似乎没有现成的解决方案。级联过滤器只适用于BW或HANA(OLAP)数据源。
我找到了解决这个问题的唯一方法(我想不出其他方法)。希望这对你们有帮助。以下是我所做的。
国家>>州>>城市
1)创建三个数据源:
1.1–国家/地区。这将在仪表板启动时加载。只需通过此查询获取Country对象和一些度量值。我在数据库中创建了一列"count",这样您就可以将Country字段和"count"度量值字段作为查询来拉取。
1.2–STATE\u DS:在脚本中将load设置为"True"。获取STATE和count fileds,但只有这一次您为这个查询设置了一个国家/地区提示。
1.3–CITY\u DS:在脚本中将Load设置为"True"。获取CITY和Count字段并为这个查询设置State提示。
2)创建全局变量v\u Country,v\u State
3)为所有或至少一个State和CITY下拉列表创建三个下拉列表Country\u DD,物联网和互联网的区别,State\u DD,CITY\u DD,在"属性"选项卡中手动输入"所有"项目部分。(在用户选择一个州之前,您不会加载城市数据源;在此之前,所有数据都将显示在下拉列表中)。
4)启动时,编写以下脚本。
//4.1:–
国家_DD.设置项(国家)_DS.getMemberList文件(,MemberPresentation.INTERNAL\密钥, MemberDisplay.TEXT文件,0);
//
//(请注意,您可能尝试一下"MemberPresentation"格式。看看什么适合你。当我使用MemberPresentation.TEXT文件,但如果不使用"内部键",排序将成为一个问题,在这种情况下,物联网概念股,您可能必须使用排序方法对下拉列表中的数据进行排序)
//4.2:–
v_country=country_DD.getSelectedText文件();
//(您可以考虑使用"On Variable Initialization"选项来加载状态数据(4.2),但我发现,如果您确定哪个国家将成为列表中的第一个国家,或者如果您有所需的默认值,则需要为全局变量设置一个默认值,然后我们可以使用此选项。如果您的数据库中可能没有默认国家的数据,则结果集将为空。所以最好的选择是在脚本中加载,不要设置启动时强制提示选项)。
//4.3:–
状态_DS.loadDataSource文件();
//(这将加载state的数据源,爱淘客,下面的脚本将传递country参数)
//4.4:–
APPLICATION.setVariableValue应用程序('psEnterCountry',v\u country);
//
//4.5:–
状态_DD.SETSELECTED值("ALL");
5)在县/地区的点击事件中:
v\U country=country_DD.getSelectedText文件();
//
状态_DS.LoadDatasource文件();
//
APPLICATION.setVariableValue应用程序('psEnterCountry',v_country);
//
状态_DD.设置项(状态_DS.GetMemberList文件(,MemberPresentation.INTERNAL\密钥, MemberDisplay.TEXT文件,0,"ALL");
/*0将为您提供列表中的所有项目;如果您的数据库中尚未包含所有项目,则"ALL"将添加所有项目作为列表中的第一项*/
//(请注意,您可能需要尝试一下"MemberPresentation"格式。请检查适合您的格式。当我使用MemberPresentation.TEXT文件,但如果您不使用"内部键",排序将成为一个问题,在这种情况下,您可能必须使用排序方法来为您的下拉列表排序数据)
6)在STATE\u DD:
v\u STATE=STATE的On-Click-even属性中_DD.getSelectedText文件();
//
城市_DS.LoadDatasource文件();
//
APPLICATION.setVariableValue应用程序('psEnterState',vu state);
//
城市_DD.设置项(城市)_DS.GetMemberList文件(,Memberpresentation.INTERNAL\密钥, MemberDisplay.TEXT文件,0,"ALL");
//(请注意,您可能需要尝试一下"MemberPresentation"格式。请检查适合您的格式。当我使用MemberPresentation.TEXT文件,但是如果你不使用"内部键",排序将成为一个问题,在这种情况下,你可能需要使用排序方法对下拉列表中的数据进行排序)
希望这有帮助。在实现这些时,你肯定会有更多的问题,就像我做的一样,我很乐意回答这个问题。
Vijay Bhaskar P
嗨,Vijay,
谢谢你的帖子,我已经试着解决宇宙中的级联参数问题有一段时间了。
我想知道是否有办法阻止用户在第一次运行应用程序时被提示国家提示?i、 e.我希望提示由脚本填写,而不是由用户填写。
谢谢Penny。
嗨Penny,
使用"APPLICATION.setVariableValue应用程序('psPromptText',v_country);"启动时"部分。如果它是一个固定的提示值,那么您可以用文本"USA"等替换varualbe值
您也可以在"变量初始化时"部分进行设置避免提示。
如果这回答了您的问题,请告诉我。如果没有,请提供更多关于您的数据源等的详细信息。
谢谢,
VB
嗨VB,
谢谢您的信息;设置变量值的"变量初始化"部分将避免用户在应用程序打开时收到提示。
即如您所建议的位置:
APPLICATION.setVariableValue应用程序('pspromptext',v_country)在"On Variable Initialization"中
我一直在尝试类似的操作,大数据技术,即三个不同的查询,但是我尝试过滤数据源,而不是按需运行和过滤。
我相信您的帖子中可能有错误:
(On select country)
STATE_DD.GetMemberList文件(,MemberPresentation.INTERNAL\密钥, MemberDisplay.TEXT文件,0,"ALL");
我觉得应该是
状态_DD.设置项(状态_DD.getMemberList文件("\u 9HY\u 4cBvEeOMbdZh-4RtVw",购物返利app,MemberPresentation.EXTERNAL\u密钥,MemberDisplay.KEY文件,300,"全部");
再次感谢您的帮助,绝对没有人能想出解决这个问题的办法,甚至SAP认为这是不可能的!
干得好!
钢笔。
谢谢钢笔。我想这会减少像我这样的人的很多努力和挫折。
你是对的。我错过了在我的代码中输入"设置项"。
你的建议还有一个小小的改动是
状态_DD.设置项(状态_DS.getMemberList文件(应该是STATE\DS)根据我之前的数据源名称getMemberList.
所有人,请注意此更改,这样您就不必重新发明轮子。我也将编辑我的原始帖子。感谢钢笔。
问候,
VB
嗨VB,您在哪里定义了"psEnterCountry"和"psEnterState"?
你好,保罗,