\m f Courier-New \m l Courier-New N:1000000 Fact.industry:`home`office`military N _draw 3 Fact.color:`red`blue`green`yellow`orange`purple N _draw 6 Fact.size:`tiny`small`medium`large`gigundo N _draw 5 Fact.city:t N _draw#t:`NY`LA`London`York`Bristol`Rome`Milan`Florence`Paris`Lyons Fact.country:(.+(t;`US`US`UK`UK`UK`Italy`Italy`Italy`France`France))Fact.city Fact.year:1995 1996 1997 1998 1999 2000 N _draw 6 Fact.month:N _draw 12 Fact.day:N _draw 30 Fact.v1:N _draw 1000 Fact.v2:1.*N _draw 1000 nub:{.+(x;{{x@0;ky x;(~y=I X)&x>0;kx[x]y]} nx:{(x,*|x)1+x?y} kx:{ Q[I X,Y]:(H[X;I X;-2+(!Z)?y];H[Y;I Y;-1+x]) if[I[X,Y]~i:(nx[!H X]I X;nx[!H Y]I Y);Detail::1] I[X,Y]:i } ky:{ Q[I Y]:H[Y;I Y;-1+x] if[I[Y]~i:nx[!H Y]I Y;Detail::1] I[Y]:i } Start:"H::;Detail:0" Pivot:"@[_d;`X`Y;:;Y,X];" Slices..d:".+(!H;(#!H)#,\"Slice..a:_i\")" Xs:@[H;_n;:[;"if[~_i=Y;X:_i]"]] Ys:@[H;_n;:[;"if[~_i=X;Y:_i]"]] Fs:@[_n;!T;:[;"F:_i"]] Ms:@[_n;(!Fact)_dvl,/!:'H[];:[;"M:_i"]] Start..c:Pivot..c:Slices..c:Ms..c:Fs..c:Xs..c:Ys..c:`button Detail:0 Detail..c:`check query:{[d;i;q;x;y;f;m]select[d;f;m],where[q],,group[i;x]y} select:{[d;f;m]("select ",:[d;"*";($f),"(",($m),")"];"from Fact")} where:{[q]:[0=#!q;();@[" and ",/:($!q){x,"=",value y}'q[];0;"where ",5_]]} value:{:[4=4:x;"'",($x),"'";$x]} group:{[i;x;y]"group by ",($i x),",",$i y} Query..d:".k.query[Detail;.k.I;.k.Q;.k.X;.k.Y;.k.F].k.M" Query..e:0 Slice..d:"sliced/[.+(!H;{.+(!x;x[];slicea[])}'H[]);!Q;Q[]]" Slice..t:"if[`X _in _i;Q:slice[Q]Slice]" Slice..c:`form Slice..a..d:"*((!.k.H)_dvl .k.X,.k.Y),!.k.H" slicea:{.+(`e`k`X`bg;(0;".k.c[]";();.k.bgc))} sliced:{.[x;((!x)(y _in'!:'x[])?1;~y;`X);:;z]} c:{@[~_v;`X;:;(d;0#d)(d:_v ._i)~(~_v)`X];.[_v;();::];} bgc:{(;606060)(_v ._i)_in(),(~_v)`X} slice:{[q;s]{x _di(!x)@&0=#:'x[]}q{@[x;!y;:;y[.;`X]]}/s[]} .k..a:(`Start`Slices`Pivot`Fs`Ms`Xs`Ys`Detail;`Z;`Slice`Query) `show$`.k