{"title":"Rule-based Row Filter (Dictionary)","nodeType":"Manipulator","id":"*hwUzd18K73MkWZTq","factoryName":"org.knime.base.node.rules.engine.twoports.RuleEngineFilter2PortsNodeFactory","factoryId":"org.knime.base.node.rules.engine.twoports.RuleEngineFilter2PortsNodeFactory","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. If the first matching rule has a <tt>TRUE</tt> outcome, the row will be selected for inclusion. Otherwise (i.e. if the first matching rule yields <tt>FALSE</tt> ) it will be excluded. If no rule matches the row will be excluded. Inclusion and exclusion may be inverted, see the options 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 (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>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":"Filters 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+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowYjM2YWM5Ny01ZWJhLTQwZTctOTE4OS1iYmU4ZDdkMGYyNGUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzA3QTY5QTYxNjhEMTFFNUJEOTVBMUI1OTFFQzZGQkIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzA3QTY5QTUxNjhEMTFFNUJEOTVBMUI1OTFFQzZGQkIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplYjRlYWE5NS1mMzM5LTQzZTctYmY1Yy0yNzFmOThkY2ZiMmIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MGIzNmFjOTctNWViYS00MGU3LTkxODktYmJlOGQ3ZDBmMjRlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+LlJYVwAAAJJJREFUeNqkUwEKwCAIzPD/X3a7yFCX0Uo4aIY3Pa8qIsUCEXM9Lx0uX0sIJVmEENH4qOUsBgm/BzkleUGnHbTAz68IbjRQwYnRyY+Z3QSug9nuoz9iMTbB8dLuONPOaYACi2TWNi+Ko1t5w3kzYhiJPlbOOkm0aG7k1TvYcGlupN4FKaCBwvpgS8TZeCjG+RFgABp0gQmIJRi2AAAAAElFTkSuQmCC","views":[],"inPorts":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Input table","description":"Any data table from which to filter rows"},{"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":"Filtered","description":"Data table with the included rows"}],"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":"Filter behavior","description":"Choose whether to output matching or non-matching rows.\n<ul><li><b>Output matching rows</b> : Rows where the first matching rule evaluates to TRUE are included in the output.</li><li><b>Output non-matching rows</b> : Rows where the first matching rule evaluates to FALSE or no rule matches are included in the output.</li></ul>","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.08264462809917356},{"id":"*Q-yW-3C9DumtInuz","factoryName":"org.knime.base.node.rules.engine.RuleEngineFilterNodeFactory","probability":0.08264462809917356},{"id":"*ZgYyOm1P9VJVBE9e","factoryName":"org.knime.base.node.preproc.joiner.Joiner2NodeFactory","probability":0.05785123966942149},{"id":"*hwUzd18K73MkWZTq","factoryName":"org.knime.base.node.rules.engine.twoports.RuleEngineFilter2PortsNodeFactory","probability":0.049586776859504134},{"id":"*LKxrCJihG46anH0Q","factoryName":"org.knime.base.node.preproc.filter.rowref.RowFilterRefNodeFactory","probability":0.04132231404958678},{"id":"*GpUdH91fJl4_KfiB","factoryName":"org.knime.base.node.rules.engine.twoports.RuleEngine2PortsNodeFactory","probability":0.04132231404958678},{"id":"*6CbObXLq9oHq_EFi","factoryName":"org.knime.base.node.preproc.constantvalue.ConstantValueColumnNodeFactory","probability":0.04132231404958678},{"id":"*0rhLXWO6OS1xMi8T","factoryName":"org.knime.base.node.preproc.append.row.AppendedRowsNodeFactory","probability":0.03305785123966942},{"id":"*DBlot_cJykJ7wkzA","factoryName":"org.knime.base.node.preproc.filter.nominal.NominalValueRowFilterNodeFactory","probability":0.03305785123966942},{"id":"*AApA5VHd41CVDe7u","factoryName":"org.knime.base.node.meta.looper.LoopEndNodeFactory","probability":0.024793388429752067}]}
