Feeds:
Entradas
Comentarios

Añadir los índices de la tabla subyacente

En la mayoría de los casos, los índices de añadir a la tabla subyacente mejora el procesamiento debido a que la dimensión SQL declaración de que se genera es en forma de SELECT DISTINCT AttribA, AttribB DE DimensionTable. Cómo construir buen atributo relaciones entre la jerarquía fuerzas el motor de Analysis Services para construir DISTINCT múltiples consultas más pequeñas en lugar de una grande y muy caro SELECT DISTINCT AttribA, AttribB, …, consulta AttribN. Por lo tanto, los índices adicionales mejorar el rendimiento de estas consultas DISTINCT.

Crear una tabla separada para la dimensión de transformación

Si usted experimenta procesamiento dimensión lenta, creando una nueva tabla que se utiliza únicamente para procesar la dimensión puede mejorar la velocidad de procesamiento. Por ejemplo, en el caso de una dimensión de copo de nieve en varias tablas se unen entre sí para definir su dimensión, considerar la creación de una nueva tabla aparte y específico para el procesamiento de la dimensión. Esto es especialmente importante si usted tiene las dimensiones que se han diseñado sobre las bases de datos dispares, de esta forma se pueden evitar las consultas OPENROWSET procesamiento.

Uso SQL vistas a aplicar la consulta vinculante para las dimensiones

Mientras consulta vinculante para las dimensiones no existe dentro de Analysis Services 2005, puede ponerla en práctica mediante una vista (en vez de tablas) para su dimensión de origen de datos subyacente. De esta forma, puede utilizar las sugerencias u otras SQL técnicas de optimización para optimizar el SQL declaración de que tiene acceso a las tablas de dimensiones a través de su vista.

Tenga cuidado al utilizar la enumeración ProcessUpdate

Si usted usa ProcessUpdate y miembros de la dimensión están siendo modificados o eliminados, agregaciones flexibles será dado de baja. Estos deben volver a crear la transformación de los índices en las particiones afectadas y los objetos o al permitir que las agrupaciones perezoso. De lo contrario, no habrá ningún agregaciones para los usuarios consultar en contra, esto se traduce en rendimiento de las consultas más lentas. Además, si las relaciones rígidas se han definido y se detecta un cambio, un error serán devueltos, lo que requiere que usted realice un proceso completo.

Utilice la enumeración ProcessAdd si sólo se está añadiendo nuevos miembros dimensión

El ProcessAdd enumeración proceso no está disponible en la tramitación de interfaz de usuario pero se encuentra disponible en XMLA. Introducido en Analysis Services 2005, es esencialmente una versión optimizada de ProcessUpdate en los casos en que sólo los nuevos miembros se incorporan. Para utilizar ProcessAdd correctamente para mejorar el rendimiento, restringir la tabla de dimensiones de sólo las filas nuevas agregó. Para obtener más información al respecto, incluyendo código de ejemplo. Este tipo de procesamiento permite el tratamiento dimensión a ser mucho más rápido que nunca para borrar o actualizar los miembros de la dimensión ni gota agregaciones flexibles.

Análisis de la actualización a SP2 de Servicios porque tiene dimensión proceso de almacenamiento en caché

Analysis Services Service Pack (SP2) proporciona las mejoras de la transformación mediante el almacenamiento en caché dimensión de transformación. Para aprovechar esta característica, para sistemas más grandes agregar memoria a fin de que Analysis Services puede utilizar. (No es raro para Analysis Services para utilizar 10 GB (gigabytes) de memoria si está disponible.) Esto le impide paginación en disco.

Las mejoras de rendimiento cuando se utiliza el almacenamiento en caché dimensión de proceso se ven típicamente en el tratamiento de servidors con dos o más procesadores. Por ejemplo, la tabla siguiente se muestran los tiempos de procesamiento de una memoria RAM de 4 GB, con cuatro procesadores servidor que está procesando 32 particiones en paralelo. Tanto el Análisis de Servicios y SQL Servidor bases de datos están en la misma servidor.

Service Pack El tiempo de procesamiento (hh: mm: ss.sss)
SP1 00:13:28.020
SP2 00:12:29.966

Cubo de Procesamiento Mejor Prácticas

Para asegurar un rápido y eficaz el procesamiento del cubo, es importante recordar que el procesamiento del cubo se realiza en Analysis Services mediante la ejecución de Analysis Services generados SQL declaraciones en contra de la base de datos relacional subyacente. Debido a esto, es posible (cuando sea necesario) para sintonizar el subyacente SQL declaraciones y / o actualizar las estadísticas. La adición de índices de las tablas subyacentes pueden mejorar el rendimiento también, pero prueba de esta primera tabla como el escaneo es a menudo un enfoque más rápido para el procesamiento del cubo.

Use las teclas de número entero si es posible

Cuando se trabaja con cualquier versión de Analysis Services, asegúrese de que las columnas de clave se entero. Esto es importante para ambos SQL y no-SQL Sistemas RDBMS debido a la SQL declaración que genera Analysis Services cuando está procesando un cubo, grupo de medida, o una partición. La consulta resultante plan y ejecución del presente SQL declaración será más eficiente si el montaje se entre entero llaves.

Las mejoras de rendimiento son aún más evidente con el análisis SP2 Servicios debido a su transformación dimensión característica de caché. Estas mejoras también optimizar en el caso de dos compuestos entero llaves de tamaños de 1, 2, 4 y 8 bytes. Mientras que cadena teclas proporcionan una mejora limitada, esto no es tan evidente como cuando se utiliza entero llaves.

El siguiente es el SQL consulta que se genera por Analysis Services cuando el grupo de procesamiento de ventas por Internet [medida] en la [base de datos Adventure Works DW] OLAP.

