Compartir a través de


Archivo Léame para el ejemplo de utilidad de línea de comandos Ascmd

Actualizado: 12 de diciembre de 2006

La utilidad de línea de comandos ascmd permite que el administrador de la base de datos ejecute secuencias de comandos XMLA, consultas MDX o instrucciones DMX en una instancia de Microsoft SQL Server 2005 Analysis Services (SSAS). Esta utilidad de línea de comandos incluye una funcionalidad para Analysis Services que se parece a la utilidad sqlcmd incluida en SQL Server 2005. Para obtener más información, vea el tema sqlcmd (utilidad) en SQL Server 2005. Los resultados de la ejecución de la secuencia de comandos, la consulta o la instrucción pueden almacenarse en un archivo junto con la información de traza relevante del Analizador de SQL Server. La ubicación de instalación predeterminada de la utilidad de línea de comandos ascmd es la siguiente:

<system_drive>\Archivos de programa\Microsoft SQL Server\90\Samples\Analysis Services\Administrator\ascmd

Escenarios

Los siguientes escenarios proporcionan ejemplos del uso de la utilidad de línea de comandos ascmd.

Procesar una partición desde una herramienta de terceros

El administrador de base de datos debe procesar las particiones y las dimensiones como parte de un proceso nocturno de extracción, transformación y carga (ETL). La herramienta ETL no pertenece a SQL Server, con lo que el administrador de bases de datos no puede utilizar la compatibilidad integrada de secuencias de comandos XMLA del Agente SQL Server ni ejecutar un paquete de SQL Server 2005 Integration Services (SSIS). El administrador de bases de datos busca una solución automatizada que utilice la herramienta de otro fabricante. La solución es una utilidad de línea de comandos para ejecutar una secuencia de comandos XMLA. Por tanto, la utilidad se llama desde la herramienta de otro fabricante. El administrador descarga y compila el ejemplo de la utilidad de línea de comandos ascmd. Tras la compilación, el administrador de bases de datos puede utilizar la utilidad de línea de comandos ascmd para ejecutar secuencias de comandos XMLA que procesen particiones y dimensiones.

Hacer copias de seguridad de bases de datos OLAP desde una herramienta de terceros

Se requiere que otro administrador de la base de datos de la misma compañía automatice la copia de seguridad de una base de datos de Analysis Services. Puesto que el software de programación que utiliza la compañía no es una herramienta de SQL Server, la tarea debe ejecutarse desde la línea de comandos. El administrador de bases de datos genera la secuencia de comandos XMLA adecuada (mediante SQL Server Management Studio). A continuación, el software de programación de otro fabricante utiliza la utilidad de línea de comandos ascmd para ejecutar la secuencia de comandos XMLA a fin de realizar la copia de seguridad de la base de datos OLAP.

Usar XMLA durante una instalación

Se requiere que el programador de un proveedor de software independiente integre la ejecución de una secuencia de comandos XMLA directamente en la instalación del producto de la compañía. El programador debe ejecutar una secuencia de comandos XMLA y recuperar el estado (y los eventos de traza) para saber que la base de datos de Analysis Services se ha creado correctamente. El programador puede realizar esta operación mediante la utilidad de línea de comandos ascmd.

Lenguajes

  • C#, el lenguaje en que está codificado ascmd.
  • Comandos de archivo de proceso por lotes, que inician la utilidad de línea de comandos ascmd.

Requisitos previos

Para utilizar de forma eficaz la utilidad de línea de comandos ascmd, debe tener instalados todos estos programas (o parte de ellos):

  • Microsoft SQL Server 2005 Analysis Services (SSAS)
    Una instancia de Analysis Services debe estar instalada y en ejecución, porque la utilidad de línea de comandos ascmd se utiliza para conectarse a una instancia de Analysis Services y ejecutar consultas MDX, secuencias de comandos XMLA e instrucciones DMX.
  • SQL Server Management Studio y Business Intelligence Development Studio
    Estos dos entornos de trabajo proporcionan una infraestructura compatible para que pueda completar las tareas relacionadas con Analysis Services. En cualquier tarea, puede llevar a cabo la implementación mediante la interfaz de usuario o mediante programación.
  • Objetos de administración de análisis (AMO)
    Los AMO son necesarios para ejecutar la utilidad de línea de comandos ascmd en un equipo en el que no esté instalado Analysis Services. Los AMO se pueden instalar desde el Feature Pack de SQL Server 2005, que se puede descargar desde el Centro de descarga Microsoft en https://www.microsoft.com/downloads.
  • Microsoft Visual Studio 2005 o el SDK 2.0 de .NET Framework
    Se recomienda utilizar Visual Studio 2005 cuando se esté generando o personalizando la aplicación de ejemplo ascmd. Si no dispone de Visual Studio 2005, utilice el SDK 2.0 de .NET Framework. El SDK de .NET Framework incluye el archivo MSBuild.exe (vea la sección sobre la compilación del ejemplo, más adelante).

Argumentos

