پرش به مطلب اصلی

طراحی گزارش

هدف​

گزارش را درون پلتفرم بچینید — روی بوم و کنار پرس‌وجوهایی که آن را پر می‌کنند — به‌جای اینکه آن را در ابزاری جداگانه بکشید و JSON را دوباره اینجا بچسبانید.

کجا باز می‌شود​

راهکارتان را باز کنید، گزارش‌ها را انتخاب کنید، یک گزارش را برگزینید و طراحی را بزنید. بوم همان‌جا باز می‌شود؛ زیر همان مسیر راهنما و همان انتخابگرهای محیط و راهکاری که پیش‌تر در آن کار می‌کردید. این یک برنامهٔ دوم یا یک زبانهٔ تازه نیست: طراحی گزارش کارِ سازنده است و اینجا هم درگاه سازنده است.

طراحی و ویرایش دو فرمان‌اند، چون دو نیمهٔ متفاوت را در اختیار دارند:

  • طراحی یعنی چیدمان — صفحه، نوارهایش، جدول‌هایش، نشانش.
  • ویرایش یعنی هر چیزی که بوم نمی‌تواند از آن خبر داشته باشد — اینکه کدام پرس‌وجوهای ذخیره‌شده قالب را پر می‌کنند، و کدام فیلد هنگام چاپ یک رکورد آن‌ها را تنگ می‌کند.

روی بیشتر گزارش‌ها از هر دو استفاده خواهید کرد، و هیچ‌کدام نیمهٔ دیگری را بازنویسی نمی‌کند.

پیش‌نیازها​

  • به‌عنوان سازنده وارد شده‌اید و یک راهکار و یک محیط انتخاب کرده‌اید.
  • گزارش از پیش وجود دارد. اول آن را بسازید — ببینید ساخت گزارش — سپس طراحی‌اش کنید.

گام‌ها​

  1. راهکارتان را باز کنید و گزارش‌ها را انتخاب کنید.
  2. گزارش را برگزینید و طراحی را بزنید.
  3. اگر گزارش هرگز طراحی نشده باشد، بوم فقط با تختهٔ Styles باز می‌شود — رنگ‌ها و سبک‌های متنی که طرح از آن‌ها شروع می‌شود و هرگز چاپ نمی‌شوند. با درج ← صفحهٔ گزارش یک صفحه بیندازید و محتوایتان را درون آن بچینید.
  4. گزارش را بکشید: نوارها برای سرصفحه و پاصفحه، یک تکرارگر برای سطرها، و متنی که به فیلدهای مجموعه‌دادهٔ شما مقیّد شده است. پالت و پنل لایه‌ها مثل همیشه‌اند؛ بازرس اکنون دو زبانه دارد — پایین‌تر ببینید.
  5. ذخیره را بزنید.

شروع از یک نمونه​

درج ← گزارش‌های نمونه یک صفحهٔ گزارش کامل را کنار هر چیزی که تا کنون کشیده‌اید روی بوم می‌اندازد — چیزی جایگزین نمی‌شود — و داده‌های نمونه‌اش را در ویرایشگر دادهٔ گزارش بار می‌کند، پس بی‌درنگ پیش‌نمایش دارد.

فهرست دو نیمه دارد و هر نیمه به پرسشی دیگر پاسخ می‌دهد.

پنج تای نخست سندهای کامل‌اند — فاکتور، فروش، فهرست مخاطبان، خلاصه، داشبورد — و هستند تا نشان دهند یک گزارش چه شکلی می‌تواند داشته باشد.

چهار تای بعدی هر کدام یک قابلیت را نشان می‌دهند، و همان چیزی است که وقتی اثر دلخواهتان را می‌دانید اما حرکتش را نه، لازم دارید. هر کدام در پاصفحهٔ خود خطی دارد که می‌گوید کجا را ببینید:

نمونهچه چیزی را نشان می‌دهد
ظاهر (سطرهای راه‌راه + قالب‌بندی شرطی)سطرهای راه‌راه، رنگ و ضخامتی که بالای یک آستانه عوض می‌شود، رنگ وضعیت، و نشانه‌ای که فقط روی سطرهای مربوط پیدا می‌شود
واترمارکمُهر DRAFT روی همهٔ صفحه‌ها، و یک بلوک کنترل سند در گوشه
سرصفحه و پاصفحهٔ تکرارشوندهسربرگ و پاصفحه روی هر برگ، عنوان ستون‌ها هر جا که جدول ادامه یابد، و جمع هر برگ کنار جمع کل جدول
نمودارهایک نمودار میله‌ای و یک نمودار خطی، و جدولی که همان مجموعه‌داده را زیرشان می‌خواند