SELECCIONAR
[Dbo_FactInternetSales]. [CustomerKey] AS
[Dbo_FactInternetSalesCustomerKey0_0],
[Dbo_FactInternetSales]. [PromotionKey] AS
[Dbo_FactInternetSalesPromotionKey0_1],
[Dbo_FactInternetSales]. [SalesTerritoryKey] AS
[Dbo_FactInternetSalesSalesTerritoryKey0_2],
[Dbo_FactInternetSales]. [OrderDateKey] AS
[Dbo_FactInternetSalesOrderDateKey0_3],
[Dbo_FactInternetSales]. [ShipDateKey] AS
[Dbo_FactInternetSalesShipDateKey0_4],
[Dbo_FactInternetSales]. [DueDateKey] AS
[Dbo_FactInternetSalesDueDateKey0_5],
[Dbo_FactInternetSales]. [ProductKey] AS
[Dbo_FactInternetSalesProductKey0_6],
[Dbo_FactInternetSales]. [CurrencyKey] AS
[Dbo_FactInternetSalesCurrencyKey0_7]
DE (
SELECCIONAR
[Dbo]. [FactInternetSales].] [ProductKey,
[Dbo]. [FactInternetSales].] [OrderDateKey,
[Dbo]. [FactInternetSales].] [DueDateKey,
[Dbo]. [FactInternetSales].] [ShipDateKey,
[Dbo]. [FactInternetSales].] [CustomerKey,
[Dbo]. [FactInternetSales].] [PromotionKey,
[Dbo]. [FactInternetSales].] [CurrencyKey,
[Dbo]. [FactInternetSales].] [SalesTerritoryKey,
[Dbo]. [FactInternetSales].] [SalesOrderNumber,
[Dbo]. [FactInternetSales].] [SalesOrderLineNumber,
[Dbo]. [FactInternetSales].] [RevisionNumber,
[Dbo]. [FactInternetSales].] [OrderQuantity,
[Dbo]. [FactInternetSales]. [PrecioUnidad],
] [Dbo]. [FactInternetSales]. [ExtendedAmount,
[Dbo]. [FactInternetSales]. [UnitPriceDiscountPct],
] [Dbo]. [FactInternetSales]. [DiscountAmount,
[Dbo]. [FactInternetSales]. [ProductStandardCost],
[Dbo]. [FactInternetSales]. [TotalProductCost],
] [Dbo]. [FactInternetSales]. [SalesAmount,
[Dbo]. [FactInternetSales]. [TaxAmt],
[Dbo]. [FactInternetSales].] [Carga,
[Dbo]. [FactInternetSales].] [CarrierTrackingNumber,
CustomerPONumber [dbo]. [FactInternetSales]. []
DESDE [dbo]. [FactInternetSales]
DONDE OrderDateKey> = '915 'AND OrderDateKey <= '1280'
)
AS [dbo_FactInternetSales]
ORDER BY [dbo_FactInternetSales]. [CustomerKey]
ASC

El SQL declaración, y en particular el plan de consulta, que son generados por Analysis Services son diferentes cuando la tabla de hechos subyacente para la venta en Internet [] grupo de medida utiliza varchar claves como se muestra en la Figura 1.

Cc966525.ASPBPR01(en-us,TechNet.10).gif

Figura 1 plan de consulta estimada entre tablas de hechos de clave varchar vs clave de entero-

Como se puede ver en el plan de consulta estima en la figura 1, la varchar-Key tabla de hechos (pregunta 2) tiene un mayor costo asociado a la exploración de tabla que hace el entero-Key tabla de hechos (pregunta 1). En concreto, hay mayores costos subárbol asociados tanto con los de clasificación y las tareas para la exploración de tabla varcharlos hechos clave de tabla.

Tarea Costo Total Subárbol Costo Total Subárbol
  Consulta 1 (teclas de número entero) Consulta 2 (claves varchar)
Especie 3,19582 3.375974
Exploración de tabla 0.9134235 1.247498

Uso obligatorio de consulta para optimizar el procesamiento

Usted puede mejorar el rendimiento de procesamiento del cubo, sintonizando el subyacente SQL instrucciones ejecutadas. Por esta razón, es importante usar consulta vinculante en lugar de la tabla de unión al crear las particiones grupo de medida (ver el SQL declaraciones en las Figuras 2 y 3). Mirando el cubo Adventure Works OLAP en Microsoft Visual Studio ®, observe el Particiones ficha como se muestra en la Figura 2.

Figure 2   Adventure Works Partitions tab

Figura 2 Adventure Works ficha Particiones

Al hacer clic en la partición de origen abre el cuadro de diálogo Partición de origen, como se muestra en la Figura 3. Como puede ver, utilizando el consulta vinculante tipo de enlace, la fuente de datos es un desarrollador a crear SQL declaración.

Cc966525.ASPBPR03(en-us,TechNet.10).gif

Figura 3 Fuente partición cuadro de diálogo

Al utilizar esta opción tipo de enlace, se puede optimizar el SQL consulta que se envía a la fuente de datos relacionales.

Partición de los grupos de medida si usted tiene una gran cantidad de datos

Es generalmente una buena idea para asignar las particiones grupo de medida ya sea por separado SQL particiones de tabla mediante el uso de llaves o en una partición separada SQL mesa. Utilice particiones siempre que sea posible, lo que limita la cantidad de reprocesamiento que debe realizarse en base a su extracción, transformación y carga (ETL).

Utilice ProcessData y ProcessIndex lugar de ProcessFull

El ProcessFull tipo de enumeración ejecuta el ProcessData y ProcessIndexes puestos de trabajo. Para obtener más información sobre estos tipos de proceso de enumeración.

Desglose del procesamiento de las enumeraciones

Si bien la prueba, el Microsoft SQL Servidor Equipo de Desarrollo de Asesor de Clientes (SQLCAT) advirtió que el tratamiento contra la base de datos relacional completa más rápido y Analysis Services consume menos recursos de memoria cuando la ProcessData y ProcessIndexes enumeraciones se utilizan como comparación con el uso ProcessFull. Memoria consideraciones son especialmente importantes en los sistemas de 32-bit debido a su menor consumo de memoria. Como se puede ver en el siguiente cuadro, hay mejoras notables en el tiempo de procesamiento.

Proceso de enumeración Tiempo de
Proceso en dos etapas 00:12:23
ProcessData 00:10:18
ProcessIndexes 00:02:05
ProcessFull 00:13:34

Para cambiar el tratamiento en la secuencia de comandos XMLA, sólo es necesario modificar la <process> <Tipo> </ Tipo> </ Proceso> atributo como se muestra en el ejemplo de código siguiente. espacios de nombres XML se han eliminado del código para mayor claridad.

