目标:计算一列有多少行有空值。
方法1(有效):
dt = CurrentDataTable();
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
方法2(有效):
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE></CODE></PRE><P> </P><P><U>方法3(不起作用):</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:ColName ,我希望它返回由生成的相同列引用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:ColName只返回列中的第一个值,我希望需要在GetRowsWhere(IsMissing(dt:ColName[]))语句,并且由于 Column(dt, "ColName") 已经返回一整列,为什么需要 [] ?