یکی را باز کنید، یک نوار یا یک خانه را برگزینید و عبارت‌هایش را در بازرس یا در صفحهٔ کد بخوانید. اینها نقاشی‌های معمولی‌اند — ویرایششان کنید، نیمی را که می‌خواستید نگه دارید و بقیه را پاک کنید.

این چهار تا به یک جدول واقعی مقیّدند

خانه‌هایشان row.par_name، row.par_amount، row.par_currency و row.par_status را می‌خوانند — ستون‌های جدول نمونهٔ هزینه‌ها — نه نام‌هایی ساختگی. همین است که می‌گذارد همان نقاشی به‌عنوان یک گزارش کارآمد با سطرهای واقعی نصب شود، به‌جای آنکه خوش پیش‌نمایش بدهد و خالی چاپ شود. با ویرایش مجموعه‌داده و مقیدسازی‌ها آن را به جدول خودتان بگردانید؛ شگردها همان‌اند.

قاعدهٔ راه‌راه‌کردن سطرها را کپی کنید

راه‌راه‌شدن یعنی پس‌زمینه روی قاب سطرِ تکرارگر، و این را می‌خواند: rowIndex % 2 == 1 ? '#f8fafc' : '' — شمارهٔ سطر، نه یک فیلد. خواندن یک مقدار تا وقتی کسی جدول را دوباره مرتب نکرده عیناً همان به نظر می‌رسد.

شرط زنجیره‌ای پرانتز می‌خواهد

a ? b : c ? d : e تجزیه نمی‌شود. بنویسید: row.status == 'Approved' ? '#059669' : (row.status == 'Rejected' ? '#be123c' : '#b45309'). عبارتی که تجزیه نشود، ویژگی را دقیقاً همان‌طور که کشیده‌اید رها می‌کند، پس نشانه‌اش رنگی است که هرگز عوض نمی‌شود، نه یک خطا.

تولید با هوش مصنوعی​

تولید با هوش مصنوعی یک صفحه را با واژه‌ها توصیف می‌کند و می‌کشدش. خواسته‌تان را بنویسید — کادر عمداً بزرگ است، صفحه‌ای که ارزش ساختن دارد یک بند توضیح می‌خواهد — و «بساز» یا Ctrl/⌘+Enter را بفشارید. آنچه برمی‌گردد به آنچه روی بوم است افزوده می‌شود؛ هیچ‌چیز از کشیده‌های شما جایگزین نمی‌شود. برای شروع تازه، اول بوم را پاک کنید و سپس بسازید.

هرچه بازگردد پیش از آنکه چیزی به صفحه بیاید بررسی می‌شود — هر شکل باید شکلی باشد که این ویرایشگر واقعاً بتواند بسازد — پس پاسخی که شکلی ناموجود را نام ببرد، جعبه‌ای شکسته روی صفحه‌تان نمی‌گذارد.

پیش از تسلیم‌شدن، خودش را اصلاح می‌کند. اگر چیز قابل‌استفاده‌ای بازنگردد، سکو همان پاسخ را با نام‌بردن از اشکال به مدل بازمی‌گرداند، نه آنکه از شما بخواهد خطایی را درست کنید که خودتان ننوشته‌اید. تا سه بار تلاش می‌کند و در این میان دکمه «در حال اصلاح… تلاش ۲ از ۳» را نشان می‌دهد.

پاسخی که تا حدی قابل‌استفاده است نگه داشته می‌شود، نه دور ریخته. شکل‌هایی که کشیده شدند روی بوم‌اند و گفت‌وگو باز می‌ماند و آنچه کنار گذاشته شد را فهرست می‌کند — پس پاسخی ده شکلی که دو تایش ناکارآمد بوده، هشت شکل و دو جمله می‌شود، نه هشت شکل و سکوت. نتیجه‌ای ناقص که از آن باخبرتان نکنند، نتیجه‌ای است که آن را کم‌خواستنِ خودتان می‌خوانید.

گزارش تولیدشده ساده است مگر رنگ بخواهید: متن تیره روی سفید، نوار خاکستری روشن برای سرِ جدول و گوشه‌های صاف. بگویید «با رنگ‌های برند ما» یا «با سرصفحهٔ رنگی» تا بیشتر بگیرید.

اول مجموعه‌داده را اضافه کنید. مجموعه‌داده‌های این طرح و فیلدهای هر ردیفشان به هوش مصنوعی گفته می‌شود، پس گزارشی که پس از افزودن مجموعه‌داده تولید شود روی همان تکرار می‌شود و فیلدهای واقعی‌اش را نشان می‌دهد. اگر پیش از آن تولید شود، باید نام مجموعه‌داده را حدس بزند و پنجره می‌گوید چه نامی حدس زد.

شما فقط طرح را توصیف می‌کنید و بس. اینکه کدام مدل هوش مصنوعی پاسخ می‌دهد، یک بار برای کل سکو توسط مدیر تنظیم می‌شود — کلیدی برای چسباندن و ارائه‌دهنده‌ای برای انتخاب وجود ندارد.