<Batch Xmlns="...">
<Parallel>
<Proceso xmlns: xsd ="..." xmlns: xsi ="..."
xmlns: ddl2 ="..." xmlns: ddl2_2 ="...">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
</ Object>
<<Tipo> ProcessData /> Tipo --- o ProcessIndexes
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
</> Paralelo
</> Batch

patrones de uso de CPU son diferentes entre las enumeraciones

La razón aparente de esta diferencia es que los patrones de uso de la CPU entre las dos acciones diferentes son muy diferentes. Ver la salida de monitor de rendimiento en los próximos tres cifras (el% de tiempo de procesador se pone de relieve en las figuras). Como puede ver, no sólo no hay un procesamiento más rápido el tiempo mediante el uso de ProcessData y ProcessIndexes, Pero también hay diferencias en la utilización de la CPU también (ProcessFull: 64.021, ProcessData: 47.847, ProcessIndexes: 54.353).

Cc966525.ASPBPR04(en-us,TechNet.10).gif

Figura 4 patrón de uso de CPU: ProcessFull, promedio 64,021

Cc966525.ASPBPR05(en-us,TechNet.10).gif

Figura 5 patrón de uso de CPU: ProcessData, promedio 47,847

Cc966525.ASPBPR06(en-us,TechNet.10).gif

Figura 6 patrón de uso de CPU: ProcessIndexes, promedio 54,353

Como se puede ver en las figuras 5 y 6, el ProcessData y ProcessIndexes enumeración comportamiento diferente del de ProcessFull. Para algunos clientes, esta diferencia resultó en menos tiempo de procesamiento en contra de su origen de datos relacional.

Para investigar la escalabilidad del sistema, proceso que utiliza ProcessData con una partición y MaxParallel= 1. A continuación, medir con dos particiones MaxParallel= 2, …, y así sucesivamente. Medir y comparar el impacto (de memoria utilizada, el uso de CPU, disco I / O, y así sucesivamente) para determinar el rendimiento óptimo.

Procesamiento Paralelo Mejor Prácticas

Aquí hay una serie de técnicas para optimizar el procesamiento en paralelo.

No siempre se utiliza el interfaz de usuario predeterminada para el procesamiento paralelo

Por defecto, cuando Analysis Services procesa el cubo seleccionado, grupo de medida, o particiones, servidor decide cómo procesar el objeto (s) en paralelo. Sin embargo, dejando que el servidor decidir cómo muchos hilos de proceso en paralelo no siempre es óptimo. Por ejemplo, para el [Adventure Works DW de base de datos de ejemplo] OLAP en una memoria RAM de 4 GB, con cuatro procesadores servidor ejecuta Analysis Services Service Pack 2, los tiempos de elaboración similar en cuestión de segundos son los siguientes:

El procesamiento paralelo establecimiento El tiempo de procesamiento (ss.sss)
Permitir que el servidor decidir 50,990
Configuración manual paralelo a cuatro tareas 47,347

Para cambiar la configuración de procesamiento en paralelo dentro de la interfaz de usuario, desde el cuadro de diálogo de procesamiento de Analysis Services, haga clic en el Cambiar la configuración botón para abrir el cuadro de diálogo Configuración de cambio se muestra en la Figura 7. Desde el Máximo paralelo tareas lista, seleccione un valor apropiado para el número de tareas en paralelo. La siguiente sección se explica cómo determinar el valor apropiado para su sistema.

Cc966525.ASPBPR07(en-us,TechNet.10).gif

Figura 7 Analysis Services Cambiar la configuración del cuadro de diálogo

Establezca los valores adecuados para el procesamiento paralelo

En general, el número adecuado de tareas en paralelo es 1,5 a 2 veces el número de CPUs, superando este valor puede dar lugar a competencia por los recursos. Siempre pruebe el sistema para ver qué tan bien paralelismo trabajará para usted. Como usted tiene recursos limitados, una opción plausible podría ser la utilización de menor paralelismo en lugar de más.

La utilidad ascmd.exe línea de comandos es una herramienta muy útil para probar las características de rendimiento para determinar los valores adecuados para el procesamiento paralelo. Esta utilidad es similar a la sqlcmd.exe utilidad que se utiliza para ejecutar SQL declaraciones en SQL Servidor. La utilidad ascmd.exe ejecuta los comandos XMLA contra uno de Analysis Services servidor.

Lo que sigue es un script de ejemplo para procesar la XMLA [cubo Adventure Works DW]; espacios XMLA nombre se han quitado para mayor claridad.

<Batch Xmlns="...">
MaxParallel="8"> <Parallel
<Proceso xmlns: xsd ="..." xmlns: xsi ="..."
xmlns: ddl2 ="..." xmlns: ddl2_2 ="...">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
</ Object>
<Tipo> <ProcessFull /> Tipo
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
</> Paralelo
</> Batch

Mediante el uso de ascmd.exe y XMLA, puede ajustar el XMLA MaxParallel parámetro para probar diferentes valores. (El ejemplo XMLA establecer este a un valor de 8, el consejo anterior, No siempre dejar que la interfaz de usuario predeterminada para el procesamiento paralelo, Muestra cómo hacer esto en la interfaz de usuario.) Este ajuste especifica el número máximo de subprocesos en el que ejecutar comandos en forma paralela, en el cuadro de diálogo Configuración de cambio (a través del procesamiento de la interfaz de usuario) en la Figura 7.

Uso de la utilidad ascmd.exe y cuatro diferentes secuencias de comandos XMLA, fuimos capaces de automatizar rápidamente y prueba de cuatro diferentes configuraciones de procesamiento paralelo. Los siguientes son los resultados de esta prueba. Como puede ver, para la configuración de la máquina particular utilizado en esta prueba, fue beneficioso para establecer el paralelismo con 8 en lugar de dejar que el servidor decidir.

ajustes MaxParallel SQL/ OLAP enmismo servidor SQL/ OLAP endiferente servidors
Deje que el servidor decidir (por defecto) 00:12:29.966 00:07:43.060
Paralelo = 4 00:17:05.000 00:08:07.953
Paralelo = 6 00:12:57.023 00:07:37.023
Paralelo = 8 00:11:28.983 00:07:31.933