En la línea de comandos de ascmd se admiten los siguientes argumentos.

  • –Ulogin_id
    Es el Id. de inicio de sesión del usuario, que distingue mayúsculas de minúsculas.

    [!NOTA] El uso de login_id es diferente para sqlcmd y ascmd. En sqlcmd, login_id representa un inicio de sesión de SQL Server; para ascmd, representa un inicio de sesión de Windows.

    Para el acceso TCP/IP, Analysis Services sólo admite conexiones de confianza. Si se especifica el parámetro –U (junto con la contraseña coincidente mediante el parámetro –P), la utilidad de línea de comandos ascmd inicia una sesión en el sistema operativo Windows mediante la cuenta especificada; posteriormente, suplanta la cuenta al ejecutar la secuencia de comandos XMLA, la consulta MDX o la instrucción DMX. El Id. de inicio de sesión debe tener el formato <dominio>\<nombreDeUsuario>; debe especificarse el dominio. Si no se especifica –U, la autenticación se basa en la cuenta de Windows del usuario que ejecuta la utilidad de línea de comandos ascmd.

    Si se especifica una conexión http (o https) mediante el parámetro –S, la utilidad de línea de comandos ascmd no inicia ninguna sesión en el sistema operativo Windows. En su lugar, los parámetros –U y –P (si están disponibles) se incluyen como parte de la cadena de conexión al servidor de Servicios de Internet Information Server (IIS). Según la configuración de IIS, los parámetros –U y –P se pueden utilizar para la autenticación básica. Para obtener más información acerca del parámetro de la cadena de conexión “UID”, vea el tema AdomdConnection en los Libros en pantalla de SQL Server 2005.

  • –Ppassword
    Es una contraseña especificada por el usuario correspondiente al parámetro –U. Si se especifica el parámetro –U pero no el parámetro –P, se supone que la contraseña está en blanco (una cadena vacía de longitud cero). Si se especifica el parámetro –P pero no el parámetro –U, se omite –P.

    ms365187.security(es-es,SQL.90).gifNota de seguridad:
    No utilice una contraseña en blanco. Utilice una contraseña segura. Para obtener más información, vea Contraseñas seguras en los Libros en pantalla de SQL Server 2005. La contraseña del parámetro –P se almacena como texto no cifrado en el archivo de secuencia de comandos, de consulta o de instrucción; estará visible para cualquier usuario que pueda ver el monitor del equipo o leer el archivo. Si utiliza esta característica, coloque listas de control de acceso (ACL) en los archivos, o bien recurra a otras técnicas de seguridad para asegurarse de que sólo los usuarios de confianza puedan leer los archivos.
  • –Sserver\instance o bien –Shttp[s]://server[:port]/virtualdirectory/msmdpump.dll
    Especifica la instancia de Analysis Services en la que se ejecutará y a la que se conectará la utilidad de línea de comandos ascmd. Si no se especifica el parámetro –P, la utilidad de línea de comandos ascmd se conecta a la instancia predeterminada de Analysis Services en el equipo local que está ejecutando TCP (conexión con localhost) y ejecuta la secuencia de comandos XMLA, la consulta MDX o la instrucción DMX.
  • –ddatabase
    Especifica la base de datos en la que se ejecutará una consulta MDX o una instrucción DMX. El parámetro –d se omite cuando la utilidad de línea de comandos ascmd ejecuta una secuencia de comandos XMLA, ya que este tipo de secuencias de comandos tienen incrustado el nombre de la base de datos.
  • –tquery-timeout
    Especifica el número de segundos antes de que se agote el tiempo de espera de la ejecución de una secuencia de comandos XMLA, una consulta MDX o una instrucción DMX. La utilidad de línea de comandos ascmd agrega la cláusula TIMEOUT =<query-timeout> a la cadena de conexión.
  • –tcconnect-timeout
    Especifica el número de segundos antes de que se agote el tiempo de espera de la conexión de ascmd a la instancia de Analysis Services. La utilidad de línea de comandos ascmd agrega la cláusula CONNECT TIMEOUT =<connect-timeout> a la cadena de conexión.
  • –iinput-file
    Identifica el archivo que contiene la secuencia de comandos XMLA, la consulta MDX o la instrucción DMX. Debe especificar un valor para los parámetros –i o –Q al usar la utilidad de línea de comandos ascmd. Si no especifica los parámetros –i o –Q o bien especifica los dos a la vez, se genera un error.

    [!NOTA] A diferencia de la utilidad de línea de comandos sqlcmd (que puede controlar varios archivos de entrada), la utilidad ascmd sólo puede procesar un archivo de entrada a la vez. Si tiene más de un archivo de entrada, cada uno debe llamarse y ejecutarse de forma independiente.

    El archivo de entrada especificado con los parámetros –i o –Q debe tener una estructura XML válida y los caracteres especiales deben estar codificados en HTML. Por ejemplo, cuando utilice una y comercial (&) en el texto, debe codificarse como &amp;. Por ejemplo, [Product].&[1922] se codificará como [Product].&amp;[1922]. De la misma manera, un signo menor que (<) se debe codificar como &lt;, un signo mayor que (>) como &gt; y comillas dobles (") como &quot;. Esto es importante para las consultas MDX y las instrucciones DMX, porque la sintaxis de las claves de miembro utilizan el carácter de "y" comercial (&).

    [!NOTA] Si el texto de entrada no se parece a una secuencia de comandos XMLA, es decir, no se inicia con un comando XMLA válido como <Statement> o <Create> (vea la lista completa posteriormente en este documento), la utilidad de línea de comandos ascmd supone que el texto es un elemento <Statement> y HTML codifica el texto y lo ajusta en una etiqueta del elemento XML <Statement> … </Statement>. Esto se hace por comodidad, de forma que la ejecución de consultas MDX e instrucciones DMX resulte más sencilla. Si desea utilizar elementos <Statement> y escribir el texto HTML usted mismo, lo puede hacer. Todos los comandos XMLA válidos son aceptados por la utilidad de línea de comandos ascmd.

    Un archivo de entrada puede incluir varios lotes, separados por comandos GO. Cada uno de los lotes de un archivo de entrada puede incluir una secuencia de comandos XMLA, una consulta MDX o una instrucción DMX. Cada comando GO debe aparecer en una línea distinta. El sistema, al encontrar un comando GO, envía al servidor la entrada anterior al comando GO. Hay un comando GO implícito al final de la secuencia de entrada. Se aplica formato al archivo de salida generado mediante la agrupación de las secuencias XML devueltas con un elemento <varios lotes>. Vea el Escenario 11 para obtener un ejemplo de un archivo de entrada que incluye varios lotes.

    Todos los lotes se ejecutan, y lo hacen correctamente o generan errores por derecho propio. El estado devuelto de cada lote se registra en el archivo de salida, que puede analizar para determinar si cada uno de los lotes se ha ejecutado correctamente o ha generado errores.

  • –ooutput-file | NUL | NUL:filename
    Identifica el archivo que recibe (en XML) los resultados de la secuencia de comandos XMLA o el conjunto de celdas que devuelve la consulta MDX o la instrucción DMX Si el archivo especificado ya existe, se sobrescribirá automáticamente. Los nombres de archivo que contienen espacios deben incluirse entre comillas (""). Si el nombre de archivo no es válido, se genera un mensaje de error y se cierra la utilidad de línea de comandos ascmd.

    La utilidad de línea de comandos ascmd no es compatible con la escritura simultánea de varios procesos de ascmd en el mismo archivo; si se intenta realizar esta operación, la salida del archivo quedará dañada o será incorrecta.

    Si el archivo de salida especificado es NUL o NUL:filename, los resultados de la ejecución se descartan a menos que se utilice el parámetro –T para especificar un archivo de traza; en ese caso, los resultados se almacenan en dicho archivo. Especificar un archivo de salida NUL con el parámetro –T resulta de gran utilidad al especificar un nivel de traza Duration con el parámetro –Tl.

    Por ejemplo, puede crear una serie de consultas MDX y ejecutarlas con la utilidad de línea de comandos ascmd, omitir los resultados (que podrían ser muy grandes), registrar la duración de las consulta en un archivo de traza y cargar los valores de duración de las consultas del archivo de traza en una base de datos. Esto permite evaluar las variaciones de rendimiento a lo largo del tiempo. De forma alternativa, puede utilizar el nivel de traza Duration-result con el parámetro –Tl para incluir el resultado de la duración y la ejecución en el archivo de traza.

    [!NOTA] La utilidad de línea de comandos ascmd admite la codificación internacional. Los archivos de entrada y salida utilizan la codificación UTF-8 con los marcadores de orden de bytes habilitados. Si el editor de texto no es compatible con UTF-8 y tiene caracteres internacionales en la consulta MDX, en la secuencia de comandos XMLA o en la instrucción DMX, puede utilizar el Bloc de notas para convertir el archivo de entrada al formato UTF-8. Para convertir el archivo de entrada a UTF-8, ábralo en el Bloc de notas, seleccione Guardar como en el menú Archivo y, en el cuadro Codificación, seleccione UTF-8. A continuación puede utilizar el archivo con el parámetro –i. Los archivos de salida y traza (–o y –T) siempre se escriben con codificación UTF-8 y marcadores de orden de bytes para garantizar la conservación de los caracteres Unicode.

  • –Ttrace-file
    Identifica un archivo que recibe eventos de traza de Analysis Services de la utilidad de línea de comandos ascmd que ejecuta la secuencia de comandos XMLA, la consulta MDX o la instrucción DMX. Si ya existe el archivo, se sobrescribe automáticamente (a excepción de los archivos de traza que se crean al utilizar la configuración de los parámetros –TlDuration y –TlDuration-result). Los nombres de archivo que contienen espacios deben incluirse entre comillas (""). Si el nombre de archivo no es válido, se genera un mensaje de error y se cierra la utilidad de línea de comandos ascmd.

    La utilidad de línea de comandos ascmd no es compatible con la escritura simultánea de varios procesos de ascmd en el mismo archivo; si se intenta realizar esta operación, la salida del archivo quedará dañada o será incorrecta. Si no se especifica el parámetro –T, no se captura el resultado de traza y se omiten los parámetros –Tf, –Tl, Td y –Tt.

    [!NOTA] El parámetro –T no está disponible al utilizar el acceso http o https. Debe utilizar una conexión normal cliente/servidor especificando el parámetro –S.

  • –xcextended-connect-string
    Especifica una cadena de conexión ampliada que se inserta directamente en la cadena de conexión, sin comprobación de valores. La cadena no puede contener puntos y coma (;) iniciales ni finales. Por ejemplo, la siguiente cadena de conexión ampliada cambia el tamaño del paquete de red utilizado entre el servidor y el proceso de ascmd de 4096 a 16384. Asimismo, solicita que la configuración regional del cliente se establezca en el valor en-US (Inglés de EE.UU.):

    -xc "Packet Size=16384;LocaleIdentifier=1033"

    El valor predeterminado de la utilidad de línea de comandos ascmd no agrega información acerca de la cadena de conexión ampliada. Aunque muchas de las opciones de la utilidad de línea de comandos ascmd pueden implementarse como opciones de cadena de conexión ampliada (por ejemplo, configurando Database=<database name> directamente), es recomendable utilizar opciones estándar de ascmd en la medida de lo posible y sólo recurrir a las opciones de cadena de conexión ampliada cuando no disponga de otros mecanismos.

  • –Tftext | csv
    Especifica el formato de archivo del parámetro –T (si se ha especificado dicho parámetro). El valor predeterminado es csv. Las opciones disponibles son las siguientes:

    • Para texto, el archivo se escribe en formato de texto. A continuación figuran algunos ejemplos de formato:
      <hora actual> <clase de evento>.<subclase de evento>, [nombre=valor]
    • Para csv, el archivo se escribe en formato delimitado por comas. El delimitador de columnas predeterminado es | (barra vertical); utilice el parámetro –Td para cambiar el delimitador predeterminado de un archivo CSV. En la primera línea del archivo se especifican los encabezados de columna para los valores.
  • –Tddelim-char
    Especifica un único carácter como delimitador del archivo de traza al especificar csv como formato del archivo de traza que utiliza el parámetro –Tf. El valor predeterminado es | (barra vertical).
  • –Tttrace-timeout
    Especifica el número de segundos que el motor de Analysis Services espera antes de finalizar la traza (si especifica el parámetro –T). Se considera que la traza ha terminado si no se han registrado mensajes relacionados con ella durante el período de tiempo especificado. El valor predeterminado del tiempo de espera de traza es de 5 segundos.
  • –Tltrace-level
    Especifica qué datos se recopilan y registran en el archivo de traza. Este parámetro tiene los cinco posibles valores siguientes:

    • High: registra todos los eventos de traza (opción predeterminada).
    • Medium: registra todos los eventos de traza, excepto los eventos de notificación y ProgressReportCurrent.
    • Low: registra sólo aquellos eventos de traza que contienen "End" o "Error" en el evento.
    • Duration: no registra eventos de traza, pero determina la duración de la ejecución de la secuencia de comandos, la consulta o la instrucción por parte del proceso ascmd. Escribe una sola entrada en el archivo de traza con la hora actual, la duración, el texto de la ejecución, la base de datos y el nombre del servidor.
    • Duration-result: registra la misma información que la opción Duration y registra además el resultado de la ejecución en la última columna del archivo de traza.

    [!NOTA] Los archivos de traza generados con las opciones Duration y Duration-result no se sobrescriben con cada ejecución (como en el caso de los archivos de traza generados con las opciones High, Medium y Low). Sin embargo, con los parámetros Duration y Duration-result, si existe un archivo de traza, se abrirá y se anexarán nuevos valores al final del mismo. Si el archivo de traza no existe aún, se crea.

  • –Q*"cmdline query or script"*
    Especifica la secuencia de comandos, la consulta o la instrucción reales directamente en la línea de comandos en lugar de hacerlo en un archivo.

    [!NOTA] La utilidad de línea de comandos sqlcmd admite una forma adicional de especificar la consulta de entrada (mediante el parámetro –q). Desafortunadamente, puesto que la opción lee desde sysinput, no puede escribirla a menos que agregue más construcciones de lenguaje. Por ejemplo, sqlcmd utiliza “go” y “exit” para controlar los comandos de sysinput. La utilidad de línea de comandos ascmd no admite esta forma adicional de especificar la entrada de consulta.

  • –v var=value...
    Especifica variables de secuencias de comandos adicionales. Cada variable es un par var = value. Si el valor contiene espacios incrustados o caracteres de control, debe estar incluido entre comillas dobles ("). Por ejemplo,

    -v maxparallel=4 option= "degree of freedom"

    Puede especificar cero, uno o varios pares var = value.

  • –? o /?
    Muestra el resumen de sintaxis de las opciones de la utilidad de línea de comandos ascmd.

Cifrado de claves y compilación del ejemplo

Si aún no ha creado un archivo de clave de nombre seguro, genere este archivo mediante las siguientes instrucciones.

Para generar un archivo de clave de nombre seguro

  1. Abra un símbolo del sistema de Microsoft Visual Studio 2005. Haga clic en Inicio, seleccione Todos los programas, Microsoft .NET Framework SDK 2.0 y, a continuación, haga clic en Símbolo del sistema de SDK.

    -- O bien --

    Abra un símbolo del sistema de Microsoft .NET Framework. Haga clic en Inicio, seleccione Todos los programas, Microsoft .NET Framework SDK 2.0 y, a continuación, haga clic en Símbolo del sistema de SDK.

  2. Use el comando de cambio de directorio (CD) para cambiar el directorio actual a la carpeta donde están instalados los ejemplos.

    [!NOTA] para determinar la carpeta donde se encuentran los ejemplos, haga clic en el botón Inicio, seleccione Todos los programas, Microsoft SQL Server, Documentación y tutoriales y, a continuación, haga clic en el directorio Ejemplos. Si se usó la ubicación de instalación predeterminada, los ejemplos se encontrarán en <unidadDeSistema>:\Archivos de programa\Microsoft SQL Server\100\Ejemplos.

  3. En el símbolo del sistema, ejecute el comando siguiente para generar el archivo de clave:

    sn -k SampleKey.snk

    ms365187.note(es-es,SQL.90).gifImportante:
    Para obtener más información acerca del par de claves de nombre seguro, vea el apartado sobre informes de seguridad de nombres seguros y seguridad en .NET Framework en el centro de desarrollo de .NET de MSDN.

La compilación del ejemplo puede llevarse a cabo mediante uno de los dos métodos siguientes.

  • Mediante Visual Studio 2005 compile el ejemplo con la solución de Visual Studio proporcionada en la carpeta <rutaDeInstalación>\Samples\Analysis Services\Administrator\ascmd\cs.

  • Mediante MSBuild, que se incluye en el SDK 2.0 de .NET Framework: compile el ejemplo al ejecutar los siguientes comandos en el símbolo del sistema:

    cd Analysis Services\Administrator\ascmd\CS\ascmd
    msbuild ascmd.csproj /nologo /v:quiet /p:Configuration=Debug;Platform=<platform>
    

[!NOTA] Microsoft Visual Studio es totalmente compatible con los equipos basados en x86 y x64, pero no con los basados en Itanium. Una vez compilada la utilidad de línea de comandos ascmd, se puede ejecutar en cualquier equipo x86, x64 o basado en Itanium.

En el código anterior, el valor del parámetro <plataforma> puede ser x86 para equipos de 32 bits, x64 para equipos basados en x64 o Itanium para equipos basados en IA-64. Se recomienda compilar la versión adecuada de la utilidad de línea de comandos ascmd, ya que el rendimiento puede reducirse al ejecutar código de 32 bits en un equipo de 64 bits.

[!NOTA] Si compila la utilidad de línea de comandos ascmd en un equipo cuya arquitectura sea diferente a la del equipo de destino (por ejemplo, si compila la utilidad de línea de comandos ascmd en un equipo de 32 bits mediante el valor de parámetro x64 o Itanium, recibirá tres mensajes de advertencia que indican que no hay tres DLL de sistema independientes disponibles ("…tiene como destino otro procesador"). Esto es lo normal y previsto. Tras compilar la utilidad de línea de comandos ascmd, basta con copiar el archivo ejecutable compilado en el servidor de destino y ejecutarlo desde dicha ubicación (donde estén disponibles los archivos DLL adecuados).

Usar variables de entorno y de secuencia de comandos

La utilidad de línea de comandos ascmd admite variables de secuencia de comandos definidas por el usuario y reservadas del sistema que se pueden utilizar en secuencias de comandos XMLA, consultas MDX e instrucciones DMS. Los valores de estas variables se pueden llenar especificando valores para variables de entorno o valores para parámetros de la línea de comandos.

Las siguientes reglas se aplican a las variables de entorno y las variables de secuencia de comandos definidas por el usuario:

  • Una variable puede contener un número indeterminado de caracteres en minúscula, caracteres en mayúscula, dígitos, guiones (-) o caracteres de subrayado (_).
  • Una variable no puede contener caracteres incrustados ni caracteres de control (por ejemplo, CR, LF o TAB).

Variables de secuencia de comandos reservadas del sistema

Las variables de secuencia de comandos reservadas del sistema son variables definidas por la utilidad de línea de comandos ascmd para mantener los valores asociados a cada parámetro de la línea de comandos. En algunos casos, las variables de entorno pueden usarse también para mantener los valores de estas variables de secuencia de comandos reservadas del sistema. En el caso de las variables de secuencia de comandos reservadas del sistema que pueden llenarse o derivarse tanto desde las variables de entorno como desde los parámetros de la línea de comandos, el valor especificado para estos últimos (si se especifica) sobrescribe cualquier valor de variable de entorno indicado.

En la siguiente tabla se describen las variables de secuencia de comandos reservadas del sistema, los parámetros de la línea de comandos asociados y, si corresponde, las variables de entorno asociadas.

[!NOTA] Existen tres variables de secuencia de comandos reservadas del sistema que sólo pueden configurarse con un parámetro de la línea de comandos (–i, –o y –T). No hay variables de entorno ASCMD asociadas que se puedan utilizar para llenar la variable de secuencia de comandos reservada para el sistema correspondiente a esos tres parámetros.

Variable de secuencia de comandos reservada del sistema Parámetro Variable de entorno (si existe)

ASCMDUSER

–U

ASCMDUSER

ASCMDDOMAIN

–U

ASCMDUSER

ASCMDPASSWORD

–P

ASCMDPASSWORD

ASCMDSERVER

–S

ASCMDSERVER

ASCMDINSTANCE

–S

ASCMDSERVER

ASCMDHTTPCONNECTION

–S

ASCMDSERVER

ASCMDDBNAME

d

ASCMDDBNAME

ASCMDINPUTFILE

–i

ASCMDOUTPUTFILE

–o

ASCMDQUERYTIMEOUT

–t

ASCMDQUERYTIMEOUT

ASCMDCONNECTTIMEOUT

–tc

ASCMDCONNECTTIMEOUT

ASCMDTRACEFILE

–T

ASCMDTRACEFORMAT

–Tf

ASCMDTRACEFORMAT

ASCMETRACEDELIM

–Td

ASCMDTRACEDELIM

ASCMDTRACELEVEL

–Tl

ASCMDTRACELEVEL

ASCMDTRACETIMEOUT

–Tt

ASCMDTRACETIMEOUT

ASCMDEXTENDEDCONNECTION

–xc

ASCMDEXTENDEDCONNECTSTRING

Tenga en cuenta que en algunos casos de la tabla anterior, las variables de secuencia de comandos reservadas del sistema se derivan de un parámetro o una variable de entorno. En el siguiente ejemplo, tres variables de secuencia de comandos reservadas del sistema se derivan de la opción de variable de entorno ASCMDSERVER.

  • C:\>SET ASCMDSERVER=http://myserver/my_virtual_dir/msmdpump.dll

La instrucción SET anterior, que especifica un valor para la variable de entorno ASCMDSERVER, establece los siguientes valores para las tres variables de secuencia de comandos reservadas del sistema:

  • ASCMDSERVER="http://myserver/my_virtual_dir/msmdpump.dll"
  • ASCMDINSTANCE=""
  • ASCMDHTTPCONNECTION="true"

En el siguiente ejemplo, las mismas tres variables de secuencia de comandos reservadas del sistema se llenan con diferentes valores mediante otra instrucción SET:

  • C:\>SET ASCMDSERVER=myserver\myinstance

La instrucción SET anterior, que especifica un valor para la variable de entorno ASCMDSERVER, establece los valores para las siguientes tres variables de secuencia de comandos reservadas del sistema:

  • ASCMDSERVER="myserver"
  • ASCMDINSTANCE="myinstance"
  • ASCMDHTTPCONNECTION="false"

Usar variables de secuencia de comandos reservadas del sistema en el símbolo del sistema

Si existe una variable de entorno que coincida con una variable de secuencia de comandos reservada del sistema (no se distinguen mayúsculas de minúsculas), el valor de la variable de entorno se utiliza como el predeterminado para la variable de secuencia de comandos reservada del sistema, así como para el parámetro de la línea de comandos asociado. Por ejemplo, puede usar la siguiente instrucción SET, que se ejecuta para establecer la variable de entorno ASCMDDBNAME:

  • C:\>SET ASCMDDBNAME="Adventure Works DW"

En este caso, “Adventure Works DW” se utilizará como base de datos predeterminada (parámetro –d) al ejecutar la utilidad de línea de comandos ascmd (a menos que especifique otro valor en la línea de comandos).

Usar variables de secuencia de comandos reservadas del sistema en secuencias de comandos, consultas o instrucciones

Las variables de secuencia de comandos reservadas del sistema también se pueden utilizar en una secuencia de comandos XMLA, una consulta MDX o una instrucción DMX. En los siguientes ejemplos se ilustran invocaciones de línea de comandos de ejemplo de la utilidad de línea de comandos ascmd que utilizan variables de secuencia de comandos. Posteriormente en este documento aparecen más ejemplos que ilustran escenarios de uso.

  • C:\>ascmd -S <nombreDeServidor> -i process.xmla -v cube=<IdDelCubo>
process.xmla (simplificado)
<Batch>
    <Parallel>
         <Process>
             <Object>
                  <DatabaseID>$(ASCMDDBNAME)</DatabaseID>
                  <CubeID>($CUBE)</CubeID>
            . . .
         </Process>
    </Parallel>
</Batch>

Variables de secuencia de comandos definidas por el usuario

Una variable de secuencia de comandos definida por el usuario se define mediante el parámetro –v en la línea de comandos, o bien se define como una variable de entorno. Cuando la utilidad de línea de comandos ascmd encuentra una variable en una secuencia de comandos XMLA, una consulta MDX o una instrucción DMX, y dicha variable no se ha llenado mediante el parámetro –v, la utilidad busca una variable de entorno con el mismo nombre y utiliza el valor de esa variable. Si la utilidad de línea de comandos ascmd no encuentra una variable de entorno que coincida, la variable de secuencia de comandos se elimina al sustituirla por una cadena en blanco ("").

Las siguientes reglas se aplican a variables de secuencia de comandos definidas por el usuario mediante el parámetro –v en la línea de comandos:

  • Los espacios en blanco iniciales y finales se eliminan de la sección del valor de una variable.
  • La variable no puede empezar por la cadena “ascmd”.

Usar MDX, XMLA y DMX en archivos de entrada

La utilidad de línea de comandos ascmd admite la ejecución de consultas MDX, secuencias de comandos XMLA e instrucciones DMX en los archivos de entrada. La secuencia de comandos de entrada que transfiera a la utilidad ascmd es en realidad un elemento de comando XMLA.

Los elementos de comando son los siguientes:

  • Alter
  • Backup
  • Batch
  • BeginTransaction
  • Cancel
  • ClearCache
  • CommitTransaction
  • Create
  • Delete
  • DesignAggregations
  • Drop
  • Insert
  • Lock
  • MergePartitions
  • NotifyTableChange
  • Process
  • Restore
  • RollbackTransaction
  • Statement (se utiliza para ejecutar consultas MDX e instrucciones DMX)
  • Subscribe
  • Synchronize
  • Unlock
  • Update
  • UpdateCells

Para ejecutar comandos en más de un objeto a la vez, utilice el comando <Batch>. Para ejecutar consultas MDX e instrucciones DMX, utilice el comando <Statement>. Para obtener más información, vea Command Element (XMLA) en los Libros en pantalla de SQL Server 2005. En los siguientes ejemplos se muestra cómo estructurar consultas MDX, instrucciones DMX y secuencias de comandos XMLA.

ms365187.note(es-es,SQL.90).gifImportante:
Al igual que todas las estructuras XML, los comandos distinguen entre mayúsculas y minúsculas. Así, por ejemplo, debe incluir todas las consultas MDX entre las etiquetas <Statement> …. </Statement> y el comando debe ser “Statement” y no puede ser “statement” ni “STATEMENT”.

Además de los comandos XMLA, la utilidad de línea de comandos ascmd también se puede utilizar para ejecutar solicitudes XML personalizadas con el fin de ejecutar casi cualquier solicitud que se pueda expresar en XMLA. Por ejemplo, la utilidad de línea de comandos ascmd se puede utilizar para enviar cualquiera de las siguientes solicitudes XMLA:

  • Solicitudes XMLA Discover para consultar metadatos de Analysis Services. Estos metadatos incluyen información acerca de lo siguiente:
    • Objetos almacenados en una base de datos de Analysis Services, como los cubos definidos en el servidor; y
    • Recursos que se están utilizando, como las conexiones que están abiertas en el servidor.
  • Solicitudes Execute que realizan comandos pero los modifican al especificar una lista de propiedades y una lista de parámetros. Posteriormente en este documento se proporciona un ejemplo de este tipo de solicitud: vea Ejemplo de Execute.

Si el texto de entrada no tiene el formato de un comando XMLA, una solicitud Discover o una solicitud Execute, la utilidad de línea de comandos ascmd supone que el texto de entrada es una consulta MDX o una instrucción DMX. En este caso, el HTML de la utilidad de línea de comandos ascmd codifica el texto, ajusta un elemento <Statement> … </Statement> a su alrededor y lo procesa como un comando XMLA. Esto le permite especificar una consulta MDX o una instrucción DMX de forma sencilla. Vea el escenario 1 "Consultar un cubo de Analysis Services" posteriormente en este documento para obtener un ejemplo de uso de esta función.

Ejemplo de MDX:

<Statement>
SELECT NON EMPTY
         [Employees].Members ON ROWS,
         [Measures].[Internet Gross Profit] ON COLUMNS 
FROM [Adventure Works]
</Statement>

En este ejemplo se utiliza una consulta MDX en una instrucción XMLA para devolver la medida Internet Gross Profit para cada miembro de la jerarquía de atributos Employees que no esté vacía desde el cubo Adventure Works.

Ejemplo de DMX:

<Statement>
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Decision Tree]
(
    [Customer Key],
    [Age],
    [Bike Buyer] PREDICT,
    [Commute Distance],
    [Education],
    [Gender],
    [House Owner Flag],
    [Marital Status],
    [Number Cars Owned],
    [Number Children At Home],
    [Occupation],
    [Region],
    [Total Children],
    [Yearly Income]
) USING Microsoft_Decision_Trees
WITH DRILLTHROUGH
</Statement>

En este ejemplo se utiliza una consulta DMX en una instrucción XMLA para cambiar la estructura de minería de datos [Bike Buyer] al agregar un nuevo modelo de minería de datos.

Ejemplo de XMLA:

<Batch xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
   <Parallel>
      <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Object>
            <DatabaseID>Adventure Works DW</DatabaseID>
            <CubeID>Adventure Works DW</CubeID>
            <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
            <PartitionID>Internet_Sales_2001</PartitionID>
         </Object>
         <Type>ProcessFull</Type>
         <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
      </Process>
   </Parallel>
</Batch>

En este ejemplo se utiliza una instrucción XMLA para procesar completamente la partición Internet_Sales_2001.

Ejemplo de Discover:

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
   <RequestType>MDSCHEMA_CUBES</RequestType>
   <Restrictions>
      <RestrictionList>
         <CATALOG_NAME>Adventure Works DW</CATALOG_NAME>
      </RestrictionList>
   </Restrictions>
   <Properties>
      <PropertyList>
         <Catalog>Adventure Works DW</Catalog>
         <Format>Tabular</Format>
      </PropertyList>
   </Properties>
</Discover>

En este ejemplo se utiliza una solicitud XMLA Discover para devolver los cubos que se encuentran disponibles en la base de datos Adventure Works DW. Dado que se devuelven perspectivas a las aplicaciones como si fueran cubos, los datos devueltos realmente incluyen tanto cubos como perspectivas.

Ejemplo de Execute:

<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
   <Command>
      <Statement>
         SELECT [Measures].MEMBERS ON COLUMNS FROM [Adventure Works]
      </Statement>
   </Command>
   <Properties>
      <PropertyList>
         <Catalog>Adventure Works DW</Catalog>
         <Format>Tabular</Format>
         <AxisFormat>ClusterFormat</AxisFormat>
      </PropertyList>
   </Properties>
</Execute>

En este ejemplo se utiliza una consulta MDX en una instrucción XMLA. Sin embargo, tenga en cuenta que la parte de la lista de propiedades de la solicitud XMLA especifica que el formato de devolución sea tabular en vez de multidimensional. El formato multidimensional es el valor predeterminado para un comando de instrucción XMLA. Dado que el formato de devolución se encuentra en formato tabular (conjunto de filas), el archivo de salida podría ser utilizado por una aplicación que entienda los conjuntos de filas planas xsd en vez de un conjunto de celdas, y el conjunto de filas planas podría cargarse más fácilmente en una base de datos relacional SQL al tener el formato de una tabla.

Ejemplos de escenarios con ASCMD

En los siguientes escenarios se muestran los usos de la utilidad de línea de comandos ascmd.

Escenario 1: consultar un cubo de Analysis Services

En este escenario se crea un archivo de entrada que contiene una consulta MDX (archivo query.mdx) con una variable de secuencia de comandos definida por el usuario (cubo) en la consulta MDX. A continuación, se llama a este archivo de entrada desde la utilidad de línea de comandos ascmd y se especifica un valor para esta variable en la línea de comandos mediante el parámetro –v.

Archivo query.mdx:

Formato 1:

<Statement>
/* THIS IS AN MDX COMMENT */
SELECT [Measures].[Internet Sales Amount] ON COLUMNS
FROM $(cube)
WHERE [Customer].[Country].&amp;[United States]
</Statement>

Formato 2:

/* THIS IS AN MDX COMMENT */
SELECT [Measures].[Internet Sales Amount] ON COLUMNS
FROM $(cube)
WHERE [Customer].[Country].&[United States]
Ejemplo de línea de comandos:

C:\>ascmd -S myserver -d "Adventure Works DW" -i query.mdx -o result.xml -v cube="[Adventure Works]"

Tenga en cuenta que al utilizar el formato 1, la clave para Estados Unidos se controla al sustituir el MDX "&" (que indica que es el miembro clave y no el nombre) por &amp; (según sea necesario para la codificación HTML) y se especifica el elemento <Statement>. Tenga en cuenta que al utilizar el formato 2, ni la codificación HTML ni el elemento <Statement> serán necesarios. Esto se debe a que el texto de entrada no comienza con un comando XMLA válido y que la utilidad de línea de comandos ascmd supone que el texto de entrada es una instrucción y automáticamente HTML codifica la entrada y la ajusta en un elemento <Statement> antes de la ejecución.

Escenario 2: hacer una copia de seguridad de la base de datos en un dominio que no es de confianza

En este escenario, se hace una copia de seguridad de la base de datos en un servidor de un dominio que no es de confianza mediante la utilidad de línea de comandos ascmd. Dado que la base de datos se encuentra en un dominio que no es de confianza, este escenario exige acceso http. En este escenario, el servidor remoto (denominado "myserver") ejecuta los Servicios de Internet Information Server (IIS) y Analysis Services y tiene un directorio virtual de IIS denominado "olapadmin" configurado para la autenticación básica. El servidor remoto también dispone de una cuenta local denominada "olapadmin" con los permisos de copia de seguridad adecuados. Especifique el nombre de la base de datos, el método de acceso, el nombre de usuario, la contraseña y el archivo de copia de seguridad en la línea de comandos mediante los parámetros de línea de comandos de ascmd. Especifique un archivo de entrada XMLA (backup.xmla) que incluya las variables de secuencia de comandos para el archivo de copia de seguridad y de base de datos.

Archivo backup.xmla:
<Backup xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
   <Object>
      <DatabaseID>$(ascmddbname)</DatabaseID>
   </Object>
   <File>$(backupfile).abf</File>
</Backup>
Ejemplo de línea de comandos:

C:\>ascmd -S https://myserver/msolap90/msmdpump.dll -U myserver\olapadmin -P #1PWD -d "Adventure Works DW" -i backup.xmla -v backupfile="AdvWorks"

Tenga en cuenta que en el ejemplo de línea de comandos, se utiliza https de modo que la contraseña se cifra cuando se envía al servidor remoto a través de la red.

Escenario 3: procesar varias particiones

En este escenario, se procesan varias particiones mediante la utilidad de línea de comandos ascmd. Utilice variables de secuencia de comandos en la secuencia de comandos de procesos XMLA (process.xmla) para especificar el grado de paralelismo, el tipo de proceso y los nombres de la base de datos y el cubo. Esta secuencia de comandos XMLA también muestra el uso de comentarios en una secuencia de comandos XMLA. Si llama a la secuencia de comandos de procesos process.xmla desde la utilidad de línea de comandos ascmd, debe especificar el nombre del servidor y de la base de datos, un archivo de salida para los resultados XMLA, un archivo de traza para los eventos de traza, el nivel de traza y el grado de paralelismo en un archivo de proceso por lotes .bat (process.bat). El archivo de traza incluirá los mismos eventos e información que devolvería el Analizador de SQL Server si un administrador supervisara el sistema durante el procesamiento.

Archivo process.xmla:
<Batch xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
   <Parallel maxparallel="$(MAXPARALLEL)">
   <!-- SEE ABOVE FOR HOW MANY PARITIONS PROCESSED IN PARALLEL -->
      <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Object>
            <DatabaseID>$(ASCMDDBNAME)</DatabaseID>
            <CubeID>$(ASCMDDBNAME)</CubeID>
            <!-- Just so happens CubeID=DatabaseID=Database name :-) -->
            <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
            <PartitionID>Internet_Sales_2001</PartitionID>
         </Object>
         <Type>$(PROCESSTYPE)</Type>
         <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
      </Process>
      <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Object>
            <DatabaseID>$(ASCMDDBNAME)</DatabaseID>
            <CubeID>$(ASCMDDBNAME)</CubeID>
            <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
            <PartitionID>Internet_Sales_2002</PartitionID>
         </Object>
         <Type>$(PROCESSTYPE)</Type>
         <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
      </Process>
      <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Object>
            <DatabaseID>$(ASCMDDBNAME)</DatabaseID>
            <CubeID>$(ASCMDDBNAME)</CubeID>
            <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
            <PartitionID>Internet_Sales_2004</PartitionID>
         </Object>
         <Type>$(PROCESSTYPE)</Type>
         <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
      </Process>
      <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Object>
            <DatabaseID>$(ASCMDDBNAME)</DatabaseID>
            <CubeID>$(ASCMDDBNAME)</CubeID>
            <MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
            <PartitionID>Internet_Sales_2003</PartitionID>
         </Object>
         <Type>$(PROCESSTYPE)</Type>
         <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
      </Process>
   </Parallel>
</Batch>
Archivo process.bat:
@echo off
call :generate-timestamp
ascmd -S myserver -d "Adventure Works DW" -i process.xmla
         -o process.xml -T process-%timestamp%.csv -Tl medium 
         -v maxparallel=4 processtype=ProcessFull
if ERRORLEVEL 1 goto errseen
goto :EOF
:errseen
echo ** Error seen in processing
goto :EOF

:generate-timestamp
set now_date=%date%
set now_time=%time%
set now_Year=%now_date:~10,4%
set now_Month=%now_date:~4,2%
set now_Day=%now_date:~7,2%
set now_Hour=%now_time:~0,2%
set now_Min=%now_time:~3,2%
if "%now_Hour:~0,1%"==" " set now_Hour=0%now_Hour:~1,1%
set timestamp=%now_year%%now_month%%now_day%_%now_hour%%now_min%
goto :EOF

Tenga en cuenta que el archivo de proceso por lotes utiliza una marca de hora en el archivo de salida; de este modo, se pueden registrar varias ejecuciones simultáneamente.

Escenario 4: crear una base de datos en un servidor

En este escenario, se usa la utilidad de línea de comandos ascmd para llamar a un archivo de secuencia de comandos XMLA (create.xmla) y crear una base de datos en el servidor. El nombre de la base de datos se define en la secuencia de comandos XMLA mediante una variable de secuencia de comandos definida por el usuario; el valor de esta variable se define en la línea de comandos con el parámetro –v.

Archivo create.xmla:

El archivo se ha creado en SQL Server Management Studio. Para crear su propio archivo, haga clic con el botón secundario en la base de datos y desde el menú Secuencia de comandos, haga clic en Crear.

<Create xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
      <ObjectDefinition>
            <Database xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                  <ID>$(dbname)</ID>
                  <Name>$(dbname)</Name>
                  <Description>A Unified Dimensional Model that encompasses the Adventure Works data warehouse.</Description>
                  <Language>1033</Language>
                  <Collation>Latin1_General_CI_AS</Collation>
                  <DataSourceImpersonationInfo>
                     <ImpersonationMode>Default</ImpersonationMode>
                  </DataSourceImpersonationInfo>
                  <Dimensions>
                        <Dimension>
                              <ID>Dim Promotion</ID>
                              <Name>Promotion</Name>
                              <Annotations>
 . . .
Ejemplo de línea de comandos:

C:\>ascmd -S myserver -i create.xmla -v dbname="My Adventure Works DW"

En la secuencia de comandos XMLA anterior, también podría utilizar variables de secuencia de comandos para configurar objetos como la cadena de conexión a un origen de datos, los nombres del servidor y de la base de datos que se utilizan en el origen de datos o bien los nombres de campo de la vista de origen de datos.

Escenario 5: crear una aplicación para preparar la caché

En este escenario, se utiliza un archivo de proceso por lotes (cache_warmer.bat) para llamar a la utilidad de línea de comandos ascmd; ésta, a su vez, llama a varias consultas MDX que preparan la caché de datos de Analysis Services. Por ejemplo, puede llamar a este archivo de proceso por lotes mediante el Agente SQL Server diariamente a las 02:00 a. m. o bien tras efectuar la carga por lotes nocturna. En el archivo de proceso por lotes, establezca las variables de entorno para los nombres de servidor, base de datos y cubo. Puesto que los nombres de servidor y base de datos especificados como variables de entorno coinciden exactamente con los nombres de las variables de secuencia de comandos reservadas del sistema, pasan a ser valores predeterminados en los parámetros de la línea de comandos –S y –d. La variable de secuencia de comandos definida por el usuario para el nombre del cubo se utiliza en todas las consultas MDX.

Archivo query1.mdx:

Archivos: de query1.mdx a query6.mdx, con el formato de query1.txt

<Statement>
SELECT [Measures].[Internet Sales Amount] ON COLUMNS
FROM $(cube)
WHERE [Customer].[Country].&amp;[United States]
</Statement>

Cree archivos de consulta adicionales al sustituir [United States] por otros países de Adventure Works: [Australia], [Canada], [France], [Germany] o [United Kingdom].

Archivo cache_warmer.bat:
set ascmdserver=myserver
set ascmddbname=Adventure Works DW
set cube=[Adventure Works]

set QUERYDIR=..\queries
set OUTPUTDIR=..\queries
echo -------------------------
set f=
for %%f in (%QUERYDIR%\*.mdx) do (
    call :query %%f
            if ERRORLEVEL 1 goto :EOF
)
echo -------------------------
echo Done.
goto :EOF

:query
echo Query: %1
echo ---------
ascmd -T %OUTPUTDIR%\querylog.txt -Tl duration 
         -Tf text -o %OUTPUTDIR%\%~n1.xml -i %1
echo Errorlevel: %ERRORLEVEL%
echo -------------------------
if ERRORLEVEL 1 goto :errseen
goto :EOF

:errseen
echo -------------------------
echo   ******
echo   ****** ERROR SEEN ******
echo   ******   Exiting    ******
goto :EOF

Escenario 6: crear un procedimiento de validación

En este escenario, se utiliza la utilidad de línea de comandos ascmd para llamar a varios archivos de consulta MDX (de forma similar al escenario anterior) al final de una ejecución ETL nocturna. Utilice el parámetro de duración –Tl para registrar la duración de cada consulta MDX en un archivo de traza, además de dirigir la salida de la secuencia de comandos MDX a un archivo nulo (–oNUL). Asimismo, puede utilizar el parámetro de duración –Tl al mismo tiempo que registra los resultados de la ejecución en un registro de traza. El uso de la utilidad de línea de comandos ascmd de esta forma le permite hacer un seguimiento de la duración necesaria para cada consulta MDX y comparar estos resultados diariamente para garantizar que se devuelven los valores en el mismo intervalo. Si los resultados de la duración de un día determinado están considerablemente fuera del intervalo, eso podría indicar que los resultados de la ejecución ETL tienen que descartarse.

Ejemplo de línea de comandos:

C:\>ascmd -i %queryfile% -o NUL -T querylog.csv -Tl duration

Escenario 7: automatizar la generación y el entrenamiento de un modelo de minería de datos

En este escenario, se utiliza la utilidad de línea de comandos ascmd para llamar a una serie de instrucciones DMX de esta forma:

  • Una instrucción DMX que crea una estructura de minería de datos (Bike Buyer Structure.DMX) y utiliza las variables de entorno para establecer los nombres del servidor y la base de datos.
  • Una instrucción DMX (Clustering_Model.dmx) que agrega un modelo de minería de datos de clúster a la estructura.
  • Una instrucción DMX (DT_Model.dmx) que agrega un modelo de minería de datos de árbol de decisión a la estructura.
  • Una instrucción DMX (Process Bike Buyer Structure.dmx) para procesar la estructura de minería de datos y los modelos de minería de datos.

Cuando tenga la estructura de minería de datos ubicada, puede utilizar la utilidad de línea de comandos ascmd para llamar a varias instrucciones DMX que consulten la estructura de minería de datos con modelos de minería de datos diferentes.

Crear la estructura de minería de datos

Archivo Bike Buyer Structure.dmx:
<Statement>
CREATE MINING STRUCTURE [Bike Buyer]
(
    [Customer Key] LONG KEY,
    [Age]LONG DISCRETIZED(Automatic,10),
    [Bike Buyer] LONG DISCRETE,
    [Commute Distance] TEXT DISCRETE,
    [Education] TEXT DISCRETE,
    [Gender] TEXT DISCRETE,
    [House Owner Flag] TEXT DISCRETE,
    [Marital Status] TEXT DISCRETE,
    [Number Cars Owned]LONG DISCRETE,
    [Number Children At Home]LONG DISCRETE,
    [Occupation] TEXT DISCRETE,
    [Region] TEXT DISCRETE,
    [Total Children]LONG DISCRETE,
    [Yearly Income] DOUBLE CONTINUOUS
)
</Statement>

Ejemplo de línea de comandos:

C:\>set ascmdserver=myserver

C:\>set ascmddbname=Adventure Works DW

C:\>ascmd -i "Bike Buyer Structure.dmx"

Agregar un modelo de minería de datos de clústeres a la estructura

Archivo Clustering_Model.dmx:
<Statement>
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Clustering]
USING Microsoft_Clustering 
</Statement>