اگر دکمهٔ هوش مصنوعی نیست، یعنی برای این سکو هوش مصنوعی تنظیم نشده است. از مدیر بخواهید؛ این تنظیمی روی سرور است، نه چیزی که سازنده بتواند روشنش کند.

پنجره پیش از درخواست شما می‌گوید هوش مصنوعی چه چیزهایی را خواهد دانست. مجموعه‌داده‌هایی را که به هوش مصنوعی گفته می‌شود با همان نام‌هایی که داده‌اید نام می‌برد (items یا expenses، هر دو درست است)، یا هشدار می‌دهد که گزارش هنوز مجموعه‌داده‌ای ندارد. نخست مجموعه‌داده را بیفزایید: بی آن هوش مصنوعی نامی را حدس می‌زند و پیش‌نمایش گزارش خالی می‌ماند.

نمای یک مجموعه‌داده را عوض کردید؟ به طراح برگردید. وقتی ستونی را در زبانه‌ای دیگر به نما می‌افزایید، طراح هنگام بازگشت شما نما را دوباره می‌خواند، پس ستون تازه برای اتصال پیشنهاد می‌شود، به هوش مصنوعی می‌رسد و در پیش‌نمایش دیده می‌شود. جمعِ ستونی که نما آن را برنمی‌گزیند خالی چاپ می‌شود؛ پس ستون را به نما بیفزایید، نه فقط به گزارش.

دو زبانهٔ بازرس​

پنل ویژگی‌ها دو زبانه دارد و هر یک به پرسشی جدا پاسخ می‌دهد:

  • گرافیک — اینکه شیء چیست: کجا می‌نشیند، چه اندازه است، پرشدگی، خط و متنش.
  • گزارش — اینکه شیء برای گزارش چه معنایی دارد: اینکه این قاب صفحه است، یا نوار سرصفحه، یا تکرارگر، و اینکه یک متن یا تصویر به چه چیزی مقیّد شده است.

نقطه‌ای روی زبانهٔ گزارش یعنی شیء برگزیده هم‌اکنون بخشی از گزارش است — صفحه، یک نوار، یک متن مقیّد — تا بدون بازکردن زبانه آن را ببینید. هر زبانه‌ای را باز بگذارید، با انتخاب شیء بعدی هم باز می‌مانَد.

برخی اشیاء چیزی برای زبانهٔ گزارش ندارند: تنها یک قاب می‌تواند صفحه یا نوار باشد، و تنها متن یا تصویر به داده مقیّد می‌شود. زبانه به‌جای بازشدن خالی، همین را می‌گوید.

ذخیره‌کردن هم‌زمان دو کار می‌کند و همین بخش ارزش فهمیدن دارد: آنچه کشیده‌اید را به قالبی که چاپ می‌شود کامپایل می‌کند، و نقاشی شما را هم کنار آن نگه می‌دارد. به همین دلیل است که فردا می‌توانید دوباره طراحی را بزنید و چیدمان خودتان را ببینید، نه بازسازی‌ای از آن — نقاشی نگه داشته می‌شود، نه فقط خروجی‌اش.

یک طرح صفحه، هر چند برگ که چاپ شود​

یک طرح صفحه صفحه‌بندی می‌شود: بدنه روی هر چند برگ که محتوا نیاز دارد جاری می‌شود، و سرصفحه و پاصفحه بالا و پایین هر برگ دوباره کشیده می‌شوند. فهرست صد‌سطری فاکتور، یک طرح صفحه است و چهار برگ چاپی.

چند طرح صفحه در یک گزارش — بخش‌ها​

قاب صفحهٔ گزارش دومی روی بوم بکشید تا یک بخش به دست آورید: جلدی با یک چیدمان، بدنه با چیدمانی دیگر، و شرایط و مقررات در پشت. هر قابی که به‌عنوان صفحهٔ گزارش نشانه خورده باشد یک بخش است، به همان ترتیبی که روی بوم نشسته‌اند، و هر بخش از برگ خودش آغاز می‌شود.

هر بخش حاشیه‌های خودش و سرصفحه، پاصفحه، سربرگ و واترمارک خودش را دارد — جلدی بدون سرصفحه و بدون شمارهٔ صفحه، و بدنه‌ای که هر دو را دارد، در یک گزارش. بخشی که چیزی در آن نیست هیچ چاپ نمی‌شود، نه یک برگ سفید.

شماره‌های صفحه کل گزارش را می‌شمارند، نه بخش را: جلد صفحهٔ ۱ از n است، و n هر برگی را که بدنه و شرایط هم می‌گیرند می‌شمارد. کسی که برگ چاپ‌شده‌ای در دست دارد «۳ از ۹» می‌خواهد.

