Hasta ahora el conjunto incremental de datos venía dado por nuestro data source view, pero esto no siempre es cierto, hay ocasiones en los que si bien los datos de las dimensiones se generan de forma incremental, las tablas de hechos utilizan datos anteriores al periodo de procesamiento y necesitan que la consulta del data source view devuelva toda la información de la dimensión para realizar un procesamiento correcto de nuestros grupos de medida.

En esos casos, la solución pasa por generar un esquema específico que asociaremos a nuestra dimensión en el script de procesamiento incremental. Dicho esquema contendrá la consulta que si va a proporcionarnos el conjunto de datos a añadir en nuestro procesamiento.

El primer paso es generar el script del data source con la información de conexión a nuestra fuente de datos. Desde el SQL Server Managemet Studio botón derecho sobre nuestra fuente de datos y generamos el script correspondiente.

Procesamiento Incremental de Dimensiones IV

En este script eliminamos lo tags referentes a ImpersonationInfo y copiamos el resto de la definición del dataSource debajo del comando ProcessAdd. En este punto el script XML tendrá un aspecto parecido a este:

<Batch xmlns=http://schemas.microsoft.com/analysisservices/2003/engine>

<Parallel>

<Process xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns:ddl2=http://schemas.microsoft.com/analysisservices/2003/engine/2xmlns:ddl2_2=http://schemas.microsoft.com/analysisservices/2003/engine/2/2>

<Object>

<DatabaseID>ProcesoIncremental</DatabaseID>

<DimensionID>Hora</DimensionID>

</Object>

<Type>ProcessAdd</Type>

 

<DataSource xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns:ddl2=http://schemas.microsoft.com/analysisservices/2003/engine/2xmlns:ddl2_2=http://schemas.microsoft.com/analysisservices/2003/engine/2/2xsi:type=RelationalDataSource>

<ID>ProcesoIncremental</ID>

<Name>ProcesoIncremental</Name>

<ConnectionString>Provider=SQLNCLI.1;Data Source=.;Integrated Security=SSPI;Initial Catalog=Varios</ConnectionString>

<Timeout>PT0S</Timeout>

</DataSource>

 

 

</Process>

</Parallel>

</Batch>

 

A través de BIDS (Visual Studio) generamos un Data Source View que contenga únicamente la consulta que va a devolver nuestro conjunto incremental de datos y le llamamos igual que el Data Source View al que tenemos originalmente asociada la dimensión.

En el explorador de soluciones pulsamos botón derecho sobre el Data Source View y seleccionamos ‘view code’. Copiamos el código XML dentro de nuestro script XMLA debajo de la definición del Data Source y ya tendremos nuestro script listo. Si queremos que el script sea algo más corto, se puede eliminar la sección Annotations dentro de la definición del Data Source View.

<Batch xmlns=http://schemas.microsoft.com/analysisservices/2003/engine>

<Parallel>

<Process xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns:ddl2=http://schemas.microsoft.com/analysisservices/2003/engine/2xmlns:ddl2_2=http://schemas.microsoft.com/analysisservices/2003/engine/2/2>

<Object>

<DatabaseID>ProcesoIncremental</DatabaseID>

<DimensionID>Hora</DimensionID>

</Object>

<Type>ProcessAdd</Type>

 

<DataSource xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns:ddl2=http://schemas.microsoft.com/analysisservices/2003/engine/2xmlns:ddl2_2=http://schemas.microsoft.com/analysisservices/2003/engine/2/2xsi:type=RelationalDataSource>

<ID>ProcesoIncremental</ID>

<Name>ProcesoIncremental</Name>

<ConnectionString>Provider=SQLNCLI.1;Data Source=.;Integrated Security=SSPI;Initial Catalog=Varios</ConnectionString>

<Timeout>PT0S</Timeout>

</DataSource>

 

 

<DataSourceView xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns:ddl2=http://schemas.microsoft.com/analysisservices/2003/engine/2xmlns:ddl2_2=http://schemas.microsoft.com/analysisservices/2003/engine/2/2>

<ID>Varios</ID>

<Name>Varios</Name>

<DataSourceID>ProcesoIncremental</DataSourceID>

<Schema>

<xs:schema id=Variosxmlns=“” xmlns:xs=http://www.w3.org/2001/XMLSchemaxmlns:msdata=urn:schemas-microsoft-com:xml-msdataxmlns:msprop=urn:schemas-microsoft-com:xml-msprop>

<xs:element name=Variosmsdata:IsDataSet=truemsdata:UseCurrentLocale=true>

<xs:complexType>

<xs:choice minOccurs=0maxOccurs=unbounded>