Ejemplo de línea de comandos:

C:\>ascmd -i "Clustering_Model.dmx"

Agregar un modelo de minería de datos del árbol de decisión a la estructura

Archivo DT_Model.dmx
<Statement>
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Decision Tree]
(
    [Customer Key],
    [Age],
    [Bike Buyer] PREDICT,
    [Commute Distance],
    [Education],
    [Gender],
    [House Owner Flag],
    [Marital Status],
    [Number Cars Owned],
    [Number Children At Home],
    [Occupation],
    [Region],
    [Total Children],
    [Yearly Income]
) USING Microsoft_Decision_Trees
WITH DRILLTHROUGH
</Statement>
Ejemplo de línea de comandos:

C:\>ascmd -i "DT_Model.dmx"

Procesar la estructura y los modelos de minería de datos

Archivo Process Bike Buyer Structure.dmx:
<Statement>
INSERT INTO MINING STRUCTURE [Bike Buyer]
(
    [Customer Key],
    [Age],
    [Bike Buyer],
    [Commute Distance],
    [Education],
    [Gender],
    [House Owner Flag],
    [Marital Status],
    [Number Cars Owned],
    [Number Children At Home],
    [Occupation],
    [Region],
    [Total Children],
    [Yearly Income]
)
OPENQUERY([$(ASCMDDBNAME)],
    'SELECT CustomerKey, Age, BikeBuyer,
             CommuteDistance,EnglishEducation,
             Gender,HouseOwnerFlag,MaritalStatus,
             NumberCarsOwned,NumberChildrenAtHome, 
             EnglishOccupation,Region,TotalChildren,
             YearlyIncome 
      FROM dbo.vTargetMail')
</Statement>
Ejemplo de línea de comandos:

C:\>ascmd -i "DT_Model.dmx"

Consultar la estructura mediante el modelo de minería de datos del árbol de decisión

Archivo SELECT_DRILLTHROUGH.dmx:
<Statement>
SELECT * 
FROM [Decision Tree].CASES
</Statement>
Archivo BATCH_PREDICTION.dmx:
<Statement>
SELECT
   TOP 10
   t.[LastName],
   t.[FirstName],
   [Decision Tree].[Bike Buyer],
   PredictProbability([Bike Buyer])
From
   [Decision Tree]
PREDICTION JOIN
 OPENQUERY([$(ASCMDDBNAME)],
      'SELECT
         [LastName],
         [FirstName],
         [MaritalStatus],
         [Gender],
         [YearlyIncome],
         [TotalChildren],
         [NumberChildrenAtHome],
         [Education],
         [Occupation],
         [HouseOwnerFlag],
         [NumberCarsOwned]
      FROM
         [dbo].[ProspectiveBuyer]
      ') AS t
ON
   [Decision Tree].[Marital Status] = t.[MaritalStatus] AND
   [Decision Tree].[Gender] = t.[Gender] AND
   [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
   [Decision Tree].[Total Children] = t.[TotalChildren] AND
   [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
   [Decision Tree].[Education] = t.[Education] AND
   [Decision Tree].[Occupation] = t.[Occupation] AND
   [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
   [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
WHERE [Decision Tree].[Bike Buyer] =1
ORDER BY PredictProbability([Bike Buyer]) DESC
</Statement>
Archivo SELECT_DISCRETE.dmx:
<Statement>
SELECT DISTINCT [Bike Buyer] 
FROM [Decision Tree]
</Statement>
Ejemplo de línea de comandos:

C:\>ascmd -i SELECT_DRILLTHROUGH.dmx

C:\>ascmd -i BATCH_PERDICTION.dmx

C:\>ascmd -i SELECT_DISCRETE.dmx

Escenario 8: borrar la caché de datos de Analysis Services

En este escenario, se usa la utilidad de línea de comandos ascmd para llamar a un archivo de secuencia de comandos XMLA (ClearCache.xmla) que borra la caché de datos de Analysis Services entre ejecuciones al efectuar estudios de rendimiento. El archivo ClearCache.xmla contiene variables de secuencia de comandos para los nombres de la base de datos y del cubo. Un archivo de proceso por lotes (ClearCache.bat) llama a esta secuencia de comandos XMLA y especifica los nombres del servidor, la instancia, la base de datos, el archivo de entrada, el archivo de salida y el cubo.

Archivo ClearCache.xmla:
<Batch xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
   <ClearCache>
               <Object>
                      <DatabaseID>$(ASCMDDBNAME)</DatabaseID>
                      <CubeID>$(CUBE)</CubeID>
               </Object>
       </ClearCache>
</Batch> 
Archivo ClearCache.bat:
@echo off
ascmd -S myserver\myinstance -d "Adventure Works DW" -i ClearCache.xmla
         -o ClearCache.xml -v cube="Adventure Works DW"

if ERRORLEVEL 1 goto :errseen
goto :EOF

:errseen
echo **** Error seen ****
echo ********************
goto :EOF

Escenario 9: determinar quién está conectado actualmente al servidor

En este escenario, se utiliza la utilidad de línea de comandos ascmd para recuperar la lista de conexiones activas en el servidor. Una aplicación puede utilizar esta información para retrasar el procesamiento hasta que usuarios concretos estén desconectados o enviar un mensaje de correo electrónico a los operadores si alguien tiene una conexión actual (distinta a la conexión para la ejecución nocturna del lote).

Archivo connections.xmla:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
   <RequestType>DISCOVER_CONNECTIONS</RequestType>
   <Restrictions />
   <Properties>
      <PropertyList>
         <Content>Data</Content>     <!-- Only the data; no schema -->
      </PropertyList>
   </Properties>
</Discover>
Ejemplo de línea de comandos:

C:\>ascmd -S myserver -i connections.xmla -o current_connections.xml

Escenario 10: determinar si se ha procesado una partición y, de ser así, cuándo se ha procesado por última vez

En este escenario, utilice la utilidad de línea de comandos ascmd para determinar si se ha procesado una partición y cuándo se ha realizado esta operación. Esta información se puede recuperar fácilmente porque se almacena como propiedad del objeto de partición. Por tanto, se puede utilizar una solicitud DISCOVER_XML_METADATA para recuperar esta información.

Archivo connections.xmla:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
   <RequestType>DISCOVER_XML_METADATA</RequestType>
   <Restrictions>
      <RestrictionList>
        <DatabaseID>$(DatabaseID)</DatabaseID>
        <CubeID>$(CubeID)</CubeID>
        <MeasureGroupID>$(MeasureGroupID)</MeasureGroupID>
        <PartitionID>$(PartitionID)</PartitionID>
      <!-- Ask for just this object referenced -->
      <ObjectExpansion>ReferenceOnly</ObjectExpansion>
      </RestrictionList>
   </Restrictions>
   <Properties>
      <PropertyList>
         <Content>Data</Content>     <!-- Only the data; no schema -->
      </PropertyList>
   </Properties>
</Discover>

Escenario 11: usar el comando GO para realizar una operación de reescritura

En este escenario, se usa la utilidad de línea de comandos ascmd para dividir la reescritura en dos partes: modificar los datos y, a continuación, confirmarlos. La reescritura exige el uso del comando GO porque las dos instrucciones MDX requeridas para la operación de reescritura (las instrucciones UPDATE CUBE y COMMIT TRANSACTION) deben emitirse una detrás de la otra dentro de la misma transacción. MDX no permite que se emitan dentro del mismo lote.

En el caso de este escenario, es necesario modificar la base de datos Adventure Works DW para admitir la reescritura. La base de datos existente no dispone actualmente de un ejemplo de cubo que admita la operación de reescritura. Para crear y comprobar un cubo que admita la reescritura, realice los siguientes pasos:

  1. Para definir un nuevo cubo denominado “Reescritura”

  2. Abra Business Intelligence Development Studio.

  3. En el menú Archivo, seleccione Abrir y haga clic en Base de datos de Analysis Services.

  4. En el cuadro de diálogo Conectar con base de datos, escriba el nombre del servidor en el cuadro de texto Servidor, seleccione la base de datos Adventure Works DW en la lista Base de datos y, a continuación, haga clic en Aceptar.

  5. En el panel Explorador de soluciones, haga clic con el botón secundario en Cubos y, a continuación, haga clic en Nuevo cubo.

  6. En el Asistente para cubos, haga clic en Siguiente en la página Asistente para cubos, seleccione Generar el cubo con un origen de datos, desactive la casilla de verificación Generación automática y, a continuación, haga clic en Siguiente.

  7. Seleccione Adventure Works DW en la lista Vistas de origen de datos disponibles de la página Seleccionar vista de origen de datos y, a continuación, haga clic en Siguiente.

  8. En la página Identificar tablas de hechos y de dimensiones, active la casilla de verificación Hecho para la tabla FactSalesQuota y la casilla de verificación Dimensión para las tablas dbo.DimTime y dbo.DimEmployee y, a continuación, haga clic en Siguiente.

  9. dbo.DimTime (la dimensión se denomina Date) dbo.DimEmployeeFactSalesQuota (simplemente utiliza la medida “Sales Amount Quota”)

  10. En la página Revisar dimensiones compartidas, seleccione Date y Employee en la lista Dimensiones disponibles, haga clic en > para agregar estas dimensiones a la lista Dimensiones de cubo y, a continuación, haga clic en Siguiente.

  11. En la página Seleccionar medidas desactive la casilla de verificación Fact Sales Quota, active la casilla de verificación Sales Amount Quota y, a continuación, haga clic en Siguiente.

  12. En la página Finalizando el asistente, cambie el nombre del cubo por Reescritura y, a continuación, haga clic en Finalizar.

  13. Para habilitar la reescritura para el grupo de medida Fact Sales Quota

  14. En el Diseñador de cubos, seleccione la ficha Particiones.

  15. Haga clic con el botón secundario en la partición Fact Sales Quota en la lista de particiones y, a continuación, haga clic en Configuración de reescritura.

  16. En el cuadro de diálogo Habilitar reescritura - Fact Sales Quota, revise el nombre predeterminado de la tabla de reescritura y, a continuación, haga clic en Aceptar para crear esta tabla y habilitar la reescritura para esta partición.

  17. Observe que ahora aparecen dos particiones: una para la tabla de hechos y otra para la tabla de reescritura.

  18. Para procesar el cubo Reescritura

  19. Haga clic con el botón secundario en Reescritura en el nodo Cubos del Explorador de soluciones y haga clic en Procesar.

  20. Haga clic en cuando se le solicite si desea guardar los cambios.

  21. En el cuadro de diálogo Procesar cubo - Writeback, haga clic en Ejecutar.

  22. Si expande los comandos de procesamiento, verá la instrucción CREATE TABLE SQL usada para crear la tabla relacional de reescritura.

  23. Cuando finalice el procesamiento, compruebe que el proceso se haya realizado correctamente en el cuadro Estado y, a continuación, haga clic en Cerrar.

  24. Vuelva a hacer clic en Cerrar para cerrar el cuadro de diálogo Procesar partición - WriteTable_Fact Sales Quota.

  25. Cierre Business Intelligence Development Studio.

  26. Para comprobar que la reescritura funciona

  27. Abra SQL Server Management Studio.

  28. Conéctese al servidor y, a continuación, en el Explorador de objetos, expanda Bases de datos, haga clic con el botón secundario en Adventure Works DW, seleccione Nueva consulta y haga clic en MDX.

  29. En la ventana de consulta MDX, ejecute la siguiente consulta MDX para que devuelva la estimación actual de ventas de Q1FY2002 y Stephen Y. Jiang:

    /* Employee 272 is [Stephen Y. Jiang]*/
    SELECT [Measures].[Sales Amount Quota] ON COLUMNS
    FROM [Writeback]
    WHERE ([Employee].[Employee].[Stephen Y. Jiang],[Date].[Calendar].[Calendar Quarter].[Q1 CY 2002])
    
  30. Modifique la celda para que devuelva 2.200 $ mediante la emisión de la siguiente instrucción MDX:

    UPDATE CUBE [Writeback]
    SET ([Employee].[Employee].[Stephen Y. Jiang],
    [Date].[Calendar].[Calendar Quarter].[Q1 CY 2002]) = 2200
    
  31. Para confirmar la transacción, ejecute la siguiente instrucción MDX:

    COMMIT TRANSACTION
    

    En este punto, puede examinar la tabla “dbo.WriteTable_Fact Sales Quota” de la base de datos relacional Adventure Works DW para comprobar si la reescritura se ha realizado realmente en la celda. Si lo hace, observará que se ha escrito la diferencia (-88800) en esta tabla relacional. La tabla de hechos original no varía.

archivo writeback.mdx:
/* What is the existing value? */
SELECT [Measures].[Sales Amount Quota] ON COLUMNS
FROM [Writeback]
WHERE ([Employee].[Employee].&[272],
[Date].[Calendar].[Calendar Quarter].&[2002]&[1])
GO
/* Update the cube with a new value */
UPDATE CUBE [Writeback]
SET ([Employee].[Employee].&[272],
[Date].[Calendar].[Calendar Quarter].&[2002]&[1]) = 33000 /* some different value */
GO
/* Commit it */
Commit Transaction
GO
/* See what the updated value is */
SELECT [Measures].[Sales Amount Quota] ON COLUMNS
FROM [Writeback]
WHERE ([Employee].[Employee].&[272],
[Date].[Calendar].[Calendar Quarter].&[2002]&[1])
GO
Ejemplo de línea de comandos:

C:\>ascmd -S myserver -d "Adventure Works DW" -i writeback.mdx -o writeback_result.xml -v cube="[Writeback]"

Writeback_result.xml:
<multiple-batches>
   <return xmlns="urn:schemas-microsoft-com:xml-analysis">
      <root xmlns= . . .>
         <...metadata about the result set...>
<CellData xmlns="urn:schemas-microsoft-com:xml-analysis:mddataset">
  <Cell CellOrdinal="0">
     <Value xsi:type="xsd:double" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">0</Value> 
     <FmtValue>2200</FmtValue> 
  </Cell>
</CellData>
      </root>
   </return>
   <return xmlns="urn:schemas-microsoft-com:xml-analysis">
      <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" /> 
   </return>
   <return xmlns="urn:schemas-microsoft-com:xml-analysis">
      <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" /> 
   </return>
   <return xmlns="urn:schemas-microsoft-com:xml-analysis">
      <root xmlns= . . .>
         <...metadata about the result set...>
<CellData xmlns="urn:schemas-microsoft-com:xml-analysis:mddataset">
  <Cell CellOrdinal="0">
     <Value xsi:type="xsd:double" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">0</Value> 
     <FmtValue>33000</FmtValue> 
  </Cell>
</CellData>
      </root>
   </return>
</multiple-batches>

Observe que hay dos conjuntos de resultados vacíos en medio de la instrucción UPDATE CUBE y de la instrucción COMMIT TRANSACTION.

Versión Historial

12 de diciembre de 2006

Contenido modificado:
  • Se documentó una nueva característica: la compatibilidad con varios lotes.
  • Se agregó un ejemplo donde se muestra el uso de esta nueva característica.

17 de julio de 2006

Contenido modificado:
  • Se han documentado dos nuevas características: solicitudes XMLA personalizadas y detección automática del tipo de comando en la secuencia de entrada.
  • Se han agregado ejemplos actualizados para mostrar el uso de las nuevas características.

Vea también

Otros recursos

XML for Analysis (XMLA)
XML for Analysis Reference (XMLA)
Discover Method (XMLA)
Execute Method (XMLA)

Ayuda e información

Obtener ayuda sobre SQL Server 2005