+sub _filter_on_data {
+ my ( $self, $name, @vals ) = @_;
+
+ my $path = $self->session('path');
+
+ if ( ! defined $loaded->{$path}->{stats}->{ $name } ) {
+ warn "filter $name not found in data set";
+ return;
+ }
+
+ $filters->{$name} = [ @vals ];
+ warn "_filter_on_data $name ", $#vals + 1, " values on $path\n";
+
+ my $filter_hash;
+ $filter_hash->{$_}++ foreach @vals;
+
+ #warn "# filter_hash ",dump( $filter_hash );
+
+ my $items = $self->_loaded('data')->{items};
+
+ my $include_missing = defined $filter_hash->{_missing};
+ my $filtered_items;
+
+ foreach my $i ( 0 .. $#$items ) {
+
+ if ( defined $items->[$i]->{$name} ) {
+ foreach my $v ( @{ $items->[$i]->{$name} } ) {
+ if ( defined $filter_hash->{ $v } ) {
+ $filtered_items->{$i}++;
+ }
+ }
+ } elsif ( $include_missing ) {
+ $filtered_items->{$i}++;
+ }
+ }
+
+ #warn "# filter $name ",dump($filtered_items);
+
+ $loaded->{$path}->{filters}->{$name} = $filtered_items;
+ warn "generated ", scalar keys %$filtered_items, " filtered items\n";
+}