HK alias Holger Posted September 25, 2024 Posted September 25, 2024 (edited) Liebe Community wir haben im smapLabs beim Entwickeln des supportBots oder dem smapifier festgestellt, dass die KI oft fehlende Formeln verwendet, die intuitiv eigentlich da sein könnten. Ich frage mich, ob ihr auch oft auf "Lücken" stoßt, deren Behebung oder Ergänzung euch das Leben erleichtern würden. Hier die aktuelle Sammlung der Verbesserungsvorschläge: Formel Beschreibung Example Prio SEARCHNUMBER(text) Parst einen Text zu einer Zahl, ignoriert ungültige Zeichen. SEARCHNUMBER("5a") → 5, SEARCHNUMBER("a") → NULL Medium TONUMBER(text) Wandelt einen Text in eine Zahl, strikt nur wenn der Text genau eine Zahl darstellt. NUMBER("10") → 10, NUMBER("5a") → NULL, NUMBER("a") → NULL High TEXT(number) Wandelt eine Zahl in einen Text. Text(23.343) → "23.343" High ISNUMBER(text) Prüft, ob ein Text ein Zahlenwert ist. ISNUMBER("123") → true Medium ABS(a) Gibt den absoluten Wert einer Zahl zurück. ABS(-5) → 5 High FLOOR(number, significance) Rundet eine Zahl auf das nächste Vielfache eines Werts ab. FLOOR(5.67, 0.1) → 5.6 Medium CEIL(number, significance) Rundet eine Zahl auf das nächste Vielfache eines Werts auf. CEIL(5.67, 0.1) → 5.7 Medium MOD(a, b) Gibt den Restwert der Division von a durch b zurück. MOD(10, 3) → 1 High POWER(base, exponent) Berechnet eine Potenz (Basis hoch Exponent). POWER(2, 3) → 8 Medium ROOT(base, degree) Berechnet die Wurzel einer Zahl. ROOT(8, 3) → 2 Medium LN(number) Berechnet den natürlichen Logarithmus einer Zahl (zur Basis e). LN(10) → 2.302585 Low LOG(number, base) Berechnet den Logarithmus einer Zahl zur angegebenen Basis. LOG(100, 10) → 2 Low LOG10(number) Berechnet den Logarithmus einer Zahl zur Basis 10. LOG10(1000) → 3 Low EXP(number) Gibt den Wert von e hoch der angegebenen Zahl zurück. EXP(1) → 2.71828 Low SIN(angle) Berechnet den Sinus eines Winkels in Radiant. SIN(PI()/2) → 1 Low COS(angle) Berechnet den Cosinus eines Winkels in Radiant. COS(PI()) → -1 Low TAN(angle) Berechnet den Tangens eines Winkels in Radiant. TAN(PI()/4) → 1 Low MEDIAN(a,b,..) Berechnet den Median einer Liste von Zahlen. MEDIAN(1, 3, 5) → 3 Medium COUNT(Repeater1) Zählt die Anzahl der Einträge in einer Wiederholungsgruppe. COUNT(Repeater1) → 3, wenn Repeater1 drei Einträge enthält. High COUNTIF(repeater, condition) Zählt die Anzahl der Einträge in einer Wiederholungsgruppe, die einer bestimmten Bedingung entsprechen. COUNTIF(Repeater1, EQUALS({Repeater1.Selection}, "Non")) → 2, wenn in Repeater1 "Non" zwei Mal gewählt wurde. High INDEX Gibt den Index (Iteration) eines Eintrags in einer Wiederholungsgruppe zurück. INDEX → 1 für den ersten Eintrag in einer Wiederholungsgruppe. High CONTAINS(multiselect) Überprüft, ob ein Wert in einem Multiselect enthalten ist. CONTAINS({multi1}, "Option1") → true, wenn "Option1" ausgewählt ist. High EMPTY(DSAB[Spalte]) Prüft, ob eine Spalte in einer Datenquelle leer ist. EMPTY(DSAB[Name]) → true, wenn die Spalte "Name" leer ist. Medium RPAD('5', 3, '0') Füllt eine Zeichenkette rechts mit einem Zeichen auf. RPAD('5', 3, '0') → "500" Medium LPAD('5', 3, '0') Füllt eine Zeichenkette links mit einem Zeichen auf. LPAD('5', 3, '0') → "005" Medium TRIM(text) Entfernt führende und nachfolgende Leerzeichen aus einem Text. `TRIM(" Hallo Welt ") → "Hallo Welt" Medium PROPER(text) Wandelt den ersten Buchstaben jedes Wortes in einem Text in Großbuchstaben um. `PROPER("hello world") → "Hello World" Medium REVERSE(text) Kehrt die Zeichenfolge eines Textes um. `REVERSE("hello") → "olleh" Medium REGEX(pattern, string) Extrahiert Teile eines Strings basierend auf einem regulären Ausdruck. `REGEX("\d+", "abc123") → "123" Medium RANDOM(?min, ?max) Gibt eine zufällige Zahl zwischen den optional angegebenen Grenzen zurück. Ohne Grenzen wird eine Zufallszahl zwischen 0 und 1 generiert. RANDOM(1, 10) → 4, RANDOM() → 0.6843 Medium DATETIME(year, ?month, ?day, ?hour, ?minute, ?second) Erstellt ein DateTime-Objekt aus den angegebenen Komponenten. DATETIME(2024, 9, 25, 12, 30, 0) → 2024-09-25 12:30:00 Medium ADD_DATE(datetime, period1, ?period2, ...) Addiert eine oder mehrere Perioden zu einem Datum/Zeitpunkt. ADD_DATE({start_time}, P8H, {pause_duration}) → Berechnet das Ende der Arbeitszeit (Startzeit + 8 Stunden + Pausendauer). Medium WEEKDAY(date) Gibt den Wochentag eines Datums zurück. `WEEKDAY("2024-09-25") → "Wednesday" High MONTH(date) Gibt den Monat eines Datums zurück. `MONTH("2024-09-25") → 9 High YEAR(date) Gibt das Jahr eines Datums zurück. `YEAR("2024-09-25") → 2024 High TODATE(text) Wandelt einen Text in ein Datum um. `TODATE("2024-09-25") → 2024-09-25 Medium TOTIME(text) Wandelt einen Text in eine Zeit um. `TOTIME("12:30") → 12:30 Medium TODATETIME(text) Wandelt einen Text in ein Datum und eine Zeit um. `TODATETIME("2024-09-25T12:30:00") → 2024-09-25 12:30:00 Medium TOPERIOD(text) Wandelt einen Text in einen Zeitraum (Period) um. `TOPERIOD("P1D") → 1 Tag Medium EPOCH(date) Gibt den Unix-Timestamp eines Datums zurück. `EPOCH("2024-09-25T12:00:00Z") → 1727203200 Medium NETWORKDAYS(start_date, end_date, ?holidays) Berechnet die Anzahl der Arbeitstage (Werktage) zwischen zwei Datumswerten. Optional können Feiertage angegeben werden. `NETWORKDAYS("2024-09-25", "2024-09-30") → 4 (zählt nur die Werktage) Medium WEEKNUM(date) Gibt die Kalenderwoche eines bestimmten Datums zurück. `WEEKNUM("2024-09-25") → 39 High HOUR(datetime) Extrahiert die Stunde aus einem DateTime-Objekt. `HOUR("2024-09-25T14:30:00") → 14 High MINUTE(datetime) Extrahiert die Minute aus einem DateTime-Objekt. `MINUTE("2024-09-25T14:30:00") → 30 High SECOND(datetime) Extrahiert die Sekunde aus einem DateTime-Objekt. `SECOND("2024-09-25T14:30:00") → 0 High TIME(hour, minute, second) Erstellt einen Zeitwert aus Stunde, Minute und Sekunde. TIME(14, 30, 0) → 14:30:00 Medium NOW() Gibt das aktuelle Datum und die Uhrzeit zurück. NOW() → Aktuelles Datum und Uhrzeit High TODAY() Gibt das aktuelle Datum zurück. TODAY() → Heutiges Datum High Ich wäre sehr interessiert, wenn ihr eure Findings und Wünsche hier entweder mit preis gebt oder wenn euch was auffällt, immer an diesen Thread hier denkt und eure Erkenntnisse teilen würdet. HK Edited January 13 by HK alias Holger 5 5
Manuel Rühl Posted September 25, 2024 Posted September 25, 2024 Also mein manuel[l]er SmapBot schlägt mir immer intuitiv NUM() oder CONVERTTONUMBER() oder so etwas in die Richtung vor. 😉 2 4
HK alias Holger Posted September 25, 2024 Author Posted September 25, 2024 (edited) Ja richtig. Convert() fehlt definitiv.. Edited September 25, 2024 by HK alias Holger 2
Sebastian Grünewald Posted September 25, 2024 Posted September 25, 2024 Bei uns wäre es es neben einer to_number() Funktion, definitiv ein lpad/padStart bzw. rpad/padEnd um Zeichenketten mit z.B. Nullen aufzufüllen. Aktuell müssen wir dies mit vielen IF-Funktionen hintereinander machen. 3
HK alias Holger Posted September 25, 2024 Author Posted September 25, 2024 Ich hab unsere Themen und diese hier mal in die ursprüngliche Liste ergänzt und werde das für weitere Findings dann immer nachziehen. Plan ist, dass ich dann mit unserem Dev Team dann hoffentlich bald ein paar low hanging fruits angehen kann.. 6
Manuel Rühl Posted September 26, 2024 Posted September 26, 2024 (edited) Was mir noch eingefallen ist: NETWORKDAYS() -> Anzahl der Arbeitstage zwischen zwei Datumswerten. Mit Parametern Samstag ja/nein und Urlaubstage z.B. 3.10 , 1.1, 25.12. etc... Zur Priorisierung: ABI 2006 - 09/2024 ..... Es gab in den 18 Jahren dazwischen nur ganz ganz wenige Momente wo ich dachte "Jetzt hilft nur noch die e-Funktion!" Edited September 26, 2024 by Manuel Rühl typo 5
Paul Bumann Posted September 26, 2024 Posted September 26, 2024 (edited) Ich find's jetzt schon ne ziemlich geile Sammlung! RANDOM() oder RAND() kommt recht regelmäßig bei mir auf dem Tisch vorbei. Kleiner Hinweis: e gibt's schon 😄 https://platform.smapone.com/Documentation/de/Topic/Formulas#namensbereich-const Über {const:e}. Edited September 26, 2024 by Paul Bumann 4
admin-smapone-rhd Posted November 19, 2024 Posted November 19, 2024 Formelzugriff auf die Metadaten einer Nutzergruppe Auf einen Nutzer (z.B. user:email) kann man ja schon referenzieren aber leider noch nicht auf eine Gruppe. Bsp.: IF(EQUALS({user:email},"[email protected]"), "abc", "def") Dann können die Mailadressen im Hintergrund wechseln und es können mit einem Mal alle Mailadressen der Gruppe angesprochen werden. Vorschlag: {group:name} 2 3
Paul Bumann Posted November 19, 2024 Posted November 19, 2024 @Michael Prem FYI. Hast Du noch Punkte, die hier dazugehören würden?
Bülent Erbas Posted January 13 Posted January 13 @HK alias Holger SPLIT({Eingabefeld}, "#") Das hat mir gerade Nova zum Aufteilen eines Texte angeboten. 1
HK alias Holger Posted January 13 Author Posted January 13 vor 25 Minuten schrieb Bülent Erbas: @HK alias Holger SPLIT({Eingabefeld}, "#") Das hat mir gerade Nova zum Aufteilen eines Texte angeboten. wie willst du das verwenden? Also wo könnte man das array was da zurückkommt weiterverwenden?
Bülent Erbas Posted January 13 Posted January 13 (edited) vor 35 Minuten schrieb HK alias Holger: wie willst du das verwenden? Also wo könnte man das array was da zurückkommt weiterverwenden? Das war in dem Test für Markus Ketelhut, mit der Annahme alle Codes in ein Eingabefeld mit einem Suffix "#" zu scannen und diese anschließend, anhand des Trennzeichens, extrahieren zu lassen. Daher kam Nova auf die Idee. Wollte es nur vollständigkeitshalber aufführen 😅 Edited January 13 by Bülent Erbas 2
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now