یادداشت

همهٔ بخش‌ها روی کاغذی هم‌اندازه چاپ می‌شوند، به اندازهٔ نخستین قاب صفحه. چاپگر یک سینی دارد، پس گزارشی که A4 و A5 را درهم کند هیچ‌جا درست چاپ نمی‌شود. اگر اندازهٔ یکی از قاب‌ها را عوض کنید، طراح هنگام ذخیره همین را می‌گوید و سپس همه‌چیز را روی کاغذِ نخستین قاب چاپ می‌کند. حاشیه‌ها در هر بخش دست خودتان است؛ اندازهٔ برگ نه.

بخش یعنی «از این‌جا به بعد، صفحه فرق می‌کند». وقتی فقط برگی تازه با همان طرح می‌خواهید، نشانهٔ پایین برای همان است.

آغاز یک ناحیه از صفحهٔ تازه​

صفحه‌بندی وقتی می‌شکند که بلوک بعدی جا نشود. این پاسخ «این سطر را نصف نکن» است؛ نمی‌تواند پاسخ «این قسمت از صفحهٔ خودش آغاز می‌شود» باشد، چون آن هیچ ربطی به مقدار جای باقی‌مانده ندارد.

ناحیه را برگزینید — یک باند، یک تکرارگر، یک محفظهٔ ستون‌ها، یک نمودار — و در زبانهٔ گزارش در بازرس، گزینهٔ از صفحهٔ تازه آغاز می‌شود را تیک بزنید. گزارش درست پیش از آن می‌شکند، چه صفحه پر باشد چه نباشد. این را برای دسته‌ای از ادعاها به‌ازای هر مشتری به کار ببرید، یا هرجا که برگی تازه با همان طرح صفحه می‌خواهید. وقتی خودِ صفحه باید فرق کند، قاب صفحهٔ دومی بکشید و به‌جایش از یک بخش استفاده کنید.

دو نکته که دانستنش می‌ارزد:

  • هرگز برگهٔ سفید بر جای نمی‌گذارد. شکستن در بالای صفحه‌ای که از پیش خالی است کاری نمی‌کند، پس تیک‌زدن آن روی نخستین ناحیهٔ گزارش — یا روی دو ناحیهٔ پشت سر هم — هیچ کاغذی هدر نمی‌دهد.
  • روی باندی که به‌عنوان سرصفحهٔ جدول تکرار می‌شود، شکست پیش از سرصفحه می‌افتد، و همین را می‌خواهید: صفحهٔ تازه با عنوان‌های ستون باز می‌شود و سطرها از پی آن می‌آیند.

برای «مرتب افتادن» یک باند سراغ این نروید — پرکردن باند با فضای خالی تا وقتی سرریز کند، امروز درست به نظر می‌رسد و همان لحظه که داده عوض شود می‌شکند. تیک، راهِ ماندگارِ گفتن این حرف است.

تکرار روی یک مجموعه‌داده​

قاب تکرارگر محتوایش را به ازای هر سطر یک‌بار می‌کشد. قاب را در زبانهٔ گزارش بازرس به‌عنوان تکرارگر نشانه بزنید، سپس در تکرار روی برگزینید که روی چه چیزی راه برود.

«تکرار روی» فهرستی کرکره‌ای از مجموعه‌داده‌های خودِ گزارش است — rows، invoices — پس نه نامی برای به‌یاد سپردن هست و نه نامی برای غلط نوشتن. اگر آنکه می‌خواهید در فهرست نیست، زیر ویرایش در کشوی گزارش‌ها بیفزاییدش تا اینجا پیدا شود.

اینکه فهرست است و نه جعبه‌ای برای نوشتن، عمدی است: تکرارگر روی یک مجموعه‌دادهٔ کامل راه می‌رود، پس «کدام‌یک» دقیقاً به تعداد مجموعه‌داده‌های گزارش پاسخ دارد. باریک‌کردن سطرها — مثلاً فقط درخواست‌های تأییدشده — جای خودش در مجموعه‌داده است، همان‌جا که پرس‌وجو زندگی می‌کند و هر باندی که آن مجموعه‌داده را می‌خواند همان پاسخ را می‌گیرد؛ اگر در جعبهٔ یک قاب بگذاریدش، باند بعدی به نسخهٔ خودش از آن نیاز پیدا می‌کند.

متن یا تصویر چه چیزی نشان می‌دهد​

متن یا تصویری درون تکرارگر متصل است، و اتصال در همان ویرایشگری نوشته می‌شود که هر تکه کد BS Lang دیگر در این سکو: آنچه می‌توان صدا زد را تکمیل می‌کند، ورودی‌های هر تابع را نشان می‌دهد و اشتباه را همان‌جا که تایپ می‌کنید زیرخط می‌کشد، نه با خانه‌ای خالی هنگام چاپ.