Usar la <Parallel> XMLA nodos para tareas de procesamiento de grupo

En las tareas de transformación definida dentro de su XMLA, crear <lógica <Parallel> / paralelos> para tareas de procesamiento de grupo de forma tal que las servidor utiliza el máximo de recursos. Al mismo tiempo, adquirir el hábito de tramitación de la particiones individuales (en comparación con toda la medida del grupo) con las teclas <PartitionID> / PartitionID> nodo para procesar menos datos en cualquier momento.

Dentro de la <<Batch> / elemento> Batch, si se establece la Transacción atributo en true, todos los comandos dentro del lote se considerará como una única transacción. Si este atributo se establece en false, todos los comandos de procesamiento única se comprometerán al completar con éxito. Esta última opción es beneficiosa si está procesando los distintos grupos medir y / o objetos en paralelo. Como se puede ver en el ejemplo siguiente, el XMLA está procesando las ventas [hecho Resumen grupo de medida] y sus particiones individuales en paralelo.

="..." <Xmlns lotes Transacción = "true">
<Parallel>
<Proceso xmlns: xsd ="..." xmlns: xsi ="..." ...="">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
Hecho <MeasureGroupID> <Resumen de ventas /> MeasureGroupID
<PartitionID> Total_Sales_2001 </> PartitionID
</ Object>
<Tipo> <ProcessFull /> Tipo
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
<Proceso xmlns: xsd ="..." xmlns: xsi ="..." ...="">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
Hecho <MeasureGroupID> <Resumen de ventas /> MeasureGroupID
<PartitionID> Total_Sales_2002 </> PartitionID
</ Object>
<Tipo> <ProcessFull /> Tipo
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
<Proceso xmlns: xsd ="..." xmlns: xsi ="..." ...="">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
Hecho <MeasureGroupID> <Resumen de ventas /> MeasureGroupID
<PartitionID> Total_Sales_2003 </> PartitionID
</ Object>
<Tipo> <ProcessFull /> Tipo
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
<Proceso xmlns: xsd ="..." xmlns: xsi ="..." ...="">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
Hecho <MeasureGroupID> <Resumen de ventas /> MeasureGroupID
<PartitionID> Total_Sales_2004 </> PartitionID
</ Object>
<Tipo> <ProcessFull /> Tipo
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
</> Paralelo
</> Batch

En aras de la claridad, los espacios de nombres XML de este ejemplo se han eliminado. Tenga en cuenta que la Transacción atributo se ha establecido en true, lo que significa que el procesamiento de los cuatro [Ventas Hecho Resumen particiones] se cometa como una sola transacción. En un equipo de escritorio con procesador único, puede observar que el tratamiento de este grupo de medida se llevará a 11s (segundos) en el tratamiento como un grupo de medida única y 6s al procesar hasta cuatro particiones individuales en paralelo.

Solución de problemas Mejor Prácticas

Estos consejos para solucionar problemas de procesamiento le ayudará a entender sus puntos de estrangulamiento de procesamiento.

Un perfil de sus SQL declaraciones para sintonizar los

Para ayudar con la puesta a punto, puede utilizar SQLPara capturar el SQL declaraciones emitidas por Analysis Services para que pueda realizar su regular SQL esfuerzos de ajuste (como la actualización de las estadísticas, agregar índices, etc). Por ejemplo, el procesamiento de Ventas [Resumen grupo de medida] en el [AdventureWorksDW] OLAP DB proporciona la SQL Traza en la Figura 8.

Cc966525.ASPBPR08(en-us,TechNet.10).gif

Figura 8SQL Servidor Traza para el procesamiento de AdventureWorks

Al seleccionar uno de muchos SQL declaraciones emitidas, a continuación, puede ejecutar un plan de ejecución de la consulta. En el caso de la SQL instrucción seleccionada en la figura 8, el costo total fue de 2,285195 subárbol.

Cc966525.ASPBPR09(en-us,TechNet.10).gif

Figura 9 subárbol costo total de 2,285195

En este caso concreto, el grupo de medida Sales Resumen se divide por la fecha del pedido, el subyacente SQL tiene una cláusula WHERE con el OrderDateKey. Agregar un índice agrupado en la tabla FactResellerSales, columna OrderDateKey mejoraría el rendimiento de procesamiento del cubo. El nuevo plan de consulta para el mismo SQL declaración ahora tiene un costo total de 1.142899 subárbol (Figura 10).

Cc966525.ASPBPR10(en-us,TechNet.10).gif

Figura 10 subárbol costo total de 1,142899 con índices agrupados

Crear un seguimiento de todo el sistema de archivo

Si tiene problemas para determinar qué está causando sus cuellos de botella en el procesamiento, mantener un sistema de tratamiento en todo el archivo de traza. Se usa para determinar qué consultas se están ejecutando procesamiento más lento (o más rápido) de lo esperado, así como si fueran a ser ejecutados en todos.

Otra forma práctica de hacerlo es ejecutar la siguiente secuencia de comandos XMLA (que está procesando el cubo Adventure Works), que imprime la traza en el directorio c: \ archivos OLAP_Processing.trc.

