Objetivo: contar cuántas filas de una columna tienen valores vacíos.
Método 1 (funciona):
dt = CurrentDataTable();
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
Método 2 (funciona):
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE></CODE></PRE><P> </P><P><U>Método 3 (no funciona):</U></P><PRE><CODE class=" language-jsl">Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
El error devuelto por el depurador para el Método 3 es "el argumento debe ser numérico{1} en el acceso o evaluación de 'Is Missing' , Is Missing/*###*/(Column( dt, "ColName" ))"
Por lo tanto, es bastante fácil entender que hacer referencia a una columna por dt:ColName es idéntico a dt:Name("ColName"), pero estoy confundido en cuanto a por qué Column(dt, "ColName") funciona de manera diferente.
Además, si tuviera que hacer lo siguiente:
ref1 = dt:ColName;
ref2 = dt:Name("ColName");
ref3 = Column(dt, "ColName");Luego obtengo ref1 y ref2 con un solo valor numérico (correspondiente al primer valor en la columna), mientras que ref3 es una referencia a un objeto de columna apropiado (como hubiera esperado que se lograran las tres declaraciones).
Los resultados de ref1 y ref2 me parecen especialmente extraños: los métodos n. ° 1 y n. la columna.Parece que lo que sucede es que cuando dt:ColName se establece en una variable, es inaceptable usar la totalidad de dt:ColName y, en cambio, elige establecer la variable en dt:ColName[1].
¿Por qué tener este comportamiento?cuando uso ref = dt:NombreCol , esperaría que devuelva la misma referencia de columna generada por ref = Columna(dt, "NombreCol") o quizás una matriz/lista llena de valores que corresponden al contenido de la columna en el orden en que aparecen.
Esencialmente, mis preguntas se reducen a (1) por qué se comportan de manera diferente, (2) ¿hay una manera fácil de identificar cuándo se debe usar dt:ColName y cuándo se debe usar Column(dt, "ColName")? y (3) ¿por qué ref1 = dt:UFC devolver una referencia al primer valor de la columna en lugar de una referencia a la columna en sí o una matriz/lista completa que corresponde a todos los valores de la columna?
¡Gracias!
La razón por la que se necesita [] es porque Obtener filas donde se basa en la fila actual. El uso de Column("X")[] se refiere a la fila actual de la columna "X" y es equivalente a Column("X")[Row()].
Como @pmroz dicho, AsColumn("X") funcionará porque devuelve una referencia a la columna en la fila actual.
Mensajes como Obtener filas dónde y Seleccionar dónde dependen de la fila actual, además de los bucles Para cada fila y las fórmulas de columna.
También funcionará con COMO COLUMNA :
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
Actualización: me acabo de dar cuenta de que el Método n. ° 3 funcionará si se usa
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
Todavía se siente como un comportamiento extraño para mí. Si ref = Columna(dt, "NombreCol") devuelve una referencia de columna, ¿por qué necesito [] aquí?
Esperaría lo contrario, ya que ref = dt:NombreCol solo devuelve el primer valor en la columna, esperaría necesitar usar [] en el ObtenerFilasDónde(Falta(dt:NombreCol[])) declaración, y dado que Column(dt, "ColName") ya devuelve una columna completa, ¿por qué es necesario []?