Viendo productos sin venta en los último X meses con MDX

Posted by Miguel Egea | Posted in Analisys Services, MDX | Posted on 18-07-2010

1

Haca unos dias, un amigo, y alumno de un curso de MDX que impartí lanzaba esa pregunta en los post, ¿como saber los artículos que no han tenido venta en los últimos tres meses. Para eso hace falta saber que dia es hoy, aunque en realidad, me parece que es mejor olvidarse de que dia es hoy y hacerlo genérico. Vamos a ver como podriamos hacer eso.

Bueno, vamos a ir por partes.. lo primero que vamos a hacer es ver como calcular el día de hoy.

with member hoy
as
 now()
select hoy on 0
from [Adventure Works]

despues vamos a ver como sacar el conjunto de articulos con ventas en un mes.

select  exists([Product].[Product].product*[Date].[Calendar].[Month].members,,
		  "Internet Sales")
  on 1,
        {Measures.[Internet Sales Amount]} on 0
from  [Adventure Works];

el conjunto que forman los meses y  los productos que han tenido ventas es lo que nos devuelve la clasula de arriba.

Ahora vamos a calcular los que no han tenido ventas en absoluto, para ello simplemente hacemos una resta de conjuntos, es decir, todos los productos menos los que han tenido ventas

select  [Product].[Product].product*[Date].[Calendar].[Month].members-
exists([Product].[Product].product*[Date].[Calendar].[Month].members,,
		  "Internet Sales")
  on 1,
        {Measures.[Internet Sales Amount]} on 0
from  [Adventure Works];
 

De esta forma tenemos los articulos sin ventas en un mes concreto, porque son aquellos que no tienen datos en el grupo de medidas Internet Sales, para el mes en cuestion. El problema viene porque ahora necesitamos saber los que no tienen ventas en los últimos tres meses. Para poder usar Exist, necesitariamos tener un grupo especial que tuviese en el mes actual las ventas de los últimos tres meses para cada producto y comprobar su existencia. El resultado sería rápido, pero parece que quedaría bastante engorroso de hacer, además implica cambios en el ETL y eso siempre quiere decir, mucho tiempo, muchas pruebas. Así pues dejamos esta via solamente para el caso de que el rendimiento no se corresponda con el necesario. En otro caso pasamos al plan B y usamos el método filter.

	select
	filter ( [Product].[Product].product*
				[Date].[Calendar].[Month].members  ,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works];

si nos fijamos he usado la cláusula Sum para el filter, esto penalizará rendimiento, sin duda,.. considerad hacer esta medida física aun si es en el mismo grupo de medidas para mejorar el rendimiento. Aún este ejemplo nos está mostrando los que si tienen ventas en los últimos 3 meses.. veamos los que no… creo que se vé facil, si has llegado hasta aquí :)

	select [Product].[Product].product*[Date].[Calendar].[Month].members -
	filter ( [Product].[Product].product*
				[Date].[Calendar].[Month].members  ,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works]

Esta consulta tardó casi 15 segundos (una barvaridad) en mi portatil contra adventure works, si la personalizamos a un único mes.. tardará mucho menos, claro.

	select [Product].[Product].product-
	filter ( [Product].[Product].product
				,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works]
	 where
	[Date].[Calendar].[Month].&[2004]&[7]

y si ahora lo enlazamos con el now que veiamos al principio.. (ojo , no funcionará a menos que le pongas el reloj al server a un valor que de un miembro válido) Además ojo con usar STRTOMEMBER, que puede dar también problemas de rendimiento, no en este ejemplo.. pero si en general

with member ahora as
    "[Date].[Calendar].[Month].&[" +cstr(year(now()))+ "]&["+cstr(month(now()))+"]"
	select [Product].[Product].product-
	filter ( [Product].[Product].product
				,
				 sum(([Date].[Calendar].currentmember.lag(3):[Date].[Calendar].currentmember),Measures.[Internet Sales Amount])>0) on 1,
				Measures.[Internet Sales Amount] on 0
	from  [Adventure Works]
	 where
	strtomember(ahora)

Training Kit R2 listo en la web

Posted by Miguel Egea | Posted in Analisys Services, Noticias, Relacional | Posted on 14-06-2010

0

Algunos de mis compañeros en Solid han trabajado duro en esto, pero ya está listo para descarga en: http://go.microsoft.com/?linkid=9710868

