Professional Documents
Culture Documents
Business Object Important Features 1.generating LOVS: Use of List of Values
Business Object Important Features 1.generating LOVS: Use of List of Values
1.Generating LOVS
ListofvaluesorLOVisadistinctlistofdatavaluesassociatedwithanobject.Whenanydimensionof
detailsobjectiscreatedLOVisassignedtoanobjectautomatically.
UseofListofvalues.
Whenuserneedstofilterdatainaquerybasedonspecificobjectvalues,UsercansimplyviewtheLOVof
thatobjectsandchoosethevalueonwhichtheywanttofilterthedata.
e.g.ifCOUNTRYdimensionhasfollowingdistinctvalues
A,B,CandifuserwantstofilterthedataofcountryB,usercanputafilteronCountrydimensionand
choosetheBasfilterwhileexecutingthequery.
HowtocreateaLOVforanobject.
1.
Doubleclickonobjectindesignertoviewitsproperties.
2.
ClickonPropertiesTab
3.
ClickonAssociateaListofValuescheckbox.
4.
SelectotherLOVoptionsbasedonrequirement.
WhenfirstLOViscreateditisstoredin.LOVfilenameatuniversesubfolderonthesystemfilesystem.
Thedefaultlocationis
C:\DocumentsandSettings\<UserName>\ApplicationData\BusinessObjects\BusinessObjects
12.0\Universes\@<ServerName>\<UniverseName>
LOVOptions
ListName
ItsthenameofLOVfilebywhichitwillstoredonlocalfilesystem.Usercanoverridethedefaultname
andcanenterhisownLOVname.Maximumcharacterlimitis8.
AllowUserstoEditListofValues
Whencheckedthisoptionallowsreportuserstoeditthelistofvaluesofanobjects.Thepurposeofalistof
valuesisusuallytolimitthesetofavailablevaluestoauser.Iftheycaneditalist,younolongerhave
controloverthevaluestheychoose.Normally,ifyouarenotusingapersonaldatafileasalistofvalues
source,youclearthisoptiontoensurethatusersdonoteditlistsofvalues.
AutomaticRefreshbeforeUse
WhenselectedthisoptionLOVwillberefreshedeachtimesitisreferredandusedinreport.Youshould
choosethisoptiononlyifcontentsofunderlyingcolumnarefrequentlychanging.Thisoptionsshouldbe
useverycarefullyafterevaluation.IfthisoptionisnotselectedLOVisrefreshedfirstwhentheobjectsis
usedinausersession.
HierarchicalDisplay
SelecttheHierarchicalDisplaypropertytodisplaythecascadinglistofvaluesasahierarchyinWeb
Intelligence.
ExportwithUniverse
WhenthisoptionisselectedLOVfileassociatedwithobjectisexportedtouniverseCMSandgetsstored
asXMLonCMS
ViewingtheLOVofanobject
ToviewtheLOVofanobjectsclickondisplaybuttononpropertiestabofanobject
ModifyingtheLOVofanobject
YoucanremovethevaluesfromLOVofanobjectbyapplyingafilteroraddvaluestoLOVbyaddinga
column.
ApplyconditiononLOV
ToapplyconditiononLOV
1.
ClickonEditbuttononobjectseditpropertiestab
2.
ThedesignerquerypanelwillappearshowingdefaultobjectofaLOV
3.
Dragdroptheconditionobjectinconditionpaneandspecifytheappropriatecondition.
4.
YoucanalsoviewtheSQLoftheLOVquerybyclickonSQLiconontoolbar.
5.
RunthequerytotestthevaluesafterapplyingconditiononLOV
ViewandEditLOVofcompleteuniverse
YoucanalsoviewalltheobjectwhichhasLOVassociatedwiththemandeditthem.
1.
ClickonTools>ListofValues>Edit
2.
Listofvaluesdialogwillappear
3.
SelecttheLOVobjectsandclickonEditifyouwanttoeditaLOV.
1.
InadditiontoqueryyoucanalsodefineLOVforanobjectusingpersonaldatafilelikeCSVand
valuesfromthisfilecanalsobeusedasLOVforanobject.Todoso.
2.
ClickonPersonalDataandprovidethedetailsonPersonaldataLOVdialogbox.
CascadingLOV
CascadingLOVisaLOVassociatedwithhierarchyofanobjectintheuniverse.CascadingLOViscreated,
andifanyoftheobjectisusedaspromptfilterinreportquery,userhastoanswerseriesofvaluesfrom
cascadingLOV.
HowtocreateCascadingLOV
1.
ClickonTools>ListofValues>CreateCascadingLOV.
1.
Addtheobjectandrearrangethemasperyourhierarchy
2.
ClickongenerateLOVs
3.
ClickOK.
Nowifyouuseanyoftheobjectsaspromptinquery.ItwillpromptthehierarchicalLOVtouser.
Before we start:
I assume that you are familiar with BO universe designer and BO web
inelegance. If you need to go through universe or Webi rich client
tutorial please use the following links:
Universe Tutorial:
Universe Parameters
Syntax:
@prompt ('prompt text (1)', 'type (2)', 'list of values(3)', 'mono/multi(4)', 'free/constrained(5)')
Parameters:
Para
m
Description
Mandator
y
Values
Yes
N/A
Yes
No
No
No
A: alphanumeric
C: string
D: Date
N: Number
U: Unicode
Object defined to retrieve
list of values
Mono: user can select
one value only
Multi: user can select
Multi Values
Free: user can type his
own value
Constrained: user must
select from list of values.
Filter: you can use this function to prompt the user for a value that will use in filtering the retrieved
[Click here for more information about conditions & Predefined filters in BO]
data.
Where clause: when you create an object you can use this function in the where clause.
Select clause: you can use this function even in the select clause see examples.
Derived table: you can use this function in your derived table query. [Click here for more information
about how to use prompt with derived tables]
You can use the same prompt in more than one place; just make sure that the prompt text exactly
the same when you use it with other universe objects.
You can use data conversion function to convert the prompt returned value before using it. For
example if the prompt return "Jan09" and you want to compare it with a Date column in database
you have to convert it before using it. In our case we will use to_date (@prompt(,,,,,),'MONYY').
If your prompt will return multi value use IN operation instead of equal (=)
Note that not all users having permission to view list of values while they trying to run or refresh the
report by default. The administrator should grant this permission to this user.
If you will use the free mode (user can type what he want) you should give a hint in the prompt text
message about the data format expected. For example if the user should enter month in format
(MON YY) then the prompt message should be descriptive like "Please enter month like Jan 09".
Where:
@select(Dimensions/As of Date) = @prompt ('Enter As of Date:', 'D', ['Dimensions/As of Date'],
mono, constrained)
Notes:
Red single quote places. It will give you error message "Parse failed: invalid definition UNV0023"
We need to create a new condition that will prompt user to select cities that he wants to display revenue
data
Create a new condition with the specification below [Insert --> Condition]
Description: Prompt user to select one or multiple cities to filter data according to
Where:
@select(Dimensions/City) IN @prompt ('Select one or more cities from the list:', 'C',
['Dimensions/City'], Multi, constrained)
Notes:
We used Multi key word instead of mono this time this to indicate that the prompt will return one or
more values.
Note also we used the IN operator instead of equal. This is because the return value is a collection
of values not one single value as the previous example.
Where:
@select(Dimensions/City) = @prompt ('Type a City name:', 'C', ['Dimensions/City'], mono, free)
Notes:
Note that we have used free key word instead of constrained. This will give the user the flexibility to
type the city name directly without need to select form list of values.
Note that if the user type Paris while the stored value in @select(Dimensions/City) is PARIS then
the query will return no data. To solve this issue you can use the Upper or lower function that will
return the given string in upper case format or lower case format.
UPPER(@select(Dimensions/City)) = UPPER(@prompt ('Type a City name:', 'C',
['Dimensions/City'], mono, free))
If you want the user to type multiple cities use this form
@select(Dimensions/City) IN @prompt ('Type Cities name:', 'C', ['Dimensions/City'], Multi,
free)
Please note that user will enter values comma separated without space Like:
(Paris,London,Roma,Cairo)
Where:
@select(Dimensions/As of Date) Between @prompt ('From Date:', 'D', ['Dimensions/As of Date'],
mono, constrained) AND @prompt ('To Date:', 'D', ['Dimensions/As of Date'], mono, constrained)
Prerequisites:
Create a new Dimension with the specification below [Insert --> Dimension]
Select:
Decode(@prompt ('Select Language:', 'C', ['Dimensions/Language'], mono, constrained),
'EN', @select(Dimensions/Segment English Description),
'FR', @select(Dimensions/Segment France Description),
PromptinSAPBusinessObjectsWEBIReport
Introduction:
Thereis2typesoffiltersthatyoucanuseincreatequeryinyourWebireport.
StaticFilters:Doesn'tneedanyinteractionfromtheenduser.thecriteriaorfiltervaluesareimpeded
insidethefilterandwillsubmitteddirectlytothedatabase.Staticfilteriseithercreatedintheuniverseand
youcanjustdragandusethem.Theywillappearslikeayellowcone.Youcanalsocreateyourownstatic
filtersbydragginganobjectandsetyoufiltervaluestoconstantorselectfromlistofvalues.Again,when
yourefreshdatafroyourreportitwillnotasktheendusertoenteranyvaluesasthefiltervaluesalready
defined.
DynamicFilters:[Alsoknownasprompt]Itwillpromptorasktheendusertoenterorselectfiltervalues
beforesubmittingthequerytothedatabase.Youcancreateyourpromptintheuniversedesignerandmake
itavailableandreadyforuseoryoucandoitonthereportdevelopmenttime.Formoreinformationabout
howtocreatepromptinuniverseclickhere.
Tocreateapromptininfovieworrichclientdataqueryjustdragtheobjectthatyouwanttouseitasa
promptletsayRegionorProductforexample.Thenselecttherequiredoperator,letssayEqualtoor
greaterthan.AfterthatyouneedtoselectPromptinthefiltervalue.
Thefollowingwindowwilldisplayedtosetthepromptthefollowingpromptoptions:
PromptText:Enterthetextthatwillbedisplayedfortheendusertoaskhimtoenterorselectvalue.
PromptProperties:
Promptwithlistofvalues:Willdisplayalistofvaluesfortheselectedobjecttotheenduser.theenduser
willbeabletoselectoneormultiplevalueinsteadofenteringthemmanually.
KeepLastValueselected:Willkeepthelastvalueenteredbytheenduserselected.
Selectonlyfromlist:enduserwillnotbeabletoenteranydatamanuallyandhewilljustforcedtoselect
fromthelistofvalues.ofcoursethisoptionwillbeenabledonlyofweselectedthepromptwithlistof
valuesoption.
Optionalprompt:Ifthisoptionisselectedtheendusewillbeabletoskipthisprompt.thevaluewillbe
consideredonlyiftheenduserselectedavalueforthisprompt.
SetDefaultValues:YoucanenterDefaultvalueshere.
Best Practice:
Asyoucancreatestaticanddynamicfilterintheuniverseyouneedtodifferentiatebetweenthem.we
usedtowrite[Filter]besidethestaticfilternamelike:LastYear[Filter].andweusethe?attheendof
filternameifitisadynamicone[Prompt]like:EnterYear?
Chooseaclearpromptmessage
Ifyouwillusethepromptwithlistofvaluesoptionthenyouhavetooptimizeitfromtheuniverseto
insuretheperformance
Overview:
DerivedtableisoneofthefeaturesprovidebySAPbusinessobjectsuniversedesigner.Itisalogicaltable
createdonthesemanticlayerlevel[Universe]andwillbeexecutedatruntime.Thisisdifferentfrom
physicaltableasphysicaltablestoredataandcanbemanipulatedbyDDLandtransactionalstatement.
WhileinDerivedtableitactslikedatabaseview.
HowtocreateandimplementDerivedtables:
Openuniversedesignerandrightclickonanyemptyspaceintherightban(physicallayer)ORgo
toinsertmenuandselectderivedtable
Typeapropernameforyourderivedtable.
WritetheSQLselectstatementthatwillbeusedtodefineyourderivedtablein:EnterSQL
ExpressionArea
YoucanuseTable&Columnspanelinthebottomleftcornertomakeiteasierforyouwhen
selectingtherequiredcolumninyourderivedtabledefinition.
Youcanselectaderivedtablefromderivedtablepaneltocreateanestedderivedtable.
Youcanselecttherequiredoperatorfromtheoperatorpanelinyourcalculatedfields.
ChecksyntaxofyourderivedtabledefinitionandresolveSQLerrorsifany.
Clickoktocompleteyourderivedtable.
Nowyouwillbeabletoseeyourderivedtableinthephysicallayerandyoucanstartuseitasa
normaltable(Join,Createobjects,etc)
If you have one big lookup table and you want to create
specific mini lookups.
Use nested derived tables when you have very complex business
logic. This will make your universe more readable and
understandable by other developers.
Derived table:
Thebuiltin@VariablesforXI3.1areBOUSER,DBUSER,DBPASS,DOCNAME,DPNAME,DPTYPE,
UNVNAME,andUNVID.Tousethem,placetheminsideofsinglequotesasaparametertothe@Variable
function.Itisimportanttonotethat@Variableisauniversefunction(alongwith@Prompt,@Select,
@Where,etc.)tobeusedintheUniverseDesignTool(Designer),notareportlevelfunctiontobeused
withinWebIntelligence.
Icreatedsomeobjectsinauniversetodemonstrateeach@Variable.TheirvaluescanbeseenintheWeb
Intelligencereportbelow.Oneminorlessonlearnedduringthecreationofthisblogpost:Ihadoriginally
namedtheWebIntelligencedocumentUsing@Variables,butthiswreakedhavocwithSQLgeneration
becauseIwasalsousing@Variable('DOCNAME')intheEND_SQLoftheuniverse.Aminor
recursionproblem,apparently.ThatiswhythesampleWebIntelligencedocumentisinsteadnamedUsing
ATVariables.
The@Variable('BOUSER')returnsthenameoftheInfoViewuserrunningqueriesinthedocument,
whichinthisexampleisDMarks.PriortoXIRelease2,therewasa@Variable('BOPASS'),butithas
beendepreciatedforsecurityreasons.SimilartoBOUSER/BOPASS,@Variable('DBUSER')and
@Variable('DBPASS')returntheusernameandpasswordonlyiftheuserhasdatabasecredentials
enabledintheiruserprofileintheCMC.Ifthedatabaseusername/passwordisdefinedbyauniverse
connection,these@Variableswillbeblank.
@Variablecanalsobeusedtoreturninformationaboutthecurrentreport.The
@Variable('DOCNAME')isthesavednameofthereport.The@Variable('DPNAME')returnsthe
nameofthedataprovider,asdefinedintheQuerypropertiesintheWebIntelligenceEditQuerypanel.In
thescreenshotbelow,IhaverenamedthedefaultQuery1toMyDataProvider.
The@Variable('DPTYPE')describesthedataprovidertype.Iwasunabletofindanenumeratedlist
inthedocumentation,butastandarduniverseonarelationaldatabasehasan
@Variable('DPTYPE')valueofDPUNIVERS.Icanonlyspeculatethatuniversesconstructedfrom
storedproceduresorOLAPcubesprobablyhavedifferentvalues.
The@Variable('UNVNAME')returnsthenameoftheuniverseasdefinedontheParameterstabofthe
UniverseProperties.IlamentedthatXIR2didnothaveavariable(atleastnotdocumented)toidentifythe
universe,soitsawelcomeaddition.Inmyexample,thenameoftheuniverseisDashboard.
The@Variable('UNVID')isanewvariableinXI3.1.ItreturnstheIDoftheuniverseobject,whichis
listednexttotheCUIDintheCMC.TheuniverseinthisexamplehasanIDof1303.
BeginningwithXI3.1SP2,universedesignerscanusetwonewlocale
variables.@Variable('PREFERRED_VIEWING_LOCALE')istheusersPreferredViewingLocale,
thelocalechosenbytheusertodisplaymetadataanddatainhisreporting
tool.@Variable('DOMINANT_PREFERRED_VIEWING_LOCALE')canbeusedtocategorizeorroll
uppreferredviewinglocales.
SAPBusinessObjectsBusinessIntelligence4.0supportsthefollowingXI3.1@Variables:BOUSER,
DBUSER,DOCNAME,DOMINANT_PREFERRED_VIEWING_LOCALE,DPNAME,DPTYPE,
PREFERRED_VIEWING_LOCALE,UNVNAME,andUNVID.BI4.0alsoaddsanewvariable
DOCIDandCMCdefineduserattributes.The@VariablefunctionscanbeusedinclassicUNVuniverses
createdbytheUniverseDesignTool(formerlyDesigner)ortheInformationDesignTool.Thesefunctions
aredocumentedintheSAPBusinessObjectsBusinessIntelligence4.0InformationDesignToolUser
GuideontheSAPHelpPortal.
ThelastitemIdliketobringupisntauniverselevel@Variable,butanewWebIntelligencefunctionthat
hasbeensorelymissedandawelcomeadditiontoXI3.x.TheReportName()functionreturnsthename
ofthecurrentreporttabintheWebIntelligencedocument.Iveoftenwantedtousethenameonthereport
tabinthereporttitleandnowIcan.SAPlikedthisnewfunctionsomuchthatitisusedforthedefault
reporttitlecellinWebIntelligence4.0.
@VariableshavemanyapplicationsandIhopethisarticlewillhelpyoutakeadvantageoftheminyour
universes.
N: Normal
D: Dormant
I: In Active
C: Closed
Assumethatthereisbusinessrulethatstatethefollowing:activeaccountsaretheaccountswhichisnormal
ordormant.
Thebestpracticeistocreateapredefinedfilter(Activeaccounts)whichwillfilteronlynormaland
dormantaccountsasperthedefinition.thisfilterwillbeavailableinthebusinessmodelandtheenduser
caneasilyselectthisfilterinhis/herreportoranalysistonarrowthereportresultstoonlyactiveaccounts.
Asabestpractice,youshoulddefineallyourbusinessrulesduringbusinessrequirementsgathering
session.thenyouneedyoudataanalysttotranslateitinatechnicalITform(usuallySQLcondition).Then
youneedtocreatethecorrespondingconditions(Predefinedfilters)inthebusinessmodelatBOuniverse
designer.
Firstyouneedtoswitchtoconditionlist,thennavigatetothefolderthatyouwanttocreateyourcondition
in.thisfoldershouldsomehowrelatedtoyourcondition.forexampleifyouhaveaproductclass(folder)
andyouwanttocreateaconditiontofilteronelectronicproductslikeTVs,Radiosetc.thentheproduct
folderisthebestplacetocreatethatcondition.clickontheconditionicon(yellowcone)andthenfollow
thestepsinthefollowingsectiontodefineyourcondition
ConditionName:thisnameshouldbedescriptiveandinbusinessterms.Fortheearlieractiveaccount
example.wenamedourfilteractiveaccountbecausethisdescribethebusinessruleclearly.
Conditiondescription:Youshouldwriteadescriptionhereaboutthisfilter,whentouseit.whatyou
expectwhenyouuseit.
Conditionwhere:thisshouldcontainsthetechnicalSQLstatementgeneratedbythedataanalysisforthe
businessrules.youcanusetheformulaeditorformorecomplexconditions.
FormulaEditor:
Mandatory filters:
Youcansiteyourconditiontobeusedasamandatoryfilterinyouruniverseorclassbytickingthe
followingoptionwhilecreatingyourcondition:
Usefilterasmandatoryinquery:
Applyonuniverse:filterwillbeappliedoneveryquerygeneratedusingthisuniverse.
applyonclass:filterwillbeappliedifanyobjectusedfromthecurrentclass.
applyonlistofvalues:filterwillbeappliedonallLOV(listofvalues)generatedforeachobjectinside
thisclass(folder).Pleasenotethatthisoptionavailableonlyafteryouselectapplyonclass
Types of conditions:
filters: it doesnt need any input from the user. it will apply the
criteria impeded inside this condition when dragged to the query
filter.
Prompt: It will ask the end user for his input to apply the filet.
Q. Effect of cardinalities
ThecardinalityofajoindoesnothavearoleintheSQLgeneratedwhenyourunaquery.However,
Designerusescardinalitiestodeterminecontextsandvalidquerypaths.
Acontextisacollectionofjoinswhichprovideavalidquerypath.Youusecontextstoresolvejoin
problemsthatcanreturntoomanyortoofewrowsbecauseofthewaythattablesarelinkedinthetarget
database.ContextsaffecttheSQLgeneratedforaqueryastheyeitherdirecttheendusertotakea
particularjoinpath,orsolveajoinpathproblem:
"Youneedtoverifythatcardinalitiesarecorrectlysetforalljoinsinyourschematoensurethatyouhave
thecorrectcontexts,andthatyouhavevalidjoinpaths."
Settingcardinalitiescanalsohelpyouunderstandhowtablesarerelatedinthedatabase,andtographically
identifypotentialjoinpathproblemsinyourschema.
hemainimpactisthatyouwillnotbeabletousethedetectcontextfunctionality.
Thereareotherminorpoints,butthatisthemostimportant.Itwillnotaffectthewaythatqueriesare
generate
Definingcardinalitieswillgiveyoulotofadvantages:
1.Automaticcontextdetection
2.AvoidingwarningmessagesduringIntegritycheck
3.Confusiontonewusersviewingormodifiingtheuniverse
Soitsalwaysbestpracticetodefinecardinalities.Otherthanthateverythingworksfine.
Equijoinisjoinwhichuses=equaloperatortojointwotables.Generallyequijoinisusedtojoin
primarytableusingprimarykeywithforeigntaleusingforeignkey
Whentwotablesareusedusingequijoinitreturnsallthoserowsfromselectedtablewhichmatchesthe
equalitycondition.
OuterJoin
Outerjoinlinkstwotablesusingajoinoperator.Whentablesarelinkedusingouterjoinstheselectquery
returnsalltherecordswhichmatchesthejoinconditionandreturnsalltherecordsfromonetableeven
thoughdonotmatchthejoincondition.
Therearetwotypesofouterjoin
LeftOuterjoin:Thisouterjoinreturnsalltherecordsfromlefttableevenwhentheydomatchthejoin
condition.
RightOuterjoin:Thisouterjoinreturnsalltherecordsfromrighttableevenwhentheydomatchthejoin
condition.
Youshouldavoidusingouterjoinsasitmaycausequerytorunslower.Outerjoinsshouldbeplacedatthe
endofajoinpathotherwiseitmaybecausesotherqueriestomatchaNULLequalityconditionwhich
mightgiveanerror.
ThetaJoin
Athetajoinisabetweentypejointhatsjoinstablesbasedonarelationshipotherthanbetweentwo
columns.Itisgenerallyusedtodemonstrateranges.Athetajoincanuseanyoperatorotherthanequality
operator.
Letsseehowtocreateathetajoin
1.
FromInsertmenuclickonjointocreateanewjoin
2.
Selectthetable1whichshouldbejoinedtoanothertableusingbetweenoperator.
3.
Selectthetable2
4.
Nowselectthetwocolumnsfromtabletwowhichshouldrepresenttherange.
5.
SetthecardinalitytoN1
6.
ClickOk
Thisthetajoinsusesbetweenoperatorstojointwotables
ShortcutJoin
Ashortcutjoinisajoinwhichprovidesshorterwaytojointwotablesbyavoidingintermediatetables
betweenjoinpathsoftables.Itisveryhelpfultoimprovetheperformanceofaqueryasitreducesnumber
ofjoinsinaquery.
ShortcutjoinsarealsousefultosolveloopsinaUniverse.
LetstakeanexampleofShortcutjoin.
Shop_facts,Article_lookupandproductpromotionfactsarejoinedthroughArticleid.Nowifwewantto
seeDurationandamountsoldthequerywillhaveunnecessaryjoinofshop_factandArticle_lookuptable
asthereisnojoinbetweenshop_factsandproduct_promotion_fact.
Howeverifwejoinshop_factsandproduct_promotion_fact,itwillcreateacircularloopwhichmight
confuseuniversetodecideonwhichjoinpathtotake.Thiscanbeavoidedbyusingshortcutjoininsteadof
usingnormaljoin.Shortcutjoinisrepresentedbydottedlineindesigner.
SelfRestrictingJoin
Selfrestrictingjoinisnotactuallyajoinbutarestrictiononatable.Generallyitisusedtorestrictthedata
returnedbyatable.
Tocreateaselfrestrictingjoin
1.
ClickonInsertmenuandclickonjointocreatenewjoin
2.
Selectthetableonwhichyouwanttocreateselfrestrictingjoin.
3.
Selectthesametablenamefromtable2comboboxalso.
4.
Selectthecolumnwhichshouldbeusedforselfrestrictingjoin.
5.
Edittheexpressionandputtherestrictioncondition
6.
ClickOK.
Cardinalityofselfrestrictingjoinshouldbesetto1:1otherwiseitgiveserrorwhiledetectingcontexts.
TrytocreateeachtypeofjoininBOuniverseandpracticeitandtestitusingQueryPanel.