xmlns <lotes = "http://schemas.microsoft.com/analysisservices/2003/engine"
xmlns: jabón = "http://schemas.xmlsoap.org/soap/envelope/">
<Crear Mlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<ObjectDefinition>
<trace>
Servicios de Procesamiento de Análisis de Traza <ID> </ id>
Servicios de Procesamiento de Análisis de Traza <Nombre> </ name>
<LogFileName> C: <OLAP_Processing.trc \ /> logfilename
<LogFileAppend> 1 </ LogFileAppend>
<AutoRestart> 1 </ reinicio automático>
<LogFileSize> 50000 </> LogFileSize
<LogFileRollover> 1 </> LogFileRollover
<Events>
<event>
<EventID> 5 </> EventID
<Columns>
<ColumnID> 7 </> ColumnID
<ColumnID> 15 </> ColumnID
<ColumnID> 39 </> ColumnID
<ColumnID> 8 </> ColumnID
<ColumnID> 12 </> ColumnID
<ColumnID> 28 </> ColumnID
<ColumnID> 32 </> ColumnID
<ColumnID> 40 </> ColumnID
<ColumnID> 1 </> ColumnID
<ColumnID> 13 </> ColumnID
<ColumnID> 25 </> ColumnID
<ColumnID> 33 </> ColumnID
<ColumnID> 41 </> ColumnID
<ColumnID> 2 </> ColumnID
<ColumnID> 14 </> ColumnID
<ColumnID> 42 </> ColumnID
<ColumnID> 3 </> ColumnID
<ColumnID> 11 </> ColumnID
<ColumnID> 43 </> ColumnID
</ Columns>
</> Evento
<event>
<EventID> 6 </> EventID
<Columns>
<ColumnID> 7 </> ColumnID
<ColumnID> 15 </> ColumnID
<ColumnID> 23 </> ColumnID
<ColumnID> 39 </> ColumnID
<ColumnID> 8 </> ColumnID
<ColumnID> 24 </> ColumnID
<ColumnID> 32 </> ColumnID
<ColumnID> 40 </> ColumnID
<ColumnID> 1 </> ColumnID
<ColumnID> 9 </> ColumnID
<ColumnID> 25 </> ColumnID
<ColumnID> 33 </> ColumnID
<ColumnID> 41 </> ColumnID
<ColumnID> 2 </> ColumnID
<ColumnID> 6 </> ColumnID
<ColumnID> 10 </> ColumnID
<ColumnID> 14 </> ColumnID
<ColumnID> 22 </> ColumnID
<ColumnID> 42 </> ColumnID
<ColumnID> 3 </> ColumnID
<ColumnID> 11 </> ColumnID
<ColumnID> 43 </> ColumnID
<ColumnID> 4 </> ColumnID
<ColumnID> 12 </> ColumnID
<ColumnID> 28 </> ColumnID
<ColumnID> 5 </> ColumnID
<ColumnID> 13 </> ColumnID
</ Columns>
</> Evento
<event>
<EventID> 8 </> EventID
<Columns>
<ColumnID> 7 </> ColumnID
<ColumnID> 15 </> ColumnID
<ColumnID> 39 </> ColumnID
<ColumnID> 8 </> ColumnID
<ColumnID> 24 </> ColumnID
<ColumnID> 1 </> ColumnID
<ColumnID> 5 </> ColumnID
<ColumnID> 9 </> ColumnID
<ColumnID> 13 </> ColumnID
<ColumnID> 25 </> ColumnID
<ColumnID> 41 </> ColumnID
<ColumnID> 2 </> ColumnID
<ColumnID> 10 </> ColumnID
<ColumnID> 14 </> ColumnID
<ColumnID> 22 </> ColumnID
<ColumnID> 42 </> ColumnID
<ColumnID> 3 </> ColumnID
<ColumnID> 11 </> ColumnID
<ColumnID> 43 </> ColumnID
<ColumnID> 4 </> ColumnID
<ColumnID> 12 </> ColumnID
<ColumnID> 28 </> ColumnID
</ Columns>
</> Evento
</ Eventos>
</ Trace>
</> ObjectDefinition
</ Crear>
<Parallel>
<Proceso xmlns: xsd = "http://www.w3.org/2001/XMLSchema"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns: ddl2 = "http://schemas.microsoft.com/analysisservices/2003/engine/2"
xmlns: ddl2_2 = "http://schemas.microsoft.com/analysisservices/2003/engine/2/2">
<OBJECT>
Aventura <DatabaseID> Obras <DW /> DatabaseID
Aventura <CubeID> Obras <DW /> CubeID
</ Object>
<Tipo> <ProcessFull /> Tipo
<WriteBackTableCreation> <UseExisting /> WriteBackTableCreation
</> Proceso
</> Paralelo
</> Batch

<Eliminar xmlns = "http://schemas.microsoft.com/analysisservices/2003/engine"
xmlns: jabón = "http://schemas.xmlsoap.org/soap/envelope/">
<OBJECT>
Servicios de Procesamiento de Análisis de Traza <TraceID> </> TraceID
</ Object>
</> Eliminar

Actualizar a SP2 de Analysis Services para NUMA apoyo

Una gran mejora al tratamiento con SP2 es el Análisis de Servicios de apoyo natural de acceso a memoria no uniforme (NUMA) de hardware. Para obtener más información sobre NUMA.

Evite las consultas de larga ejecución de interferir con el procesamiento

consultas de larga duración que se ejecutan al mismo tiempo que el procesamiento puede impedir el tratamiento se complete. Con el fin de comprometer a la actividad de procesamiento, Analysis Services tiene un bloqueo exclusivo en la base de datos. Pero, una consulta de larga ejecución se bloqueará la solicitud de bloqueo y de transformación deberá esperar a que las consultas para terminar antes de la transformación puede completar. Si no se puede crear una ventana de procesamiento exclusivo, considere una arquitectura de consulta / procesamiento de Analysis Services servidor la arquitectura como en la Figura 11. El procesamiento de Analysis Services servidor exclusivamente los procesos de datos, una vez finalizada, se sincroniza con la consulta de Analysis Services servidor, Que sólo hace consultas MDX.

Figure 11   Querying / Processing AS server architecture

Conceptos MDX

Dimensiones, niveles, miembros y medidas

La mayoría de los idiomas utilizados para la definición y manipulación de datos, como SQL, se han diseñado para recuperar datos en dos dimensiones: una dimensión de la columna y una dimensión de fila. El siguiente diagrama ilustra una base de datos relacionales tradicionales, utilizado para almacenar información de pedidos.

Cada cuadro representa los datos de dos dimensiones. En la intersección de cada fila y columna es un solo elemento de datos llamado cuerpo. Las columnas específicas para ser visto en una consulta SQL se especifican con una instrucción SELECT y las filas para recuperarse están limitados por una cláusula WHERE.

de datos multidimensionales, por otra parte, puede ser representado por las estructuras con más de dos dimensiones. Estas estructuras, llamadas cubos, tienen múltiples dimensiones. En la intersección de las dimensiones de un cubo, puede haber más de un elemento de datos, llamada medida. El siguiente diagrama muestra un cubo que da empleo a tres dimensiones, ruta, servicio y tiempo, y dos medidas, los paquetes y la última vez. Cada dimensión se divide en diferentes niveles, cada uno de los cuales se desglosa aún más en los miembros. Por ejemplo, la dimensión Source proporciona el nivel de este hemisferio, que se desglosa en cuatro miembros, África, Asia, Australia y Europa.

