From a8c97c7d5753c543cd7af9248b613d872eeea608 Mon Sep 17 00:00:00 2001 From: 2963397260 <2963397260@qq.com> Date: Wed, 15 May 2024 13:02:36 +0000 Subject: [PATCH] GITBOOK-11: No subject --- .gitbook/assets/image (12).png | Bin 0 -> 29900 bytes SUMMARY.md | 22 ++- ji-chu-zhi-shi.md => ji-chu-zhi-shi/README.md | 0 ji-chu-zhi-shi/bian-ji-shu-ju-ji.md | 2 + .../tu-biao-ding-zhi-hua-pei-zhi.md | 2 + ji-chu-zhi-shi/tu-biao-shu-ju/README.md | 2 + .../tu-biao-shu-ju}/gao-ji-fen-xi.md | 12 +- .../shi-jian-fan-wei-pei-zhi.md | 0 ji-chu-zhi-shi/yong-hu-yu-quan-xian.md | 2 + ...n.md => jian-shao-sql-qian-tao-cha-xun.md} | 0 ...yong-jinja-cao-zuo-tu-biao-de-ju-he-lie.md | 111 +++++++++++++++ ...-tu-biao-de-zi-ding-yi-sql-shai-xuan-qi.md | 109 +++++++++++++++ .../shi-yong-jinja-jian-suo-guo-lv-qi-zhi.md | 124 +++++++++++++++++ ...i-sql-lab-zhong-shi-yong-mo-ban-can-shu.md | 9 ++ jin-jie-yong-fa/shu-ju-zuan-qu/README.md | 2 + .../wei-du-de-xiang-xia-zuan-qu.md | 2 + .../zuan-qu-tu-biao-xiang-xi-shu-ju.md | 2 + .../yi-biao-ban-guo-lv-qi/README.md | 2 + .../yi-biao-ban-guo-lv-qi/fu-zi-guo-lv-qi.md | 2 + .../guo-lv-qi-lei-xing.md | 130 ++++++++++++++++++ .../guo-lv-qi-pei-zhi.md | 2 + .../guo-lv-qi-ying-yong-fan-wei.md | 2 + .../yi-biao-ban-guo-lv-qi/jiao-cha-guo-lv.md | 2 + .../yi-biao-ban-guo-lv-qi/yu-guo-lv-shu-ju.md | 5 + zhun-bei-kai-shi/huan-jing-da-jian/README.md | 84 +++++------ 25 files changed, 581 insertions(+), 49 deletions(-) create mode 100644 .gitbook/assets/image (12).png rename ji-chu-zhi-shi.md => ji-chu-zhi-shi/README.md (100%) create mode 100644 ji-chu-zhi-shi/bian-ji-shu-ju-ji.md create mode 100644 ji-chu-zhi-shi/tu-biao-ding-zhi-hua-pei-zhi.md create mode 100644 ji-chu-zhi-shi/tu-biao-shu-ju/README.md rename {jin-jie-yong-fa => ji-chu-zhi-shi/tu-biao-shu-ju}/gao-ji-fen-xi.md (69%) rename jin-jie-yong-fa/ri-qi-fan-wei-de-pei-zhi.md => ji-chu-zhi-shi/tu-biao-shu-ju/shi-jian-fan-wei-pei-zhi.md (100%) create mode 100644 ji-chu-zhi-shi/yong-hu-yu-quan-xian.md rename jin-jie-yong-fa/{shi-yong-with-yu-ju-jian-hua-cha-xun.md => jian-shao-sql-qian-tao-cha-xun.md} (100%) create mode 100644 jin-jie-yong-fa/shu-ju-zuan-qu/README.md create mode 100644 jin-jie-yong-fa/shu-ju-zuan-qu/wei-du-de-xiang-xia-zuan-qu.md create mode 100644 jin-jie-yong-fa/shu-ju-zuan-qu/zuan-qu-tu-biao-xiang-xi-shu-ju.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/README.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/fu-zi-guo-lv-qi.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-lei-xing.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-pei-zhi.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-ying-yong-fan-wei.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/jiao-cha-guo-lv.md create mode 100644 jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/yu-guo-lv-shu-ju.md diff --git a/.gitbook/assets/image (12).png b/.gitbook/assets/image (12).png new file mode 100644 index 0000000000000000000000000000000000000000..7c28107ed6c7127399565e7b9ffa9a4fd0aeda3f GIT binary patch literal 29900 zcmeEubx<7Nza{n!kdR=(Ed)z~2X_eW!ELY*Ea(7(O9<{E1lQn}0fG%~gA*VSGH8Gy zxCD3ECXnBI`)YS<|Jd4kTl8~RcCr|Z{~1jLyi~Y{<4ME*2!z_=6F3l2(IFNi@l|<_nQx&qY`rb zIiBG2m;QRf7f~WN&U^En{~-nobW=|t7dz?g^-=ZM1Z)@7>#x*`aeZWophnnuX+N+= zV>G!wK4a;E3{0IK-Iiyi+KQaah?h+Hb8nJ3Ga4~MJBhOA&%Lb}lZ5548q3A^H}^6Q zhrjKtCSt_At)29n5|;*IUF}V!+7E7r5&Fyi)EIZLz_?6CM#r3ZB=polks%e&;)rI z!_9p02`q-Ci5B9h!LZOf7YVEe39i3?HsxmQP1Fx*wF}lBWKX(mm%!a-mfv)YcVOfv zw??ox>xQk9G;as}K3BKUeDVw3H>lf;3=0=88$A;(_vWW|=GsCED9#7d`If4DBCF;9xl0hyU87vz}}z&6%e)o!M6_$UFlE4i!tXDpFuO~!k2z+ z0&foIZh5)uJR>j?Yre+z6O>kmvb(RaoEIVM!86&Qy^$K!46)-JpRT-0JB}ZiHb7{D zN1<1~TN-yQ`3P4i{Oi{%l|^6{5D^6qa9k0ga*#Pr>&Nz|N=mA$NMdOnQ!V14IOXHK z(2|j-6M0_}+b8UHF!GH+bmTJ(T@RxDisJf}Nj{7`4YTnD|LW%i(R+~Q@%3c*T?nmK zR{LpDl*)s`q(CF(oT!BSNv$2YVjyhNSF9RL!Y4^D?{-%Ye&unscN`thsd9mq*IPfC z$?A{tR%DFkiqyEtO1p}3%*b@%)$cy(lR z`ug;qacO$;hxSL{&*zy}uNnp@`!GCTh$Hr11qHb0`oFAJ4p5c~{nQl&0zvjvJQ+;e zqmI{qd@k7-31$vsHa!9QbuHN@!_tDd+*3L@s z&OYq4;}rFBOf?6X)XMb68}p@^}& z?vhlGz>cv<&5i2q01xs+zkSa3i!qw$BvQ+CD%|GbF8}2(v&cTm4je)43r)tU2s&W= z6hA04&vgIxO#)y0{5$qo#o87cQD&4{G2&@B2tGjaSoH$_aX?Gs2|O_)RAx zk2AO&f-DBJF2&OPyHfbPes7^kcZye-iY)W`TK@F;$iPxz}f|Jt2Fg^EDi>d`A~Xe(YQL6Ql0$aqCrE^+TDE1n6oK zb@w^FCOOG3>bhrRqJR3dh^Nhe7b+j<%k~4OnuLz6t@jYL2wu4F@13eg4X7q6-FXW0OZ*6-T%>Mi*%{s$h;i$7M#<5Kdo4(zyk7Xp{B@h#^FI@9;%YaYlFH zx3BV-#k4aInRZrN+xA@``HQ^ma8qB-i2d5ZhvE!GgHbyGv4@11^p>=be&h2AiHb&ZcGcp_@*d>A!(Cc8OV3|iZ zQpAw5*6ISEo|A!npfOzt>fy|mFQ6=deJE>Y273GsnNNBcKQN*{W4KTm`<^V09gsMf zEIF;gX| zlp1fe?rJdo%6^Jn&L(BsWS^t**+ud22|WHm$#0y!#k@71G@a<;p8<=cd>L&7UBGZk zejE76sN*}|Pw_-($4Wvs5qnt4p!qVwL;lHnpEUVyg!yoVl;Du$8dG+wndcx z1$#Gz;Yw-Jq_|&3oQXQG{Km4}_YsW3fbpI{zRHR7@ZuOWOPI-*@_GEqo{(njc%GE7 zt-%g;sd-ZD(eX`!A*+sNxq>V4eAD6<>j(hLAEL2cldi@fTI=|H};kP04Iy+x1Erslxd4!&r=a+cX0!kNZ=uz}9Srw(feV4oy@ zIqY<)jZZaV1zpn6{DCbRBZo84QW2!OA`wE4#C#FLuA7tb=UnJVs7L9L7(gC3!z_=Wr&DV= zqmC`UbRqT6n-8#{hFRMifGleiVaS_16&c<~6c4gO6&co#Z@%GD6n~X61-Ta35uj{`}eNvu_hyt zMGx&yWUqxqqiykzh@*&J9-Bq162PlgEih_`C&2rl0&BENX<)SG99j%J5ZpP7vcKct zzxgd_K08Gm6ByM(<4^J)>*>lerP(>WU@6bbu;L@+@aMgr9Zw*SA`{;+u|qj(0SL+A z--%ZaV+)=PTyXy(=wUjx@uL!f?dED}iKg)actAk#Yo?MrUQ=;I`r}hTnm9o0&s^5{ z+|X;YdNqtGL(c1PLr-&&6&lgbJ0a&gWAWu3xr2#`gBdX04KP%Mci=8?d|AyFx)|Z- zhEBZ<)&NM9lvv4w4Gs+zOgXfOdV@=IQUt@y7$TUEWZ(73mTAlxnH2%X3_pTFVRRp$=a%mQz3QV zEcBxII#E5^qXGB6@=nIN| zM25pE!neoDe5=^Y^%Lol!@v!|KyXL0f$zmdj<>ziHHxLiu)2~*^ zpXQ8r7n~vcgd>@EI^JZi)p;Flp%=p;Pg{7AVDVoWX&eR@UmbiaIkeN9`ksz`T`krs zDejd>hpCHnWjXk)8)!`%*w>kxM6p8A@u^Nx7$lKEcv zMe9-w)h|uqknU)z)rxNF5^ZL=RC97Rg0CP3XsB=i!-@B%jd4jk{^ht?%;#xG#P2{t z72WMjbFlgQ%`=l{VDqrD*Sd?RhqWz+yTuk9kP?%l8MoQ*q0E)l?uPb2Mvg*V2ISH2 zt_m`JJ>Sk&rJV!Gb=g`^l*dmU-NSg;bKW%9No!24RHEly1YMaDC1hOeP@H1JS$y)K zDi`6qU=g>k%&S*TmXe;3<*i9F&_L?Fo$LrUeHdw-RmUa?!YO!d3$OVCn*PjR(ji^uOc_|iN-XM*XCMf}F=v7i{RY=f zRK+eF78YaYPw$sX!muuE*e^Wkz`d#j2GSlV;(7Iq{ zCIsp6dR(3?6IM>j()hTT=F96QIFrHm1RvQRJMXO572QEQ$CJodd^WH)R)VWQ7tZ_+ zKe0G0@k%bU%2E$B>wC5tbXWmPIC4=HA^Su;%fxvS93thq$>0S(ift4Bxz!oKJ{Q^Zh9UiZMKRak|?ylrM6|hq7ob z2g-kLSQ~!YYKH0CQ34y4eYZ zEOruMkGI6m=W$6a>cG5T_vjPCpCa6v_tN)|7h+VaVeLy4v&S;}Exs2LGsLE2_i=>t zr9ngd3z2Kp*clhyG#9ZHMJxGc(>n-{DtTN{AK#@@WCXi5WX^L@{~IJZf*FloERdEQ z>IU1!N%`vM!}T$}o-_J;@)IbezdgJp6`G%Zs__)sxZkf%A7E*Z_apOS!;;AA4#}Nl zCWt;LfizLsSB z`qlg(J#zC;=fVN%f*)y@@M9V##Zp}FRSNuL8YIRiWb>m`uka3EoSH7S88}@9yf{&0 zkC)+dII%WS5B&-Pt!LEj+J4{<9qNjrAURbtegOONR19tEwG)`AfHAd}er@1;7&AIA z1qn)fR{JRoCzbb_nd*zVkK==<-A9diIs&EuFY-_&_%J|QJbi8IU(YP<|NQCmiWzLj z<(yaf*eFjWq}BJRVOAN7&8^QL1 zj2xfcq~=a6Y{tKgcY*NBV}`=A30_D=OBhxf2(p5&i$sUBx{i-<4!x|~`>0!a z-v2y-Uk-$CW*4k3*iGrI1nFQ?`YIwOy>B;vYnE-8= zi4L`>5;q9;ING}@km2WX!``4!Nh--5TW!4T%xDipbldsG(QKK8`Xse#Lxo;ARR@9G zy#p9q0N~l$r2tV*U*-Y7QnW?fcwMb;Y zcQt!v2{rhVY?Eqky1S?s0DE9VXT{Q6e6FBa_O0AZcL>8;Oe!gvgG8u-T0l1KRb10AOc{?RbhhJQ&h&(-+ z6^^|upvVN_m8-Ge+hf68I@etrt5mZ{OEKR)*Sci+hgq0UK-eKqw3Ofbx7TcmAP-uY z0UHzs_TL-f?Z!gwzY1kF{`JW)2lnN>g9+6Sm?K(>BaP(nO1Htf;c@eU`{Pw%>pTe1 zsHbBOW{fqyj(wU!WwhQT>p*q(*Pv2j&h;NLL`>BpLmFU&TU-vzsp(A%8eyWSpXQ4g zblIH&-Jz_BGtM5RAeg%Rosj$(3GS2o?_3Hm@IU6ye!|m<$K0C!zD=3RFmpV{fPuU7 z+9Lco!Kiz_E0ltU&0RD@xt;;6<%?C&P6y3Z1}4tLclG*vc{nVXdq!Lox%r!P1jGos z;%<~mHYip;Mpe|;N0!JlTaK%?SX93gAJ=$ph0Jl2Cd=C?Y!eShEONnWvU+zT-3x^yG9JGi*Ia#@MeiQ#>`jAI~Gkv@wjG%4V z8xm_tSzP}d_5_NB9=t9$?}0Na+p)_BF+nT;E>FztT>7pmxz_;XHEcjH1#y)J(fInv z>K~j&|AX&kyDqfahWM#+?j< za#Dk#sBV_sMkw=+`;RuxcXICVkLEBx3%LAEfPr_+Vgq@nDM+wBS) zcp_{t3WrAUeD+vp|Hey?uH*uEtdMCKh0v+{1BK%!&`?+Jf`qRx2OQ;9t<4lc@kiyn zmB=I`;S7)>ZlcDhEPb$I(bXqb=;ov&C$cZZ&4qB_ndUUdBpX7KCY%qCl+YanKYm_n z8kQ!Hy5q4w*0rw>O6FWOre__a-lusm*-ELC#6O%E%>cdHbI4TcN7zyKvJZMHdVHCV z=&?TR@p2?k5ags#-1iS5rJa4kB6^n%O?f>c!E+bPVm{tF|>Sr&J_qD z-}cn02^T95brI)DM7%y?{$rnN@)1bEjg8!==jsXfCfki{`NLGwS;33`;;DQh;!J>0>{Z_V0>MzZ)p!BdUe=m-hib9N6QNBlUb;mZ8VeVM3QysR_ds;<+v46h?n>b%{1udXdQk4GJgY$E=9BP2^ulbs{sCdezTK(vTfK(E0LRKfuhW6P z)PZXOXj^q87mZs6}C5;yawMJ-XO(|1(yWY3N1<%EEf}MZ94NcgRNcH-?W&} z^%b7BjC@;4fc~h1f*MuYBQA=&pV*Cztv`dDOf}J9;OSE9tagRt+LeFkGQzi59$3=r z{B@x0GZEIUyI&yjB8?D8y_VvW4xQOHtclCm5MKkf_VQVe@Zl{7TLmLOBdVTd?LT6_h4_Hb|LE@dJ=~BFTJxS zE@wlq&W>|_VszsLI06wS6Y!=y`Yz4y29_72y1Yr(>0?ssD}dx8k=(?C?`%|`5WZi) za~smfm5_ByVB}x`(o>N)a`!fVVf<*H%(>Sg&Ex+7AYEL`)l$OYS-%;OJ7Fxgtfk5# z!`Fm{9Z=HL%QX{HjJN5fzRH%XFYZa|>T3#(e>0>fTzTrR51wiCaDH=oP}R&V&%SvD>nU0kW{($|c(BwxZ_1)z3*9Zp&)T23~_CY7qan zqFG9&?k(>xDS7C9W>pLQM^d#+pkMoYiOR!_gl6Eay3u@PL&jT`A@%1rwSBp{RghPzqz z-*;kVsf)s^-G2Xc0do5Me)bk``c8VP5xN=qrUfDv&-X`FN6ixr6PmA+I4U7m&482ZRQmY9d`U10>G=esXPhPi)h&}Szr4`#1S^TIm!dg510cQPPFC4bCsv))}?_#iqk3z`baRbW6SWyI40aScn#4O9#@Kdt9%=rUBlh;r-Cz<`lDp6sboIbEWlY zzDqkcQ!c;|8LD7Tz|HH(cUlf7ZAJrdMU$ZQYsCsxc)Zx*yHtnC%v>IQF)yDx7Z_nZ zJ;-fVps5Ae6_Ips7a3+?j>`0-R<)(2R0pU%8XjEecVp!#ZN@ZZxfHu(3T(%lB9`Ij zJ@&@;KfQi8g%j@d?g0Q^K1S@)9l|9smF9POLgd!ou^=mUs-|VsuH3E*Vv?Bf07Az8 zJCw)ZP9hymu3WcSAGc2f1hDH|^qxHf*jziJRl1F~J@`JwGq+A1(C!Bg5kTgQ4_#6m z!r~Zumovxm@YNNnFV>&5t5Gg7d84QxLtlih%d7&~=WMkmE%I9Ks(u|>(uYG6iIGT_ zt@Lyn7`|z~S7)<2ixKY{%=;4*_63CjZxtiKbm%OUahnmCx!-ZI=4K6eL(< zmwZ(VoTt2^u!ot_-p4>i9qgpbpK)mfYz_*q@w5hB!Q;suL&Evc`r_)#>lD$j?^$H- zbOn|Ve8g{fa;ZQ!xp8VlI6)l$MSPw; zrn4=}h&Wug##|#Iqv=DpIy@c`S%_&)@mk@9EM*@A;22pN(E=%KJ(dPoGWGblY)SE> zU0$z^*zU@1c=&#G;^vbUJ8r`*PR$$l4HsjZLJG2dQ9%GUms$)wF5cE{7D7{G^3x%* zoY+T8FWwe%_Mh#<_<0Zi&QG=1PpVVkPpC zN;Ql_e@tpQH-OstU!vm|RWQUpTEI3 z>s^`h4R=&Dyn%EISx@>V`kI#=!>D>V5Ur7c`X-EDyPh5@Tp+TPWL8XOiKFOgJ2yWT zXEjbVpkiY5Gz=LeRLNqI^G&2Hs+&R0%r$g{O$&rCwq{J=z{^&_rCT=iu}?z48T>W# zqL|HzMjPbZCe`S-6JgBKn2@ut$1o>jOwIM`m!7ASh-U57+P+7rUp|QbuKvLIyZ7=J zlUNblqX?-$y&)sBg0J437s)>ZL`W@>1!i8m&UodQwoAwfju&#C982-!_A0^nItfEX zLa*vAzNWl!ChA{>?XZwsRy0mKTA?Q#M|IS|q63OYfwg``1hvUmqn5>hK<8PMP^EIl z4(;H1Qc!}ZN$aDbUG^8@S$&U2HYk5M8`mKwJTiVom2ayo1L~)@2Q=bQvC6Nu!mHdTd6A=bn)A#-$!oZx6M{#32B;)T zBB-tlZ-ULdW^KJD1tJ?X3_#t=HmVXFA>Vu@)|Ds(=rL5df#E1ZaiOyRPsSjYv8kxnnH=WBk45-!BR7@d% zjd?$S?)|JLkadd^s{py$uDkaW5TLG)EFJ(0+h{)ci$FK80XW#{$t}jT0s!hHc|7`G zbSngmI@dJ7ICOLSf2K!^mvuq_W^fgNLf-AvK@&}0Zr8|DaJ{rrCN^#K#xt3uhE|QN z_dePE=oS8L>1!&)U2d~8lo`AR*H|@lpAW+RRDCU=-Dqe%2XW3W2S5irPYQ$q0tBni zs-khRMgD+F;_g{HN%Q**&$XiBV=QKCL!X1OVij{{vE5(p-z|KX!?{}^9w}Zs{nz#` z!wded`(hL~rLNMx92r&#wIO`PI;-H=vKwEf*Cq30&r5Rm>D| z9T%0Dad%Idav5lz?dmwf-ZTqgXdl1Hag;Fqe*)S=(tvPvWW-kwgSI$+8<`T9-3ePm zLOQr`svX@@=I1jIL#eX?d$A(hyiVBf`k}GlijY5}K->>&UjfAMZahh1S@~=0bI!-| zytc&owRdR!dV?T^ag6*tYX!sl-kT4GUhGQdrulk%c+q=u`%<^@@5 zopRcVUE&7ej~L$0!m*w6XbQrX=>fkgYvVM##9v0Yc8e8!f0c+5srcp0l+QKh{R1D# ztPNtdj_WNy>p!<=`1#j=R{)*IUlX3{>Jg`b|DNhP`N_h>5M+i9Jir%} ziZV`LsfIA!&nx0rD`$Xyi#m)u<3I{tow|)!+FTXaoGjN~(eIRS!5Qw~Hu*f(#$+|~ zj?nk~N+fyPBioY?j{8F~JPXoFiuqM(EcjGGutAZlPVS=(vBWRX>7`kN~Z{>b{(q-Rm}$F4U{6#n`u#Cy!h&m|k^{WjroUYo*>~eAo61M;jK@`OJYJkUKD-&$#|~(?V&{$w z`O5(Qen;1h#o`+RK-(h?hXxkm6%V%F9eGKMGKj@{7(pVp?akax!M2^L=eg)_IafSA z^1C_;Ktl%8m@?XV(gAu%wel9EvOnK^UVXe1tsfJw#Y_Mx6o(VuUa`&2U^@S8_HOR5*9a zDdRp7>JT8yyk4kU+c4Pbetl37=Cd7lEMN8|IVVM63(1e(15@$5=XaK70d$q!pd-CK zz;@_n0A|Se?|fE&8u}~7wHl$7ePVodVEh$TLm^PYB#i4R*C?{@ONHpqSz`B@%8B~p z(`F81qhhYpXK^jeAlaU+>t5QP#rRQXoO!uJbH$nNjtsln-ml`z* z?oj+-;r&^Dg4bM$tWWBz3d?aoN7%WBTU#ZNcY2Q}Z@utr(ALc4{?)JO{V4l%7`|sb zeUvQeC+m(HhkM;UCgfNHX)qPZoVo`$18N3Xvo~GOU@kWwMF11brfE)H&wrf-THya^ zYj6mFXD%%im?)D+#Lf*B{PsvLll{-${`qTlIr8^AZs7Ji$6u|qGa!7`04yagy7CZ6 zX8HB{T~nKQvFswbFO58e&^Z42d$R9;Qg+!*+Iir2L31eK=dI->;VO5#ysprqG8Q_= z2v?~dU0ynLKY^<6QNM7Cz2$pMNYV5!#>|FySnnBtLaa$bZaAkEPGHH7p%{|Bi5M%4 zz(>BR&b*ri|Nob>dAh|X>C7YNKNhXGI@t?`eq2Hh7D)NdZ=+ki1OSNrUB?^T96Zl9 zYfEMU2B)f!@_%D#rSwEgCqh_e`tVZuo$suUD6%VO0b*{JBwzg7rW{9Xpm zZHI`R(^7%q_^ZVwPz8V$YqOl4zos*;t^Cl2t@`XMNnDYS(SmD*E`ZdpefjL(@;BR` zjRNU_WV_l!7gM@Rry6~2Y6zUG;rX`(JL;V=L-V?*4n-IB&HRp|9o7TqodUU^GlLUA zED688Q`rLS1>jG28IfNF77U?Qhhc0mJ8bTq!iI{#;>RkVv%`SwM@u?J9_9=`0rLWX z>lLsx$p0avu8AhVsHb%j4~I;c64{(JK- ztpmw=d^;%v=QWCl*z2;X5AO2TE|$XC`Sxh+CP^%(80r#-ZYBw%RMsf+F1kfD);B;~ z(_n2&ka8f^Mi~3~yz1)vunBmCQrQ|dzD$~%TMS?oNrB8wwJ8#d6_K8RO{U%7gvvbOW}pkag=0zI&+(@Tt3-x4!?Y zTi?Ht=AX3}NH^b#v%`rV44~i_6RHYx+D&{}MB$DR-tB3(2eq$+G~jTVxDr>Ag^{rY zn@>cr)fZ0AY1T?9HeTBzv{Ee7z+LT(jCm1;1Ul3BBh@wtZ7w7GyH7~Cwo~ovi#+6$ zl9y9jl$^^bi7Ex=+_PZKPMYyusIlI!Zc;0Jv?e?qi!9qWBLiAP#v!zDb+#dKJ%S%X z1>?2TPKrFK<~bU@fa-N`Y(tw%N5n76bREtUY#NqqStA^=2uXvfJqsS?qzRid{2|Eo z62wQP(R8IxGW%y`H$hvV8}){3b(flnf~HsDa78;@!$=Y?LzPevE3r^ZMU;_y1TZl`_PaJL7eXkj~nh#7jg} z88$VX`j;XA|2tYz*6i6j5U;nxkO*>Wb*dP7ozU0)ct1_6A!rX*=ND4J7mI0LG1%NL zp>{7u1zzqw@_xc5J$V*vhSaeP{TFJCV;Z&wkI67*#O?0fA+zw^xhL;bR#^=$QW?8csM7Vv#mgaZ9YgCGbU#TH>gq>vDV|8D=9xAB?q|Z~L65qmr27?0O_8DN zO3lsnL%o_;J02d-J@GUWYrT$*x4jSX>2PBrjwHt&`ui^6LYI&+wtO7@cb^s=5D7(G zc_(VnlC+k-Ez1;5GI$>hM@BTocia1}~7YnBJ}u4}cwU z>z^C~4jIO)vrltrjUAA5gkvF$8CS^WA<9#s_Duo7Kbz?y0a*t!@HV~ih9lXyCRB`4 z8@g`7v)MJF!ezpAOQ?7O8FwXO30iS;and!Rf-~NG%i~Z3kKCxPv$^GQEP!fqqPyBz-|M9UaL9phdpI+8L*dDujb*+W{J9=SqAN4YX@6K)stfvsxGbKYi#b95C?Jk(@iL;$Tr=Rnp_K7fTY@Rp*|L)e zYZ})F^Z9IfDd*jW%S{qt5rIY!3HqU7Nh6Tj^?%(42Dv)?VoC!W}KD7`AzO~gTmF^sZ#N5(2Ova{NMFx8ys&21WT zZ+mq{*8!tmicBV)cP*uK^QM1>(b1FzO~Ie7Tjk#t^-d1nTrTpcwK+|Y3;X`+;+O5g zbfNX6iJ4nUgdFH?ikxEB91?OY+-{6F3j&n#=VB)Vkn|I(-nX^gUOmp?uCUr2eSN!u0U|`Q8wF zD06oXN9dcG^dmr`iQ8&E+j0TCw2Un+Q%VhGkH-*Be6?Nf-ipZj@iahvW#GHmVS$EZ zMKQ5LHNm6#%40Z(K_o`H0Bhe_qW!t}l7|4kaM%#R41mJ)FN9hf(*RA%(i8Ar;XbpZj((o778mi5 zq(|gv+Ig5jRPhwHj)ru$`ku-Cv;kIe4m0bH4ixkKrAXDww5#S>b!}0OE5w}c4cNa! z7N6?!xL=)0-Ub0R)S@U7W>_i~Iw`U1#q3D5c4RWLbsn)Zo2-(3tAP0-c04?J^_7YAUW*sjCd{V?rwO$tkj@3S+$LScH|ibjUw0D-3{W zeD=Qu9hzsoZk_9H-38#8j$$`X+CU)LG@r*Ii;thm8YJsKX+_7?1Z$~`yzGvd-v!>BFtaYY{MGcGXl(NYV#3G5c{q3l*apzIs(p zSz_;4!2WS9-({Yz18jSwD>GK{y>|Dq&7>gp39sCQ5}$uQXK}BCrl#jp=mJK^KV_Cs z^3sI64c2-|Rb(ur0}CkaZ$ID`1}@rDxQ)sGuR<(AxVUHFaP6yIPv}c}3HlpT6ZWq|^v*z97 zB8xU_K*V$YHmLA>9}}b{W!Ygr62{n~_U+S<7GiGpT>3iI9NXDl>>oAV4Xt@@sM&UC znZE;9n^8hZ|{aw^RXQ@a%J8r-lT6AYkq(@lZpD78XOH*5VqxtJzSxCw zWEE=g#<{(=|>nVm^jtiZ}-&aOPkUG<8)ayl=@9((a zZwKe69DaYKz8me<%y7kPkCT-0>46QQ8!49@i0mP0E)wMf?vuWHeEKE#7xz9ZTk#M&E<mNWzko`@Y|Q1lfZ3V@~In1D!R&I;YWGK@Gz@2o?!9~A6_4av@7Ixp-)|@yf(x%FbyXoN zbmL^=p5~<{J{2odjA?{5*L})r@m$iEeIq!tK$q4SOpHkDx!hA50M(VCI5uze2QjxT z@*gb=P=P}@fl63{LB|_1@kJEkyLswC-A1+chCJ`BdXu`(QGw2|3K!G`+}$g;m;N`YdJN zoX5lc$?N=W9Od$$DI6y|@@#of-FDqv@@J0no?qzU(+86()06=;WzpL>MDwH0(j!@H z9wL*r_NJ?Nrh`Et=C7pq!qfVQH|w2tH=>-rED&puK%t_X#!~TlDy|)Uk1jtZdvd{E zT@MaJLImKb$X&zSFk0d#U+c36H9e-E?+JRB-oMY}>L!a$l5}-4uz6=)xu9#Nex4?z2v6GsYi5ci)0DcPP@Ij3t1x%pRvc z0AUjP{>wupQTSpt^)6$JJJ);DQnsZuf506Bh`!Df2 zh1Dg*3l=kt*=L-{)2!di4W;Yu<4r9X`&fCJ=n*zyeV0dzZyFOegxSDjwz@S^ME*XUkv79urT!37bJIS0g zj#_ijbe(X|ye>BNpZM7H0dmc=Cs4-)i(p>$^ztH-7tA?=OI$kVb!JN*0-Jf<{9UYU zJItS_?MJB@@CQbFhwxSVsLmcQBFC5v(eqpsFFq>+RnEr267(TxSe2n;Zy72GdE0q_ zSGC9whk(XR#9y_3p2{M?WN6B79hu@lziS#MDN2qK@_8uB=~+|F{6o=6oW2NFW2FMc z?y7ZlSjpFel>Tyvfr1zJVxFjU-DIebhW^4cGmVVHbxi-`V_No#P9CN&SHi|GK4aHB zS%yWpj~li{^f^YxX2YU6DVXf8Q`vO7n^9aGnptN-kBWBOxp8;!gW#_MVua*R47O{U zoA&X|CC{Lp5KVfaqz4U>9)rAg{drVUn~#B=i7t_E`MAfpj_rFpn}w1FwFH*PbM03dxqCvV#7 zmqO2;nEHcbO%$-VzrOKR?m|wAhq&?SQCqB)U7?NQP2WOm4HXm-agsaAjVw@BK{U4~ zr&$6tU`%qc=8%YrR5BRNvHrF@$BbDvTys-cPLKr}fHiTmKeiPkn4SaR>UrNd=#zix z=D*o>C{Bm!lDEo}-qj=N?s_Pq^W*En)h1=O%7ed#K54X-yQk0XNAdup1{fRu0N4_s!{gWfYNQcq!4{bYh(*`;PQG8XjT+o37oE z)$8+FHWc}+&iYZ$odPMT$ zHhBtWcne5#?pLBSXJ;+SY3#<$!c>f7Q8fg!jUJT`rl$HYosAi>O8qS6L~s5$=zL6k zC;Xz-K(#H&BNbQ13Rh>#)1NGIB~KXp_&#i*Z=rL|U|!Du9y#BU%^&(X&MO196YGZj zi;w5=hpm+??6BNBB9FUwlg^u`wqOw~4X=>@6%C!A z`4)p`GMxY+OYK3Q?!DW)x>-95)kjZto(|!Rh~iVC-b+o$8=@An&CIeF7XE4{Xff-s zFn<wm14{K(KQ8td4lM|=PFqcK^> zTF8bi=W5dp(?4X}upb)1cdH{6P;#eCY$HIi;=W1#0Hc0r75m^{^zNN}aZ-!~;O7he z$ZDhVkHU+iy=b9oN{W?=7}_nQ+TD5l5!T4RYA@A8ANzj2Fk|~AvB@g-!5T#;_P?|u zDk}DyDj`}ZM6srJ#&xRI5~@$mct3eL!;6i|YokI^tVHWPyUC`rS#QMvLEQ8|V_LI@ zFtQ8RV1&qLg(t!J9~_^R+6I19Rvmv%ux`rt;;C=%zkWVtw|F`Q9*^>G^y%v3M-ox4 z1)W6aCtTXB2Qor~`V2kCilC|7Px}f(j!(O9C{gXp`&@{Bu9jPRKHaiQ5Aj2@ix&nX z*2~YU=_7SB0LS52<+wUI)-K1;D=~w;MC+~i90hqT`v42*e|#KMXM8eadk=KhG)gKi z4|%bVz$CK9TPRB>^FMN-D&bISrqUN=tFus`- z8Tdyx6F*~eF!7+uOou#`f&wD zpuIc`9y?%T&iVv<_RQ;jAJgVWP0M{PMn4@`^!u6X32Y*WC8ah7W{2~zp(aM}P2^jA z(kEu)p?Q%qWT7~}Hoc#IeNR*HUZ2{SS2^WE7nkn8d>4GTgF7@witDb?%$Ks1qQMpw zki5akuOXB8rI&|LqA{lXC!T~fp@pK{JLe=vK1;*1_|$jv(61>yabxW3M>D~z%ft=s zZ&kqeSu#_|HQ$@LYJ#Tt=z2sDBN$L1n*X=2XmCcJ0?yeyz=o`KHSG=j;Mu};EOA=Km2l27BtcX z?4`$D!&N}kV26swz2!Z5dZ}*5`j2eGUVr<-ok~EcggboC=YB%_z-<~V>p34pLXHW! z{|tvkxy4(Yf?H1P>U?kY+KfBtZ+KTsj$W$nXG=}t?Jh1~RnJ_6a@9c#aA#u<*%A6h-a+=WhgMOtr4*AO(X@q#- zG42j+Cf1Yoqe*>>#l0#Omx*K_iw43^GO^Ab!~0ozsP0c&_as!%gLauGAY5I-pLL-t z1^(sS<&}mP^C2`U06nRH%!Hk{eKPl%XP8ydGUP^^vSB5C7 zj}`+=r_0^nKSO^8M%iUmDcXtao^&^M!q`+;R0o*r*WKT@wDU~l)#NrpBIWP-O){3D zgHru)=8j8-ih@#$rjFQ z<4@pP8s(PzJyFSY?V??su*@_JHM*-x2A8T?%MHaMMqdJU2QzeG^5Z+R8dOgK9R0`V~xlQbE#nK+*mS zk=PHn@r5TJl_^t4q9E!bsqKi9&M$@0HOh~efV9P9yb}<}fN4JjA~BfY-RYu**3a?u z^yUlW43p<-iT=0t&NLqC_y6~{EM+I#gpjSVjeW~fB71}(W6!=dB$OqItYhD^M8>Wx zX~t5?+E}w>uZ$2$42nYM8v6du_kZJe>)bf!#(8iD<1wH4%v{U+^?try*C3}VHC%cZ zI*=M}U`K9VK(%QLq`F%GV6xDE5)dg?TnF&p$WDQwtag|r%VO_k;UtAGh{cglP^P4+ zlVjdj)q<5_b}(G94hj}BXy>le4fC-MA5UpD6DrjWWeOfioc~-9Z|D_onQ58ifSQpK zYBN=T-8SZfi8rjib`49dV>1)&tJfDcYWNzG>oNUeWw6*-Wmcjo?9-YIV#&kwgqL+^l{KMVu{+7(UdD67$qcWW)l4eyez5&~S!F}uX&1+c z*Jx(&2V5WiJad!q-$Ks(rJ~a~av8wq6f&zhP`a*rCGDdoz>viCA5CA)eUN?H|b zS!fQchKa-hP?bY9kb3irY*c^t6;Ga`F=cyGuI4>*H5bV#|1@s|wWn)88Coe@td7)M z(fVom{)+?}Q$b(J;v=1_Y075cMZPHhO8JkeZF<$1>y=B3Zx3{ZGnvAXv0hd8*Z;6| zhS2VU{@z{|V@1j;G zNcz5c*y=|#w^@P6lg>o<9{*C^U?*D`ZI3i8|B+6GQ75#n=R(p`)pQiDMENqhgQu!c zgkh#Z_voE(TN!j@?R$gh?67S-X*}D-L1)3GAGGKNu$8!cJ7j^ewXM$b4 zwv+q4+tp$Fan@I|jF%PYP_)%V^26;}EV;A$GeO^i6_Cs#9lF2SL&bX8y@%Amxu<45 zE1r8rio{>$HA$SIGV&^l92y3r+h?T1I`#D?N^vY+vVmdMee@Vm%EIcUdH!*G$9Q*efaPeACC zw{7W}BMD6-z7VzUolUP}71*b_fupNGLxqOWn-$7=RhIhZqu*PFY%wYc@9edjpS*pI zR-K-tEoe>RqGF}HttXRN=5y7IqwBK0vza#CdlTwjg_DK&UeuvUCxH~PXR4M!aer4C zwYTJ;w>O`;oL0yp#GY?yRI0B^BO#A0ZV$hD*Iie-NwdO7@Q>;5RM)px(k14VguExUer8*&oqBg+SyH_&HlQczPWrDi^CGT1wkui)FK`$*X*`?~;`hI`FBYVbcbkb)e$EC`pK6#KNL^6l%Me`G?ATfmcWD9qaH#U1$ zhVeyPKW2R4`fmhLr5gd{XdKIdQ+}@u{q}>jT}C*0F{R#{<(;=3jFL+|SVAl$*D;jl z5*AMoUGYP;(DtM!{a{z$%UEkY0|P^LoG-KDvn2hKYaUdy`oWbFYpM?e4IV1Oo?3PX zAx@^Xq)2!t5a2fuv)>tLMoe6ClOv%Sr33FAbzv3s)9O~8l$?^O9A$PXl=~OwpsD)?esj40ZkT>Js@1>Pd-bF2Z(nZk4)UEFoT|b$&%)Vuk z;}`uP;+4UAlFCZuH+}LJJPus)&shs@kw}BJQ-tL`r9IQ=-GVB-eb(yvKzx@ftK^d4 zi&R6zxLwn9wCqi%Cf*q)6!LOWx&(lm100ZLVx{s|Ar%O{OSJksaE=+Fvt)+9ily|Q z%ULJh1~a^V&8=%86z1f8=Q=a$rLNL)?b7s+biHPydVy~Klojv1lJ*b=yzyb_Pi2Qi zZS&R1x$(Hy5Azv9xEL2SDwJ_G610naUiq<+4XaON^#k4{-R`jnn&TK-e5|-CS?{FQ zY0m92NG^{yyWr@<=gKF$L9S z-sx=|M^q(~i9>X`Uv8b>w!ijM?yA|KVI(4<=hGRg>-)03<8-OP`^}oxg{ren-qs2A zH>*SN8rH)60l^}5n&iHt_aIaU%51PdBXwG}oidqp=uUVLPLdvHy$s`}Nm#XZt&;d$ zk@rybmFX;VV1~~8X`#$EGu|lPZi{?3WDxg5&dd`;A=hv-%7})ACF$k+rh6>={nbx4Z~Jt0`S^%xfJfO9gp+I zX&;~Ar_(Lo8hf8&fw0^=ZlcE(0BuJ`ytahw>#b(Zdzv;+t8bNPm582jO#ObF#}H@K zMS+ea-or+x|EBCds$0cu$xN7-e^~iTUdSQpjA!{Av}wwrjAObBL3kge4tbE zrfdpGE9(Bv4JpTp#XXuarlT@}PR>?f-skl(oA;W+k1Ry2%spxppUW~6K6qVu;~)OR z-V*R8q@8L24k6`RI})&o5v;o|cUD?fQX;zKMtV_JY%ams72zuotkuoJW9Nr~66rRH z4TtPzJ*Mdk_3Yz~ix;B9ODSc;evzfj^>>9jeVo9Ai0@v{e(y;HAj@Sn7QzBXHhS>W zBt3r%LZN3IWZ-6bmHa@LcHM&X9IM&o0{3cV+tAn8eJy|PhE<_dHVdF%mqKpM{qst+ z|AHjPwID$(!&U3AMkOS5p6m;*Xs)xQ7kaE#n4wzYbu~CnTq*mjdwG+6d3(;K<|?SL zTV(LK+a4M>%i7I84B5BLA#Ie8R0^(R9%eXA^XW=LG&_1f`BLqZTSB$>Hn3x#Peop`hQZ$sUg5g z?hazo%(+?uzuTH|dGikp43q*&r3~k~JP3%ou$P9i4~YXLqC)tuJP2|>U_{iI>Hq~` zgYAaG1F<%M`B2F*BLA`5i|^Wi)LC;bK))W`w_YLPBih@mo)MAGi;P{887CB?F0+F6 z=jU6%#fq-6ej(ABM3o*-Fd1}{_x*ra4E>y0BA;KK8!RjQhL#4sNjP6F0dzy zKhfM91X)|#AY|@ydzJJjW2@B%DIw)7d$_Y7h+MLHQt#)+Q6qih3p?rer-*7rM2_H* z4BL77vHb>-=BoM#(uxYh_7`}|h=4KIw*Naf=831kJ3gLJTl*aT)Ha`pN*81JzW^zq z=c1As&)T<{7jRv@UB*X%Op@ihh!u_f3Ow>7D`kZRjAg(eUCt~$>w}q(t}K9wFQ&vp zofQF(S+zk;05JlOt}KA9)>Fmy_{Nfm)6QMKAg|z^=e#02Tx<8ms{`+@6&&=b0l=?4 z%x&?70q?C6-NnzXk`u>fwjWX8pA|(8xIXqsny|fF!+ef%8)O8&#WLen>B%Buq*$~b z=~MExuGROkxrF2}0(mX(sv36%bb$Cg`HiH1R$3``z)i+-*WmfG)zHG@ct(&tHDtUl#!)yV8vS z$b1W!pU2~J374y#J6GRZ`_`u1$J^y z{l`ZUZqtVMBdB}NG6L1#=XrHsb(3t%La^8n8@v{Qy@3=|cM0mpXT!P;FAE}@k5a8D zGV`a-jomno-sF*L5${^YiqlFoeDBXmA#PzEy1@#15Y&qFQlGj{Rc!R$;9XR}nKr=}oHYsCA)$*DKLgoQZ)t$X-fp z3AVC$pJ0IpAy@(-rFN`85W9dZ@zA~75lv^#d+issqb&8x^m9)l8*fJ=9n5s>Q+H=p z8zNW8^q&D@_?x{%Y6ad|t&M)Oz79d8ps~xdSHH%eR&JzcxW4Fju?t?zuoMR}7U(z| z5LcEK1$-Py2(U+aU+}+-*zw9JHKTQZmZCf42(t7s5-v-6zxuxrvmZQ!#qU4a_D3eR zB}wyjQ$vcQKCLc225H!C062lIj1M4Aqnwd0PXIAzyl5s|dopRD->xM!w#8$-^2;}n z0RRS!($Rnc>2Vj}x3Nv3OK}>Dj&YOqoLBOSf$E59%Hhm>ki@gI)-YrNiLS*ii84H`@siGRWT+SV+Fuz!Lf7CX?0L6FOP}Co{$6e+1;!h1+k=-b1{ufaOWow zngSW(Y~t5+w0n`!0SoQ74>8a;9V)qNT$!RYlw?d}w3x!eTf=>e0$H`00k@S}FuYq7tr3aCn0@VKBv&WOD?7zJ!YR23q; zzA<(_Tn{m(5-zCpj3l#XW6(O#;t98d=O-;%Y2^%mUbiN-piOym7M;IOd_59 z>t3br^zNq&fwwAAv406)r4)dVOP&aQ96NOeeJ&)U=TKctvtd^6B{RJB+>Nnips1F2 zCO=!VMIUZb7E3Vra9E=I8g4T%BC6gu`Yzq_t=)Y?s}jtrP=ud} z8ZI{Inh!2XW#`Bm8et`Lv_LV#DSz&!l@s+Gs+$ZA=4S!xF_7;cB?J?j z8%tCc1sHJp*uQkZ4`Of6DZc9Nu?O}ZjaUS+H~T;OEXR-d9d(3M{NH`V!eA`)&xZtt z?V}6@1;0I`+JE)A%NdFwUv%bPy*)GGebixQI^vq{zj@)gC(@=)tzPT%>DF}s+A!naUWQ8GdbN{F;L)ukWpN{>ly^EA|NT*fWp|^4 zp^xYH$GzH}GbuWt?wgdEU}_JLK5o@Kj6MRuea%WU!2Q_*3Gz}iFMN%U+-yQR_Fxyb z0+tVWkkjg*RB*kH_!zX1cd%? zuGSnb1D@c|DMSO7@nX0t(f2e8!Z}j3$9=Wm{cO&ql>9Zy@P$DdAk8(kEVWq z;Sd%^P=_+d_8(RM(dgyE@GwnkC7vjUXPEyDieoN?13%pPpTtIyT)+d9^v6(lOGL{E z^TVbyg2=^qPr&nU58K%`V0fmR)|}Q2e@R#VayxDc=$P-BDlafkG;BpJ>grQX23X9< zAXwUlG>0(3ONlMNA_j>|smJY(ROOw=DBkdW;;5az4IiNLKQ zV`ix?Ui%uHo!~Bgoh=N=u%jRX&RqQWsM_aEuxH|CeNJaRp4TY)0+*oZKs4Pw7ycIa z5zLZVO%>mfK?w@0h6X*o|a??3hg= zOKrYb`f9qLhcuD9G*@9S&d2B$i7}|{+IKO~V>(jvQi2+aLpJVyilC~z`M~vAbjo21 zv-3T$KQGw^>wMnnVE)q$|rG zkCZ0#nySSom;23WlKfiOy#8n27OU|AD^-X}>k5P*^7N}o_HwG7$A=IFpK1_y@yUqf9;Tk`{vCb4^T){1V%W zZk-s!KD8SwH$j3fwLk7=5?=c{wIumj86`TQN`0QpDF`_)VftMVX@08x3M3G} zrG5(r?#BBD*`ibzHT%^weB*yMO2zss-6f~Bqvy~uB0E`pyl;@?EGL*vBFiXU=zcXm zR7{O_DcP$wT5+0K+?@7&Y94$xPTG;zc^2_Y5B%P#;UB#)X*D9QtE=67zA`?hU%t+6ICN4UN;N*~ zX3LpdK!=KfxhafEays`cc|P{6U~$KECwDh3GknA`Ikvb%iLAX^o(puf{3QpJIlW|q zL=7qVC@b7J?r}WRTY(}T8S138^CF$l!YN!$26Y9rF-Q&bL*(mD!(|gK9HU269rLAuFC`6>T8`-CZv*BDJns;K9 z47QrPTcf=j&@Y)s&9R*_zxc|xArzQIjOh#0k45VI!_D%YG4f%+MN$djw15!8Abt3S zDWTz8-U)HE3r>e$fuzowu{;=RX<{CPr*~SV&~TTUyb0&MEX+<7RpZ}NC@4!QFjprR zRcb)H8}Nq(e*Y@hIdirt!#&#bqtEbqyKbwKOU{*jWoE|Wm!+*QxmlqS`nq9%f>cEq za1Trh8c%yOhEqey#Mey}9c}$wGa(?HiEDfOk$FPlR%}@0v{>{&l6ftOkGN>-mK?3cQ}Ntv)!q;>Mpn5trIo6O!zfgKAferF^9vh+mAndu>vaJc~jjvK41upGV*{L(kf+c)lJxn_mb; zaL=?F1niBCr_srX%@L}TNFnV`G|d&?s1`MIq;P3dXNLmx)#btdbX7dCpe_@?fX=Hv z|9H)KQ25UBj@wDd08u1^?uUH~v zQq$Prnc18g*%4BodOzdO2DUYIXfV?aQRUFoy^V5qp>@AmlFabBe}C#G0TdDwYFYSN z-ajEuCs$GxWR$&|Ihzbj5KQJSXS^<^@cDL1NO*gY3{dr(#6!2Cy zg&Q%af>VTpdnQby#jml#DKEBl^cv95TVNN~1b8*f*TJh9vY78OJnI&-+e`!}C z-RlFbeIQvE1*>)nFRxN?m(qA0bEv^vRJ|>30VT|JoiAA{ZOj=dZ`ksC_uWkxhci{V zIHirC=~)lNBRe_*hWfLA;nC&~m<8UvK{7sUR-O!P2HrLX&EF_}#PcyR>*6>|*zh76 z9JaC z5u@!K*vfMp-APIlO4#5dpG%ml$;wqH1z$RzyUT&B>3bNmpd-GzTBC|3ExO=jHUDs! zUK)IU(2Y!&Ej!g7a!8Mw+4&08e%1`aGuZ{4vl*H2YCrvSJssnrf|`N7Zs0w z<$MW-T#Y}qE*xFb|pLv=EI$H)?S3vD_k2WV#*Ld1hqv)5rJg(BuE z45{?-U(a6r@z1GDd^F(rgZjkjyv*n|82$0-GQ(F$Y~1e{mca;&1^J;v839|R`&r3+ z9E#;fRod$WMh*CI7BX)z4mxBSZ0qr#Y6FmBw9|&Fajn3E`d>Q(Aj6lC=9t$DHD8-x4$Zx-oF2?v`0!(UrtdAuwY$Wu8BSHLNyB)XT4v}!Nf-~V552Ch>8 literal 0 HcmV?d00001 diff --git a/SUMMARY.md b/SUMMARY.md index 0a81121..a3b2cc9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -6,16 +6,30 @@ * [clickhouse sink connect](zhun-bei-kai-shi/huan-jing-da-jian/clickhouse-sink-connect.md) * [Supserset](zhun-bei-kai-shi/huan-jing-da-jian/supserset.md) * [创建你的第一个仪表板​](zhun-bei-kai-shi/chuang-jian-ni-de-di-yi-ge-yi-biao-ban.md) -* [基础知识](ji-chu-zhi-shi.md) +* [基础知识](ji-chu-zhi-shi/README.md) + * [图表数据](ji-chu-zhi-shi/tu-biao-shu-ju/README.md) + * [高级分析](ji-chu-zhi-shi/tu-biao-shu-ju/gao-ji-fen-xi.md) + * [时间范围配置](ji-chu-zhi-shi/tu-biao-shu-ju/shi-jian-fan-wei-pei-zhi.md) + * [图表定制化配置](ji-chu-zhi-shi/tu-biao-ding-zhi-hua-pei-zhi.md) + * [编辑数据集](ji-chu-zhi-shi/bian-ji-shu-ju-ji.md) + * [用户与权限](ji-chu-zhi-shi/yong-hu-yu-quan-xian.md) * [进阶用法](jin-jie-yong-fa/README.md) - * [使用WITH语句简化查询](jin-jie-yong-fa/shi-yong-with-yu-ju-jian-hua-cha-xun.md) - * [日期范围的配置](jin-jie-yong-fa/ri-qi-fan-wei-de-pei-zhi.md) - * [高级分析](jin-jie-yong-fa/gao-ji-fen-xi.md) + * [仪表板过滤器](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/README.md) + * [过滤器类型](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-lei-xing.md) + * [预过滤数据](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/yu-guo-lv-shu-ju.md) + * [父子过滤器](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/fu-zi-guo-lv-qi.md) + * [过滤器配置](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-pei-zhi.md) + * [过滤器应用范围](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-ying-yong-fan-wei.md) + * [交叉过滤](jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/jiao-cha-guo-lv.md) + * [数据钻取](jin-jie-yong-fa/shu-ju-zuan-qu/README.md) + * [钻取图表详细数据](jin-jie-yong-fa/shu-ju-zuan-qu/zuan-qu-tu-biao-xiang-xi-shu-ju.md) + * [维度的向下钻取](jin-jie-yong-fa/shu-ju-zuan-qu/wei-du-de-xiang-xia-zuan-qu.md) * [使用 Jinja 参数化查询](jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/README.md) * [使用 Jinja 检索过滤器值](jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-jian-suo-guo-lv-qi-zhi.md) * [使用 Jinja 操作图表的自定义 SQL 筛选器](jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-zi-ding-yi-sql-shai-xuan-qi.md) * [使用 Jinja 操作图表的聚合列](jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-ju-he-lie.md) * [在 SQL Lab 中使用模板参数](jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/zai-sql-lab-zhong-shi-yong-mo-ban-can-shu.md) + * [减少SQL嵌套查询](jin-jie-yong-fa/jian-shao-sql-qian-tao-cha-xun.md) * [其他工具与文档](qi-ta-gong-ju-yu-wen-dang/README.md) * [Ubuntu 22.0.4安装](qi-ta-gong-ju-yu-wen-dang/ubuntu-22.0.4-an-zhuang.md) * [Ubuntu 22.0.4环境配置](qi-ta-gong-ju-yu-wen-dang/ubuntu-22.0.4-huan-jing-pei-zhi.md) diff --git a/ji-chu-zhi-shi.md b/ji-chu-zhi-shi/README.md similarity index 100% rename from ji-chu-zhi-shi.md rename to ji-chu-zhi-shi/README.md diff --git a/ji-chu-zhi-shi/bian-ji-shu-ju-ji.md b/ji-chu-zhi-shi/bian-ji-shu-ju-ji.md new file mode 100644 index 0000000..97e161e --- /dev/null +++ b/ji-chu-zhi-shi/bian-ji-shu-ju-ji.md @@ -0,0 +1,2 @@ +# 编辑数据集 + diff --git a/ji-chu-zhi-shi/tu-biao-ding-zhi-hua-pei-zhi.md b/ji-chu-zhi-shi/tu-biao-ding-zhi-hua-pei-zhi.md new file mode 100644 index 0000000..72c1a0b --- /dev/null +++ b/ji-chu-zhi-shi/tu-biao-ding-zhi-hua-pei-zhi.md @@ -0,0 +1,2 @@ +# 图表定制化配置 + diff --git a/ji-chu-zhi-shi/tu-biao-shu-ju/README.md b/ji-chu-zhi-shi/tu-biao-shu-ju/README.md new file mode 100644 index 0000000..3098ac8 --- /dev/null +++ b/ji-chu-zhi-shi/tu-biao-shu-ju/README.md @@ -0,0 +1,2 @@ +# 图表数据 + diff --git a/jin-jie-yong-fa/gao-ji-fen-xi.md b/ji-chu-zhi-shi/tu-biao-shu-ju/gao-ji-fen-xi.md similarity index 69% rename from jin-jie-yong-fa/gao-ji-fen-xi.md rename to ji-chu-zhi-shi/tu-biao-shu-ju/gao-ji-fen-xi.md index ba228bf..a9635f0 100644 --- a/jin-jie-yong-fa/gao-ji-fen-xi.md +++ b/ji-chu-zhi-shi/tu-biao-shu-ju/gao-ji-fen-xi.md @@ -2,11 +2,11 @@ 我们可以看到在“高级分析”这一栏中,有滚动窗口、时间比较、重新采样这三个可选选项。 -
+
在这一部分将详细讲解这三个选项有什么作用,以及应用这三个选项之后的变化是怎样的。所有的讲解都是基于下面的指标来讲解。 -
+
上面这个指标筛选了2023-01-01\~2023-12-31之间的数据,并以月为时间粒度来计算“每月产生单据的数量”这个指标。 @@ -26,21 +26,21 @@ 在下图中时间偏移为 1 year ago(一年之前)即为2022年,计算类型为Actual value(实际值),生成了一条虚线折线图来表示。 -
+
在下面这个图中计算类型为“差异”,即2023年与2022年指标的差值。 -
+
下图中计算类型为比率,即2023年与2022年指标的比值。 -
+
下图中计算类型为Percentage change(百分比变化),即(2023年指标-2022年指标的比值)/2022年指标,可以通过这个计算类型来计算这年相对上一年的增长比例。 -
+
diff --git a/jin-jie-yong-fa/ri-qi-fan-wei-de-pei-zhi.md b/ji-chu-zhi-shi/tu-biao-shu-ju/shi-jian-fan-wei-pei-zhi.md similarity index 100% rename from jin-jie-yong-fa/ri-qi-fan-wei-de-pei-zhi.md rename to ji-chu-zhi-shi/tu-biao-shu-ju/shi-jian-fan-wei-pei-zhi.md diff --git a/ji-chu-zhi-shi/yong-hu-yu-quan-xian.md b/ji-chu-zhi-shi/yong-hu-yu-quan-xian.md new file mode 100644 index 0000000..854268a --- /dev/null +++ b/ji-chu-zhi-shi/yong-hu-yu-quan-xian.md @@ -0,0 +1,2 @@ +# 用户与权限 + diff --git a/jin-jie-yong-fa/shi-yong-with-yu-ju-jian-hua-cha-xun.md b/jin-jie-yong-fa/jian-shao-sql-qian-tao-cha-xun.md similarity index 100% rename from jin-jie-yong-fa/shi-yong-with-yu-ju-jian-hua-cha-xun.md rename to jin-jie-yong-fa/jian-shao-sql-qian-tao-cha-xun.md diff --git a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-ju-he-lie.md b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-ju-he-lie.md index 64e69f3..9ef45c0 100644 --- a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-ju-he-lie.md +++ b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-ju-he-lie.md @@ -1,2 +1,113 @@ # 使用 Jinja 操作图表的聚合列 +### 概述 + +本文介绍如何使用 Jinja 模板动态更改图表的聚合列: + +
+ +您可以下载 ZIP 文件以将此示例仪表板导入您的工作区 - 根据您的工作区位置选择选项: + +[Jinja 示例 - 动态维度](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Jinja%20example%20-%20dynamic%20dimension.zip) + +*** + +### 过程 + +这个过程包括 3 个步骤: + +1. 在数据集上创建计算列,该列将用于获取仪表板过滤器值 +2. 创建带有选项的数据集来填充我们的仪表板过滤器 +3. 配置仪表板 + +让我们仔细看看每一步。 + +*** + +### 步骤 1:在数据集上创建计算列 + +在此示例中,我们将使用聚合表格图表(连接到示例数据库中的车辆销售数据集)来计算价格值的总和,并根据通过仪表板过滤器控制的动态维度进行聚合。 + +在图表生成器视图中,使用 `SUM(price_each)` 作为指标创建聚合表格图表。让我们使用 Jinja 创建一个计算列用作动态维度。为此: + +1. 单击数据集名称旁边的三个省略号 (...) > 编辑数据集。 +2. 导航到“计算列”选项卡。 +3. 使用以下语法创建计算列: + +```sql +{% raw %} +{% if filter_values('aggregation')|length %} + {{ filter_values('aggregation')[0] }} +{% else %} + month +{% endif %} +{% endraw %} +``` + +该语法有一个 if 语句,检查是否有任何值应用于由聚合列支持的仪表板过滤器: + +* 如果是这样,过滤器值将被添加到 SQL 语法中,作为要使用的实际列。 +* 如果没有,月份将用作默认列。 + +这是最终结果: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1670615527569.png) + +保存更改,维度列现在应该可以在图表生成器中使用。将其作为维度添加到图表中: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1702066205157.png) + +保存图表并将其添加到仪表板。 + +*** + +### 步骤 2:创建数据集以填充仪表板筛选器 + +有不同的方法可以实现这一目标: + +* 在数据库级别创建表/视图:可能很有用,以便您可以直接在数据库上操作表值; +* 使用 Google Sheets 文件:当您不想在数据库级别处理此问题时很有用。有关将 Google Sheets 作为数据库连接到 Preset 的更多详细信息,请参阅本文。 +* 使用临时 SQL 查询:快速方法在仅创建几个选项时非常有用。 + +我们将在本示例中使用最后一种方法,使用以下查询创建虚拟数据集: + +```sql +select 'product_line' as aggregation +union all +select 'country' as aggregation +``` + +要创建由此 SQL 查询支持的虚拟数据集: + +1. 访问您的工作区。 +2. 导航到 SQL > SQL Lab。 +3. 确保选择了示例连接。 +4. 粘贴查询并单击“运行”。 +5. 要将其另存为数据集,请单击“保存”下拉列表并选择“保存数据集”。 +6. 为您的数据集提供名称,然后单击“保存并浏览”。 + +**请注意**: 列名(在本例中定义为聚合)由 `filter_values()` 宏在 Jinja 语法上使用。如果使用不同的列名称,请确保更新您的 Jinja 语法。 + +根据您的数据库引擎,您还可以查询信息架构以列出所有列值 - 例如,此查询可以在 Postgres 数据库上使用: + +```plsql +SELECT column_name +FROM information_schema.columns +WHERE table_schema = '{{SchemaName}}' +AND table_name = '{{TableName}}'; +``` + +*** + +### 第 3 步:配置仪表板 + +访问使用图表创建的仪表板并创建新的过滤器 - 使用在上一步中创建的数据集/列: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1670615985172.png) + +重要细节: + +* 由于图表使用另一个数据集,因此此过滤器不会自动映射到它。访问 SCOPING 选项卡,并将过滤器映射到图表。 +* 禁用 可以选择多个值,因为我们不会在本示例中使用多个值。 + +您现在应该能够使用仪表板过滤器与图表的自定义 SQL 过滤器进行交互。 diff --git a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-zi-ding-yi-sql-shai-xuan-qi.md b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-zi-ding-yi-sql-shai-xuan-qi.md index 4c935d0..52af011 100644 --- a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-zi-ding-yi-sql-shai-xuan-qi.md +++ b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-cao-zuo-tu-biao-de-zi-ding-yi-sql-shai-xuan-qi.md @@ -1,2 +1,111 @@ # 使用 Jinja 操作图表的自定义 SQL 筛选器 +### 概述 + +在本文中,您将学习如何使用 Jinja 模板来动态更改应用于图表的自定义 SQL 过滤器: + +
+ +您可以下载 ZIP 文件以将此示例仪表板导入您的工作区: + +[Jinja 示例 - 使用 Jinja 的阈值过滤器](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Jinja%20example%20-%20threshold%20filter%20using%20Jinja.zip) + +*** + +### 过程 + +这个过程包括 3 个步骤: + +1. 将 Jinja 语法添加到图表的自定义 SQL 过滤器,以使用仪表板过滤器对其进行修改。 +2. 创建一个包含选项的数据集来填充我们的仪表板过滤器。 +3. 配置仪表板。 + +让我们仔细看看每一步。 + +*** + +### 第 1 步:将 Jinja 语法添加到图表的自定义 SQL 过滤器中 + +在下面的图表中,我们使用折线图(连接到示例数据库中的车辆销售数据集)来计算 2003 年每个产品系列的价格总和: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image\(245\).png) + +让我们使用 Jinja 来控制聚合结果的阈值。使用以下语法添加自定义 SQL 过滤器 。 + +请注意,由于我们要过滤指标,因此应该使用 HAVING 选项: + +```sql +sum(price_each) > +{% raw %} +{% if filter_values('threshold')|length %} + {{ filter_values('threshold')[0] }} +{% else %} + 0 +{% endif %} +{% endraw %} +``` + +该语法有一个 if 语句,检查是否有任何值应用于由阈值列支持的仪表板过滤器: + +* 如果是这样,过滤器值将添加到 SQL 语法中。 +* 如果不是,则将使用 0 作为默认值。 + +这是最终结果: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image\(246\).png) + +保存图表并将其添加到仪表板。 + +*** + +### 步骤 2:创建数据集以填充仪表板过滤器 + +有一些不同的方法可以实现这一目标: + +* 在数据库级别创建表/视图:可能很有用,以便您可以直接在数据库上操作表值; +* 使用 Google Sheets 文件:当您不想在数据库级别处理此问题时很有用。有关将 Google Sheets 作为数据库连接到 Preset 的更多详细信息,请参阅本文。 +* 使用临时 SQL 查询:快速方法在仅创建几个选项时非常有用。 + +我们将在本示例中使用最后一种方法,使用以下查询创建虚拟数据集: + +```sql +select 500 as threshold +union all +select 750 as threshold +union all +select 1000 as threshold +union all +select 1500 as threshold +union all +select 2000 as threshold +``` + +要创建由此 SQL 查询支持的虚拟数据集: + +1. 访问您的工作区。 +2. 导航到 SQL > SQL Lab。 +3. 确保选择了示例连接。 +4. 粘贴查询并单击“运行”。 +5. 要将其另存为数据集,请单击“保存”下拉列表并选择“保存数据集”。 +6. 为您的数据集提供名称,然后单击“保存并浏览”。 + +请注意,列名称(在本例中定义为阈值)由 `filter_values()` 宏用于 Jinja 语法。如果使用不同的列名称,请确保更新您的 Jinja 语法。 + +*** + +### 步骤 3:配置仪表板 + +访问使用图表创建的仪表板并创建新的过滤器 - 使用在上一步中创建的数据集/列: + +
+ + + +
+ +重要细节: + +* 由于图表使用另一个数据集,因此该过滤器不会自动映射到它。访问 SCOPING 选项卡,并将过滤器映射到图表。 +* 禁用 可以选择多个值,因为我们不会在本示例中使用多个值。 + +您现在应该能够使用仪表板过滤器与图表的自定义 SQL 过滤器进行交互。 diff --git a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-jian-suo-guo-lv-qi-zhi.md b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-jian-suo-guo-lv-qi-zhi.md index 1ac991d..39f8c0d 100644 --- a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-jian-suo-guo-lv-qi-zhi.md +++ b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/shi-yong-jinja-jian-suo-guo-lv-qi-zhi.md @@ -1,2 +1,126 @@ # 使用 Jinja 检索过滤器值 +### 概述 + +在本文中,我们将学习如何使用 Jinja 模板来检索可直接在虚拟数据集的 SQL 查询中使用的筛选器选择: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701462888539.png) + +您可以下载 ZIP 文件以将此示例仪表板导入您的工作区: + +[Jinja 示例 - 过滤值 Macro.zip](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Jinja%20Example%20-%20Filter%20Values%20Macro.zip) + +### 过程 + +这个过程包括 3 个步骤: + +1. 创建虚拟数据集。 +2. 从虚拟数据集创建图表并将其添加到仪表板。 +3. 配置仪表板过滤器。 + +让我们仔细看看每一步。 + +*** + +### 第 1 步:创建虚拟数据集 + +对于本示例,我们将使用示例数据库中的“车辆销售”表。 + +考虑下面的查询: + +```plsql +WITH calculation as ( + SELECT count(*) as count, country + FROM "Vehicle Sales" + WHERE product_line in ('Classic Cars', 'Motorcycles') + GROUP BY country +) +SELECT * FROM calculation +``` + +如果您使用此查询创建虚拟数据集,它将只有两列:计数和国家/地区。因此,您将无法创建本机仪表板过滤器来控制product\_line选项。这只是一个简单的示例用例,其中仪表板过滤器应应用于内部查询(而不是外部数据集查询)。 + +为了实现此实现,我们将使用逻辑语句和 `filter_values()` Jinja 宏。这是更新后的 SQL 查询: + +```plsql +WITH calculation as ( + SELECT count(*) as count, country + FROM "Vehicle Sales" + WHERE 1=1 + {% raw %} +{% if filter_values('product_line')|length %} + and product_line in {{filter_values('product_line')|where_in}} + {% endif %} +{% endraw %} + GROUP BY country +) +SELECT * FROM calculation +``` + +* `filter_values()` 宏返回在仪表板过滤器中选择的所有选项的数组。 Product\_line 参数用于指定为我们将使用的过滤器提供动力的列。 +* if 语句检查返回的数组是否已设置长度(如果返回 0,则不满足语句条件)。 +* |where\_in 运算符自动将此数组格式化为 SQL 兼容格式(`["Classic Cars", "Vintage Cars"]` 变为 ('Classic Cars', 'Vintage Cars'))。 + +要在 SQL Lab 中执行此查询: + +1. 访问您的工作区。 +2. 导航到 SQL > SQL Lab。 +3. 确保选择了示例连接。 +4. 粘贴查询并单击“运行”。 + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701460162276.png) + +这是生成的 SQL 查询: + +```plsql +-- 6dcd92a04feb50f14bbcf07c661680ba +WITH calculation as ( + SELECT count(*) as count, country + FROM "Vehicle Sales" + WHERE 1=1 + GROUP BY country +) +SELECT * FROM calculation +LIMIT 100001 +-- 6dcd92a04feb50f14bbcf07c661680ba +``` + +单击“创建图表”以该查询构建图表。 + +*** + +### 步骤 2:从虚拟数据集创建图表并将其添加到仪表板 + +您应该已重定向到图表生成器视图。对于此示例,我们可以使用具有默认配置的表格: + +1. 单击右上角的“保存”。 + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701460222605.png) + +2. 命名您的数据集、图表并为其创建仪表板:\ + ![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701460270906.png) +3. 单击“保存并转到仪表板”按钮。 + +*** + +### 步骤 3:配置仪表板过滤器 + +仪表板将在您的浏览器中启动。配置过滤器: + +1. 单击右箭头展开“过滤器”菜单。 + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701460437304.png) + +2. 单击“+ 添加/编辑过滤器”。 + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701460470654.png) + +3. 过滤器模式已启动。在“过滤器名称”字段中,输入过滤器的名称。 +4. 在“数据集”字段中,选择实际包含具有所需选项的列的数据集(在本例中为“车辆销售”数据集)。 +5. 在“列”字段中,选择包含所需选项的列(在本例中为“product\_line”)。![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701462621962.png) +6. 接下来,导航到“范围界定”选项卡,并将过滤器映射到您的图表。此过程不会自动发生,因为为过滤器提供支持的数据集与为图表提供支持的数据集不同。![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701462649585.png) +7. 单击“保存”。现在让我们看看过滤器的作用: + +![](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/image-1701462888539.png) + +\ diff --git a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/zai-sql-lab-zhong-shi-yong-mo-ban-can-shu.md b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/zai-sql-lab-zhong-shi-yong-mo-ban-can-shu.md index 9b75718..d186cff 100644 --- a/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/zai-sql-lab-zhong-shi-yong-mo-ban-can-shu.md +++ b/jin-jie-yong-fa/shi-yong-jinja-can-shu-hua-cha-xun/zai-sql-lab-zhong-shi-yong-mo-ban-can-shu.md @@ -1,2 +1,11 @@ # 在 SQL Lab 中使用模板参数 +模板参数功能使您能够以 JSON 形式分配一组参数,并使用 Jinja 框架使它们在 SQL 中可用。 + +在下面的示例中,我们将突出显示包含 `{{date_start}}` 和 `{{date_end}}` 的行,然后选择省略号图标。在子菜单中,选择参数。 + +![Jinja1b](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Jinja1b.png) + +将出现“模板参数”面板。在此面板中,您可以定义 JSON 参数来表示突出显示的 SQL 代码。在下图中,我们使用“日期”来定义开始和结束日期。 + +![Jinja3@2x](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Jinja3@2x.png) diff --git a/jin-jie-yong-fa/shu-ju-zuan-qu/README.md b/jin-jie-yong-fa/shu-ju-zuan-qu/README.md new file mode 100644 index 0000000..9d95246 --- /dev/null +++ b/jin-jie-yong-fa/shu-ju-zuan-qu/README.md @@ -0,0 +1,2 @@ +# 数据钻取 + diff --git a/jin-jie-yong-fa/shu-ju-zuan-qu/wei-du-de-xiang-xia-zuan-qu.md b/jin-jie-yong-fa/shu-ju-zuan-qu/wei-du-de-xiang-xia-zuan-qu.md new file mode 100644 index 0000000..d49a3f7 --- /dev/null +++ b/jin-jie-yong-fa/shu-ju-zuan-qu/wei-du-de-xiang-xia-zuan-qu.md @@ -0,0 +1,2 @@ +# 维度的向下钻取 + diff --git a/jin-jie-yong-fa/shu-ju-zuan-qu/zuan-qu-tu-biao-xiang-xi-shu-ju.md b/jin-jie-yong-fa/shu-ju-zuan-qu/zuan-qu-tu-biao-xiang-xi-shu-ju.md new file mode 100644 index 0000000..9258cab --- /dev/null +++ b/jin-jie-yong-fa/shu-ju-zuan-qu/zuan-qu-tu-biao-xiang-xi-shu-ju.md @@ -0,0 +1,2 @@ +# 钻取图表详细数据 + diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/README.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/README.md new file mode 100644 index 0000000..685b4c5 --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/README.md @@ -0,0 +1,2 @@ +# 仪表板过滤器 + diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/fu-zi-guo-lv-qi.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/fu-zi-guo-lv-qi.md new file mode 100644 index 0000000..8d8b2ca --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/fu-zi-guo-lv-qi.md @@ -0,0 +1,2 @@ +# 父子过滤器 + diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-lei-xing.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-lei-xing.md new file mode 100644 index 0000000..887ba2f --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-lei-xing.md @@ -0,0 +1,130 @@ +# 过滤器类型 + +### 概述 + +在本文中,我们将探讨可应用于仪表板内图表的四种不同类型的过滤器。 + +*** + +### 过滤器类型 + +在下面的“添加和编辑过滤器”窗口中,您会注意到两个选项卡:“设置”和“范围”。现在我们将重点关注“设置”选项卡(默认选择)。 + +
+ +第一部分由四个必填字段组成: + +* 过滤器类型:选择过滤器类型;选项包括“值”、“数值范围”、“时间范围”、“时间列”和“时间粒度”(请参阅​​下面的单独说明)。 +* 过滤器名称:为新过滤器输入简短的描述性名称。这通常与后续列字段中所做的选择相关。 +* 数据集:选择应用于仪表板内图表的数据集。默认情况下,与仪表板图表关联的所有数据集都可供选择。当选择“值”、“数值范围”、“时间列”或“时间粒度”过滤器类型时,会出现此字段。 +* 列:选择应应用过滤器的列。当选择“值”或“数字范围”字段类型时,会出现此字段。 + +让我们重点关注“过滤器类型”字段中的四种可用过滤器类型。 + +*** + +### 值过滤器类型 + +此过滤器类型创建一个下拉菜单,其中填充了与所选列(列字段)关联的所有可用值。 + +例如:如果您选择“值”过滤器类型,然后在“列”字段中选择“platform”,则仪表板上会出现一个下拉过滤器菜单,使您能够按platform进行过滤。应用后,仪表板中的所有图表将仅显示与所选“platform”过滤器相关的数据。 + +配置可能如下所示: + +![Settings\_for\_Value](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Settings\_for\_Value.png) + +然后..... “过滤器名称”字段中标题为“Select a Plarform”的下拉过滤器如下所示: + +![Select\_a\_Platform](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_a\_Platform.png) + +在上面的示例中,我们选择按 PS4 平台进行过滤。 + +要应用过滤器,请选择一个值,然后选择“应用过滤器”。仪表板中的图表将刷新并显示过滤后的数据。 + +*** + +### 数值范围过滤器类型 + +此过滤器类型创建一个范围滑块,使您能够根据所选列中数据的可用数值指定起点和终点。 + +例如:如果您选择数字范围过滤器类型,然后在“列”字段中选择“eu\_sales”,则会出现一个范围滑块过滤器,使您能够选择开始和结束范围。应用后,仪表板中的所有图表将仅显示与"Select a Range"过滤器相关的数据。 + +配置可能如下所示: + +![Settings\_for\_Numerical\_Range](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Settings\_for\_Numerical\_Range.png) + +然后。。。范围滑块过滤器,标题为“过滤器名称”字段中的“Select a Range”,显示如下: + +![Select\_a\_Range](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_a\_Range.png) + +在上面的示例中,我们选择指定从 16 到 26 的范围。 + +请注意,您可以通过将光标悬停在最左边的锚点(此处为“0”)上来查看最小滑块设置: + +![Select\_a\_Range\_Minimum](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_a\_Range\_Minimum.png) + +您也可以通过将光标悬停在最右边的锚点(此处为“29”)上来查看最大滑块设置: + +![Select\_a\_Range\_Maximum](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_a\_Range\_Maximum.png) + +要应用过滤器,请定义数字范围,然后选择“应用过滤器”。仪表板中的图表将刷新并显示过滤后的数据。 + +*** + +### 时间范围过滤器类型 + +过滤器类型选择时间范围过滤器,选择该过滤器后,将启动预设的编辑时间范围功能。这与创建新图表时使用的时间范围字段相同。 + +有关如何编辑时间范围的更多信息,请参阅[时间配置](https://docs.preset.io/docs/time-configurations). + +配置可能如下所示: + +![Settings\_for\_Time\_Range](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Settings\_for\_Time\_Range.png) + +在此示例中,我们指定了默认值“上个月”,并定义了过滤器名称“Select Time Range”。 + +此配置将如下所示: + +![Select\_Time\_Range2](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_Time\_Range2.png) + +要应用过滤器,请选择并配置时间范围,然后选择“应用过滤器”。仪表板中的图表将刷新并显示过滤后的数据。 + +*** + +### 时间列过滤器类型 + +此过滤器类型创建一个下拉菜单,使您能够选择新的仪表板级别时间列,该列将覆盖在图表级别定义的任何现有时间列。 + +
+ +何时使用此过滤器类型? + +当所选数据集中存在多个时间列时,最好使用时间列过滤器类型。在许多情况下,数据集中只有一个时间列(默认选择),从而不需要此过滤器类型。 + +配置可能如下所示: + +![Settings\_for\_Time\_Column](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Settings\_for\_Time\_Column.png) + +“过滤器名称”字段中标题为“Select Time Column”的下拉过滤器显示如下: + +![Select\_Time\_Column1](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_Time\_Column1.png) + +要应用仪表板级别时间列,请选择时间列选项,然后选择应用筛选器。仪表板中的图表将刷新并显示过滤后的数据。 + +*** + +### 时间颗粒过滤器类型 + +此过滤器类型会创建一个下拉列表,使您能够选择时间粒度。应用后,所有时间戳都会根据所选时间粒度进行分组。 + +配置可能如下所示: + +![Settings\_for\_Time\_Grain](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Settings\_for\_Time\_Grain.png) + +“过滤器名称”字段中标题为“Select Time Grain”的下拉过滤器显示如下: + +![Select\_Time\_Grain](https://cdn.document360.io/4749ddf8-aa05-4f3f-80e1-07a5d2d0f137/Images/Documentation/Select\_Time\_Grain.png) + +在上面的示例中,我们选择指定时间粒度“分钟”。 + +要应用仪表板级别时间粒度分组,请选择一个时间粒度,然后选择“应用筛选器”。仪表板中的图表将刷新并显示分组数据。 diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-pei-zhi.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-pei-zhi.md new file mode 100644 index 0000000..1c16f1b --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-pei-zhi.md @@ -0,0 +1,2 @@ +# 过滤器配置 + diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-ying-yong-fan-wei.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-ying-yong-fan-wei.md new file mode 100644 index 0000000..d11169a --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/guo-lv-qi-ying-yong-fan-wei.md @@ -0,0 +1,2 @@ +# 过滤器应用范围 + diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/jiao-cha-guo-lv.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/jiao-cha-guo-lv.md new file mode 100644 index 0000000..fc87158 --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/jiao-cha-guo-lv.md @@ -0,0 +1,2 @@ +# 交叉过滤 + diff --git a/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/yu-guo-lv-shu-ju.md b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/yu-guo-lv-shu-ju.md new file mode 100644 index 0000000..8f016b4 --- /dev/null +++ b/jin-jie-yong-fa/yi-biao-ban-guo-lv-qi/yu-guo-lv-shu-ju.md @@ -0,0 +1,5 @@ +# 预过滤数据 + + + +\ diff --git a/zhun-bei-kai-shi/huan-jing-da-jian/README.md b/zhun-bei-kai-shi/huan-jing-da-jian/README.md index c957521..9a36f0a 100644 --- a/zhun-bei-kai-shi/huan-jing-da-jian/README.md +++ b/zhun-bei-kai-shi/huan-jing-da-jian/README.md @@ -2,45 +2,6 @@ 环境的部署主要分为两部分,Superset部分和数据复制部分。使用Docker部署,所以在部署前需要一定的Docker知识,并确保你已经安装了docker,可以参考[这篇文章](../../qi-ta-gong-ju-yu-wen-dang/ubuntu-22.0.4-huan-jing-pei-zhi.md#id-5-an-zhuang-docker)。 -### 数据复制 - -{% file src="../../.gitbook/assets/clickhouse-sink-connect.tar" %} -clickhouse-sink-connect -{% endfile %} - -#### 解压文件 - -数据复制部分主要是debezium、kafka、clickhouse-sink-connect的部署。下载上面的文件,在你的Linux系统中使用命令tar -xvf clickhouse-sink-connect.tar解压.在目录中你会看到以下文件: - -```sh -drwxr-xr-x 4 root root 45 Apr 12 05:42 docker/ --rw-r--r-- 1 root root 3491 Apr 12 14:29 docker-compose.yaml --rw-r--r-- 1 root root 1613 Apr 12 05:42 README.md -drwxr-xr-x 2 root root 139 Apr 15 10:15 scripts/ -``` - -**docker 目录**: 主要包含一些Dockerfile,用来构建自己的镜像,在Dockerfile中添加了一些额外的东西到官方镜像中,可以不用管它。 - -**docker-compose.yaml** : docker通过这个配置文件快速编排启动多个容器,容器的启动配置都包含在里面。 - -**scripts 目录**: 这个目录中包含了一些脚本,是用来快速注册连接器。注册连接器也可以在web页面中注册。 - -#### 启动容器 - -在clickhouse-sink-connect目录中使用以下命令 - -```bash -docker compose up -``` - -注意查看命令行中是否输出报错信息 - - - -#### 注册连接器 - -在注册连接器之前查看你的数据库中是否启动了Debizium所需的CDC相关配置,这里主要介绍postgres的配置。其他的可以查看官方文档,如[Mysql设置](https://debezium.io/documentation/reference/2.5/connectors/mysql.html#setting-up-mysql)。 - ### BI (使用amancevice/superset) @@ -87,6 +48,51 @@ docker compose up + + +### 数据复制 + +{% file src="../../.gitbook/assets/clickhouse-sink-connect.tar" %} +clickhouse-sink-connect +{% endfile %} + +#### 解压文件 + +数据复制部分主要是debezium、kafka、clickhouse-sink-connect的部署。下载上面的文件,在你的Linux系统中使用命令tar -xvf clickhouse-sink-connect.tar解压.在目录中你会看到以下文件: + +```sh +drwxr-xr-x 4 root root 45 Apr 12 05:42 docker/ +-rw-r--r-- 1 root root 3491 Apr 12 14:29 docker-compose.yaml +-rw-r--r-- 1 root root 1613 Apr 12 05:42 README.md +drwxr-xr-x 2 root root 139 Apr 15 10:15 scripts/ +``` + +**docker 目录**: 主要包含一些Dockerfile,用来构建自己的镜像,在Dockerfile中添加了一些额外的东西到官方镜像中,可以不用管它。 + +**docker-compose.yaml** : docker通过这个配置文件快速编排启动多个容器,容器的启动配置都包含在里面。 + +**scripts 目录**: 这个目录中包含了一些脚本,是用来快速注册连接器。注册连接器也可以在web页面中注册。 + +#### 启动容器 + +在clickhouse-sink-connect目录中使用以下命令 + +```bash +docker compose up +``` + +注意查看命令行中是否输出报错信息 + + + +#### 注册连接器 + +在注册连接器之前查看你的数据库中是否启动了Debizium所需的CDC相关配置,这里主要介绍postgres的配置。其他的可以查看官方文档,如[Mysql设置](https://debezium.io/documentation/reference/2.5/connectors/mysql.html#setting-up-mysql)。 + + + + +