در زبانهٔ گزارش بازرس، مقیدسازی فهرستی کرکره‌ای از فیلدهایی است که می‌توانید به آن‌ها مقیّد شوید — چون اتصال معمولاً همین است، و نامی که انتخاب می‌شود نامی است که غلط نوشته نمی‌شود.

هرچه بیش از یک فیلد باشد در صفحهٔ کد نوشته می‌شود: متن را انتخاب کنید و در نوار ابزار نوشتن کد (دکمهٔ </>) را بزنید. فهرست کنار آن با چه چیزی نشان می‌دهد، یعنی اتصال، شروع می‌شود و بعد هر ویژگی‌ای را می‌آورد که می‌تواند از داده پیروی کند (بخش ظاهری که از داده می‌آید را در پایین ببینید). ویرایشگر جای کار دارد: تکمیل خودکار، اینکه هر تابع چه می‌گیرد، و خط قرمزی زیر اشتباه همان لحظه که تایپ می‌کنید؛ و فهرست کنار هر مورد می‌نویسد نوشته‌شده یا خطا دارد. جای ‎concat('Page ', pageNumber, ' of ', pageCount)‎ همین‌جاست. ✕ گوشهٔ آن شما را به نقاشی برمی‌گرداند، و آنچه نوشته‌اید با زدن ذخیره همراه نقاشی ذخیره می‌شود.

برای دیدن آنچه می‌توانید بنویسید، چشم را باز کنید. هر جعبهٔ عبارت در این سکو یکی دارد، و پشتش هرچه این عبارت می‌تواند به آن برسد فهرست شده است: ستون‌های مجموعه‌داده‌ای که این تکرارگر روی آن راه می‌رود، تجمیع‌های خودِ گزارش با ورودی‌های هرکدام، و توابع خودِ زبان. در آن جست‌وجو کنید، روی یک مدخل کلیک کنید و همان‌جا که مکان‌نما هست درج می‌شود. این هست چون تکمیل خودکار نمی‌تواند بگوید «در این سطر چه هست» — تکمیل خودکار می‌گوید بعد از آنچه شروع کرده‌اید چه می‌آید، و چشم می‌گوید پیش از آنکه چیزی شروع کنید چه چیزهایی هست.

درون تکرارگر ستون‌ها به‌شکل row.<field> نوشته می‌شوند — چون row رکوردی از دقیقاً یک مجموعه‌داده است و فیلدی از دیگری به هیچ می‌رسد. بیرون از تکرارگر اصلاً rowی وجود ندارد، پس همان فیلدها از راه مجموعه‌دادهٔ خودشان آدرس می‌شوند: rows[0].total.

ستونی از جدول مرتبط با نامی نوشته می‌شود که پرس‌وجو به پیوند داده است. پرس‌وجوی ذخیره‌شده‌ای که مشتری را با نام customer پیوند می‌دهد، ستون‌هایش را به‌شکل row.customer.par_name و row.customer.par_credit_limit پیشنهاد می‌دهد، و تابع‌های فهرستی همان نام را در نقل‌قول می‌گیرند: ‎sum(rows, 'customer.par_credit_limit')‎. اگر نام پیوند را در پرس‌وجو عوض کنید، اتصال‌ها هم باید همراهش عوض شوند.

و این یک عبارت است، نه فقط نام یک فیلد. ‎row.amount * 1.2‎، ‎row.status == 'Approved' ? 'Yes' : 'No'‎، ‎concat(row.first, ' ', row.last)‎ و برای جمع هر صفحه ‎sum(page.rows, 'amount')‎ — همان زبانی که قاعدهٔ کسب‌وکار، اتصال‌های یک صفحه و اسکریپت راه‌حل با آن نوشته می‌شوند.

کجا هستیدچه چیزی در دسترس است
سطر یک تکرارگر‎row‎، ‎rowIndex‎، ‎rows‎، ‎rowCount‎ و هر مجموعه‌داده با نام خودش
سربرگ یا پابرگ صفحه‎pageNumber‎، ‎pageCount‎، ‎page.rows‎، ‎page.rowCount‎
همه‌جامجموعه‌داده‌ها با نامشان، ‎data‎، و تجمیع‌های زیر

جمع‌ها، گروه‌ها و جمع‌های رونده​

جمعِ کل جدول در «سطر جمع» می‌نشیند. یک باند زیر تکرارگر بکشید و در زبانهٔ گزارش گزینهٔ سطر جمع برای تکرارگرِ بالا را بزنید. یک‌بار پس از آخرین سطر کشیده می‌شود و ‎rows‎ و ‎rowCount‎ را برای کل مجموعه‌داده می‌بیند — پس ‎sum(rows, 'amount')‎ آنجا جمعِ کل جدول است.