esto lo dejo en inglés porque el video estará en inglés :)

Or if you just want to see what’s in it, you can preview training kit content online in the SQL Server 2008 R2 Learning Center on Channel 9 at http://channel9.msdn.com/learn/courses/SQL2008R2TrainingKit

Mi charla ayer en SecondNug, está lista.

Posted by Miguel Egea | Posted in Analisys Services, Noticias | Posted on 02-06-2010

0

Te la puedes descargar de la web del grupo  y si lo que quieres es únicamente verla,  puedes ir a esta otra dirección.

Ayer al final la demo la truqué un poquito, seguramente muchos no lo notarían si no lo dijera.. pero no se trata de dejar medias verdades. Durante el día de hoy o mañana intentaré grabar un video sobre como configurar el proactive Caching y lo mostraré en una demo en video :)

Lanzamiento SQL Server 2008 R2 en Madrid y Barcelona

Posted by Miguel Egea | Posted in Noticias | Posted on 19-05-2010

0

  Publicidad e información
Le invitamos al lanzamiento de Microsoft SQL Server 2008 R2. Venga y descubra una Nueva Dimensión en la gestión de datos y la inteligencia de Negocio.
¡Regístrese ahora!
Barcelona:10 de junio 2010

Hotel Barceló Sants

Pza. de los Paisos Catalans, s/n

08014 – Barcelona

Madrid:14 de junio 2010

Hotel Meliá Avenida de América

c/ Juan Ignacio Luca de Tena, 36

28027 – Madrid

Agenda:
09:00 – 09:30 Registro
09:30 – 10:00 Plataforma de Aplicaciones de Microsoft con SQL Server 2008 R2
10:00 – 10:40 Novedades tecnológicas para potenciar la inteligencia de Negocio: PowerPivot, Report Builder y Master Data Management
10:40 – 11:00 Nuevos servidores HP ProLiant G7: La mejor plataforma para SQL Server 2008 R2.
Los nuevos procesadores Intel Xeon del 2010: Rendimiento e Inteligencia.
11:00 – 11:20 Café
11:20 – 11:30 Unisys: Escalabilidad en entornos virtuales de Misión Crítica. El presentador: Alejandro Santacana (Engagement Manager Soluciones Microsoft – UNISYS)
11:30 – 12:10 Mejoras para administradores de bases de datos: Application y MultiServer Magament, SQL Datacenter, Hyper-v Live Migration, Compresion y Parallel Data Warehouse
12:10 – 12:40 Soluciones para Optimizar SQL Server con NetApp, SafeNet y EMC
12:40 – 13:20 SQL Azure: Alta disponibilidad y flexibilidad de los datos en la nube
13:20 – 13:30 Conclusiones y Cierre
 
Y si le gusta lo que ve en el lanzamiento, ¿Por qué no quedarse toda la semana? Tras el evento de Madrid, se celebrará el Solid Quality Summit 2010: Mas de 50 sesiones tecnicas en castellano, enfocadas en SQL Server y SharePoint. Además, si 1 o más personas de su empresa asisten al lanzamiento, tendrán un descuento del 30%. Infórmese de mas detalles aquí o contacte al teléfono 800 300 800 o al email ventasib@solidq.com
Para más información y registro: http://summit.solidq.com/madrid/2010/
 

 

 

 

 

 

 

 

 

 

 
 

Charla en Second Nug el 1 de Junio

Posted by Miguel Egea | Posted in Analisys Services | Posted on 19-05-2010

0

El proximo 1 de Junio estaré dando una charla en directo sobre Analisys Services. La charla es On-Line en Second-Nug, uno de los grupos de usuarios on-line más activos y con mayor presencia. Mis compañeros de Solid Quality, Eladio y Salva ya han estado hablando de TSQL y SSIS y ahora me toca a  mi hablar de Analisys Services y de las diferencias entre el modelo tradicional y otro tipo de aproximaciones a proyectos multidimensionales.

Espero que os resulte de interes

http://www.secondnug.com/EventosDesarrollo/tabid/57/Default.aspx

Buscador sencillo en c#

Posted by Miguel Egea | Posted in C#, Relacional | Posted on 19-04-2010

0

