I just realized that I hadn't properly thought this through.  The problem with
this approach is that it creates a conflicting set of filter collections.  So if
you wanted to query for records that had a certain GenBank id and a certain
UniProt id you can't do it because the database name filter on each collection
clash.

This specific type of query probably isn't very common but I was hoping to use
this as a general design principle for other dm tables and it would be a problem
there.  Partitioning up things as you mentioned earlier isn't an approach I wish
to take because I would end up with close to 1,000 dm tables for all the data
sets I need to implement.

I'll need to sleep on this some more.

Thanks,
Josh

Josh Goodman wrote:
> Hi Richard,
> 
> Ok I think I've confused myself and probably you by going down the push action
> track.  I think what I want to do can be simplified down to creating one 
> filter
> collection for each dbxref type.  Each collection would contain 2 filters, one
> for the accession and one for the database name.  As you said, I can set the
> defaultValue of the name filter to UniProt, GenBank, or whatever.
> 
> I've done this and it works well.  However, this filter is visible and open to
> user editing.  What I would like to do is hide the database name filter with 
> the
> default value.  Something along the lines of turning it into an html input
> element of type 'hidden' with my default value.  I thought this could be
> accomplished by setting the hidden or hideDisplay properties of this filter 
> but
> that doesn't work.  Enabling hidden just removes it completely from the
> interface and also removes its constraint from the query.  Enabling 
> hideDisplay
> doesn't seem to do anything.
> 
> Can you tell me what the hidden and hideDisplay properties are supposed to do
> and whether I can use them to accomplish what I describe above?
> 
> Thanks,
> Josh
> 
> Richard Holland wrote:
>> Hi Josh.
>>
>> What you seem to be attempting is to always force your database name
>> filter to be turned on in MartView, and to give it a default unchangeable
>> value of UniProt. You then want to make this filter invisble so that the
>> user cannot see or change it, but it remains in force for all queries and
>> cannot be turned off. This in effect causes your other filter, the
>> accession filter, to only ever search for UniProt accessions and ignore
>> all others.
>>
>> Whilst it is possible to specify default filters and assign default values
>> to them so that they are always turned on when a user starts a new query,
>> it is currently not possible to prevent the user from subsequently
>> deselecting them or from changing the filter value.
>>
>> Push actions wouldn't be much help here. They are intended for controlling
>> multiple drop-downs where legal values in one drop down depend on what
>> value has been selected in another.
>>
>> The always-on filter idea is already on our list of things to implement in
>> future.
>>
>> What you could do instead for now is to divide up (partition) your
>> dimension table so that it becomes several separate dimension tables, each
>> one containing accessions from only one database type. You could then hide
>> all attributes and filters from the dimensions relating to database types
>> that you don't want the user to see, leaving only those from the UniProt
>> dimension visible. This would achieve the effect you are looking for by
>> effectively removing the need for a database type filter altogether.
>>
>> If you haven't done so yet, have a look at the MartBuilder tool to see if
>> it can help you with your dataset design. It allows things like the
>> partitioning described above to be implemented really easily, and
>> automatically generates all the SQL you need to create the dataset tables.
>> It's part of the martj package, which you can download from the same web
>> pages and CVS servers as biomart-perl.
>>
>> cheers,
>> Richard
>>
>> On Tue, April 3, 2007 9:30 pm, Josh Goodman wrote:
>>> I am running into some problems while trying to implement push actions and
>>> I am
>>> not sure that they are the appropriate way to accomplish my end goal so
>>> let me
>>> describe what I'm trying to do first.
>>>
>>> I have a dimension table that holds database cross references for various
>>> databases.  Each row in this table has the accession number and the
>>> database
>>> name as columns.  The main table is in a 1:M relationship with the
>>> dbxref_dm table.
>>>
>>> What I would like to do is setup a simple text field filter that queries a
>>> subset of this data e.g. only GenBank accessions.  What I'm trying not to
>>> do is
>>> have a drop down list of database names and a text field for the
>>> accession.
>>>
>>> I started out by making two filters, one a drop down list of database
>>> names and
>>> the other a simple text input box that filters on the accession column of
>>> the
>>> dbxref table.  Then I tried to place a push action on the text input
>>> filter so
>>> that when it is enabled, the database filter is automatically set to
>>> whatever
>>> database name I want for the input box.  For example, if I have a text box
>>> for
>>> UniProt accessions it would set the database filter to UniProt when
>>> enabled.  I
>>> tried this both via the Mart Editor gui and straight XML (see below) and
>>> both
>>> failed.  Once this was working I was going to try to hide the database
>>> name
>>> filter so end users only saw the UniProt input box in the MartView.
>>>
>>> Any help is greatly appreciated.
>>>
>>> Thanks,
>>> Josh
>>>
>>>
>>> <FilterGroup displayName="dbxref" internalName="dbxref">
>>>             <FilterCollection displayName="Database" internalName="db">
>>>                 <FilterDescription displayName="Database"
>>> displayType="list"
>>> field="db"
>>>                     internalName="db_filter" key="id_key"
>>> legal_qualifiers="="
>>> qualifier="=" style="menu"
>>>                     tableConstraint="dbxref__dm" type="list">
>>>                     <Option displayName="GenBank" internalName="GB"
>>> isSelectable="true" value="GB" />
>>>                     <Option displayName="UniProt" internalName="uniprot"
>>> isSelectable="true" value="UniProt" />
>>>                 </FilterDescription>
>>>             </FilterCollection>
>>>             <FilterCollection displayName="UniProt"
>>> internalName="uniprot_acc">
>>>                 <FilterDescription displayName="UniProt"
>>> displayType="text"
>>> field="accession"
>>>                     internalName="accession_filter" key="id_key"
>>> legal_qualifiers="=,like" qualifier="like"
>>>                     tableConstraint="dbxref__dm" type="text">
>>>                     <PushAction internalName="dbxref_db_push"
>>> ref="db_filter">
>>>                         <Option displayName="UniProt"
>>> internalName="uniprot"
>>> isSelectable="true" value="uniprot" />
>>>                     </PushAction>
>>>                 </FilterDescription>
>>>             </FilterCollection>
>>>         </FilterGroup>
>>>
>>
> 

Reply via email to