Sample Cube

Como puede ver, la consulta de los datos incluso simples, extraídos de una fuente de datos multidimensional puede ser una tarea compleja. Un cubo puede tener más de tres dimensiones, por ejemplo, o puede tener sólo una dimensión.

Los conceptos de cubos, dimensiones, niveles, miembros y medidas son importantes para la comprensión de la sintaxis MDX. Lecturas adicionales sobre estos temas arquitectónicos se recomienda si usted es nuevo en procesamiento analítico en línea (OLAP) bases de datos.

Las células, tuplas y conjuntos

Al regresar de SQL un subconjunto de datos de dos dimensiones de las tablas, MDX devuelve un subconjunto de datos multidimensionales de cubos.

El diagrama ilustra cubo que la intersección de los miembros multidimensional crea células de las cuales se pueden obtener datos. Para identificar y extraer de estos datos, ya sea en una sola celda o un bloque de celdas, MDX utiliza un sistema de referencia llamado tuplas. las dimensiones y los miembros de la lista de tuplas para identificar las células individuales, así como secciones más grandes de las células en el cubo, porque cada célula es una intersección de todas las dimensiones del cubo, tuplas únicamente puede identificar cada célula en el cubo. A los efectos de referencia, las medidas de un cubo son tratados como una dimensión privada, denominada Medidas, en el propio cubo. Por ejemplo, en el diagrama anterior, la tupla siguiente identifica una celda en la que el valor es de 240:

(Source. [Hemisferio Oriental]. Africa, Tiempo. [2] la mitad. [] 4 º trimestre, Route.Air, Measures.Packages)

La tupla identifica de forma exclusiva una sección en el cubo, no tiene por qué referirse a una celda específica, ni tienen que abarcar todas las dimensiones de un cubo. Los siguientes ejemplos son todas las tuplas del diagrama de cubo:

(] Source. [Hemisferio Oriental)
(Tiempo. [2] la mitad, la Fuente. [Hemisferio Occidental])

Estas tuplas ofrecer secciones del cubo, llamadas “rebanadas”, que abarcan más de una celda.

Una colección ordenada de tuplas se conoce como un conjunto. En una consulta MDX, el eje y las dimensiones cortadora se componen de conjuntos de tuplas tales. El ejemplo siguiente es una descripción de un conjunto de tuplas en el cubo en el diagrama:

((Tiempo.] [1 ª mitad. [1 º trimestre]), Tiempo. [2] la mitad. [3 º trimestre]))

Además, es posible crear un conjunto con nombre. Un conjunto con nombre es un conjunto con un alias, que sirve para hacer su consulta MDX más fácil de entender y, si es particularmente complejo, más fácil de procesar.

Eje y Dimensiones máquina de cortar

En SQL, por lo general es necesario restringir la cantidad de datos devueltos por una consulta en una tabla. Por ejemplo, es posible que desee ver sólo dos campos de una tabla con los campos de cuarenta años, y quiere verlos solamente si un tercer campo se encuentra con un criterio específico. Usted puede lograr esto mediante la especificación de columnas en la instrucción SELECT, mediante una instrucción WHERE para restringir las filas que se devuelven sobre la base de criterios específicos.

En MDX, esos conceptos se aplican también. Una sentencia SELECT es utilizada para seleccionar las dimensiones y los que deban ser devueltos, a que se refiere como dimensiones del eje. La declaración de que se utilice para restringir los datos devueltos a la dimensión y criterios específicos miembro, a que se refiere como una dimensión cortadora. Una dimensión del eje se prevea el retorno de datos para múltiples miembros, mientras que una máquina de cortar dimensión se prevea el retorno de datos para un solo miembro.

Los términos “dimensión” eje y “dimensión máquina de cortar” se utilizan para diferenciar las dimensiones de las celdas de la fuente del cubo de la consulta, se indica en la cláusula FROM, de las dimensiones de las celdas en el cubo de resultado, que puede estar compuesto por múltiples dimensiones del cubo.

Miembros calculados

miembros calculados son miembros que no estén basadas en datos, pero en las expresiones evaluadas en MDX. Ellos se devuelven de la misma manera como un miembro normal. MDX proporciona un robusto conjunto de funciones que se pueden utilizar para crear miembros calculados, dándole gran flexibilidad en la manipulación de datos multidimensionales.

Funciones definidas por el usuario

MDX proporciona en forma de ampliación de las funciones definidas por el usuario utilizando cualquier lenguaje de programación que puede apoyar Component Object Model (COM) de interfaces. Puede crear y registrar sus propias funciones que operan sobre datos multidimensionales, así como aceptar los argumentos y valores devueltos en la sintaxis MDX. Usted puede llamar a funciones definidas por el usuario desde dentro Generador de miembros calculados, el lenguaje de definición de datos (DDL) que apoyan MDX y las consultas MDX.

Introducción a MDX

MDX, un acrónimo de Multi Dimensional Expressions, es una sintaxis que sostiene la elaboración y manipulación de objetos multidimensionales y datos. MDX es similar en muchos aspectos al Lenguaje de consulta estructurado (SQL) sintaxis, pero no es una extensión del lenguaje SQL, de hecho, algunas de las funciones que se suministra por MDX se pueden suministrar, aunque no tan eficiente o por intuición, por SQL.

Al igual que con una consulta SQL, cada consulta MDX requiere una solicitud de datos (la cláusula SELECT), un punto de partida (la cláusula FROM), y un filtro (la cláusula WHERE). Estas y otras palabras clave ofrecer las herramientas utilizadas para extraer partes específicas de los datos de un cubo para su análisis. MDX también suministra un robusto conjunto de funciones para la manipulación de los datos recuperados, así como la capacidad de extender MDX con funciones definidas por el usuario.

MDX, como SQL, proporciona el lenguaje de definición de datos (DDL) para la gestión de la sintaxis de las estructuras de datos. Hay comandos MDX para crear (y borrar) cubos, dimensiones, medidas, y sus objetos subordinados.

Dimensiones y Medidas

