Przejdź do głównej zawartości

Własne kafelki

Gdy wbudowane typy kafelków nie pasują do wizualizacji, jakiej chcesz, Saiku dostarcza własne renderery, które idą dalej, pozostając bezpiecznymi. Wszystkie są deklaratywne — opisujesz wynik danymi, nie kodem.

Każdy renderer pojawia się jako osobna pozycja w menu + Dodaj kafelek (pod „Custom”). Wybranie jednego wrzuca kafelek już związany z tym rendererem; potem konfigurujesz go w edytorze ⚙ kafelka dokładnie jak każdy inny — wybierz kostkę, zbuduj zapytanie i podaj konfigurację renderera.

Kafelek listy rankingowej

Renderer Lista rankingowa rysuje kartę „movers”, jakiej chce większość dashboardów operacyjnych: numerowany ciąg wierszy, każdy z etykietą i wartością, gdzie wartość jest kolorowana wedle tego, czy poszła w górę, czy w dół.

Zwiąż go z zapytaniem zwracającym kolumnę etykiety i kolumnę wartości, a potem skonfiguruj:

PoleZnaczenie
PodtytułWyciszona linia pod tytułem kafelka („Product department · MoM”)
Kolumna etykietyPuste = wywnioskowane (patrz niżej)
Kolumna wartościPuste = wywnioskowane (patrz niżej)
Format wartościOpcjonalny wzorzec wyświetlania — $c1$27.4M. Puste zachowuje formatowanie kostki
WierszeIle pokazać (domyślnie 6)
KolejnośćZachowaj kolejność zapytania, najwyższe najpierw albo najniższe najpierw
Kolor wartościWedle znaku (w górę zielony / w dół czerwony) albo zwykły
Pokaż numery rangWiodące 1, 2, 3…

Zostawione puste kolumny są wnioskowane strukturalnie: wartość to pierwsza kolumna miary w wyniku, a etykieta to reszta. Trzyma się to nawet wtedy, gdy captiony wymiaru wyglądają jak liczby — decyl przepisujących (10.0), rok, numer sklepu — a to dokładnie tam zgadywanie z tekstu wyszłoby na odwrót.

Format wartości przyjmuje ten sam słownik wzorców, co kafelek KPI i oś wartości ECharts: $cN waluta kompaktowa, $N waluta zwykła, N% procent, N cyfry po przecinku. Warto ustawić przy każdej mierze walutowej — karta top-N surowych wierszy $27,432,535.99 źle się skanuje wzrokiem.

Sortowanie dzieje się przed limitem wierszy, więc „najwyższe najpierw, 3 wiersze” to naprawdę top trzy całego wyniku, a nie trzy pierwsze przestawione. Kolory i typografia idą za motywem Appki — bez CSS-a.

Kafelek option ECharts

Renderer ECharts option pozwala ułożyć wykres, pisząc wprost obiekt option ECharts. To wyjście awaryjne dla kształtów, których wbudowany kafelek Wykres nie wystawia — nietypowych układów osi, wariantów rose, nietypowych visual map i tak dalej.

Ponieważ Twój option trafia do żywej biblioteki wykresów, jest walidowany wobec bezpiecznego podzbioru, zanim w ogóle się wyrenderuje. Reguły, egzekwowane na każdej głębokości obiektu:

  • Żadnych wartości funkcyjnych. ECharts woła rzeczy w rodzaju formatter jako funkcje z żywymi danymi i DOM-em, więc każda funkcja gdziekolwiek w option jest odrzucana. (Czysty JSON nie wyrazi funkcji; kontrola strzeże przed żywym obiektem, który by ją przemycił.)

  • Żadnych zdalnych URL-i. http(s): spoza originu, względne wobec protokołu //host, cele url(...) wskazujące poza origin oraz nie-obrazowe URI data: są odrzucane — to wektory wyprowadzania danych / SSRF. Zostają referencje z tego samego originu i względne oraz obrazy data: wyłącznie w PNG, JPEG, GIF albo WebP.

    Zauważ, że SVG nie jest na tej liście, nawet jako obraz data:. SVG może nieść skrypt, więc jest wykluczony celowo — użyj eksportu rastrowego, jeśli potrzebujesz ikony inline.

  • Tylko klucze z allowlisty. Akceptowane są wyłącznie wyselekcjonowane klucze najwyższego poziomu (title, grid, xAxis, yAxis, series, legend, tooltip, color, backgroundColor, visualMap, radar, polar i garść innych) oraz wyselekcjonowany zestaw pól per series. Cokolwiek poza allowlistą jest odrzucane, a nie po cichu pomijane — walidator zawodzi bezpiecznie.

