{"title":"Rule-based Row Splitter (Dictionary)","nodeType":"Manipulator","id":"*R2VVZ_ctKSLwUCUM","factoryName":"org.knime.base.node.rules.engine.twoports.RuleEngineSplitter2PortsNodeFactory","factoryId":"org.knime.base.node.rules.engine.twoports.RuleEngineSplitter2PortsNodeFactory","path":["Manipulation","Row","Filter"],"owner":"knime","ownerAccountId":"account:team:b5f0848f-496d-4e6a-b869-fa3532248db7","description":"<p>This node takes a list of user-defined rules and tries to match them to each row in the input table in the defined order. If a rule matches and the outcome is <tt>TRUE</tt> , the row will be selected for inclusion in the first output table. If the first matching rule yields <tt>FALSE</tt> the row will be included in the second output table. If no rule matches this row will be put to the second output table (like when the last rule would be <tt>TRUE &#61;&gt; FALSE</tt> ). The roles of first and second output table can be exchanged, see option below.</p><p>Each rule is represented by a row. To add comments, start a line in a (condition) cell with <tt>//</tt> (comments can not be placed in the same line as a rule). Anything after <tt>//</tt> will not be interpreted as a rule. Rules consist of a condition part (antecedent), which must evaluate to <i>true</i> or <i>false</i> , and an outcome (consequent, after the &#61;&gt; symbol) which is either <tt>TRUE</tt> or <tt>FALSE</tt> .</p>\n                        \n            <p>If no rule matches, the outcome is treated as if it was <tt>FALSE</tt> .</p>\n                        \n            <p>Columns are given by their names surrounded by $, numbers are given in the usual decimal representation. Note that strings must not contain (double-)quotes (for those cases use the following syntax: <tt>/Oscar Wilde&#39;s wisdom: &#34;Experience is simply the name we give our mistakes.&#34;/</tt> ). The flow variables are represented by <b>$${<!-- --></b> TypeCharacterAndFlowVarName <b>}$$</b> . The TypeCharacter should be &#39;D&#39; for double (real) values, &#39;I&#39; for integer values and &#39;S&#39; for strings.</p>\n                        \n            <p>The logical expressions can be grouped with parentheses. The precedence rules for them are the following: <tt>NOT</tt> binds most, <tt>AND</tt> , <tt>XOR</tt> and finally <tt>OR</tt> the least. Comparison operators always take precedence over logical connectives. All operators (and their names) are case-sensitive.</p>\n                        \n            <p>The <tt>ROWID</tt> represents the row key string, the <tt>ROWINDEX</tt> is the index of the row (first row has <tt>0</tt> value), while <tt>ROWCOUNT</tt> stands for the number of rows in the table.</p>\n                        \n            <p>Some example rules (each should be in one row):</p>\n                        \n            <pre>// This is a comment\n$Col0$ &gt; 0 &#61;&gt; TRUE\n</pre>\n                        When the values in Col0 are greater than 0, we select the row to the first outport (if no previous rule             matched with FALSE outcome).\n            \n            <pre>$Col0$ &#61; &#34;Active&#34; AND $Col1$ &lt;&#61; 5 &#61;&gt; TRUE\n</pre>\n                        You can combine conditions.\n            \n            <pre>$Col0$ LIKE &#34;Market Street*&#34; AND\n    ($Col1$ IN (&#34;married&#34;, &#34;divorced&#34;)\n        OR $Col2$ &gt; 40) &#61;&gt; FALSE\n</pre>\n                        With parentheses you can combine multiple conditions.\n            \n            <pre>$Col0$ MATCHES $${SFlowVar0}$$ OR $$ROWINDEX$$ &lt; $${IFlowVar1}$$ &#61;&gt;\n    FALSE\n</pre>\n                        The flow variables, table constants can also appear in conditions.\n            \n            <p>You can use either Ctrl&#43;Space to insert predefined parts, or select them from the upper controls.</p>\n                        \n            <p>The following comparisons result true (other values are neither less, nor greater or equal to missing and NaN values):</p><ul><li><b>?</b> &#61;,&lt;&#61;,&gt;&#61; <b>?</b></li><li><b>NaN</b> &#61;,&lt;&#61;,&gt;&#61; <b>NaN</b></li></ul>\n                            \n            \n            \n        \n        ","shortDescription":"Splits the input table based on user-defined (in a table) business rules","keywords":[],"deprecated":false,"streamable":true,"tags":["Manipulation","Row","Filter","Streamable"],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowYjM2YWM5Ny01ZWJhLTQwZTctOTE4OS1iYmU4ZDdkMGYyNGUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzA3QTY5QTIxNjhEMTFFNUJEOTVBMUI1OTFFQzZGQkIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MERGMjM3QTIxNjhEMTFFNUJEOTVBMUI1OTFFQzZGQkIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplYjRlYWE5NS1mMzM5LTQzZTctYmY1Yy0yNzFmOThkY2ZiMmIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MGIzNmFjOTctNWViYS00MGU3LTkxODktYmJlOGQ3ZDBmMjRlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+9lGt2QAAAItJREFUeNqsU4sKwCAITPHDty93GRkqS1rt4KCMrvMRMnOxFMRYj3Oni2MJUJEEDABjg2UPQ4TqgndFKmHXQYM8fiRwUgMtOJA4+ZCzy8A5eOt9nI94WTpB8dD2eFY7VwO5YBmHyhA6NZ2rqWWTtzIjGO0HJ6A0DvTwljhl/2DhX/ycwqTiaQqPAAMAr02BbDbPRaQAAAAASUVORK5CYII=","views":[],"inPorts":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Input table","description":"Any data table that should be split"},{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Rules","description":"Table containing the rules"}],"outPorts":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"First output","description":"First output table with rows that are evaluated to TRUE"},{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Second output","description":"Second output table with rows that are evaluated to FALSE"}],"dynInPorts":[],"dynOutPorts":[],"additionalSiteInformation":{"url":"https://update.knime.com/analytics-platform/5.12","trusted":true,"enabledByDefault":true,"name":"KNIME Analytics Platform 5.12 Update Site","version":"5.12.0"},"dialog":[{"sectionName":"Options","fields":[{"name":"Dictionary mode","description":"Choose how the rules table encodes the rules.\n<ul><li><b>Rule</b> : A single column contains the full rule expression including the outcome (e.g. &#34;$Col$ &gt; 0 &#61;&gt; TRUE&#34;).</li><li><b>Condition and value</b> : Two separate columns are used: one for the condition part of the rule and one for the outcome value.</li></ul>","optional":false},{"name":"Rule column","description":"The column in the rules table that contains the full rule expressions (condition and outcome combined, e.g. &#34;$Col$ &gt; 0 &#61;&gt; TRUE&#34;).","optional":false},{"name":"Condition column","description":"The column in the rules table that contains the condition part of each rule (e.g. &#34;$Col$ &gt; 0&#34;).","optional":false},{"name":"Value column","description":"The column in the rules table that contains the outcome value for each rule (e.g. &#34;TRUE&#34; or &#34;FALSE&#34;).","optional":false},{"name":"Treat values starting with $ as references","description":"When checked, values in the value column that start with $ will be treated as references (for example, column, flow variable, or table property references) rather than literal string values.","optional":false},{"name":"Send matching rows to","description":"A row is considered matching if the first rule that applies evaluates to TRUE. If the first matching rule evaluates to FALSE or no rule matches, the row is considered non-matching. Non-matching rows are sent to the other output table.","optional":false}]}],"links":[],"kudos":[],"kudosCount":0,"bundleInformation":{"bundleVersion":"5.12.0.v202606171353","bundleName":"KNIME Java Snippet Nodes","bundleSymbolicName":"org.knime.jsnippets","bundleVendor":"KNIME AG, Zurich, Switzerland","featureSymbolicName":"org.knime.features.javasnippet","featureName":"KNIME Javasnippet","featureVersion":"5.12.0.v202606171353","featureVendor":"KNIME AG, Zurich, Switzerland","extensionId":"*hXfYFyb7ZzM0xseG"},"frequentSuccessors":[{"id":"*5stmXk6zY_ORA4bC","factoryName":"org.knime.base.node.preproc.groupby.GroupByNodeFactory","probability":0.15517241379310345},{"id":"*G8O2L3fpRpwYK8F_","factoryName":"org.knime.base.node.rules.engine.RuleEngineSplitterNodeFactory","probability":0.10344827586206896},{"id":"*0rhLXWO6OS1xMi8T","factoryName":"org.knime.base.node.preproc.append.row.AppendedRowsNodeFactory","probability":0.08620689655172414},{"id":"*eOn8ibZnxIkY7XhT","factoryName":"org.knime.base.node.preproc.stringmanipulation.StringManipulationNodeFactory","probability":0.06896551724137931},{"id":"*R2VVZ_ctKSLwUCUM","factoryName":"org.knime.base.node.rules.engine.twoports.RuleEngineSplitter2PortsNodeFactory","probability":0.05172413793103448},{"id":"*ZgYyOm1P9VJVBE9e","factoryName":"org.knime.base.node.preproc.joiner.Joiner2NodeFactory","probability":0.034482758620689655},{"id":"*6CbObXLq9oHq_EFi","factoryName":"org.knime.base.node.preproc.constantvalue.ConstantValueColumnNodeFactory","probability":0.034482758620689655},{"id":"*DOkyMaii62U05xZ1","factoryName":"org.knime.base.node.preproc.filter.column.DataColumnSpecFilterNodeFactory","probability":0.034482758620689655},{"id":"*JiJhJpgkWWuOfG2s","factoryName":"org.knime.ext.poi2.node.write2.XLSWriter2NodeFactory","probability":0.034482758620689655},{"id":"*dFOX6ADqOFSQJtqe","factoryName":"org.knime.base.node.preproc.columnheaderextract.ColumnHeaderExtractorNodeFactory","probability":0.017241379310344827}]}