این عددی جداست از جمعِ صفحه، که ‎sum(page.rows, 'amount')‎ در پاصفحه است و فقط سطرهای همان برگه را می‌شمارد. هر دو به‌کار می‌آیند؛ آگاهانه یکی را برگزینید.

جمع رونده در خودِ سطر این است: ‎sum(take(rows, rowIndex + 1), 'amount')‎ — همهٔ سطرها تا همین سطر.

گروه‌بندی کارِ مجموعه‌داده است. پرس‌وجویی ذخیره کنید که گروه می‌کند — یک سطر برای هر وضعیت، با تعداد و جمع (بنگرید به ذخیرهٔ پرس‌وجو) — آن را در مجموعه‌داده‌ها به‌عنوان مجموعه‌دادهٔ دوم به گزارش بیفزایید و مثل هر مجموعه‌دادهٔ دیگری رویش تکرار کنید: هر سطری که می‌کشد یک گروه است که از پیش شمرده و جمع زده شده، و سطر جمعی زیرش گروه‌ها را با هم جمع می‌زند. تکرارگر نمی‌تواند درون سطر تکرارگر دیگری باشد، پس گزارش سطرهای خودِ هر گروه را زیر سرعنوانی برای آن گروه فهرست نمی‌کند.

رسیدن به مجموعه‌دادهٔ دوم با ‎lookup(regions, 'code', row.region).manager‎ انجام می‌شود.

ظاهری که از داده می‌آید​

باند، خانه یا شکلی را انتخاب کنید، نوشتن کد را بزنید و از فهرستِ زیر ویژگی‌ها یک ویژگی را برگزینید: هر کدام عبارتی می‌گیرد که به ازای هر سطر پاسخ داده می‌شود:

ویژگینمونه
پس‌زمینه‎row.amount > 1000 ? '#fee2e2' : ''‎
رنگ متن‎row.overdue ? '#b91c1c' : ''‎
ضخامت قلم‎row.isTotal ? '700' : ''‎
نمایش وقتی‎row.note != ''‎

خالی یعنی «همان‌طور که کشیدم بماند» — به همین دلیل در نمونه‌ها سمت دیگرِ شرط یک ‎''‎ خالی است و روشن‌کردن این قابلیت هرگز گزارشِ سالم را سفید نمی‌کند. نمایش وقتی استثناست: پاسخِ نادرست، عنصر را یک‌سره برمی‌دارد — با پس‌زمینه و کادر.

برای رنگ‌کردن یک سطر کامل، پس‌زمینه را روی قابِ سطرِ تکرارگر بگذارید، نه روی خانه‌ای درونش.

تجمیع‌ها: sum · count · avg · min · max · pluck · round · abs · upper · lower · concat · ifEmpty · format. هرکدام یک فهرست می‌گیرند و در صورت نیاز نام ستونی که باید بخوانند: ‎sum(claims, 'par_amount')‎.

‏pluck تنها یکی است که به‌جای یک مقدار، یک فهرست پاسخ می‌دهد، و همان چیزی است که یک نمودار به آن مقیّد می‌شود. نمودار یک رشته‌داده می‌خواهد و مجموعه‌داده سطر است — پس ‎pluck(revenue, 'amount')‎ مقدارها را به آن می‌دهد و ‎pluck(revenue, 'month')‎ برچسب‌های کنارشان را، هر دو از یک مجموعه‌داده، تا نتوانند یک سطر از هم جلو بیفتند.

نمودار​

درج ← نمودار میله‌ای یا نمودار خطی نموداری را زیر وسط نمای شما روی صفحه می‌گذارد: قابی که موتور گزارش درونش می‌کشد، با یک عنوان. چیزی در آن نیست که با دست کشیده شود — مقیاس، درجه‌ها و برچسب‌ها هر بار که گزارش اجرا می‌شود از روی داده به دست می‌آیند. روی یک صفحهٔ برنامه همین منو گونه‌های بیشتری را به‌صورت نقاشی پیشنهاد می‌کند؛ گزارش همان دو گونه‌ای را پیشنهاد می‌کند که می‌تواند چاپ کند.

قاب را انتخاب کنید، نوشتن کد را بزنید و مقادیر نمودار و برچسب‌های نمودار را پر کنید، هر دو با pluck تا هم‌گام از یک مجموعه‌داده بیایند: ‎pluck(bystatus, 'total')‎ و ‎pluck(bystatus, 'par_status')‎. میله‌ای یا خطی بودن و رنگ در زبانهٔ گزارش است. پیش‌نمایش و صفحهٔ چاپی یک نمودار را می‌کشند.

نموداری که زیر بخش پیش از خود جا نشود، مثل هر بلوک دیگری به برگ بعد می‌رود.