Los datos devueltos en un informe se determina por la dimensiones y medidas que la definición de informe contiene. Utiliza las medidas y dimensiones para la visualización de informes:
  • Medidas numéricos son entidades que se agrupan de cierta forma, por ejemplo, mínimo, máximo, el recuento, la suma y promedio. Las medidas también se pueden calcular las medidas basadas en operaciones matemáticas de múltiples medidas.
  • Dimensiones son las entidades empresariales, como el color, tamaño, producto, o el tiempo. Mediante la combinación de dimensiones y medidas, las definiciones de Commerce Server 2002 informe se facilita información tanto cuantitativa como basados en el tiempo.

En algunos informes, los valores numéricos (medidas) se promedian con el tiempo. En estos casos, es importante entender cómo el cálculo del promedio, intervalo de tiempo, y la ubicación física del valor en el informe afectar al valor. Por ejemplo, considere las medidas:

  • Promedio de peticiones por hora
  • Promedio de peticiones por día de la semana
  • visitas promedio por hora
  • visitas promedio por día de la semana

Cuando estos valores se calculan, se basan en el intervalo de tiempo que es atravesado por la celda actual en la tabla dinámica. Cuando las dimensiones múltiples de tiempo se agregan al informe, el cubo OLAP calcula la intersección de las dimensiones para determinar el período de tiempo durante el cual el promedio se debe calcular.

Por ejemplo, una célula que contiene una medida promedio por hora (como el Promedio de peticiones por hora), en una columna que se cruza una fila que contiene el plazo de Date = junio de 2000, y horas del día = 12:00, contendrá la suma de toda la actividad en el mes de junio de 2000, que se produjo entre las 12:00 PM y 1:00 PM, dividido por 30. (Hay 30 días en el mes de junio, y cada día contiene una hora 12:00.)

Cuando se ejecuta un informe estático, puede cambiar los parámetros de los datos devueltos. Por ejemplo, usted puede solicitar datos de sólo los 25 usuarios que realizaron compras, pero no puede cambiar las dimensiones y medidas en el informe.

Al ejecutar un informe dinámico, una lista de dimensiones y medidas disponibles aparece en un Tabla dinámica o una Gráfico dinámico.

Puede utilizar la lista de campos de tabla dinámica para cambiar las dimensiones y medidas en un informe dinámico, añadiendo, quitando y cambiando la orientación de las dimensiones y medidas, y cambiando el nivel de detalle que la muestra efectuada informe.

Si cambia una definición completa de informes dinámicos, puede guardar la definición del informe con los cambios en un nuevo informe o una definición de informe dinámico personalizado.

Creación de conjuntos de prueba reducto

Cuando se crea una estructura de minería, ahora puede dividir los datos en la estructura de minería en conjuntos de entrenamiento y pruebas. La definición de la partición se almacena con la estructura, de modo que usted puede reutilizar la formación y una prueba con cualquier modelos de minería que se basan en esa estructura.

Los datos se dividen al azar entre la formación y las particiones de las pruebas, pero también puede especificar las semillas utilizadas para crear las particiones si es necesario volver a crear una partición.

Se especifica el tamaño de las pruebas establecidas, ya sea como un porcentaje del número total de filas, como un número máximo de filas, o como una combinación de estos requisitos. Para obtener más información acerca de cómo utilizar la formación y conjuntos de datos de ensayo.

filtros de los asuntos de modelo

Ahora puede colocar filtros a un modelo de minería, y aplicar el filtro durante el entrenamiento y pruebas. Aplicación de un filtro al modelo le permite controlar los datos que se utiliza para entrenar el modelo, y le permite más fácilmente evaluar el desempeño del modelo en subconjuntos de los datos.

Por ejemplo, puede que desee conocer la exactitud de un modelo de correo dirigido sólo para los clientes a través de un cierto nivel de ingresos. Puede aplicar el filtro en la columna de ingresos del modelo de minería al crear el gráfico de elevación, y ver los resultados de ese segmento demográfico solamente.

Business Intelligence Development Studio también proporciona nuevos editores de filtros para ayudarle a crear condiciones complejas que se pueden aplicar a las tablas de caso y de tablas anidadas.

Validación cruzada de los modelos de minería de múltiples

La validación cruzada es un método establecido para evaluar la exactitud de los modelos de minería de datos. En la validación cruzada, que forma iterativa dividir los datos en subconjuntos estructura de minería, construcción de modelos en los subconjuntos, y luego medir la exactitud del modelo para cada partición. Revisando las estadísticas devueltas, puede determinar qué tan confiable es el modelo de minería, y comparar más fácilmente los modelos que se basan en la misma estructura.

La validación cruzada está disponible en la vista Gráfico de precisión de minería de datos Diseñador de minería de datos. También puede dividir una estructura de minería, prueba varios modelos de minería, y generar un análisis mediante el uso de Analysis Services procedimientos almacenados.

En SQL Server 2008, para generar un informe de validación cruzada, se especifica la estructura de minería y el atributo predecible, a continuación, especifique el número de pliegues en el que para segmentar los datos del caso.

El apoyo a la minería de datos de complementos para Office 2007

SQL Server 2008 admite la creación, gestión y uso de modelos de minería de datos desde Microsoft Excel cuando se utiliza el SQL Server 2008 Data Mining complementos para Office 2007. La nueva versión de este popular complemento gratuito ha sido mejorado mediante la adición de apoyo a la formación del lado del servidor y las particiones de prueba, validación cruzada, y varias herramientas de análisis como el análisis de nuevos en la cesta y una calculadora de predicción para imprimir.

 

Mejoras en el algoritmo de serie temporal Microsoft

Para mejorar la precisión y la estabilidad de algunas predicciones en modelos de series de tiempo, un nuevo algoritmo se ha añadido al algoritmo de serie temporal Microsoft. Basado en el algoritmo ARIMA bien conocido, el nuevo algoritmo proporciona mejores predicciones a largo plazo que el algoritmo ARTxp que Analysis Services ha estado usando. (ARTxp es un algoritmo de árbol de auto-regresivo que se ha optimizado tanto para una sola porción de tiempo o predicciones a corto plazo.)

