目标:计算一列中有多少行具有空值。
方法一(有效):
dt = CurrentDataTable();
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
方法2(有效):
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE></CODE></PRE><P> </P><P><U>方法三(无效):</U></P><PRE><CODE class=" language-jsl">Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
调试器为方法 3 返回的错误是“在访问或评估‘Is Missing’时,参数应该是数字{1},Is Missing/*###*/(Column( dt, "ColName" ))”
因此,很容易理解通过 dt:ColName 引用列与 dt:Name("ColName") 相同,但我对 Column(dt, "ColName") 为何表现不同感到困惑。
此外,如果我要执行以下操作:
ref1 = dt:ColName;
ref2 = dt:Name("ColName");
ref3 = Column(dt, "ColName");然后我得到 ref1 和 ref2 持有单个数值(对应于列中的第一个值),而 ref3 是对适当的 Column 对象的引用(正如我期望所有三个声明完成的那样)。
ref1 和 ref2 的结果对我来说似乎特别奇怪——上面的方法 #1 和 #2 返回了列中正确数量的空单元格,所以很明显,在那些引用的实现中,它不仅仅是查看中的第一个值专栏。看起来正在发生的事情是,当 dt:ColName 被设置为一个变量时,使用整个 dt:ColName 是不可接受的,而是选择将变量设置为 dt:ColName[1]。
为什么会有这种行为?当我使用ref = dt:列名,我希望它返回由生成的相同列引用ref = Column(dt, "ColName")或者可能是一个充满值的矩阵/列表,这些值按照它们出现的顺序对应于列的内容。
本质上,我的问题归结为(1)为什么这些行为不同,(2)是否有一种简单的方法来确定何时需要使用 dt:ColName 以及何时需要使用 Column(dt, "ColName") , (3) 为什么ref1 = dt:CFU返回对列中第一个值的引用,而不是对列本身的引用或对应于列中所有值的完全填充的矩阵/列表?
谢谢!
需要 [] 的原因是因为 Get Rows Where 依赖于当前行。 使用 Column("X")[] 引用列“X”的当前行,等同于 Column("X")[Row()]。
作为@pmroz说,AsColumn("X") 将起作用,因为它返回对当前行列的引用。
除了 For Each Row 循环和列公式之外,诸如 Get Rows Where 和 Select Where 之类的消息取决于当前行。
它还将与作为专栏:
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
更新:刚刚意识到如果使用方法#3 将起作用
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
对我来说仍然感觉很奇怪。 如果ref = Column(dt, "ColName")返回列引用,为什么这里需要 []?
我希望相反——因为ref = dt:列名只返回列中的第一个值,我希望需要在GetRowsWhere(IsMissing(dt:ColName[]))语句,并且由于 Column(dt, "ColName") 已经返回了整个列,为什么 [] 是必要的?