En un post del grupo de noticias un compañero tenía una duda sobre como crear buscadores, de forma que la consulta SQL no fuese muy compleja de tratar y escribir, a la vez que no tenga problemas de inyección de código y que cumpla con sus requisitos. Yo me he permitido escribir el código todo en C#, aunque me hubiese gustado escribir un procedimiento almacenado, creo que de forma didactica esto va a quedar más claro.

Desde aquí puedes bajarte la aplicacion en zip.

Espero que disfruteis el  post.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;

namespace Demo_Buscador
{
    public partial class Form1 : Form
    {
        SqlConnection con = new SqlConnection( ConfigurationManager.ConnectionStrings["AdventureWorks2008"].ConnectionString.ToString() ) ;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            DataTable dt=new DataTable();
            SqlDataAdapter da = new SqlDataAdapter("select DISTINCT PERSON.PersonType From Person.Person",con);
            da.Fill(dt);
            TipoPersona.DataSource = dt;
            TipoPersona.DisplayMember = "PersonType";

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string SQL = "SELECT * FROM Person.Person  ";
            string where="";
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = new SqlCommand();
            da.SelectCommand.Connection = con;
            if (TipoPersona.Text != null && TipoPersona.Text!="")
            {
                TipoPersona.Text += "   ";
                da.SelectCommand.Parameters.Add("@PersonType",SqlDbType.NChar,2).Value=TipoPersona.Text.Substring(0,2);

                where += " PersonType=@PersonType AND ";

            }
            if (Nombre.Text != "")
            {
                da.SelectCommand.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = Nombre.Text;
                where += " LastName like @name  AND ";

            }

            if (where != "")
                SQL += " WHERE " + where.Substring(0, where.Length - 4);

            da.SelectCommand.CommandText = SQL;

            DataTable DT=new DataTable();
            da.Fill(DT);

            dataGridView1.DataSource = DT;

        }
    }
}

Herramienta para explotación de grandes volúmenes de datos

Posted by Miguel Egea | Posted in Noticias | Posted on 16-04-2010

0

Microsoft Live Labs Pivots es una herramienta para la explotación masiva de datos, que de momento puedes descargar de aquí.

En la página también hay un video de demostración muy interesante.

Saludos

Publicado Ebook gratuito sobre SQL Server 2008 R2

Posted by Miguel Egea | Posted in Noticias, O.T. | Posted on 14-04-2010

1

We’re thrilled to publish another free ebook: Introducing Microsoft SQL Server 2008 R2, by Ross Mistry and Stacia Misner!

The book contains 10 chapters and 216 pages, like so:

PART I   Database Administration

CHAPTER 1   SQL Server 2008 R2 Editions and Enhancements 3
CHAPTER 2   Multi-Server Administration 21
CHAPTER 3   Data-Tier Applications 41
CHAPTER 4   High Availability and Virtualization Enhancements 63
CHAPTER 5   Consolidation and Monitoring 85

PART II   Business Intelligence Development

CHAPTER 6   Scalable Data Warehousing 109
CHAPTER 7   Master Data Services 125
CHAPTER 8   Complex Event Processing with StreamInsight 145
CHAPTER 9   Reporting Services Enhancements 165
CHAPTER 10   Self-Service Analysis with PowerPivot 189

Here’s more info about the book:

Podeis verlo aquí

Pruebas unitarias en proyectos multidimensionales

Posted by Miguel Egea | Posted in Analisys Services, Noticias, Relacional | Posted on 13-04-2010

1

Mi compañero en SolidQ Italia, Davide Mauri ha desarrollado un proyecto que me parece muy positivo.  Este es el mensaje que ha puesto Davide.

Y aquí puedes llegar al proyecto