De forma predeterminada, la nueva implementación del algoritmo de serie temporal Microsoft utiliza el algoritmo ARTxp formar una versión del modelo y el algoritmo ARIMA para entrenar a otra versión. El algoritmo de las ponderaciones de los resultados de estos dos modelos para proporcionar las características de predicción que prefiera. Si no desea utilizar esta aplicación por defecto, puede especificar que el algoritmo de la serie Tiempo Microsoft utilizar sólo el ARTxp o el algoritmo ARIMA. En SQL Server 2008 Enterprise, puede especificar un ponderar el peso de los algoritmos para proporcionar la mejor predicción en un lapso de tiempo variable.

El algoritmo de la serie Tiempo Microsoft ahora también acepta datos durante la predicción para permitir que los nuevos escenarios de negocios. Por ejemplo, puede crear un modelo de predicción de ingresos que se basa en las medias entre los productos, los agregados regionales, o algunos datos generales otro conjunto. A continuación, puede aplicar ese modelo a la serie de tiempo que muestra las ventas de un producto individual. Al aplicar el modelo general, usted puede tomar ventaja de la estabilidad y disponibilidad de datos agregados y personalizar la predicción para cada producto.

También podría entrenar modelos mediante el uso de múltiples series y luego aplicar los modelos a los datos para predecir  los panoramas.

Obtención de detalles a la estructura asuntos y columnas de estructura

En SQL Server 2008, si habilita la obtención de detalles sobre una estructura de minería, puede consultar la estructura de minería de datos y volver sobre los casos utilizados para entrenamiento y pruebas. Puede crear consultas de obtención de detalles en una estructura mediante el uso de Extensiones de minería de datos (DMX).

Por otra parte, si de obtención de detalles está habilitada en un modelo de minería y de la estructura de minería relacionados, puede crear consultas que recuperan datos de columnas de la estructura de minería de base. Esto es útil si desea descubrir información detallada sobre los casos en un nodo en particular. Por ejemplo, usted podría recuperar la información de contacto para los clientes de un grupo determinado.

Aliasing columnas de minería de Modelo

Ahora puede agregar los alias a las columnas de un modelo de minería para que sea más fácil de entender el contenido de la columna y la referencia de columna en las instrucciones DMX.

Por ejemplo, si usted construye una estructura de minería de datos que contiene las versiones continua y discretizada de los mismos datos, es posible dar a las dos columnas del mismo nombre para facilitar la comparación.

Consultar el esquema de minería de datos conjuntos de filas

En SQL Server 2008. Muchos de los actuales conjuntos de filas OLE DB minería de datos de esquema ha sido expuesto como un conjunto de tablas del sistema que usted puede fácilmente consulta mediante instrucciones DMX. Esto hace que sea fácil de recuperar los metadatos relacionados con modelos y estructuras, para extraer los detalles del contenido del modelo de minería, o para supervisar una instancia de Analysis Services o servicio.

Mejoras en el diseño de agregación

Analysis Services incluye las siguientes mejoras en el diseño de agregaciones:

  • Nueva Agregación de diseño. Un diseñador de agregación nuevo hace más fácil de buscar y modificar diseños de agregación. Agregación diseños ahora se muestran agrupados por grupo de medida. Una nueva visión para el diseño de agregación manual ya está disponible para usuarios avanzados.
  • Simplificado y mejorado diseño de agregación y basada en el uso Wizards de optimización. Estos asistentes actualización permitirá modificar los parámetros de almacenamiento para las agregaciones en una o más particiones en un momento y calar más fácilmente los valores de agregación de uso. La optimización basada en el uso Asistente ahora también te permite añadir nuevas agregaciones a una agregación existentes.
  • Nueva Advertencias AMO. Estos mensajes de advertencia los nuevos usuarios de alerta cuando se apartan de diseño de la agregación de las mejores prácticas.
Mejoras en el diseño de cubos
El asistente del cubo se ha simplificado y mejorado. Las mejoras ayudarán a crear mejores cubos en menos pasos.
Dimensión Mejoras en el diseño

Analysis Services incluye las siguientes mejoras en el diseño de dimensiones:

  • Nuevo atributo Relación con el diseñador. El editor tiene una nueva dimensión del atributo de diseño Relación que hace más fácil para navegar y modificar las relaciones de atributos.
  • Nueva Advertencias AMO. Estos mensajes de advertencia los nuevos usuarios de alerta cuando se apartan de las mejores prácticas de diseño o cometen errores lógicos en el diseño de base de datos.
  • Simplificado y mejorado Asistente para dimensiones. Esta última versión del asistente detecta automáticamente las jerarquías entre padres e hijos, proporciona mayor seguridad de configuración de error por defecto, y soporta la especificación de propiedades de miembro.
  • Nueva clave Columnas del cuadro de diálogo. Este nuevo cuadro de diálogo hace que las columnas de clave de edición más fácil.
  • columna de soporte clave en el Panel de Propiedades. columnas de clave ahora se pueden editar en el panel Propiedades.
  • Dimensión Actualizado estructura de pestañas. Esta ficha ahora trabaja con el nuevo diseñador de relaciones y atributos es más fácil de usar, que le hace modificar los atributos y las jerarquías más fácil.
Las mejoras de copia de seguridad y restauración

La copia de seguridad y restaurar la funcionalidad de Analysis Services tiene una nueva estructura de almacenamiento y un mejor rendimiento en todas las copias de seguridad y restaurar los escenarios.

Mejora de la estructura de almacenamiento

La nueva estructura de almacenamiento proporciona un repositorio más sólido para la base de datos archivados. Mediante el uso de la estructura de almacenamiento nuevo, no existe un límite práctico para el tamaño del archivo de base de datos, ni existe un límite en el número de archivos que puede tener una base de datos.

Mejora del rendimiento

La nueva copia de seguridad y restaurar la funcionalidad logra un mayor rendimiento. Las pruebas en diferentes bases de datos de tamaño y con varios números de los archivos han demostrado mejoras significativas en el rendimiento. Para obtener los valores reales que se basan en sus necesidades específicas, le animamos a realizar sus propias pruebas en contra de su propia base de datos.

Bienvenidos!!!!

Buenooo ahora necesito ampliar mis horizontes, entonces voy a seguir con SQL SERVER, voy a publicar truquitos y uno que otro articulo😀

ESPERO QUE LO DISFRUTEN!!!!