بارکد و کد QR​

درج ← بارکد یا درج ← کیو‌آر‌کد یک کد واقعی و قابل‌اسکن را در قابی می‌گذارد که وسط نمای شماست: اگر آن را روی سربرگ صفحه بیندازید، روی هر برگ چاپ می‌شود. در زبانه گزارش، مقدار آن، حاشیهٔ آرام (حاشیه سفیدی که اسکنر لازم دارد) و یا چاپ مقدار زیر میله‌ها (Code 128) یا تصحیح خطا (QR) را تنظیم کنید. Code 128 فقط نویسه‌های چاپ‌پذیر ASCII را نگه می‌دارد؛ کد QR هر متنی را، از جمله یک پیوند.

برای کدی که در هر سطر فرق می‌کند، آن را درون تکرارکننده انتخاب کنید، نوشتن کد را بزنید و مقدار بارکد را پر کنید: row.par_reference. بوم مقدار ثابت را می‌کشد، چون بوم سطری ندارد.

کاغذ و جهت​

اندازه قاب صفحه همان کاغذ است، به پوینت (۷۲ در هر اینچ): ۵۹۵ × ۸۴۲ یعنی A4. برای تغییر کاغذ یک صفحه، W و H آن را وارد کنید؛ اندازه‌های کاغذ در منوی قاب یک قاب تازه می‌کشند.

برای حالت افقی، اول به نوارها بگویید دنبال کاغذ بروند: محدودیت افقی هر نوار را روی چپ و راست بگذارید، و هر چیزی را که به لبه راستش چسبیده روی راست. بعد صفحه را ۸۴۲ × ۵۹۵ کنید.

حاشیه، در زبانه گزارش صفحه، فضایی است که بالا و پایین هر برگ خالی می‌ماند. در عرض برگ، همه چیز همان جایی چاپ می‌شود که کشیده‌اید. چاپ / PDF هر صفحه را روی برگی دقیقاً به اندازه صفحه چاپ می‌کند، پس مرورگر حاشیه‌ای برای سربرگ و پانویس خودش ندارد.

گزارشی به فارسی یا عربی​

واژه‌ها را بنویسید تا طراح متن را راست‌به‌چپ کند. متنی که واژه‌هایش فارسی، عربی یا عبری است، با پایان نوشتن راست به چپ و راست‌چین می‌شود و صفحه هم همین‌طور چاپش می‌کند: نقطه یا عددی که در پایان خط است در پایانش می‌ماند. متن پیوندخورده واژه‌ای ندارد که از رویش بفهمد، پس راست به چپ را خودتان در زبانهٔ گرافیک، کنار دکمه‌های تراز، بزنید. ستون‌ها را از راست بچینید، همان‌طور که خوانندهٔ فارسی می‌خواند.

رقم‌ها و تقویم از آنِ خواننده است. متنی که قالب آن number یا date است، به زبان و تقویم کسی نوشته می‌شود که گزارش را باز می‌کند: رقم‌های فارسی برای خواننده‌ای که به فارسی کار می‌کند، و تاریخ شمسی برای کسی که تنظیمات ظاهری ← تقویم او شمسی است. پیش‌نمایش طراح از تنظیمات خود شما پیروی می‌کند و برنامه از تنظیمات هر خواننده، و یک گزارش برای یکی ‎7,890.50‎ و برای دیگری ‎۷٬۸۹۰٫۵۰‎ چاپ می‌کند.

عددی که درون concat است همان‌طور که ذخیره شده نوشته می‌شود، پس قالبی جدا به آن بدهید: ‎concat('صفحهٔ ', format(pageNumber, 'integer'), ' از ', format(pageCount, 'integer'))‎.

پیش‌نمایش گزارشی که برای یک رکورد چاپ می‌شود​

وقتی نخستین مجموعه داده یک فیلد رکورد دارد، گزارش از یک رکورد چاپ می‌شود و پیش‌نمایش هم همین‌طور نشانش می‌دهد: سطر اول نخستین مجموعه داده را رکورد می‌گیرد و هر مجموعه داده‌ای را که فیلد رکورد دارد به آن محدود می‌کند. یک فاکتور در پیش‌نمایش، فاکتور اول با اقلام خودش است، نه اقلام همه فاکتورها.

گزارشی که قالبش را بارگذاری کرده‌اید​

گزارش‌هایی که با چسباندن قالب ساخته شده‌اند نقاشی ندارند. زدنِ طراحی روی چنین گزارشی بومی خالی باز می‌کند و تلاش نمی‌کند چیدمان را از روی قالب بازسازی کند.