<xs:element name=dbo_Horamsprop:FriendlyName=Horamsprop:QueryBuilder=SpecificQueryBuildermsprop:DbTableName=Horamsprop:QueryDefinition=SELECT Hora.Idhora, Hora.DescripcionHora, Hora.NombreHora24, Hora.Hora, Hora.NombreHora, Hora.Minuto, Hora.IdMinuto, Hora.NombreMinuto, Hora.Hora24, Hora.AM FROM Hora INNER JOIN RangoIncremental ON Hora.Idhora &gt;= RangoIncremental.Idfrom AND Hora.Idhora &lt;= RangoIncremental.Idtomsprop:TableType=Viewmsprop:IsLogical=True>

<xs:complexType>

<xs:sequence>

<xs:element name=Idhoramsprop:FriendlyName=Idhoramsprop:DbColumnName=Idhoratype=xs:int />

<xs:element name=DescripcionHoramsprop:FriendlyName=DescripcionHoramsprop:DbColumnName=DescripcionHoraminOccurs=0>

<xs:simpleType>

<xs:restriction base=xs:string>

<xs:maxLength value=50 />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=NombreHora24msprop:FriendlyName=NombreHora24msprop:DbColumnName=NombreHora24minOccurs=0>

<xs:simpleType>

<xs:restriction base=xs:string>

<xs:maxLength value=50 />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=Horamsprop:FriendlyName=Horamsprop:DbColumnName=Horatype=xs:unsignedByteminOccurs=0 />

<xs:element name=NombreHoramsprop:FriendlyName=NombreHoramsprop:DbColumnName=NombreHoraminOccurs=0>

<xs:simpleType>

<xs:restriction base=xs:string>

<xs:maxLength value=10 />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=Minutomsprop:FriendlyName=Minutomsprop:DbColumnName=Minutotype=xs:unsignedByteminOccurs=0 />

<xs:element name=IdMinutomsprop:FriendlyName=IdMinutomsprop:DbColumnName=IdMinutotype=xs:intminOccurs=0 />

<xs:element name=NombreMinutomsprop:FriendlyName=NombreMinutomsprop:DbColumnName=NombreMinutominOccurs=0>

<xs:simpleType>

<xs:restriction base=xs:string>

<xs:maxLength value=20 />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=Hora24msprop:FriendlyName=Hora24msprop:DbColumnName=Hora24type=xs:unsignedByteminOccurs=0 />

<xs:element name=AMmsprop:FriendlyName=AMmsprop:DbColumnName=AMminOccurs=0>

<xs:simpleType>

<xs:restriction base=xs:string>

<xs:maxLength value=2 />

</xs:restriction>

</xs:simpleType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name=dbo_RangoIncrementalmsprop:FriendlyName=RangoIncrementalmsprop:DbSchemaName=dbomsprop:DbTableName=RangoIncrementalmsprop:TableType=Table>

<xs:complexType>

<xs:sequence>

<xs:element name=Idfrommsprop:FriendlyName=Idfrommsprop:DbColumnName=Idfromtype=xs:intminOccurs=0 />

<xs:element name=Idtomsprop:FriendlyName=Idtomsprop:DbColumnName=Idtotype=xs:intminOccurs=0 />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

<xs:unique name=Constraint1msprop:IsLogical=Truemsdata:PrimaryKey=true>

<xs:selector xpath=.//dbo_Hora />

<xs:field xpath=Idhora />

</xs:unique>

</xs:element>

</xs:schema>

<diffgr:diffgram xmlns:msdata=urn:schemas-microsoft-com:xml-msdataxmlns:diffgr=urn:schemas-microsoft-com:xml-diffgram-v1 />

</Schema>

</DataSourceView>

 

</Process>

</Parallel>

</Batch>

 

Otra alternativa es editar el Data Source View antes del proceso incremental de la dimensión y modificar la consulta de forma adecuada, asegurándonos que la consulta original se vuelve a restaurar antes del procesamiento de los grupos de medida para que estos puedan utilizar el contenido completo de la dimensión y no solo la parte incremental.

 

0 Shares:
1 comment
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like

UNPIVOT “SINCRONO”

Más de una vez nos hemos encontrado en la situación de tener que unpivotar una tabla, teniendo así que recurrir o bien al componente “Unpivot” de SSIS o incluso a tener que guardar los datos en tabla y realizar posteriormente una lectura de esta misma utilizando T-SQL para unpivotarla, con los problemas que ambas soluciones nos puedan conllevar con un gran volumen de datos.
Leer más

El RGPD y la anonimización mediante HASH

Antes de cargar nuestros datos en la nube debemos tener muy en cuenta el Reglamento General de Protección de Datos RGPD o sus siglas en inglés GDPR, se trata de una norma europea relativa a la protección de las personas físicas en lo que respecta al tratamiento de sus datos personales y la libre circulación de estos datos.