A project that allow the execution of Unit Testing against a database (Relational or Multidimensional).
It uses NUnit (http://www.nunit.org/) )as unit-testing framework and does not require DBA or BI Developer to know anything about .NET: just write your SQL or MDX queries and test them. QueryUnit will take care of automatically create the assembly that will test your query for you, using NVelocity (http://nvelocity.codeplex.com/) to generate .NET classes and the CodeDom engine to compile them at runtime.

Un curso gratuito sobre SQL Server Azure

Posted by Miguel Egea | Posted in Noticias, Relacional | Posted on 03-04-2010

1

Para hacer el curso puedes pulsar aquí.  

Esto es lo que trata.

This two-hour clinic explores the capabilities of Introduction to Microsoft SQL Azure.

This clinic covers the following topics:

  • Understanding the SQL Azure Platform
  • Designing Applications for SQL Azure
  • Migrating Applications to SQL Azure
  • Achieving Scale with SQL Azure

Users completing this collection should have a basic understanding of SQL Server and relational database systems.

Objetivos
Al finalizar el curso, los alumnos serán capaces de:
  • Understand SQL Server Development
  • Understand relational database concepts
Requisitos del sistema
 
Para ver este curso, necesita:
  • Pentium II, RAM de 256 MB con una velocidad de procesamiento de 400 MHZ o más.
  • Microsoft® Windows® 2000 o posterior.
  • Microsoft Internet Explorer 6.0 con SP1.
  • Macromedia Flash 7.0 o posterior (se necesita 1 MB de espacio en disco para la instalación).
  • Microsoft Virtual Server ActiveX control (necesario para los laboratorios virtuales; se necesita 1 MB de espacio en disco para la instalación).
  • Microsoft Windows Media Player 7.0 o posterior.
  • Microsoft XML Core Services 3.0 o posterior.
  • Un monitor Super VGA con resolución mínima de 1024 x 768, con colores a 16 bits.
  • Se recomiendan una tarjeta de sonido, parlantes o auriculares.
  • Un ancho de banda de Internet de 56K o superior. Se recomienda banda ancha.
Para los cursos que incluyan prácticas basadas en Virtual Server (cursos en el catálogo para el programador y el profesional de tecnología de la información), necesitará:
  • Control ActiveX de Microsoft Virtual Server (se requiere 1MB de espacio en disco para la instalación)

Pruebe las capacidades de su equipo para ver si podrá ejecutar este curso.

Requisitos de accesibilidad
 
El software siguiente tiene que estar en ejecución en su equipo para poder obtener acceso a este curso con el software lector de pantalla:
  • Microsoft Internet Explorer 5.0 o posterior
  • Window-Eyes de GW Micro
  • JAWS de Freedom Scientific
  • Habilitado para MSAA
Módulos y lecciones
Clinic Overview
Module Overview
Clinic Overview
Navigation Overview
Clinic Information
Introduction to Microsoft SQL Azure
Module Overview
Understanding the SQL Azure Platform
Introduction
Windows Azure Platform
Extending the SQL Data Platform to the Cloud
What SQL Azure Is
What SQL Azure Is Not
When to Use SQL Azure vs Azure Tables
SQL Azure Provisioning Model
Provisioning a SQL Azure Account and Connecting to SQL Azure
SQL Azure Architecture
Creating a SQL Azure Database
High Availability and Recovery
Self Test
Designing Applications for SQL Azure
Introduction
Logical vs Physical Administration
Creating Objects in SQL Azure
Compatibility Goals
T-SQL
T-SQL Support
SQL Azure Security Model
Managing Logins and Security
Connection Model
Managing Connections in SQL Azure Applications
Managing Connections in a SQL Azure Application
Self Test
Migrating Applications to SQL Azure
Introduction
Migrating Database Schemas to SQL Azure
Migrating Database Schema to SQL Azure
Migrating Application Data to SQL Azure
SQL Server Integration Services
Working with BCP
Migrating Application Data to SQL Azure Using SSIS
Choosing an Appropriate Local Caching Strategy
Using Local Caching with SQL Azure Data Sync
PHP Support for SQL Azure
Self Test
Achieving Scale with SQL Azure
Introduction
Why Scale Out?
Database Size
Performance Considerations
Accessing Usage Data from System Views
Scale out Considerations
Throttling Considerations
Sharding Basics
Example Sharded Database Model
Working with a Sharded Database
Self Test
Module Summary
Module Summary
Glossary
Glossary
Para realizar una evaluación, conéctese a su cuenta Passport Network.
Puntaje más reciente: Ingresar  
Seleccionó la opción de realizar una evaluación. Recibirá distintas preguntas para la evaluación. Respóndalas lo mejor que pueda.

  • Podrá revisar sus respuestas en cualquier momento, antes de finalizar la evaluación, al hacer clic en Revisar
  • Podrá finalizar la evaluación en cualquier momento al hacer clic en Finalizar. En ese momento, cualquier pregunta sin responder será considerada como incorrecta.
  • Haga clic en Ayuda en cualquier momento para obtener información acerca de la utilización de las evaluaciones.