این عمدی است. قالب، نوارها و تکرارگرها و مقیدسازی‌ها را ثبت می‌کند — نه قاب‌ها و خط‌کش‌ها و سبک‌هایی که برای رسیدن به آن‌ها چیده‌اید — پس هر چیزی که پلتفرم از رویش بکشد یک حدس است، و ذخیره‌کردن آن حدس، قالب واقعی شما را با همان حدس جایگزین می‌کند. اگر می‌خواهید گزارشی بارگذاری‌شده روی بوم بیاید، یک بار بچینیدش و ذخیره کنید؛ از آن پس رفت‌وبرگشتش سالم است.

عکسش امن است: ویرایش مجموعه‌داده‌های یک گزارشِ طراحی‌شده از کشوی گزارش‌ها، نقاشی‌اش را دست‌نخورده باقی می‌گذارد.

ذخیره، و اینکه کجا می‌رود​

دقیقاً یک ذخیره وجود دارد و در نوار عنوان بالای صفحه است — همان‌جایی که در هر صفحهٔ دیگر محصول. گزارش را به‌عنوان یک مؤلفهٔ راهکار می‌نویسد: لایه‌بندی‌شده، متعلق به راهکار شما، اعتبارسنجی‌شده و آمادهٔ برون‌سپاری.

منوی «فایل» خودِ طراح اینجا نمایش داده نمی‌شود. در حالت مستقل آن منو یک فایل JSON روی دیسک شما ذخیره می‌کند؛ درون پلتفرم این می‌شد فرمان دومی که به‌نظر می‌رسد کارتان را ذخیره کرده، ولی نکرده است. برون‌سپاری (PNG، SVG) در دسترس می‌ماند، چون تصویر یک گزارش در هر حالت به کار می‌آید.

جابه‌جایی بین محیط‌ها​

چیزی تغییر نمی‌کند: گزارش یک مؤلفهٔ راهکار است و مثل همیشه، با قالبش در درون خودش، سفر می‌کند. نقاشی شما هم همراهش می‌رود، پس کسی که واردش می‌کند می‌تواند طراحی را بزند و چیدمان شما را ادامه دهد، نه اینکه از نو شروع کند.

عیب‌یابی​

  • «این طرح هنوز صفحهٔ گزارشی ندارد.» — روی بوم کشیده‌اید اما نه درون یک صفحهٔ گزارش. از درج ← صفحهٔ گزارش استفاده کنید و محتوایتان را درونش بگذارید؛ قاب صفحه همان چیزی است که به کامپایلر می‌گوید گزارش از کجا شروع می‌شود.
  • ذخیره خاکستری است. — از وقتی بازش کرده‌اید چیزی تغییر نکرده. اول چیزی بکشید.
  • گزارش چاپ می‌شود ولی صفحه خالی است. — تکرارگر به هیچ مجموعه‌داده‌ای نشانه نرفته است. تکرار روی را باز کنید: هر مجموعه‌داده‌ای که این گزارش واقعاً دارد فهرست می‌شود. یکی را برگزینید، یا آن مجموعهٔ نبوده را زیر ویرایش بیفزایید و بعد برگزینیدش.
  • چیدمانم متفاوت برگشت. — روی گزارشی هستید که قالبش بارگذاری شده، نه طراحی. بخش گزارشی که قالبش را بارگذاری کرده‌اید در بالا را ببینید.
  • یک خانه خالی است و بقیهٔ گزارش درست است. — اتصالش نتوانسته اجرا شود. بازش کنید: ویرایشگر همان بخشی را که نفهمیده زیرخط می‌کشد. اتصالی که شکست بخورد عمداً خانه را خالی می‌گذارد نه اینکه کل صفحه را از کار بیندازد.
  • ‏rows.length می‌گوید ‎'length' is a method — write length() to call it‎.** در BS Lang این یک متد است و پرانتز می‌خواهد: ‎rows.length()‎. ‎count(rows)‎ در گزارش خواناتر است. (پیش‌تر به‌جای تعداد، خودِ فهرست را برمی‌گرداند و چیزی هم نمی‌گفت. دیگر نه.)
  • ‏sum قرمز زیرخط خورده. — املایش را با فهرست بالا بسنجید. ویرایشگر تجمیع‌های خودِ گزارش را می‌شناسد و بس؛ تابعی که سکو ندارد تابعی است که هیچ‌کس صدایش نمی‌زند.
  • اتصالی که پیش‌تر نوشته بودم دیگر کار نمی‌کند. — عبارت‌های گزارش اکنون BS Lang هستند، همان زبان همه‌جای سکو. تقریباً همه چیز بی‌تغییر منتقل می‌شود — مسیر فیلدها، حساب، مقایسه، ?: و تجمیع‌ها — اما عبارتی که به چیزی تکیه داشته که ارزیاب قدیمی اتفاقاً می‌پذیرفت ارزش بازکردن دارد، چون حالا ویرایشگر به شما می‌گوید.

سناریوهای مرتبط​