On 4 Apr 2007, at 21:49, Josh Goodman wrote:



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.


Hi Josh,
could you give us a couple of concrete examples of the questions that you
want to ask (from the user perspective) eg. in the form of
'give me all genes with uniprot ids but not genbank ids' etc?
This would help us to understand the problem and
perhaps there are other ways of achieving the same functionality.


a.


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>






------------------------------------------------------------------------ -------
Arek Kasprzyk
EMBL-European Bioinformatics Institute.
Wellcome Trust Genome Campus, Hinxton,
Cambridge CB10 1SD, UK.
Tel: +44-(0)1223-494606
Fax: +44-(0)1223-494468
------------------------------------------------------------------------ -------



Reply via email to