Jeśli Twój option łamie którąś regułę, kafelek pokazuje błąd walidacji zamiast się renderować, żebyś mógł to poprawić. Zapytanie, które wiążesz, dostarcza dane (kategorie + serie), które option rysuje.

Najpierw motyw, potem option

Twój option nakłada się na umotywowaną linię bazową Appki. Co powie, to wygrywa; czego nie powie — kolor tytułu, kolor etykiet osi, linie siatki, paleta serii — jest dziedziczone z motywu.

Pisz tylko te części, które są naprawdę szyte na miarę. Option pełen zaszytych na sztywno hexów pierwszego dnia wygląda identycznie, a przestaje pasować do Appki, gdy tylko ktoś zmieni preset.

Formatowanie osi wartości

Skoro funkcje są odrzucane, nie sformatujesz osi zwykłym sposobem ECharts — axisLabel.formatter musiałby być funkcją. Zamiast tego edytor ma pole Format osi wartości, przyjmujące ten sam wzorzec, którego używa kafelek KPI:

WzorzecRenderuje
$c0$149K — waluta kompaktowa
$c1$48.2K
$2$99.50
1%15.6%
01,234

Stosuje się do każdej osi type: "value" i jest kompilowany w czasie renderowania, więc nigdy nie podajesz kodu, a reguła braku funkcji pozostaje absolutna. Osie kategorii są zostawione w spokoju — szablon tekstowy w rodzaju "W{value}" w Twoim option nadal tam działa, bo to jest deklaratywne.

Kafelek grafu

Renderer Graf zamienia rekordy zapytania w graf węzłów i krawędzi — drzewo własności, mapę relacji, przepływ między encjami. Zamiast obiektu option dajesz mu mapowanie kolumn: które kolumny Twojego wyniku są końcami, id, etykietami i wagami.

PoleWymaganeZnaczenie
sourceColtakKolumna z końcem źródłowym każdego wiersza
targetColtakKolumna z końcem docelowym każdego wiersza
idColtakKolumna z kanonicznym id węzła (żeby etykieta przyczepiła się do właściwego węzła). Dla zwykłej listy krawędzi ustaw ją równą sourceCol
labelColnieKolumna z przyjazną nazwą wyświetlaną dla węzła idCol
valueColnieKolumna liczbowa przenoszona na każdą krawędź i sumowana w wagę węzła
layoutnieforce (domyślnie) albo circular

Każdy wiersz staje się jedną skierowaną krawędzią źródło → cel; węzły są zbierane z każdego końca i deduplikowane po id. Wiersze bez końca są pomijane. Gdy ustawisz valueCol, jego wartość waży zarówno krawędź, jak i jej węzły końcowe — rozmiar węzła skaluje się względem wag w tym grafie, więc najcięższy węzeł zawsze sięga góry pasma rozmiarów, w jakichkolwiek jednostkach liczy miara. Waga zerowa albo ujemna to węzeł najlżejszy, a nie nieważony.

Konfigurowanie własnego kafelka

Przebieg jest dla wszystkich taki sam:

  1. + Dodaj kafelek → Ranked list (albo ECharts option, albo Graph).
  2. Otwórz edytor ⚙ kafelka.
  3. Zwiąż zapytanie — wybierz kostkę i zbuduj zapytanie, którego wynik zasila kafelek.
  4. Podaj konfigurację — pola listy rankingowej, obiekt option ECharts albo mapowanie kolumn grafu.
  5. Zapisz. Niepoprawna konfiguracja wychodzi jako błąd inline, a nie zepsuty render.

Powiązane

  • Budowanie stron i kafelków — wbudowane typy kafelków i jak działa wiązanie.
  • Kafelek Wykres — zajrzyj tu, zanim napiszesz option ECharts ręcznie.
  • Pluginy — zaawansowany, instalowany przez administratora kafelek z JS w piaskownicy do w pełni własnych widgetów.