<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>SolidQ Blogs</title>
    <link>http://www.solidq.com</link>
    <description> RSSAgregator WebPart by SolidQ</description>
    <ttl>5</ttl>
    <item>
      <title>Introducing DB Flex</title>
      <ItemID>148</ItemID>
      <link>http://blogs.solidq.com/dsarka/Post.aspx?ID=148&amp;title=Introducing+DB+Flex</link>
      <pubDate>2013-05-23T09:09:23+02:00</pubDate>
      <author>Dejan Sarka</author>
      <authorEncoded>Dejan+Sarka</authorEncoded>
      <authorID>46</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass9A9E3B6A5FB94085811E4B21909EBECD"&gt;&lt;p&gt;In these times of weird economics in many places, more and more small and medium companies try to operate without a dedicated database administrator (DBA). Other companies still have one or more dedicated DBAs, however, (s)he or they is or are overwhelmed with work. Nevertheless, SQL Server and databases need regular monitoring and maintenance. SolidQ responded to these needs with a service called DB Flex.
&lt;/p&gt;&lt;p&gt;SolidQ supplies the most comprehensive and flexible operational services on Microsoft SQL Server on the market. With DB Flex, we constantly monitor your SQL environment, optimize the operation and continuously correct errors and deficiencies, &lt;strong&gt;cost-effectively&lt;/strong&gt;. With 100% focus on SQL Server, the DB Flex service typically saves enterprises 30-50% of the cost compared to in-house operation or external hosting supplier. &lt;span style="color:#242625"&gt;With DB Flex we ensure reliable operation, provide professional sparring and training for our customers that cover the needs of the individual enterprise.
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#242625"&gt;We are successfully offering and executing this service in the Nordic area, and now we are introducing it also in the Central and Eastern Europe area. If you are interested in this service, please contact Fritz Lechnitz (&lt;a href="mailto:flechnitz@solidq.com"&gt;flechnitz@solidq.com&lt;/a&gt;). For Slovenia, in Slovenian language, you can also contact me (&lt;a href="mailto:dsarka@solidq.com"&gt;dsarka@solidq.com&lt;/a&gt;).
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass9A9E3B6A5FB94085811E4B21909EBECD"&gt;&lt;p&gt;In these times of weird economics in many places, more and more small and medium companies try to operate without a dedicated database administrator (DBA). Other companies still have one or more dedicated DBAs, however, (s)he or they is or are overwhelmed with work. Nevertheless, SQL Server and databases need regular monitoring and maintenance. SolidQ responded to these needs with a service called DB Flex.
&lt;/p&gt;&lt;p&gt;SolidQ supplies the most comprehensive and flexible operational services on Microsoft SQL Server...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>XBOX One</title>
      <ItemID>115</ItemID>
      <link>http://blogs.solidq.com/kspencer/Post.aspx?ID=115&amp;title=XBOX+One</link>
      <pubDate>2013-05-22T23:26:06+02:00</pubDate>
      <author>Ken Spencer</author>
      <authorEncoded>Ken+Spencer</authorEncoded>
      <authorID>30</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassFC3957D3F9B2424EABE049E855F19CFE"&gt;&lt;p&gt;Looks like MS has done it again. The XBOX One is coming out soon. Info here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://news.msn.com/science-technology/microsoft-unveils-xbox-one?ocid=ansnews11" href="http://news.msn.com/science-technology/microsoft-unveils-xbox-one?ocid=ansnews11"&gt;http://news.msn.com/science-technology/microsoft-unveils-xbox-one?ocid=ansnews11&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I love the XBOX 360. It still has some of the best graphics around. The new one claims to beat the current graphics in a big way. &lt;/p&gt;  &lt;p&gt;And the other integrated features look awesome too. &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassFC3957D3F9B2424EABE049E855F19CFE"&gt;&lt;p&gt;Looks like MS has done it again. The XBOX One is coming out soon. Info here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://news.msn.com/science-technology/microsoft-unveils-xbox-one?ocid=ansnews11" href="http://news.msn.com/science-technology/microsoft-unveils-xbox-one?ocid=ansnews11"&gt;http://news.msn.com/science-technology/microsoft-unveils-xbox-one?ocid=ansnews11&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I love the XBOX 360. It still has some of the best graphics around. The new one claims to beat the current graphics in a big way. &lt;/p&gt;  &lt;p&gt;And the other integrated features look awesome too. &lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Accediendo a Facebook con Data Explorer</title>
      <ItemID>174</ItemID>
      <link>http://blogs.solidq.com/BICorner/Post.aspx?ID=174&amp;title=Accediendo+a+Facebook+con+Data+Explorer</link>
      <pubDate>2013-05-22T11:08:00+02:00</pubDate>
      <author>Pau Sempere Sanchez</author>
      <authorEncoded>Pau+Sempere+Sanchez</authorEncoded>
      <authorID>94</authorID>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
      <comments>http://blogs.solidq.com/BICorner/Post.aspx?ID=174&amp;title=Accediendo+a+Facebook+con+Data+Explorer#1</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass03F1DB1C25954085A3677B4127A8132C"&gt;&lt;p&gt;En nuestro anterior post accedíamos a &lt;strong&gt;Twitter&lt;/strong&gt; utilizando &lt;strong&gt;Data Explorer&lt;/strong&gt; para descubrir quién mencionaba a &lt;strong&gt;SolidQ&lt;/strong&gt; y en qué parte del mundo se encontraban (&lt;a href="http://bit.ly/WIyJS0"&gt;puedes verlo aquí&lt;/a&gt;). Hoy veremos cómo acceder a otra red social, &lt;strong&gt;Facebook&lt;/strong&gt;, mediante la característica propia de &lt;strong&gt;Data Explorer&lt;/strong&gt; para conectar con ella y consumiendo estos datos finalmente con &lt;strong&gt;Excel&lt;/strong&gt; &lt;strong&gt;2013&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Empezaremos seleccionando la fuente de datos, en este caso Facebook (desde la opción From Other Sources): &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_2_1F478EE1.png"&gt;&lt;img width="270" height="350" title="ImportandoFacebook" alt="ImportandoFacebook" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_1F478EE1.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nos pedirá que ingresemos en &lt;strong&gt;Facebook&lt;/strong&gt;, por lo que tendremos que tener una cuenta activa para poder utilizar esta funcionalidad. Esto supone una diferencia con &lt;strong&gt;Twitter&lt;/strong&gt;, que tiene un API que puede proveer de información a cualquiera que haga consultas contra ella aún con identificación anónima. Con &lt;strong&gt;Facebook&lt;/strong&gt; tendremos también que dar acceso a la aplicación Data Explorer para que interactúe con nuestro perfil. &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_4_4D34E199.png"&gt;&lt;img width="644" height="315" title="AutorizandoFacebook" alt="AutorizandoFacebook" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_1_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez hayamos aceptado, realizaremos la búsqueda del perfil que queremos consultar. Deberemos especificar el nombre del perfil o el identificador del usuario. La manera más fácil es ir al perfil al que queremos acceder y ver qué nombre figura en la URL. Por tanto, si queremos ver información sobre el perfil de &lt;strong&gt;SolidQ&lt;/strong&gt; &lt;strong&gt;España&lt;/strong&gt;, que aparece con esta URL &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_6_4D34E199.png"&gt;&lt;img width="355" height="33" title="FacebookURL" alt="FacebookURL" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_2_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;buscaremos por &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_8_4D34E199.png"&gt;&lt;img width="644" height="237" title="BusquedaFacebook" alt="BusquedaFacebook" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_3_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podríamos elegir el tipo de conexión que queremos consultar para el perfil, esto es, si queremos ver solo las actualizaciones de estado, los posts, las notas, etc. En este caso no especificamos ningún filtro para poder acceder a todos los datos, filtraremos con más detalle con &lt;strong&gt;Data Explorer&lt;/strong&gt; una vez tengamos los datos importados. Si hacemos clic en Apply, recibiremos una serie de datos estructurados sobre el perfil de &lt;strong&gt;SolidQ España&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_10_4D34E199.png"&gt;&lt;img width="856" height="359" title="ResultadoConsultaFacebook" alt="ResultadoConsultaFacebook" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_4_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tenemos mucha información que puede sernos útil para diferentes análisis o recolección de datos. Incluso vemos arriba como se genera la fórmula que &lt;strong&gt;Data Explorer&lt;/strong&gt; usa para consultar los datos (y que podríamos usar nosotros para generar funciones personalizadas, por ejemplo). Pero lo que queremos hacer hoy es una comparativa entre “likes”, comentarios a posts y veces que se comparten estos posts a lo largo del tiempo, para estudiar qué impacto ha ido teniendo lo que se ha ido publicando en este perfil. Para ello, clicamos en “connections”, y &lt;strong&gt;Data Explorer&lt;/strong&gt; nos abrirá la lista de registros disponibles. &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_12_4D34E199.png"&gt;&lt;img width="220" height="192" title="ConexionesPerfilFacebook" alt="ConexionesPerfilFacebook" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_5_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Seleccionando “Posts” importaremos la información sobre los posts publicados. &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_14_4D34E199.png"&gt;&lt;img width="644" height="196" title="PostsFacebookDataExplorer" alt="PostsFacebookDataExplorer" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_6_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para nuestro caso concreto queremos saber los conteos de “shares”, “likes” y “comments” que tiene cada uno, por lo que nos vamos a cada uno de estos campos que encontraremos en la información que hemos obtenido y, haciendo clic en el icono para expandir la columna en diferentes campos (a la derecha del nombre de la columna), obtenemos los conteos (que ya forman parte de la información estructurada que nos da Facebook a través de Data Explorer): &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_16_4D34E199.png"&gt;&lt;img width="244" height="144" title="CountFacebookDataExplorer1" alt="CountFacebookDataExplorer1" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_7_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;                      &lt;a href="/bicorner/Lists/Posts/Attachments/174/image_18_4D34E199.png"&gt;&lt;img width="244" height="157" title="CountFacebookDataExplorer2" alt="CountFacebookDataExplorer2" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_8_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez tenemos los conteos asociados a cada registro, y con un par de formateos de datos con &lt;strong&gt;Data Explorer&lt;/strong&gt; para tratar con las fechas (queremos ver los datos agrupados por meses y no por día y hora como nos vienen especificados en los campos created_time y updated_time), podremos tener rápidamente un informe como éste donde vemos la evolución de las interacciones con el perfil de &lt;strong&gt;SolidQ España&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_20_4D34E199.png"&gt;&lt;img width="644" height="463" title="InformeFacebookPowerView" alt="InformeFacebookPowerView" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_9_4D34E199.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Se trata de un informe muy sencillo pero muy relevante. Si explorásemos más el dato y lo trabajásemos más, combinándolo quizá con otras fuentes de información (incluso con nuevas consultas a Facebook para ver quién son los usuarios que han hecho like o han comentado ciertos posts) podríamos tener un análisis aún más rico y revelador. Recordemos que incluso podemos añadir directamente los datos de Data Explorer a un modelo de &lt;strong&gt;PowerPivot&lt;/strong&gt; con lo que expandimos aún más las posibilidades de análisis, por ejemplo si ya tuviésemos un modelo de datos que pudiésemos enriquecer con la información que acabamos de obtener. El límite, como siempre, está en cuánto trabajo dediquemos y donde llegue nuestra imaginación &lt;img class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/bicorner/Lists/Posts/Attachments/174/wlEmoticon-smile_2_4D34E199.png" style="border-top-style:none;border-left-style:none;border-bottom-style:none;border-right-style:none" /&gt;&lt;/p&gt;
&lt;p&gt;Espero que os haya gustado, nos vemos en siguientes posts acerca de la funcionalidad de &lt;strong&gt;Data Explorer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Feliz integración y análisis &lt;img class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/bicorner/Lists/Posts/Attachments/174/wlEmoticon-smile_2_4D34E199.png" style="border-top-style:none;border-left-style:none;border-bottom-style:none;border-right-style:none" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass03F1DB1C25954085A3677B4127A8132C"&gt;&lt;p&gt;En nuestro anterior post accedíamos a &lt;strong&gt;Twitter&lt;/strong&gt; utilizando &lt;strong&gt;Data Explorer&lt;/strong&gt; para descubrir quién mencionaba a &lt;strong&gt;SolidQ&lt;/strong&gt; y en qué parte del mundo se encontraban (&lt;a href="http://bit.ly/WIyJS0"&gt;puedes verlo aquí&lt;/a&gt;). Hoy veremos cómo acceder a otra red social, &lt;strong&gt;Facebook&lt;/strong&gt;, mediante la característica propia de &lt;strong&gt;Data Explorer&lt;/strong&gt; para conectar con ella y consumiendo estos datos finalmente con &lt;strong&gt;Excel&lt;/strong&gt; &lt;strong&gt;2013&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Empezaremos seleccionando la fuente de datos, en este caso Facebook (desde la opción From Other Sources): &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/174/image_2_1F478EE1.png"&gt;&lt;img width="270" height="350" title="ImportandoFacebook" alt="ImportandoFacebook" src="/bicorner/Lists/Posts/Attachments/174/image_thumb_1F478EE1.png" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nos pedirá que ingresemos...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Data Explorer" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Data+Explorer" nameEnconded="Data+Explorer" />
      <category name="ETL" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=ETL" nameEnconded="ETL" />
      <category name="Power View" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Power+View" nameEnconded="Power+View" />
      <category name="Facebook" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Facebook" nameEnconded="Facebook" />
      <category name="Add-in" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Add-in" nameEnconded="Add-in" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Hur matematikkunskaper kan hjälpa till med optimering</title>
      <ItemID>22</ItemID>
      <link>http://blogs.solidq.com/SQL-Server-pa-svenska/Post.aspx?ID=22&amp;title=Hur+matematikkunskaper+kan+hj%c3%a4lpa+till+med+optimering</link>
      <pubDate>2013-05-15T18:04:15+02:00</pubDate>
      <author>Peter Larsson</author>
      <authorEncoded>Peter+Larsson</authorEncoded>
      <authorID>125</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass7FB60EA0F01B4A74B0B9F2F6EC1C9B05"&gt;&lt;p&gt;Idag fick jag tillfället att hjälpa en kollega med att optimera en fråga för en kunds räkning. Originalfrågan såg i princip ut så här    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;-- Original     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.*       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;t       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;JOIN&lt;span style=""&gt;  &lt;/span&gt;(        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1       &lt;br /&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;WHERE       &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;AND&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;OR     &lt;br /&gt;                &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;AND&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)     &lt;br /&gt;            &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;AND&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;CategoryID&lt;/span&gt; &lt;span style="color:gray"&gt;IN&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'11'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'22'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'33'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt;  &lt;br /&gt;&lt;/p&gt;   &lt;/span&gt;Det som jag reagerade först på var användandet av &lt;em&gt;OR&lt;/em&gt; i WHERE-satsen. Det gör det mycket svårare för &lt;em&gt;Query Optimizer&lt;/em&gt; att välja ett bra index och att skapa en bra exekveringsplan. När jag sedan tittat lite närmare på den för att se vad som egentligen ska hända, vilken affärsregel som ska uppfyllas, ser jag att uttrycket är överflödigt.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal"&gt;Låt oss börja med uttrycket efter &lt;em&gt;OR&lt;/em&gt;.    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt;      &lt;br /&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;Av detta kan vi sluta oss till att även uttrycket &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; = &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; är sant. Dessutom är det sant att om &lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID &lt;/span&gt;&lt;/span&gt;så är det dessutom sant att &lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;/span&gt;. Låt oss skriva om uttrycket med vår härledning och dessutom byta plats på uttrycket efter &lt;em&gt;OR&lt;/em&gt;.    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;     &lt;br /&gt;-- Härledning      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.*       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;t       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;JOIN&lt;span style=""&gt;  &lt;/span&gt;(        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1       &lt;br /&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;WHERE       &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;AND&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;OR     &lt;br /&gt;                &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;AND&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt;&lt;span style="color:teal"&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:teal"&gt;       &lt;br /&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)     &lt;br /&gt;            &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;AND&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;CategoriID&lt;/span&gt; &lt;span style="color:gray"&gt;IN&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'11'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'22'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'33'&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Vad vi nu kan se är att vi har två exklusiva uttryck i vår &lt;em&gt;OR&lt;/em&gt;. I det ena fallet ska &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt;&lt;span style="color:teal"&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; och i det andra utttycket ska &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt;.    &lt;br /&gt;Av detta vet vi att alla rader ska med, för antingen så har de två kolumnerna lika värde eller så har de det inte. Vi behöver heller inte heller ta hänsyn till NULL här då de båda kolumnerna inte tillåter NULL. Om vi plockar bort det onödiga uttrycket från frågan får vi följande query.    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;-- Bortplockning     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.*       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;t       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;JOIN&lt;span style=""&gt;  &lt;/span&gt;(        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1       &lt;br /&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;WHERE       &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChilID&lt;/span&gt;&lt;span style="color:teal"&gt;       &lt;br /&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;OR     &lt;br /&gt;                &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)     &lt;br /&gt;            &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;AND&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;CategoryID&lt;/span&gt; &lt;span style="color:gray"&gt;IN&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'11'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'22'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'33'&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Nu börjar det likna något! Ett uttryck ska vara sant eller så ska samma uttryck igen vara sant. Det är en överflödig kontroll, så det slutade här med att jag skrev om frågan så den såg ut så här istället.    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;-- Optimerad     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.*       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;t       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;INNER&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;JOIN&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt; &lt;span style="color:blue"&gt;ON&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;WHERE&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;CategoryID&lt;/span&gt; &lt;span style="color:gray"&gt;IN&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'11'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'22'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'33'&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;    &lt;br /&gt;Vad gjorde det då för prestandan? Med hjälp av SET STATISTICS TIME, IO ON fick jag följande resultat.    &lt;br /&gt;    &lt;br /&gt;&lt;span lang="SV" style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;-- Original     &lt;br /&gt;(391 row(s) affected)      &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;Table 'Worktable'. S&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;can count  8, logical reads 151599, physical reads 0.     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;Table 'Table1'.    Scan count 17, logical reads   1466, physical reads 0.     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;Table 'Worktable'. Scan count  0, logical reads      0.     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;SQL Server Execution Times:     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;   CPU time = 11389 ms, elapsed time = 1873 ms.     &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;-- Omskrivning     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;(391 row(s) affected)     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;Table 'Worktable'. Scan count  0, logical reads      0, physical reads 0.     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;Table 'Table1'.    Scan count  2, logical reads   1256, physical reads 0.     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;SQL Server Execution Times:     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;font-family:&amp;quot;Courier New&amp;quot;"&gt;   CPU time =   733 ms, elapsed time =  732 ms.     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;Detta lilla matematiska knep gjorde att omskrivningen använder 15 ggr färre CPU samt slutförs 2,5 ggr snabbare än tidigare. När jag tittade närmare i exekveringsplanen såg jag att omskrivningen bara behöver 1 core medan originalfrågan la beslag på alla 16 cores.    &lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal"&gt;Om det nu varit så att kolumnerna tillåtit NULL, hade jag varit tvungen att lägga till en extra kontroll som den här för att efterlikna originalfrågan till 100%.   &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;-- Optimerad med NULL     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.*       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;t       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;INNER&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;JOIN&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt; &lt;span style="color:blue"&gt;ON&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;WHERE&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;CategoryID&lt;/span&gt; &lt;span style="color:gray"&gt;IN&lt;/span&gt;&lt;span style="color:blue"&gt; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'11'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'22'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'33'&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:gray"&gt;AND&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;IS&lt;/span&gt; &lt;span style="color:gray"&gt;NOT&lt;/span&gt; &lt;span style="color:gray"&gt;NULL       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass7FB60EA0F01B4A74B0B9F2F6EC1C9B05"&gt;&lt;p&gt;Idag fick jag tillfället att hjälpa en kollega med att optimera en fråga för en kunds räkning. Originalfrågan såg i princip ut så här    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;-- Original     &lt;br /&gt;&lt;/br&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.*       &lt;br /&gt;&lt;/br&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;t       &lt;br /&gt;&lt;/br&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;JOIN&lt;span style=""&gt;  &lt;/span&gt;(        &lt;br /&gt;&lt;/br&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/br&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Table1       &lt;br /&gt;            &lt;/br&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;       &lt;br /&gt;&lt;/br&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;WHERE       &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/br&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;w&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID&lt;/span&gt; &lt;span style="color:gray"&gt;AND&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ChildID       &lt;br /&gt;                &lt;/br&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;OR     &lt;br /&gt;                &lt;/br&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;t&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;.&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:teal"&gt;ChildID&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;=&lt;/span&gt; &lt;span style="color:teal"&gt;t&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;ParentID&lt;/span&gt; &lt;span style="color:gray"&gt;AND&lt;/span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/br&gt;&lt;/br&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Swedish" nameEncoded="Swedish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Aprovecha tu almacenamiento con iSCSI y Storage Spaces</title>
      <ItemID>248</ItemID>
      <link>http://blogs.solidq.com/ElRinconDelDBA/Post.aspx?ID=248&amp;title=Aprovecha+tu+almacenamiento+con+iSCSI+y+Storage+Spaces</link>
      <pubDate>2013-05-13T21:09:31+02:00</pubDate>
      <author>Rubén Garrigós</author>
      <authorEncoded>Rub%c3%a9n+Garrig%c3%b3s</authorEncoded>
      <authorID>40</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass21BDB2CCDE0342F989EED4FB7187B8A8"&gt;&lt;p&gt;Una de las novedades que trae Windows Server 2012 son los Storage Spaces. Un Storage Space es un pool de un conjunto de discos que se gestionan de forma similar a como se gestionan las SAN. Una de las ventajas para los entornos más modestos es la posibilidad de mezclar discos de distintos tamaños y conectados a través de distintos buses en el mismo pool. En concreto podemos conectar discos por SAS, SATA, ATA, SCSI e incluso por USB:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_2_3D423605.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_3D423605.png" width="734" height="363" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En ocasiones lo que queremos introducir en el pool no es un disco entero sino una partición de dicho disco o espacio sobrante. En estos casos la solución que podemos tomar es “presentar” dicho espacio mediante iSCSI, al igual que haríamos para acceder a un volumen iSCSI en una NAS/SAN. Para ello primero comprobaremos si tenemos los roles instalados para poder crear el iSCSI Target:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_14_3D423605.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_6_3D423605.png" width="476" height="508" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez instalados, desde el server manager crearemos un nuevo disco virtual iSCSI, en este caso de 20 GB:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_12_3D423605.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_5_6B2F88BD.png" width="712" height="213" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Este disco lo conectaremos contra el propio servidor por iSCSI:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_16_6B2F88BD.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_7_6B2F88BD.png" width="678" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez conectado por iSCSI nos aparecerá como un disco más en el administrador de discos (disco 17 en nuestro ejemplo):&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_4_6B2F88BD.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_1_6B2F88BD.png" width="575" height="579" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Una vez lo tenemos presentado, podremos añadirlo sin problema a un nuevo pool o a uno ya existente. En nuestro caso lo hemos añadido a un nuevo pool llamado iSCSI pool:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_18_6B2F88BD.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_8_6B2F88BD.png" width="591" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_6_6B2F88BD.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_2_6B2F88BD.png" width="588" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez añadido aparecerá dentro del pool como si de un disco físico más se tratara pero conectado por bus iSCSI:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_8_6B2F88BD.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_3_6B2F88BD.png" width="516" height="200" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En resumen, esta técnica de “enmascarar” mediante iSCSI nos puede servir para aprovechar mejor nuestro almacenamiento para Storage Spaces. También podremos utilizar iSCSI para exponer nuestro pool de almacenamiento local con Storage Spaces a otros servidores. &lt;/p&gt;  &lt;p&gt;Cada día vemos más este escenario en pequeños entornos de virtualización para desarrollo/testing. Con Storage Spaces podemos combinar distintos discos en un pool con redundancia sin estar atados a las limitaciones de los fabricantes o de las propias tarjetas RAID. Combinando esta flexibilidad y el target ISCSI nativo de Windows Server 2012 podemos crear un servidor de almacenamiento con muy bajo coste. &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass21BDB2CCDE0342F989EED4FB7187B8A8"&gt;&lt;p&gt;Una de las novedades que trae Windows Server 2012 son los Storage Spaces. Un Storage Space es un pool de un conjunto de discos que se gestionan de forma similar a como se gestionan las SAN. Una de las ventajas para los entornos más modestos es la posibilidad de mezclar discos de distintos tamaños y conectados a través de distintos buses en el mismo pool. En concreto podemos conectar discos por SAS, SATA, ATA, SCSI e incluso por USB:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/248/image_2_3D423605.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/248/image_thumb_3D423605.png" width="734" height="363" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En ocasiones lo que queremos introducir en...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Disco online" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Disco+online" nameEnconded="Disco+online" />
      <category name="Dispositivos Fisicos" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Dispositivos+Fisicos" nameEnconded="Dispositivos+Fisicos" />
      <category name="ISCSI" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=ISCSI" nameEnconded="ISCSI" />
      <category name="Microsoft iscsi Software Target" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Microsoft+iscsi+Software+Target" nameEnconded="Microsoft+iscsi+Software+Target" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Curso MS Business Intelligence-SSAS: Personalizando el Modelo-Atributos (38)</title>
      <ItemID>176</ItemID>
      <link>http://blogs.solidq.com/BICorner/Post.aspx?ID=176&amp;title=Curso+MS+Business+Intelligence-SSAS%3a+Personalizando+el+Modelo-Atributos+(38)</link>
      <pubDate>2013-04-30T10:52:20+02:00</pubDate>
      <author>Salvador Ramos</author>
      <authorEncoded>Salvador+Ramos</authorEncoded>
      <authorID>33</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass2B5170F0F3424F7393D34470D97AA7D3"&gt;&lt;h6&gt;&lt;a name="_Toc291606229"&gt;&lt;font size="2"&gt;Atributos&lt;/font&gt;&lt;/a&gt;&lt;/h6&gt;  &lt;p&gt;Por cada una de las dimensiones nos encontramos con una colección de &lt;b&gt;Atributos&lt;/b&gt; que se corresponden con una o más columnas de la tabla de dimensiones. Un atributo es cada una de las características de la dimensión por la cual podremos analizar la información. Por ejemplo, para la dimensión &lt;i&gt;Tiempo&lt;/i&gt; tendremos atributos como &lt;i&gt;Año, Mes, Día, Trimestre, Trimestre fiscal, Año fiscal&lt;/i&gt;, etc. Para la dimensión &lt;i&gt;Cliente&lt;/i&gt; tendremos otros como &lt;i&gt;Nombre, Población, País, Estudios, Edad, Número de hijos, Sexo&lt;/i&gt;, etc.&lt;/p&gt;  &lt;p&gt;Entre todos ellos, debemos destacar que contaremos con un &lt;b&gt;atributo clave&lt;/b&gt;, éste es un atributo con valores únicos, que identifica las columnas de la tabla de dimensiones con las claves externas de la tabla de hechos. Normalmente, representa a la columna que es clave principal (&lt;i&gt;primary key&lt;/i&gt;) en la tabla de dimensiones.&lt;/p&gt;  &lt;p&gt;Veamos las principales propiedades de los atributos:&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;KeyColumn&lt;/b&gt;. Contiene la colección de columnas que constituyen la clave del atributo. Está compuesta por las columnas que hacen que el valor de cada miembro sea único. Por ejemplo, si tenemos en la tabla de Tiempo una columna para el año y otra para el mes, la colección &lt;i&gt;KeyColumn&lt;/i&gt; estará formada por ambas columnas, ya que cada mes está repetido en cada uno de los años.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;NameColumn&lt;/b&gt;. Se utiliza para mostrar un valor descriptivo al usuario, cuando el valor el valor de la columna clave no es lo suficientemente descriptivo. Cuando se indica una columna en esta propiedad, será este valor el mostrado al usuario en lugar de &lt;i&gt;KeyColumn&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;ValueColumn&lt;/b&gt;. Identifica la columna que proporciona el valor del atributo.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;AttributeHierarchyDisplayFolder&lt;/b&gt;. Identifica la carpeta en la que verán este elemento los usuarios finales desde las herramientas cliente.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;DefaultMember&lt;/b&gt;. Expresión MDX que define el miembro predeterminado del atributo.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;OrderBy&lt;/b&gt;. Especifica el método para ordenar los miembros del atributo. Valores: &lt;/p&gt;  &lt;p&gt;· &lt;i&gt;Key, &lt;/i&gt;los miembros se ordenan por la clave del atributo&lt;/p&gt;  &lt;p&gt;· &lt;i&gt;Name,&lt;/i&gt; los miembros se ordenan por el nombre del atributo&lt;/p&gt;  &lt;p&gt;· &lt;i&gt;AttributeKey, &lt;/i&gt;los miembros se ordenan por la clave del atributo especificado en la propiedad &lt;i&gt;OrderByAttribute&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;i&gt;AttributeName,&lt;/i&gt; los miembros se ordenan por el nombre del atributo especificado en la propiedad &lt;i&gt;OrderByAttribute&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;OrderByAttribute&lt;/b&gt;. Si en &lt;i&gt;OrderBy&lt;/i&gt; hemos decidido que se ordenen por otro atributo, es decir, hemos elegido el valor &lt;i&gt;AttributeKey&lt;/i&gt; o &lt;i&gt;AttributeName&lt;/i&gt;, en esta propiedad indicaremos el atributo por el que deseamos realizar la ordenación.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;Type&lt;/b&gt;. Especifica el tipo de información que contiene el atributo.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;Usage&lt;/b&gt;. Especifica el uso del atributo. Valores: &lt;i&gt;Regular, Key, Parent&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;IsAggregatable&lt;/b&gt;. Indica si el atributo se puede agregar en una jerarquía.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;DiscretizationMetod&lt;/b&gt;. “Discretizar” consiste en convertir valores continuos en valores discretos. Por ejemplo, el salario es un valor continuo, puede haber cualquier valor, pero a nivel de análisis de información podemos convertirlo en continuo, haciendo tres grupos, el primero entre 0 y 10.000, el segundo entre 10.001 y 50.000 y el tercero para más de 50.000. Con la propiedad &lt;i&gt;DiscretizationMetod&lt;/i&gt; elegimos el método a utilizar para este proceso. Valores: &lt;i&gt;None, Automatic, EqualAreas, Cluster&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;DiscretizationBucketCount&lt;/b&gt;. Especifica el número de depósitos en los que se “discretizarán” los atributos. En el ejemplo anterior serían tres.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;AttributeHierarchyEnabled&lt;/b&gt;. Determina si se ha generado una jerarquía de atributos para ese atributo. Esto tiene implicaciones, ya que si no está habilitada no se puede utilizar ese atributo en una jerarquía definida por el usuario, ni se puede hacer referencia a la jerarquía de atributos desde instrucciones MDX.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;AttributeHierarchyOptimizedState&lt;/b&gt;. Determina el nivel de optimización aplicado a la jerarquía de atributos. Valores: &lt;i&gt;FullyOptimized, NotOptimized&lt;/i&gt;. Por defecto está completamente optimizada, lo que implica que se generarán índices para optimizar las consultas. Es conveniente que no estén optimizadas aquellas jerarquías que no se utilicen para realizar consultas, y sólo estén para otros fines como la ordenación. Esto ahorrará tiempos de procesamiento.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;AttributeHierarchyOrdered&lt;/b&gt;. Indica si la jerarquía de atributos asociada está ordenada. Valores: &lt;i&gt;True, False&lt;/i&gt;. Al igual que en el caso anterior, si no se va a utilizar para realizar consultas, mejor ponerla a &lt;i&gt;False&lt;/i&gt;, y ahorrar tiempos de procesamiento innecesarios.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;AttributeHierarchyVisible&lt;/b&gt;. Indica si la jerarquía de atributos asociada está visible para las aplicaciones cliente. Valores: &lt;i&gt;True, False&lt;/i&gt;. Se debe poner a &lt;i&gt;False&lt;/i&gt; cuando no se utiliza para realizar consultas.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Si te interesa esta información, y deseas convertirte en un profesional altamente especializado en Microsoft Business Intelligence, te recomiendo que nos pidas información sobre nuestro &lt;a href="http://www.solidq.com/squ/courses/Pages/Master-BI-Certified-Business-Intelligence-Microsoft-Espanol.aspx"&gt;&lt;strong&gt;Master en BI&lt;/strong&gt;&lt;/a&gt;. &lt;em&gt;Recuerda que hay poquitas plazas disponibles!!!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Post publicados anteriormente como parte de este curso:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=175&amp;amp;title=curso+ms+business+intelligence-ssas:+personalizando+el+modelo%e2%80%93dimensiones+%2837%29" target="_blank"&gt;SSAS, Dimensiones (37)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=171&amp;amp;title=curso+ms+business+intelligence-ssas:+agregaciones+%2836%29"&gt;SSAS, Agregaciones (36)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=169&amp;amp;title=curso+ms+business+intelligence-ssas:+procesamiento+y+modos+de+almacenamiento+%2835%29"&gt;SSAS, Procesamiento y modos de almacenamiento (35)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=167&amp;amp;title=curso+ms+business+intelligence-ssas:+construyendo+y+desplegando+el+modelo+%2834%29"&gt;SSAS, Construyendo y desplegando el modelo (34)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=164&amp;amp;title=curso+ms+business+intelligence%e2%80%93ssas:+objetos+de+una+bbdd+de+analysis+services+%28parte+iv%e2%80%93dimensiones%29+%2833%29"&gt;SSAS, Objetos de una BBDD de Analysis Services parte IV – Dimensiones) (33)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=163&amp;amp;title=curso+ms+business+intelligence+-+ssas:+objetos+de+una+bbdd+de+analysis+services+%28parte+iii%e2%80%93cubos%29+%2832%29"&gt;SSAS, Objetos de una BBDD de Analysis Services (parte III – Cubos) (32)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=162&amp;amp;title=curso+ms+business+intelligence+-+ssas:+objetos+de+una+bbdd+de+analysis+services+%28parte+ii+-+datasource+views%29+%2831%29"&gt;SSAS, Objetos de una BBDD de Analysis Services (parte II – DataSource Views) (31)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=156&amp;amp;title=curso+ms+business+intelligence+-+ssas:+objetos+de+una+bbdd+de+analysis+services+%28parte+i+-+datasources%29+%2830%29"&gt;SSAS, Objetos de una BBDD de Analysis Services (parte I – DataSources) (30)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=155&amp;amp;title=curso+ms+business+intelligence+-+ssas:+cubos+olap%2c+conceptos+b%c3%a1sicos+%28parte+iii%29+%2829%29"&gt;SSAS, Cubos OLAP, Conceptos básicos (parte III) (29)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=154&amp;amp;title=curso+ms+business+intelligence+-+ssas:+cubos+olap%2c+conceptos+b%c3%a1sicos+%28parte+ii%29+%2828%29"&gt;SSAS, Cubos OLAP, Conceptos básicos (parte II) (28)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=152&amp;amp;title=curso+ms+business+intelligence+-+ssas:+cubos+olap%2c+conceptos+b%c3%a1sicos+%28parte+i%29+%2827%29"&gt;SSAS, Cubos OLAP, Conceptos básicos (parte I) (27)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=151&amp;amp;title=curso+ms+business+intelligence+-+ssas:+qu%c3%a9+es+analysis+services+%2826%29"&gt;SSAS, Qué es Analysis Services (26)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=149&amp;amp;title=curso+ms+business+intelligence+-+fin+del+m%c3%b3dulo+de+ssis+y+recapitulaci%c3%b3n+%2825%29"&gt;Fin del módulo de SSIS y recapitulación (25)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=143&amp;amp;title=cursos+ms+business+intelligence+ssis:+programar+la+ejecuci%c3%b3n+de+paquetes+%2824%29"&gt;SSIS, Programar la ejecución de paquetes (24)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=142&amp;amp;title=curso+ms+business+intelligence+-+ssis:+ejecuci%c3%b3n+de+paquetes+en+el+servidor+%2823%29"&gt;SSIS, Ejecución de paquetes en el servidor (23)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=140&amp;amp;title=curso+ms+business+intelligence+ssis:+despliegue+de+paquetes+%2822%29"&gt;SSIS, Despliegue de paquetes (22)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=132&amp;amp;title=curso+ms+business+intelligence+ssis:+configuraci%c3%b3n%2c+despliegue+y+administracion+%28parte+iii%29+%2821%29"&gt;SSIS Configuración, Despliegue y Administración (parte III) (21)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=130&amp;amp;title=curso+ms+business+intelligence+-+ssis:+configuracion%2c+despliegue+y+administraci%c3%b3n+%28parte+ii%29+%2820%29"&gt;SSIS Configuración, Despliegue y Administración (parte II) (20)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=129&amp;amp;title=curso+ms+business+intelligence+ssis:+configuraci%c3%b3n%2c+despliegue+y+administracion+%28parte+i%29+%2819%29"&gt;SSIS Configuración, Despliegue y Administración (parte I) (19)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=128&amp;amp;title=curso+ms+business+intelligence+-+ssis+logging+%28parte+iii%29+%2818%29"&gt;SSIS Logging (parte III) (18)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=126&amp;amp;title=curso+ms+business+intelligence+-+ssis+logging+%28parte+ii%29+%2817%29"&gt;SSIS Logging (parte II) (17)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=123&amp;amp;title=curso+ms+business+intelligence+-+ssis+loging+%28parte+i%29+%2816%29"&gt;SSIS Logging (parte I) (16)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=122&amp;amp;title=curso+ms+business+intelligence+ssis+buenas+pr%c3%a1cticas+%28parte+iii%29+%2815%29"&gt;SSIS Buenas prácticas (parte III) (15)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=120&amp;amp;title=curso+ms+business+intelligence+-+ssis+buenas+pr%c3%a1cticas+%28parte+ii%29+%2814%29"&gt;SSIS Buenas prácticas (parte II) (14)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=119&amp;amp;title=curso+ms+business+intelligence+-+ssis+buenas+pr%c3%a1cticas+%28parte+i%29+%2813%29"&gt;SSIS Buenas prácticas (parte I) (13)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=112&amp;amp;title=curso+ms+business+intelligence+-+ssis+data+flow+%2812%29"&gt;SSIS Data Flow (12)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=106&amp;amp;title=Curso+MS+Business+Intelligence+-+SSIS+ControlFlow+%2811%29"&gt;SSIS Control Flow (11)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=105&amp;amp;title=Curso+MS+Business+Intelligence+-+Introduccion+a+SSIS+%2810%29"&gt;Introducción a SSIS (10)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=104&amp;amp;title=Curso+MS+Business+Intelligence+-+Modelado+Dimensional+%289%29"&gt;Modelado Dimensional (9)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=103&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Introduccion+completa+%288%29"&gt;Introducción Completa (8)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=84&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Herramientas+cliente+SQL+Server+%287%29"&gt;Herramientas Cliente SQL Server (7)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=83&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Componentes+de+la+plataforma+Microsoft+BI+%286%29"&gt;Componentes de la Plataforma Microsoft BI (6)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=82&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Visi%c3%b3n+y+estrategia+%285%29"&gt;Microsoft BI – Visión y Estrategia (5)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=81&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Componentes+de+una+soluci%c3%b3n+de+BI+%284%29"&gt;Componentes de una Solución de BI (4)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=80&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Conceptos+importantes+sobre+BI+%e2%80%93+parte+II+%283%29"&gt;Conceptos importantes sobre BI – parte II (3)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=79&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Conceptos+importantes+sobre+BI+%e2%80%93+parte+I+%282%29"&gt;Conceptos importantes sobre BI – parte I (2)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=78&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Definici%c3%b3n+del+t%c3%a9rmino+BI+%281%29"&gt;Definición del término BI (1)&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass2B5170F0F3424F7393D34470D97AA7D3"&gt;&lt;h6&gt;&lt;a name="_Toc291606229"&gt;&lt;font size="2"&gt;Atributos&lt;/font&gt;&lt;/a&gt;&lt;/h6&gt;  &lt;p&gt;Por cada una de las dimensiones nos encontramos con una colección de &lt;b&gt;Atributos&lt;/b&gt; que se corresponden con una o más columnas de la tabla de dimensiones. Un atributo es cada una de las características de la dimensión por la cual podremos analizar la información. Por ejemplo, para la dimensión &lt;i&gt;Tiempo&lt;/i&gt; tendremos atributos como &lt;i&gt;Año, Mes, Día, Trimestre, Trimestre fiscal, Año fiscal&lt;/i&gt;, etc. Para la dimensión &lt;i&gt;Cliente&lt;/i&gt; tendremos otros como &lt;i&gt;Nombre, Población, País, Estudios, Edad, Número de hijos, Sexo&lt;/i&gt;,...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Atributos" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Atributos" nameEnconded="Atributos" />
      <category name="Analysis Services" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Analysis+Services" nameEnconded="Analysis+Services" />
      <category name="SSAS" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SSAS" nameEnconded="SSAS" />
      <category name="Cursos" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Cursos" nameEnconded="Cursos" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Kvalitetssäkra ETL med certifierade konsulter</title>
      <ItemID>20</ItemID>
      <link>http://blogs.solidq.com/Business-Intelligence-SQL-Server-pa-svenska/Post.aspx?ID=20&amp;title=Kvalitetss%c3%a4kra+ETL+med+certifierade+konsulter</link>
      <pubDate>2013-04-30T10:39:00+02:00</pubDate>
      <author>Thomas Ivarsson</author>
      <authorEncoded>Thomas+Ivarsson</authorEncoded>
      <authorID>152</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass204B7B2D125C49EF973F046AC277A1FB"&gt;&lt;p&gt;Med SQL Server 2012 har det också kommit ett nytt upplägg för certifiering av MSBI konsulter med upp till 5 olika delar. Det är väldigt goda nyheter trots en längre tidsperiod att läsa in och bli godkänd. Ett av dessa certifikat heter “70-463, Implementing a Data Warehouse with SQL Server 2012” och är både en examen med teknisk bredd inom SSIS, relationsdatabasen, Master Data Management och Data Quality Services. Här finns även genomgångar av bäst praxis och optimeringsproblem. Sammantaget innehåller examen en väldigt bra kunskapsbas som alla BI konsulter inom Microsofts plattform bör ha lärt sig.&lt;/p&gt;  &lt;p&gt;Under mina år som BI konsult och som förvaltare av BI lösningar har jag tyvärr sett mycket slarv och ibland rena galenskaper i designen av ETL system. Tyvärr sitter sedan kunden fast i en oöverskådlig härva av spagetti kod eller datamodeller som gör allt optimeringsarbete meningslöst utan att starta om hela utvecklingsprocessen. Detta görs sällan av kostnadsskäl utan en illa fungerande lösning får leva kvar alltför länge.&lt;/p&gt;  &lt;p&gt;Jag skulle vilja gå så långt att säga att kunderna bör kräva att konsulter har klarat av examen 70-463 och att konsulterna följer principerna och tipsen i denna examen. Boken med samma namn som examen, från Microsoft Press, kom ut vid årsskiftet och finns att köpa hos de flesta nätbokhandlare.&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass204B7B2D125C49EF973F046AC277A1FB"&gt;&lt;p&gt;Med SQL Server 2012 har det också kommit ett nytt upplägg för certifiering av MSBI konsulter med upp till 5 olika delar. Det är väldigt goda nyheter trots en längre tidsperiod att läsa in och bli godkänd. Ett av dessa certifikat heter “70-463, Implementing a Data Warehouse with SQL Server 2012” och är både en examen med teknisk bredd inom SSIS, relationsdatabasen, Master Data Management och Data Quality Services. Här finns även genomgångar av bäst praxis och optimeringsproblem. Sammantaget innehåller...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="SQL Server 2012" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SQL+Server+2012" nameEnconded="SQL+Server+2012" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Swedish" nameEncoded="Swedish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Kako smo požrli NT konferenco</title>
      <ItemID>147</ItemID>
      <link>http://blogs.solidq.com/dsarka/Post.aspx?ID=147&amp;title=Kako+smo+po%c5%berli+NT+konferenco</link>
      <pubDate>2013-04-29T12:10:52+02:00</pubDate>
      <author>Dejan Sarka</author>
      <authorEncoded>Dejan+Sarka</authorEncoded>
      <authorID>46</authorID>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments>
      <comments>http://blogs.solidq.com/dsarka/Post.aspx?ID=147&amp;title=Kako+smo+po%c5%berli+NT+konferenco#1</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass6802E96ABBD646CE89EFD0E30A7BB281"&gt;&lt;p&gt;First a quick note to my regular readers. I decided for a post in Slovenian language, because I want to address my fellow citizens only. You are not missing anything, this is not a technical blog.
&lt;/p&gt;&lt;p&gt;Končana je 18. NT konferenca, kot kaže, tudi zadnja NT konferenca. Ne morem si kaj, da mi ne bi bilo zaradi tega žal. NT konferenca je bila vedno nekaj posebnega, in to v svetovnem merilu. V najboljših časih je število udeležencev preseglo 2.000, kar je najbrž svetovni rekord glede na število prebivalcev. Če bi npr. v ZDA uspeli privabiti en promil prebivalstva, bi morali imeti več kot 300.000 udeležencev. Zato sem v tujini našo izjemno konferenco vedno omenjal s ponosom. Na žalost bomo imeli še eno stvar manj, na katero bi lahko bili ponosni.
&lt;/p&gt;&lt;p&gt;Popolnoma mi je jasno, da v sedanji krizi koncept konference, kot smo ga imeli, ne more več preživeti. Zato mi je tudi jasno, da mora Microsoft Slovenija nekaj spremeniti. Nisem pa prepričan, da je smer, ki so jo ubrali, najboljša. Predvidoma bodo naslednje leto tri konference, ki bodo trajale dva in dvakrat po en dan. S tem konceptom nimam problema, vendar moramo vedeti, da bodo to povsem običajne konference, kot jih imajo povsod po svetu, da ne bomo imeli nič posebnega.
&lt;/p&gt;&lt;p&gt;Med samo konferenco sem stalno dobival prispodobo ladje Titanic. Orkester igra, mi se pa potapljamo. Vsak večer zabava z neomejenimi količinami pijače in hrane, ogromna izbira hrane med kosilom, dragi nahrbtniki, in tako naprej. Kot da ne bi bilo nobene krize. Ampak za to ne krivim Microsoft. Glede na pretekle izkušnje je bilo vedno ogromno negodovanja s strani udeležencev, če ni bilo nahrbtnika ali pa majice. Vedno se je tudi našel nekdo, ki mu ni bila všeč hrana. Kot da doma je samo kaviar in pije šampanjec. Meni gre po glavi primerjava na tiste, ki se vedno pritožujejo glede glasbe, doma pa plešejo na poročila. Letos so bile poleg rednih pritožb na tapeti še dodatne. Letos je marsikoga motila lokacija, predvsem dejstvo, da so bila predavanja na dveh lokacijah, v dveh hotelih. Brez vsakega razumevanja za dejstvo, da je za polovico ljudi nemogoče plačati tako drago lokacijo, kot je bila v Portorožu. In ne glede na čudovito okolje, ki ga ponuja Bled, in ki je precej bolj unikatno kot je pač eno od tisočih mediteranskih letovišč.
&lt;/p&gt;&lt;p&gt;Kot primer naj navedem komentar, ki sem ga imel priložnost prebrati na FB. Pod sliko kremne rezine je nekdo komentiral »In to je to za € 800…«. No, če hodite na konference samo zaradi žrtja in pitja, potem to res ni to. Pa čeprav ste lahko ob kosilu požrli neomejeno količino kremnih rezin, a se to ni zdelo vredno omeniti nikomur. No, seveda v treh dnevih ne morete požreti kremnih rezin za € 800. Svetujem vam, da denar raje zapravite v gostilnah. Bistvo konference je v druženju, v izobraževanju, v sklepanju poznanstev… Človek bi rekel, da je glavna vrlina premnogih udeležencev preprosto požrešnost.
&lt;/p&gt;&lt;p&gt;Požrešnost se žal kaže še drugod. Microsoft Slovenija je že tretjič odpeljal vse udeležence, ki se kitijo z nazivom CIO, na posebno lokacijo. Pri tem so bili managerji mnogih IT podjetij izvzeti. To se je zgodilo že tretjič, čeprav smo sponzorji in predavatelji dali zelo negativno mnenje o tem. Za nas namreč konferenca precej izgubi smisel, če mi ne moremo do ljudi, s katerimi bi lahko sklepali posle. Kot da bi Microsoft Slovenija hotel požreti ves posel, kar ga še je v slovenski IT industriji, in odžreti vse svojim obstoječim partnerjem. Kot da ne bi bil eden temeljev uspeha Microsoft-a ravno odlična partnerska mreža. Rezultat je na dlani – količina sponzorjev in vrednost sponzorstev se že manjša. Pa ne samo zaradi krize! Spet požrešnost.
&lt;/p&gt;&lt;p&gt;Še ena požrešnost je v igri. Povsod po svetu, kjerkoli sem bil, so bile cene nočitev v hotelih znižane za udeležence konference. Saj to je vendar normalno, če ne zaradi drugega, že preprosto zaradi količine. No, v Sloveniji očitno to ne dela. Tako kot že prej v Portorožu, so tudi na Bledu hoteli ceno dvignili dan pred konferenco in jo spustili dan po konferenci. Sem preveril, imam dokaze. Torej, preprosto, vse skupaj nas lupijo še hoteli. Za Portorož je bilo to vsaj malo logično, saj 2.000 ljudi na konferenci ne more gostiti nobena druga lokacija v Sloveniji, čeprav je še vedno požrešno in neprimerno. Za Bled mi je pa to dejstvo malo manj razumljivo. Zaradi požrešnosti bodo sigurno imeli precej manj nočitev v prihodnosti.
&lt;/p&gt;&lt;p&gt;Ne vem, morda razmišljam naivno. Ampak sprašujem se, ali v tej državi res ni mogoče narediti nekaj skromnega, času primernega? Ali ne bi mogli narediti konference s poceni hrano, malo zastonj pijače (npr. kupona za dve pivi) in možnostjo, da si pijačo naprej plačujemo sami, brez nahrbtnika, ter z resnično nižjimi cenami hotelskih storitev? Ali ne bi bilo bolje previhariti težke čase in skušati ohraniti tisto, kar je dobrega, namesto vse do konca požreti in nato potoniti?
&lt;/p&gt;&lt;p&gt;Kar se mene tiče, že vem, kaj bom odgovoril tujcem, ko me bodo vprašali, kaj se dogaja z NT konferenco. Odgovoril bom, da smo imeli najboljšo konferenco na svetu, vendar smo jo preprosto požrli.&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass6802E96ABBD646CE89EFD0E30A7BB281"&gt;&lt;p&gt;First a quick note to my regular readers. I decided for a post in Slovenian language, because I want to address my fellow citizens only. You are not missing anything, this is not a technical blog.
&lt;/p&gt;&lt;p&gt;Končana je 18. NT konferenca, kot kaže, tudi zadnja NT konferenca. Ne morem si kaj, da mi ne bi bilo zaradi tega žal. NT konferenca je bila vedno nekaj posebnega, in to v svetovnem merilu. V najboljših časih je število udeležencev preseglo 2.000, kar je najbrž svetovni rekord glede na število prebivalcev....&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Rendimiento con índices columnares</title>
      <ItemID>247</ItemID>
      <link>http://blogs.solidq.com/ElRinconDelDBA/Post.aspx?ID=247&amp;title=Rendimiento+con+%c3%adndices+columnares</link>
      <pubDate>2013-04-26T21:05:01+02:00</pubDate>
      <author>Rubén Garrigós</author>
      <authorEncoded>Rub%c3%a9n+Garrig%c3%b3s</authorEncoded>
      <authorID>40</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassED7046D0E73B408F8F089EBDCBF555D7"&gt;&lt;p&gt;&lt;font size="3"&gt;Los índices columnares son un nuevo tipo de índices disponibles en SQL Server 2012 que incorporan el almacenamiento columnar al motor relacional. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Dejando de lado los múltiples inconvenientes y limitaciones de estos índices, voy a centrarme en analizar el impacto de rendimiento teniendo en cuenta los puntos clave que se destacan de este tipo de índices:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- Solo las columnas necesarias para la consulta son accedidas.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- Las columnas están comprimidas lo cual reduce la cantidad de lecturas&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- El plan de ejecución en batches reduce el consumo de CPU&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Vamos a utilizar la base de datos AdventureWorksDW2012 y comenzaremos por analizar el índice columnar que viene como ejemplo en BOL:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;CREATE NONCLUSTERED COLUMNSTORE INDEX [csindx_FactResellerSales]      &lt;br /&gt;ON [FactResellerSales]       &lt;br /&gt;(       &lt;br /&gt;    [ProductKey],       &lt;br /&gt;    [OrderDateKey],       &lt;br /&gt;    [DueDateKey],       &lt;br /&gt;    [ShipDateKey],       &lt;br /&gt;    ResellerKey,       &lt;br /&gt;    [EmployeeKey],       &lt;br /&gt;    [PromotionKey],       &lt;br /&gt;    [CurrencyKey],       &lt;br /&gt;    [SalesTerritoryKey],       &lt;br /&gt;    [SalesOrderNumber],       &lt;br /&gt;    [SalesOrderLineNumber],       &lt;br /&gt;    [RevisionNumber],       &lt;br /&gt;    [OrderQuantity],       &lt;br /&gt;    [UnitPrice],       &lt;br /&gt;    [ExtendedAmount],       &lt;br /&gt;    [UnitPriceDiscountPct],       &lt;br /&gt;    [DiscountAmount],       &lt;br /&gt;    [ProductStandardCost],       &lt;br /&gt;    [TotalProductCost],       &lt;br /&gt;    [SalesAmount],       &lt;br /&gt;    [TaxAmt],       &lt;br /&gt;    [Freight],       &lt;br /&gt;    [CarrierTrackingNumber],       &lt;br /&gt;    [CustomerPONumber],       &lt;br /&gt;    [OrderDate],       &lt;br /&gt;    [DueDate],       &lt;br /&gt;    [ShipDate]       &lt;br /&gt;);&lt;/font&gt;&lt;/p&gt;        &lt;p&gt;&lt;font size="3"&gt;Podemos ver que pese a ser un índice no cluster, han incluido todas las columnas de la tabla. La razón que gana peso para esta decisión es que únicamente podemos tener un índice columnar por tabla.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Si lanzamos una consulta que el optimizador considera apropiada veremos como el nuevo operador ColumnStore IndexScan entra en juego:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;SELECT SalesTerritoryKey, SUM(ExtendedAmount) AS SalesByTerritory      &lt;br /&gt;FROM FactResellerSales       &lt;br /&gt;GROUP BY SalesTerritoryKey;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_2_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_32237A89.png" width="914" height="436" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Si comparamos la estimación de costes de esta consulta comparada con otra en la que forzamos el uso del índice cluster vemos que, efectivamente, el uso del índice columnar parece ser mucho más eficiente:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_4_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_1_32237A89.png" width="734" height="537" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Si comparamos los tiempos de ejecución vemos que la consulta con el índice columnar es más rápida, realiza menos lecturas y consume menos CPU:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.     &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads &lt;font style="background-color:rgb(255,255,0)"&gt;49&lt;/font&gt;, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color:rgb(255,255,0)"&gt;SQL Server Execution Times:      &lt;br /&gt;   CPU time = 16 ms,  elapsed time = 17 ms.       &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color:rgb(255,255,0)"&gt;(&lt;/font&gt;10 row(s) affected)     &lt;br /&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.     &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads &lt;font style="background-color:rgb(255,255,0)"&gt;2982&lt;/font&gt;, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt; &lt;font style="background-color:rgb(255,255,0)"&gt;SQL Server Execution Times:      &lt;br /&gt;   CPU time = 31 ms,  elapsed time = 26 ms.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Veamos qué ocurre si creamos un índice de cobertura sobre las columnas utilizadas:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;CREATE INDEX IX_SOLID ON FACTRESELLERSALES(SALESTERRITORYKEY,EXTENDEDAMOUNT)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;En este caso, ya el optimizador nos estima que la operación con el índice de cobertura va a ser tanto o más rápida que con el índice columnar:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_6_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_2_32237A89.png" width="559" height="559" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;El resultado de la ejecución de esta última query muestra que estamos prácticamente a la par en el consumo de CPU y en la duración aunque el número de lecturas sigue siendo considerablemente mayor:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads &lt;font style="background-color:rgb(255,255,0)"&gt;290&lt;/font&gt;, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 16 ms,  elapsed time = 20 ms&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Si probamos estas mismas queries en un escenario de caché fría (DBCC dropcleanbuffers) veremos que la diferencia en tiempos aumenta a favor del índice columnar:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.     &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads 52, physical reads 3, read-ahead reads 71, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 16 ms,  elapsed time = 22 ms.&lt;/font&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.     &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads 2982, physical reads 2, read-ahead reads 2972, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 31 ms,  elapsed time = 93 ms.&lt;/font&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads 290, physical reads 0, read-ahead reads 287, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 16 ms,  elapsed time = 33 ms.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Otro factor que debemos considerar es que también es posible comprimir los índices no columnares mediante compresión de fila o de página. Veamos que ocurre cuando comprimimos el índice cluster y el índice de cobertura con compresión de página:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;ALTER INDEX [ix_solid] ON [dbo].[FactResellerSales] REBUILD PARTITION = ALL WITH      &lt;br /&gt;(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,       &lt;br /&gt;DATA_COMPRESSION = PAGE)       &lt;br /&gt;GO       &lt;br /&gt;ALTER INDEX [PK_FactResellerSales_SalesOrderNumber_SalesOrderLineNumber] ON [dbo].[FactResellerSales] REBUILD PARTITION = ALL WITH       &lt;br /&gt;(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,       &lt;br /&gt;DATA_COMPRESSION = PAGE)       &lt;br /&gt;GO&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Con compresión activa los resultados con caché fría son los siguientes:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.     &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads 52, physical reads 4, read-ahead reads 71, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 16 ms,  elapsed time = 23 ms.&lt;/font&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.     &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads &lt;font style="background-color:rgb(255,255,0)"&gt;370&lt;/font&gt;, physical reads 0, read-ahead reads 358, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 47 ms,  elapsed time = 43 ms.&lt;/font&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;(10 row(s) affected)    &lt;br /&gt;Table 'FactResellerSales'. Scan count 1, logical reads &lt;font style="background-color:rgb(255,255,0)"&gt;92&lt;/font&gt;, physical reads 1, read-ahead reads 90, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;&lt;font style="background-color:rgb(255,255,0)"&gt;   CPU time = 16 ms,  elapsed time = 33 ms.      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Vemos que la compresión nos ayuda a reducir las lecturas y el tiempo total en el caso del índice cluster mientras que en el índice de cobertura, al ser menos páginas a leer, realmente la diferencia no es apreciable. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Para poder apreciar un poco mejor las diferencias de tiempos y de consumos de CPU vamos a inflar un poco la tabla ejecutando 5 veces este insert que duplica el número de registros con cada ejecución:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="2"&gt;insert into FactResellerSales      &lt;br /&gt;SELECT [ProductKey]       &lt;br /&gt;      ,[OrderDateKey]       &lt;br /&gt;      ,[DueDateKey]       &lt;br /&gt;      ,[ShipDateKey]       &lt;br /&gt;      ,[ResellerKey]       &lt;br /&gt;      ,[EmployeeKey]       &lt;br /&gt;      ,[PromotionKey]       &lt;br /&gt;      ,[CurrencyKey]       &lt;br /&gt;      ,[SalesTerritoryKey]       &lt;br /&gt;      ,(select count(*) from [FactResellerSales]) + row_number() over (order by SalesOrderNumber)       &lt;br /&gt;      ,[SalesOrderLineNumber]       &lt;br /&gt;      ,[RevisionNumber]       &lt;br /&gt;      ,[OrderQuantity]       &lt;br /&gt;      ,[UnitPrice]       &lt;br /&gt;      ,[ExtendedAmount]       &lt;br /&gt;      ,[UnitPriceDiscountPct]       &lt;br /&gt;      ,[DiscountAmount]       &lt;br /&gt;      ,[ProductStandardCost]       &lt;br /&gt;      ,[TotalProductCost]       &lt;br /&gt;      ,[SalesAmount]       &lt;br /&gt;      ,[TaxAmt]       &lt;br /&gt;      ,[Freight]       &lt;br /&gt;      ,[CarrierTrackingNumber]       &lt;br /&gt;      ,[CustomerPONumber]       &lt;br /&gt;      ,[OrderDate]       &lt;br /&gt;      ,[DueDate]       &lt;br /&gt;      ,[ShipDate]       &lt;br /&gt;  FROM [dbo].[FactResellerSales]       &lt;br /&gt;  go 5&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Ahora que tenemos ya casi 2 millones de filas volveremos a recrear el índice columnar (tuvimos que borrarlo para poder insertar datos) y desfragmentaremos el resto de índices. Repetiremos las pruebas realizadas anteriormente con caché fría y caliente así como con compresión o sin compresión de página.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Al aumentar el número de registros vemos que las tres operaciones se ejecutan con planes paralelos:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_10_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_4_32237A89.png" width="588" height="264" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;La siguiente tabla resume los valores obtenidos:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_14_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_6_32237A89.png" width="838" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Ahora vamos a testear otra consulta que, en principio, parece muy óptima también para un índice columnar, un cálculo de un total acumulado:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_8_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_3_32237A89.png" width="749" height="507" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;La primera diferencia que vemos es que no se está considerando un plan paralelo para el índice columnar. La siguiente tabla resume los valores obtenidos:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/247/image_16_32237A89.png"&gt;&lt;img title="image" style="background-image:none;display:inline" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/247/image_thumb_7_32237A89.png" width="805" height="111" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Podemos ver que en este escenario el índice columnar ha ofrecido peores tiempos de respuesta. Desgraciadamente el trace flag no documentado 8649 no nos ayuda en este caso ya que parece no afectar a los planes con índices columnares. Si modificamos manualmente el “cost threshold for parallelism” y lo disminuimos, podemos obtener un plan paralelo con un tiempo de respuesta comparable con el del índice de cobertura:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Table 'FactResellerSales'. Scan count 7, logical reads 744, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/p&gt;  &lt;p&gt;SQL Server Execution Times:    &lt;br /&gt;   &lt;font style="background-color:rgb(255,255,0)"&gt;CPU time = 547 ms,  elapsed time = 195 ms.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Por tanto podemos extraer las siguientes conclusiones:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;* Los índices columnares son más eficientes cuanta más lectura física se ve obligado el servidor a ejecutar para resolver la consulta. El algoritmo de compresión del columnar es bastante más eficiente que el algoritmo de compresión de página.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;* Con la tendencia a mayor cantidad de memoria en los servidores no es inusual ver servidores con 512 GB o más de memoria. Esto hace que el porcentaje de acierto de página sea muy elevado. En este escenario, un índice de cobertura puede ser más eficiente que un columnar para algunas consultas que utilizan agregados&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;* En base a los resultados obtenidos consideramos que una estrategia mixta podría dar los mejores resultados que una que se incline solo hacia una alternativa. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Esta e&lt;/font&gt;&lt;font size="3"&gt;strategia mixta consistiría en el uso de una tabla particionada + indices columnares (para datos históricos, de solo lectura) junto a una tabla no particionada con índices no columnares (para datos no históricos, de lectura/escritura). Ambas tablas podrían unificarse en una única vista para facilitar las consultas que accedan tanto a datos históricos como a datos no históricos. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;La parte histórica contaría con un conjunto reducido de índices no columnares (índice cluster, PK e índices no clustered imprescindibles) más un índice columnar que incluya todas las columnas que se utilicen en consultas históricas. La parte no histórica contaría con el conjunto de índices necesarios para la operativa no histórica (índice cluster, PK, índices sobre FKs y todos índices no clustered necesarios).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassED7046D0E73B408F8F089EBDCBF555D7"&gt;&lt;p&gt;&lt;font size="3"&gt;Los índices columnares son un nuevo tipo de índices disponibles en SQL Server 2012 que incorporan el almacenamiento columnar al motor relacional. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Dejando de lado los múltiples inconvenientes y limitaciones de estos índices, voy a centrarme en analizar el impacto de rendimiento teniendo en cuenta los puntos clave que se destacan de este tipo de índices:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- Solo las columnas necesarias para la consulta son accedidas.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- Las columnas están comprimidas lo cual reduce la cantidad de lecturas&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- El...&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Diseño relacional" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Dise%c3%b1o+relacional" nameEnconded="Dise%c3%b1o+relacional" />
      <category name="Paralelismo" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Paralelismo" nameEnconded="Paralelismo" />
      <category name="Planes de Ejecucion" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Planes+de+Ejecucion" nameEnconded="Planes+de+Ejecucion" />
      <category name="SQL Server 2012" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SQL+Server+2012" nameEnconded="SQL+Server+2012" />
      <category name="Tuning" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Tuning" nameEnconded="Tuning" />
      <category name="indices SQL Server" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=indices+SQL+Server" nameEnconded="indices+SQL+Server" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Pröva partitionering i SQL</title>
      <ItemID>20</ItemID>
      <link>http://blogs.solidq.com/SQL-Server-pa-svenska/Post.aspx?ID=20&amp;title=Pr%c3%b6va+partitionering+i+SQL</link>
      <pubDate>2013-04-24T18:48:07+02:00</pubDate>
      <author>Joel Sjöö</author>
      <authorEncoded>Joel+Sj%c3%b6%c3%b6</authorEncoded>
      <authorID>153</authorID>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <comments>http://blogs.solidq.com/SQL-Server-pa-svenska/Post.aspx?ID=20&amp;title=Pr%c3%b6va+partitionering+i+SQL#1</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass9CDA0A89F9954062A527C806060700E1"&gt;&lt;p&gt;Hade en kund som ville använda en enkel partitionering utav en av sina stora tabeller som nästan enbart innehåller historiskt data. Oftast är det endast den senaste månadens data som är aktuellt men man behöver ibland kunna komma åt det som är äldre. Jag beslöt att testa att göra det så enkelt som möjligt. Vi delade upp tabellen i nytt data och historik data. För respektive data så skapade vi en filegroup med en fil per grupp. Varje månad flytta vi sen datat från nytt till historisk. Nedan är ett exempel.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Vi börja med att lägga till ett par filgrupper.&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ALTER DATABASE Test&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ADD FILEGROUP FG_New;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;GO&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ALTER DATABASE Test&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ADD FILEGROUP FG_Historical;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;GO&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ALTER DATABASE Test&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ADD FILE&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;(&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;NAME = FG_New_Data1,&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\FG_New_Data1.ndf',&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;SIZE = 5MB,&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;FILEGROWTH = 5MB&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;)&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;TO FILEGROUP FG_New;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;GO&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ALTER DATABASE Test&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ADD FILE&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;(&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;NAME = FG_Historical_Data1,&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\FG_Historical_Data1.ndf',&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;SIZE = 5MB,&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;FILEGROWTH = 5MB&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;)&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;TO FILEGROUP FG_Historical;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;GO&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Skapa en partition funktion, i detta fall en range för datum. Nyare än 2013-01-01 hamnar i filgrupen FG_New, äldre hamnar i filgruppen FG_Historical. &lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;CREATE PARTITION FUNCTION TestRange(DATETIME)&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;AS&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;RANGE right FOR VALUES ('2013-01-01')&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Skapa ett partition schema som knyter mot funktionen och pekar ut vilka filgrupper som skall användas&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;CREATE PARTITION SCHEME TestRangeScheme&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;AS&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;PARTITION TestRange&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;TO ([FG_Historical], [FG_New])&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Skapa sedan en tabell enligt nedan för att passa detta test. Obsavera att vi skapar den på Partition Schemat TestRangeScheme samt ange datum kolumnen som värde.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;CREATE TABLE [dbo].[testa](&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;[id] [int] IDENTITY(1,1),&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;[datum] [datetime] NOT NULL,&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;[namn] [nvarchar](50) NULL&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;) ON TestRangeScheme(datum)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Vi laddar in lite testdata för att kunna se hur datat delar upp sig. Kör en enkel kodsnurra som laddar in 100000 rader.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;declare @i int&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;set @i = 0&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;begin transaction&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;while (@i &amp;lt; 100000)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;begin&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;insert into [Testa]&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;values (cast('20120101' as datetime) + rand() * 420, 'AAAAAAAAAAAAAA')&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;set @i = @i + 1&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;end&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;Commit&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I vårt fall så fördelade sig raderna så här:    &lt;table cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="bottom" width="199"&gt;           &lt;p&gt;Partition1 FG_Historical&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;87216 rows in 598 pages&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="199"&gt;           &lt;p&gt;Partition2, FG_New&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="208"&gt;           &lt;p&gt;12784 rows in 88 pages&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;För att vara säker på att datat verkligen hamnade på önskad filgrupp också så kika vi med DBCC CHECKFILEGROUP (2, NOINDEX) på respektive filgrupp för att se att det stämmer. Resultatet hade vi ovan och allt verka stämma som det är tänkt.&lt;/p&gt;  &lt;p&gt;Nu till att flytta datat när det blir ny månad.&lt;/p&gt;  &lt;p&gt;Först merga vi den range vi hade satt upp innan.&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ALTER PARTITION FUNCTION TestRange () MERGE RANGE ('20130101');&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;GO&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Vi gör en next used för vilken filegroup som skall användas.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;ALTER PARTITION SCHEME TestRangeScheme NEXT USED FG_New;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;GO&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Sedan splittar vi våran range på den nya månaden.&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;ALTER PARTITION FUNCTION TestRange() SPLIT RANGE ('20130201');&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;GO&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;För att kontrollera att det ser rätt ut så använder jag åter DBCC CHECKFILEGROUP (2, NOINDEX) för att titta på respektive filgroupp.    &lt;table cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="209"&gt;           &lt;p&gt;Partition1, FG_Historical&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;94514 rows in 682 pages&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="209"&gt;           &lt;p&gt;Partition2, FG_New&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;5486 rows in 37 pages&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Vad har vi då för nytta av att partitionera upp en tabell?&lt;/h3&gt;  &lt;p&gt;Under mina tester där jag jämförde med och utan partitionering på en tabell på ca 150 miljoner rader och en storlek på ca 150GB så gjorde det stor skillnad på hur mycket data som lästes. I mitt exempel så partitionerade jag tabellen liknande så som jag gjort ovan i exemplet. Senaste månadens data i en partition och resten i en annan filgrupp. Jag körde sedan en fråga som gjorde många Joins mot denna tabell. Enligt &lt;em&gt;&lt;font size="2"&gt;set statistics IO&lt;/font&gt;&lt;/em&gt;, så såg skillnaden i reads ut så här mellan tabellerna:&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;Table 'FactPortfolio'. Scan count 5, logical reads 15219075&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;Table 'PartFactPortfolio'. Scan count 5, logical reads 744625&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Skillnaderna i TABLE SCAN på exekution planen är följande:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="464" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;a href="/SQL-Server-pa-svenska/Lists/Posts/Attachments/20/utanpartition_2_03AA9BD0.jpg"&gt;&lt;img title="utanpartition" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" border="0" alt="utanpartition" src="/SQL-Server-pa-svenska/Lists/Posts/Attachments/20/utanpartition_thumb_03AA9BD0.jpg" width="231" height="413" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="262"&gt;&lt;a href="/SQL-Server-pa-svenska/Lists/Posts/Attachments/20/medpartition_2_03AA9BD0.jpg"&gt;&lt;img title="medpartition" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px" border="0" alt="medpartition" src="/SQL-Server-pa-svenska/Lists/Posts/Attachments/20/medpartition_thumb_03AA9BD0.jpg" width="242" height="414" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Ovan ser vi skillnader i Estimated I/O Cost tex. Vi ser också att frågan verkligen dra nytta av partitioneringen. Seek Predicates har pekat ut den partitionen där datat ligger som vi angett i where klausulen.&lt;/p&gt;  &lt;p&gt;Vad få vi för skillnader i frågorna i tid mot tabellen då? Utan partition tog vår testfråga 6,05 min medans den partitionerade tog 1,12 min. Rätt stor skillnad skulle jag vilja påstå.&lt;/p&gt;  &lt;p&gt;I mitt test så var frågan optimerad för partitioneringen, jag hade where klausulen satt på den partitionerade kolumnen. Det finns så klart tillfällen när det inte passa. Detta märkte jag också under mina tester. I vissa fall blev det faktiskt fler reads och längre tider. Så kontentan av det hela är att funktionen är bra och passa bra för mycket stora tabeller där man inte har behov att söka igenom allt data. Men testa innan man produktions sätter så man vet att det verkligen gör nytta.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;/Joel&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass9CDA0A89F9954062A527C806060700E1"&gt;&lt;p&gt;Hade en kund som ville använda en enkel partitionering utav en av sina stora tabeller som nästan enbart innehåller historiskt data. Oftast är det endast den senaste månadens data som är aktuellt men man behöver ibland kunna komma åt det som är äldre. Jag beslöt att testa att göra det så enkelt som möjligt. Vi delade upp tabellen i nytt data och historik data. För respektive data så skapade vi en filegroup med en fil per grupp. Varje månad flytta vi sen datat från nytt till historisk. Nedan är ett...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Prestanda" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Prestanda" nameEnconded="Prestanda" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Swedish" nameEncoded="Swedish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>PASS SQL Saturday #196 Denmark</title>
      <ItemID>19</ItemID>
      <link>http://blogs.solidq.com/SolidQ/Post.aspx?ID=19&amp;title=PASS+SQL+Saturday+%23196+Denmark</link>
      <pubDate>2013-04-18T13:38:00+02:00</pubDate>
      <author>SolidQ</author>
      <authorEncoded>SolidQ</authorEncoded>
      <authorID>150</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass876A76E750C14685BE483B740B9E6492"&gt;&lt;p class="ms-rteFontSize-2"&gt;Hello everyone! I know it is probably a bit late to let you know about this event, but is it really too late?&lt;/p&gt;
&lt;span class="ms-rteFontSize-2"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-2"&gt;There are 3 pre-cons available. World-renowned speakers and MVPs: Jen Stirrup, Mark Rasmussen and Denny Cherry. If you may wish to attend these pre-con sessions, register &lt;a target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;span class="ms-rteFontSize-2"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-2"&gt;&lt;a href="http://www.sqlsaturday.com/196/eventhome.aspx"&gt;PASS SQL Saturday Denmark&lt;/a&gt;, the main (free) event is going to be taking place on April 20 at Microsoft Denmark, Tuborg Boulevard 12, 2900 Hellerup. Gianluca Hotz, Régis Baccaro and Peter Larsson, colleagues from SolidQ are speakers of the #SQLsatDenmark. Let me introduce their sessions:&lt;/p&gt;
  &lt;p class="ms-rteFontSize-3"&gt;&lt;font size="2"&gt;&lt;font color="#4f81bd" class="ms-rteFontSize-3"&gt;&lt;span class="ms-rteFontSize-3"&gt;Gianluca Hotz&lt;/span&gt;&lt;/font&gt;&lt;span class="ms-rteFontSize-3"&gt; | &lt;/span&gt;&lt;em class="ms-rteFontSize-3"&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=196&amp;amp;sessionid=12120" target="_blank"&gt;SQL Server 2012 AlwaysOn&lt;/a&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;p class="ms-rteFontSize-2"&gt;&lt;font size="1"&gt;&lt;font color="#a5a5a5" class="ms-rteFontSize-2"&gt;&lt;span class="ms-rteFontSize-2"&gt;Description:&lt;/span&gt;&lt;/font&gt;&lt;span class="ms-rteFontSize-2"&gt; Business continuity is becoming more and more a central topic for many companies. AlwaysOn is the new solution for high availability and disaster recovery introduced with SQL Server 2012. With the help of live demos, in this session we will cover in details this new technology that extends on the familiar concepts of database mirroring and failover clustering. We will also introduce some other engine enhancements that will help raising the overall service availability.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;p class="ms-rteFontSize-3"&gt;&lt;font size="2"&gt;&lt;font color="#4f81bd" class="ms-rteFontSize-3"&gt;&lt;span class="ms-rteFontSize-3"&gt;Régis Baccaro | &lt;/span&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=196&amp;amp;sessionid=14921" target="_blank" class="ms-rteFontSize-3"&gt;&lt;em&gt;Database development with SSDT&lt;/em&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;p class="ms-rteFontSize-2"&gt;&lt;font size="1"&gt;&lt;font color="#a5a5a5" class="ms-rteFontSize-2"&gt;&lt;span class="ms-rteFontSize-2"&gt;Description:&lt;/span&gt;&lt;/font&gt;&lt;span class="ms-rteFontSize-2"&gt; SQL Server Data Tools (SSDT) is a toolset that allows professional database and application developers to carry out all their database design work for SQL Server and SQL Azure within Visual Studio. SSDT provides a rich SQL Server development experience with first class language services and VS integration, as well as declarative, model-based tools that can be utilized for both online and offline development. In this session we'll dive into Online and Offline development as well as the Productivity and tools that the SSDT team keeps providing to us.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;span class="ms-rteFontSize-2"&gt;
&lt;/span&gt;&lt;span class="ms-rteFontSize-3"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-3"&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;span class="ms-rteFontSize-3"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-3"&gt;&lt;font size="2"&gt;&lt;font color="#4f81bd" class="ms-rteFontSize-3"&gt;&lt;span class="ms-rteFontSize-3"&gt;Peter Larsson &lt;/span&gt;&lt;/font&gt;&lt;span class="ms-rteFontSize-3"&gt; |&lt;/span&gt;&lt;em class="ms-rteFontSize-3"&gt; &lt;/em&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=196&amp;amp;sessionid=12304" target="_blank" class="ms-rteFontSize-3"&gt;&lt;em&gt;Remodel your old EAV design&lt;/em&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;span class="ms-rteFontSize-2"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-2"&gt;&lt;font size="1"&gt;&lt;font color="#a5a5a5" class="ms-rteFontSize-2"&gt;&lt;span class="ms-rteFontSize-2"&gt;Description: &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span&gt;Sometimes you really need an EAV model. In most cases they are ugly and slow. After this session you will have gained new insights how to turn your old, slow, EAV model into a slim superfast model. There will be real life examples from a recent project. With the techniques displayed in the presentation, I cut the execution time down from 134 days down to 0.5 seconds and cut the storage need from 550GB to 45GB. &lt;/span&gt;&lt;/p&gt;

  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt; &lt;a href="http://www.sqlsaturday.com/register.aspx"&gt;&lt;img width="115" height="39" border="0" title="button (2)" alt="button (2)" src="/SolidQ/Lists/Posts/Attachments/19/button-2_3_7323E7C6.png" style="margin-right:auto;margin-left:auto;float:none;display:block;background-image:none" /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt; &lt;/p&gt;
  &lt;p&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass876A76E750C14685BE483B740B9E6492"&gt;&lt;p class="ms-rteFontSize-2"&gt;Hello everyone! I know it is probably a bit late to let you know about this event, but is it really too late?&lt;/p&gt;
&lt;span class="ms-rteFontSize-2"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-2"&gt;There are 3 pre-cons available. World-renowned speakers and MVPs: Jen Stirrup, Mark Rasmussen and Denny Cherry. If you may wish to attend these pre-con sessions, register &lt;a target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;span class="ms-rteFontSize-2"&gt;
  &lt;/span&gt;&lt;p class="ms-rteFontSize-2"&gt;&lt;a href="http://www.sqlsaturday.com/196/eventhome.aspx"&gt;PASS SQL Saturday Denmark&lt;/a&gt;, the main (free) event is going to be taking place on April 20 at Microsoft Denmark, Tuborg Boulevard 12, 2900 Hellerup. Gianluca Hotz, Régis Baccaro and Peter Larsson, colleagues from...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Events" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Events" nameEnconded="Events" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>SQL Server 2000 är borta för gott?</title>
      <ItemID>19</ItemID>
      <link>http://blogs.solidq.com/SQL-Server-pa-svenska/Post.aspx?ID=19&amp;title=SQL+Server+2000+%c3%a4r+borta+f%c3%b6r+gott%3f</link>
      <pubDate>2013-04-18T12:14:53+02:00</pubDate>
      <author>Mikael Wedham</author>
      <authorEncoded>Mikael+Wedham</authorEncoded>
      <authorID>155</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass833920209FB649FCA22144273A9EE07E"&gt;&lt;p&gt;Enligt Microsoft Support är supporten för SQL Server 2000 fullständigt borta sedan den 9 april i år (2013).&lt;/p&gt;  &lt;p&gt;Som ni kan se i tabellen finns inget datum längre fram än 2013-04-09, vilket innebär att det är officiellt slut. Det kommer alltså troligen inga fler uppdateringar, inga säkerhetsfixar och inga patchar längre – även om det skulle behövas.&lt;/p&gt;  &lt;p&gt;Men den viktigaste aspekten är fortfarande att sedan 2008-04-08 har det inte funnits allmän support, och med det följer att det inte funnits något egentligt incitament för att hålla kunskapen om SQL 2000 cachad i sin hjärna. Det finns mycket få experter som behärskar SQL Server 2000, och ännu färre som vill hugga in och ta ansvar för en dylik server…&lt;/p&gt;  &lt;p&gt;Byt ut den så fort som möjligt!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/lifecycle/search/default.aspx?sort=PN&amp;amp;qid=&amp;amp;alpha=SQL+Server+2000&amp;amp;Filter=FilterNO" target="_blank"&gt;Visa Microsoft Lifecycle search...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass833920209FB649FCA22144273A9EE07E"&gt;&lt;p&gt;Enligt Microsoft Support är supporten för SQL Server 2000 fullständigt borta sedan den 9 april i år (2013).&lt;/p&gt;  &lt;p&gt;Som ni kan se i tabellen finns inget datum längre fram än 2013-04-09, vilket innebär att det är officiellt slut. Det kommer alltså troligen inga fler uppdateringar, inga säkerhetsfixar och inga patchar längre – även om det skulle behövas.&lt;/p&gt;  &lt;p&gt;Men den viktigaste aspekten är fortfarande att sedan 2008-04-08 har det inte funnits allmän support, och med det följer att det inte funnits något egentligt...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Swedish" nameEncoded="Swedish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Behöver du Performance Tuning eller Query Tuning?</title>
      <ItemID>17</ItemID>
      <link>http://blogs.solidq.com/SQL-Server-pa-svenska/Post.aspx?ID=17&amp;title=Beh%c3%b6ver+du+Performance+Tuning+eller+Query+Tuning%3f</link>
      <pubDate>2013-04-18T11:05:57+02:00</pubDate>
      <author>Peter Larsson</author>
      <authorEncoded>Peter+Larsson</authorEncoded>
      <authorID>125</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassA29742BBE4E74728ABF16D2DAEE6193C"&gt;&lt;p&gt;Det är den stora frågan. Dessutom en aktuell sådan. Idag hade jag inte tänkt beskriva någon smart kod utan istället berätta om skillnader i sätt att angripa prestandaproblem. &lt;/p&gt;  &lt;p&gt;Det senaste året har jag på konferenser, seminarier och utbildningstillfällen ofta blivit hejad på och hamnat i en diskussion om vad som behövs göras i ett system för att snabba upp applikationen som använder SQL Server som lagringsplattform. Mitt första svar blir oftast “Det beror på om du är DBA eller utvecklare.”.    &lt;br /&gt;Nästan undantagslöst ser jag då ett frågetecken hos frågeställaren som nu undrar om jag är riktigt klok i huvudet. För han eller hon vill ju bara ha ett svar på hur deras applikation ska gå snabbare!&lt;/p&gt;  &lt;p&gt;Jag ställer ofta en uppföljningsfråga i stil med “Vad är det du upplever som ett bekymmer?”. Och efter ett litet tag med halmstrån som långa väntetider, deadlocks och IO-problem brukar det utkristallisera sig vad egentligen är som upplevs som ett problem. De flesta professionella DBA-er och utvecklare vet om att det som brukarna upplever som ett bekymmer oftast bara är symptomet på det verkligen problemet medan de med mindre erfarenhet koncentrerar sig på fel saker. De sätter helt enkelt bara ett plåster på tummen när det egentligen hade behövts gips på armen. Eller i värsta fall en full hjärt-, lever-, lung- och njur-transplantation. Där slutar mina liknelser för i den verkliga världen går det ännu inte att transplantera en hjärna men i vår digitala värld går det att åstadkomma.&lt;/p&gt;  &lt;p&gt;För enkelhetens skull påstår jag att DBA-er vill ha &lt;em&gt;Performance Tuning&lt;/em&gt; och utvecklare vill ha &lt;em&gt;Query Tuning&lt;/em&gt;. När man arbetar med SQL Server behöver man ta hänsyn både till hårdvara och mjukvara och som överallt annars är det svårt att se allt i svart eller vitt. Det finns nästan alltid en gråzon någonstans där mittemellan. Det finns en stark koppling mellan &lt;em&gt;Performance Tuning&lt;/em&gt; och hårdvara samt mellan &lt;em&gt;Query Tuning&lt;/em&gt; och mjukvara.&lt;/p&gt;  &lt;p&gt;Jag ska fortsätta med en annan liknelse för att göra det enklare att förklara den egentliga skillnadan mellan de både metoderna att angripa ett prestandaproblem. För det är just prestandan som i nästan alla fall är den gemensamma nämnaren på de problem som brukarna rapporterar.&lt;/p&gt;  &lt;p&gt;Vi börjar med &lt;em&gt;Performance Tuning&lt;/em&gt; eller hårdvaran. Låt oss säga att vi ärver en gammal Bubbla från Volkswagen. Det finns folk som verkligen vet hur man ska pimpa den till att bli så kraftfull som möjligt inom ramen för en budget. Dessa personer är DBA-er. De är ansvariga för att hålla kolla på så att det finns olja i motorn, kylvätska och spolarvätska. De kollar lufttryck i däcken och inställningarna för tändstiften. De servar och reparerar bubblan för att den ska vara i så bra trim som möjligt.&lt;/p&gt;  &lt;p&gt;De kan byta ut motorn till en starkare motor om de tycker det behövs eller sätta på vinterdäcken när det är påkallat. De kollar mätarställningen och tvättar bilen. Vad jag vill illustrera är att DBA-er har en stor uppgift att underhålla och se till så att bubblan uppför sig som man kan förvänta sig. DBA-er är experter på detta.&lt;/p&gt;  &lt;p&gt;Då uppkommer den logiska frågan, vad gör då en utvecklare eller &lt;em&gt;Query Tuning&lt;/em&gt;? Jo, dessa är experter på mjukvaran. Det är utvecklarna som vet hur man ska få bubblan att köra så fort som möjligt inom ramen för den hårdvara som existerar. Det är de som väljer körväg och hur mycket som behövs lutas i kurvorna. Pressar de mjukvaran för mycket så kommer hårdvaran inte att hinna med. Det är detta som händer är oerfarna utvecklare skriver dålig kod som i sin tur genererar alldeles för mycket IO eller använder för många processorer eller cores än nödvändigt. Även om det är DBA-erna som bestämt hur stor tanken ska vara, är det utvecklarna som kan se till så att bilen bara drar 0,1 liter per mil istället för 13 liter per mil. Det är utvecklarnas kod som avgör om bilen kommer att gå i 700 km/h eller i 15 km/h.     &lt;br /&gt;Jag har arbetat med databaser i över 20 år. &lt;em&gt;En enda gång har lösningen på ett prestandaproblem varit att köpa mer hårdvara, eller uppgradera den befintliga hårdvaran. All gånger, utom den gången, har lösningen varit att skriva bättre kod eller skapa bättre design i applikationen. &lt;/em&gt;Det är också så att det är den lösningen som ger mest valuta för pengarna. Dubblar du antalet processorer, mängden minne och dubblar IO på ditt SAN, kan du förvänta dig att applikationen går dubbelt så snabbt, till en hög kostnad. Men spendera någon eller några timmar med kod och design, och du får en prestandaökning som kan räknas i 100 elller 10 000 000 gånger bättre prestanda.&lt;/p&gt;  &lt;p&gt;Och någonstans här mittemellan ska dessa två yrkesgrupper komma överens. Utvecklarna kommer med önskemål om att “Servern är lite långsam, kan ni sätta i mer minne?” på vilken DBA-n antingen svarat “Javisst kan jag göra det” eller “Nej, det behövs inte. Du har lika mycket minne som Facebook och Google tillsammans. Använd det du har på ett bättre sätt.”.&lt;/p&gt;  &lt;p&gt;Det är inte helt enkelt att få dessa två yrkesgrupper att samarbeta då de har olika fokus. Men en sak har de trots allt gemensamt och det är att göra brukarna nöjda inom ramen för det ledningen tillhandahåller. Och det är därför jag fortsätter med att undervisa, presentera och prata om prestandaförbättringar för att underlätta för brukaren, för det är ändå de som ser till så att vi alla har ett jobb att sköta.&lt;/p&gt;  &lt;p&gt;Ha det kul tills nästa gång vi ses!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;//Peter&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassA29742BBE4E74728ABF16D2DAEE6193C"&gt;&lt;p&gt;Det är den stora frågan. Dessutom en aktuell sådan. Idag hade jag inte tänkt beskriva någon smart kod utan istället berätta om skillnader i sätt att angripa prestandaproblem. &lt;/p&gt;  &lt;p&gt;Det senaste året har jag på konferenser, seminarier och utbildningstillfällen ofta blivit hejad på och hamnat i en diskussion om vad som behövs göras i ett system för att snabba upp applikationen som använder SQL Server som lagringsplattform. Mitt första svar blir oftast “Det beror på om du är DBA eller utvecklare.”.    &lt;br /&gt;Nästan...&lt;/br&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Swedish" nameEncoded="Swedish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Diapositivas de Sesión de SQL Saturday Costa Rica</title>
      <ItemID>56</ItemID>
      <link>http://blogs.solidq.com/jloria/Post.aspx?ID=56&amp;title=Diapositivas+de+Sesi%c3%b3n+de+SQL+Saturday+Costa+Rica</link>
      <pubDate>2013-04-15T22:07:34+02:00</pubDate>
      <author>Javier Loria</author>
      <authorEncoded>Javier+Loria</authorEncoded>
      <authorID>43</authorID>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
      <comments>http://blogs.solidq.com/jloria/Post.aspx?ID=56&amp;title=Diapositivas+de+Sesi%c3%b3n+de+SQL+Saturday+Costa+Rica#1</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassEE4CCE7ECCE9456DB3C6CF07282B7D17"&gt;&lt;p&gt;Atendiendo la solicitud de un participante posteo las filminas de la sesión sobre TempDB ofrecida el pasado sábado 13 de abril en Costa Rica.  EL nombre &lt;a href="/jloria/Documents/EsTempBD.pdf"&gt;Es TEMPDB, por qué es tan importante?&lt;/a&gt;, todavía no termina de convencerme ya que me gustaría que fuera más atractivo.&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassEE4CCE7ECCE9456DB3C6CF07282B7D17"&gt;&lt;p&gt;Atendiendo la solicitud de un participante posteo las filminas de la sesión sobre TempDB ofrecida el pasado sábado 13 de abril en Costa Rica.  EL nombre &lt;a href="/jloria/Documents/EsTempBD.pdf"&gt;Es TEMPDB, por qué es tan importante?&lt;/a&gt;, todavía no termina de convencerme ya que me gustaría que fuera más atractivo.&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Inteligencia de Negocios" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Inteligencia+de+Negocios" nameEnconded="Inteligencia+de+Negocios" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Curso MS Business intelligence-SSAS: Personalizando el Modelo–Dimensiones (37)</title>
      <ItemID>175</ItemID>
      <link>http://blogs.solidq.com/BICorner/Post.aspx?ID=175&amp;title=Curso+MS+Business+intelligence-SSAS%3a+Personalizando+el+Modelo%e2%80%93Dimensiones+(37)</link>
      <pubDate>2013-04-11T15:28:29+02:00</pubDate>
      <author>Salvador Ramos</author>
      <authorEncoded>Salvador+Ramos</authorEncoded>
      <authorID>33</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass7BE1884E5ADE45489E9DB26BF008952B"&gt;&lt;h4&gt;&lt;a name="_Toc291606227"&gt;Personalizando el modelo de Analysis Services&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;Una vez introducidos los coneptos y elementos fundamentales, vamos a continuar profundizando en la creación de cubos y dimensiones, y sobre todo en la personalización de éstos y adaptación a las necesidades del negocio.&lt;/p&gt;  &lt;h5&gt;&lt;a name="_Toc291606228"&gt;Dimensiones&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;Una vez vistos los datos a medir, pasemos a analizar las diferentes perspectivas desde las que los vamos a analizar. Vamos a conocer más a fondo esas dimensiones y sus características. &lt;/p&gt;  &lt;p&gt;Las &lt;b&gt;Dimensiones&lt;/b&gt; se basan en tablas o vistas del &lt;i&gt;Data Source View&lt;/i&gt;. Se definen a nivel de base de datos, de forma independiente a los cubos. Y posteriormente, pueden instanciarse ninguna, una o varias veces en cada cubo. Por tanto pasaremos a explicar los conceptos de &lt;b&gt;dimensiones de bases de datos&lt;/b&gt; y &lt;b&gt;dimensiones de cubos&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Una &lt;b&gt;dimensión de base de datos&lt;/b&gt; existe con independencia de que esté asociada o no a un cubo. Se basan en columnas de una o más tablas de dimensiones de nuestro &lt;i&gt;Data Source View&lt;/i&gt;, que puede estar modelado en estrella (&lt;i&gt;start&lt;/i&gt;) o en copo de nieve (&lt;i&gt;snowflake&lt;/i&gt;). &lt;/p&gt;  &lt;p&gt;Una &lt;b&gt;dimensión de cubo&lt;/b&gt; es una instancia de una dimensión de base de datos en un cubo en particular, pudiendo tener varias instancias de ella, incluso en el mismo cubo. Por ejemplo, podemos tener una dimensión Tiempo a nivel de base de datos, y luego, en el cubo de Ventas, tener tres instancias: Fecha de pedido, Fecha de envío y Fecha de cobro. Esta múltiple instanciación es lo que se conoce como dimensión jugadora de roles (&lt;i&gt;role-playing dimension&lt;/i&gt;). Cada instancia de una dimensión de base de datos puede tener propiedades distintas, por ejemplo, el nombre casi siempre lo cambiamos, tal y como hemos visto en el ejemplo anterior de la dimensión Tiempo, que juega los roles de Fecha de pedido, Fecha de envío y Fecha de cobro. Hay otras propiedades que también se pueden cambiar a nivel de dimensión de cubo, como su visibilidad (propiedad &lt;i&gt;visible&lt;/i&gt;).&lt;/p&gt;  &lt;p&gt;&lt;a href="/BICorner/Lists/Posts/Attachments/175/SSAS_Dimensiones_066A6C0E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px" title="SSAS_Dimensiones" border="0" alt="SSAS_Dimensiones" src="/BICorner/Lists/Posts/Attachments/175/SSAS_Dimensiones_thumb_066A6C0E.png" width="618" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Figura 1: Dimensiones de Cubo y Dimensiones de Base de Datos&lt;/em&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Algunas de las propiedades más significativas de las dimensiones son:&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;AttributeAllMemberName&lt;/b&gt;. Podemos tener de manera opcional un nivel &lt;i&gt;All&lt;/i&gt;, que está en la parte superior de la jerarquía y agrega todos los miembros del nivel inmediatamente inferior. Este es un miembro generado por el sistema, y su posible existencia dependerá de los valores que configuremos en la propiedad &lt;b&gt;IsAggregatable&lt;/b&gt;, si se establece a &lt;i&gt;True&lt;/i&gt; existirá un nivel &lt;i&gt;All&lt;/i&gt;. Ese nivel podrá tener el nombre que indiquemos en la propiedad &lt;b&gt;AttributeAllMemberName&lt;/b&gt;. Valores: el nombre que queramos que aparezca para ese nivel al navegar por la dimensión.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;WriteEnabled&lt;/b&gt;. Permite habilitar la dimensión para escritura. Valores: &lt;i&gt;True, False&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;Type&lt;/b&gt;. Proporciona información a los servidores y a las aplicaciones cliente sobre el contenido de una dimensión. Se utiliza para &lt;i&gt;agregar inteligencia de dimensiones&lt;/i&gt; a las aplicaciones. Valores: &lt;i&gt;Regular, Time, Geography, Organization, BillOfMaterials, Accounts, Customers, Products, Scenario, Quantitative, Currency, Rates, Channel, Promotion&lt;/i&gt;. Estos valores se aplican a dimensiones y/o cubos.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;StorageMode&lt;/b&gt;. Indica el modo de almacenamiento de la dimensión. Valores: &lt;i&gt;ROLAP, MOLAP&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;ErrorConfiguration&lt;/b&gt;. Indica la acción que realizará el servidor al encontrar diversos errores.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;UnknownMember&lt;/b&gt;. Permite especificar el tratamiento que recibirán los miembros desconocidos. Valores: &lt;i&gt;Visible, Hidden, None&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;UnknownMemberName&lt;/b&gt;. Permite cambiar el valor predeterminado del miembro desconocido al que queramos. Por defecto el valor es &lt;i&gt;Unknown&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;· &lt;b&gt;ProactiveCaching&lt;/b&gt;. Para la configuración del caché automático del cubo.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Si te interesa esta información, y deseas convertirte en un profesional altamente especializado en Microsoft Business Intelligence, te recomiendo que nos pidas información sobre nuestro &lt;a href="http://www.solidq.com/squ/courses/Pages/Master-BI-Certified-Business-Intelligence-Microsoft-Espanol.aspx"&gt;&lt;strong&gt;Master en BI&lt;/strong&gt;&lt;/a&gt;. &lt;em&gt;Recuerda que hay poquitas plazas disponibles!!!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Post publicados anteriormente como parte de este curso:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=171&amp;amp;title=curso+ms+business+intelligence-ssas%3a+agregaciones+%2836%29" target="_blank"&gt;SSAS, Agregaciones (36)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=169&amp;amp;title=curso+ms+business+intelligence-ssas%3a+procesamiento+y+modos+de+almacenamiento+%2835%29"&gt;SSAS, Procesamiento y modos de almacenamiento (35)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=167&amp;amp;title=curso+ms+business+intelligence-ssas%3a+construyendo+y+desplegando+el+modelo+%2834%29"&gt;SSAS, Construyendo y desplegando el modelo (34)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=164&amp;amp;title=curso+ms+business+intelligence%e2%80%93ssas%3a+objetos+de+una+bbdd+de+analysis+services+%28parte+iv%e2%80%93dimensiones%29+%2833%29"&gt;SSAS, Objetos de una BBDD de Analysis Services parte IV – Dimensiones) (33)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=163&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+objetos+de+una+bbdd+de+analysis+services+%28parte+iii%e2%80%93cubos%29+%2832%29"&gt;SSAS, Objetos de una BBDD de Analysis Services (parte III – Cubos) (32)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=162&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+objetos+de+una+bbdd+de+analysis+services+%28parte+ii+-+datasource+views%29+%2831%29"&gt;SSAS, Objetos de una BBDD de Analysis Services (parte II – DataSource Views) (31)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=156&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+objetos+de+una+bbdd+de+analysis+services+%28parte+i+-+datasources%29+%2830%29"&gt;SSAS, Objetos de una BBDD de Analysis Services (parte I – DataSources) (30)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=155&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+cubos+olap%2c+conceptos+b%c3%a1sicos+%28parte+iii%29+%2829%29"&gt;SSAS, Cubos OLAP, Conceptos básicos (parte III) (29)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=154&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+cubos+olap%2c+conceptos+b%c3%a1sicos+%28parte+ii%29+%2828%29"&gt;SSAS, Cubos OLAP, Conceptos básicos (parte II) (28)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=152&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+cubos+olap%2c+conceptos+b%c3%a1sicos+%28parte+i%29+%2827%29"&gt;SSAS, Cubos OLAP, Conceptos básicos (parte I) (27)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=151&amp;amp;title=curso+ms+business+intelligence+-+ssas%3a+qu%c3%a9+es+analysis+services+%2826%29"&gt;SSAS, Qué es Analysis Services (26)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=149&amp;amp;title=curso+ms+business+intelligence+-+fin+del+m%c3%b3dulo+de+ssis+y+recapitulaci%c3%b3n+%2825%29"&gt;Fin del módulo de SSIS y recapitulación (25)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=143&amp;amp;title=cursos+ms+business+intelligence+ssis%3a+programar+la+ejecuci%c3%b3n+de+paquetes+%2824%29"&gt;SSIS, Programar la ejecución de paquetes (24)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=142&amp;amp;title=curso+ms+business+intelligence+-+ssis%3a+ejecuci%c3%b3n+de+paquetes+en+el+servidor+%2823%29"&gt;SSIS, Ejecución de paquetes en el servidor (23)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=140&amp;amp;title=curso+ms+business+intelligence+ssis%3a+despliegue+de+paquetes+%2822%29"&gt;SSIS, Despliegue de paquetes (22)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=132&amp;amp;title=curso+ms+business+intelligence+ssis%3a+configuraci%c3%b3n%2c+despliegue+y+administracion+%28parte+iii%29+%2821%29"&gt;SSIS Configuración, Despliegue y Administración (parte III) (21)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=130&amp;amp;title=curso+ms+business+intelligence+-+ssis%3a+configuracion%2c+despliegue+y+administraci%c3%b3n+%28parte+ii%29+%2820%29"&gt;SSIS Configuración, Despliegue y Administración (parte II) (20)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=129&amp;amp;title=curso+ms+business+intelligence+ssis%3a+configuraci%c3%b3n%2c+despliegue+y+administracion+%28parte+i%29+%2819%29"&gt;SSIS Configuración, Despliegue y Administración (parte I) (19)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=128&amp;amp;title=curso+ms+business+intelligence+-+ssis+logging+%28parte+iii%29+%2818%29"&gt;SSIS Logging (parte III) (18)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=126&amp;amp;title=curso+ms+business+intelligence+-+ssis+logging+%28parte+ii%29+%2817%29"&gt;SSIS Logging (parte II) (17)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=123&amp;amp;title=curso+ms+business+intelligence+-+ssis+loging+%28parte+i%29+%2816%29"&gt;SSIS Logging (parte I) (16)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=122&amp;amp;title=curso+ms+business+intelligence+ssis+buenas+pr%c3%a1cticas+%28parte+iii%29+%2815%29"&gt;SSIS Buenas prácticas (parte III) (15)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=120&amp;amp;title=curso+ms+business+intelligence+-+ssis+buenas+pr%c3%a1cticas+%28parte+ii%29+%2814%29"&gt;SSIS Buenas prácticas (parte II) (14)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=119&amp;amp;title=curso+ms+business+intelligence+-+ssis+buenas+pr%c3%a1cticas+%28parte+i%29+%2813%29"&gt;SSIS Buenas prácticas (parte I) (13)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=112&amp;amp;title=curso+ms+business+intelligence+-+ssis+data+flow+%2812%29"&gt;SSIS Data Flow (12)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=106&amp;amp;title=Curso+MS+Business+Intelligence+-+SSIS+ControlFlow+%2811%29"&gt;SSIS Control Flow (11)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=105&amp;amp;title=Curso+MS+Business+Intelligence+-+Introduccion+a+SSIS+%2810%29"&gt;Introducción a SSIS (10)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=104&amp;amp;title=Curso+MS+Business+Intelligence+-+Modelado+Dimensional+%289%29"&gt;Modelado Dimensional (9)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=103&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Introduccion+completa+%288%29"&gt;Introducción Completa (8)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=84&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Herramientas+cliente+SQL+Server+%287%29"&gt;Herramientas Cliente SQL Server (7)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=83&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Componentes+de+la+plataforma+Microsoft+BI+%286%29"&gt;Componentes de la Plataforma Microsoft BI (6)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=82&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Visi%c3%b3n+y+estrategia+%285%29"&gt;Microsoft BI – Visión y Estrategia (5)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=81&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Componentes+de+una+soluci%c3%b3n+de+BI+%284%29"&gt;Componentes de una Solución de BI (4)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=80&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Conceptos+importantes+sobre+BI+%e2%80%93+parte+II+%283%29"&gt;Conceptos importantes sobre BI – parte II (3)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=79&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Conceptos+importantes+sobre+BI+%e2%80%93+parte+I+%282%29"&gt;Conceptos importantes sobre BI – parte I (2)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="/BICorner/Post.aspx?ID=78&amp;amp;title=Curso+MS+Business+Intelligence+%e2%80%93+Definici%c3%b3n+del+t%c3%a9rmino+BI+%281%29"&gt;Definición del término BI (1)&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass7BE1884E5ADE45489E9DB26BF008952B"&gt;&lt;h4&gt;&lt;a name="_Toc291606227"&gt;Personalizando el modelo de Analysis Services&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;Una vez introducidos los coneptos y elementos fundamentales, vamos a continuar profundizando en la creación de cubos y dimensiones, y sobre todo en la personalización de éstos y adaptación a las necesidades del negocio.&lt;/p&gt;  &lt;h5&gt;&lt;a name="_Toc291606228"&gt;Dimensiones&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;Una vez vistos los datos a medir, pasemos a analizar las diferentes perspectivas desde las que los vamos a analizar. Vamos a conocer más a fondo esas dimensiones y sus características. &lt;/p&gt;  &lt;p&gt;Las &lt;b&gt;Dimensiones&lt;/b&gt; se basan en tablas...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Agregaciones" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Agregaciones" nameEnconded="Agregaciones" />
      <category name="Analysis Services" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Analysis+Services" nameEnconded="Analysis+Services" />
      <category name="SSAS" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SSAS" nameEnconded="SSAS" />
      <category name="Cursos" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Cursos" nameEnconded="Cursos" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>CURSO Big Data, Data Science: Nuevos Tratamientos Avanzados de la información</title>
      <ItemID>16</ItemID>
      <link>http://blogs.solidq.com/SolidQ/Post.aspx?ID=16&amp;title=CURSO+Big+Data%2c+Data+Science%3a+Nuevos+Tratamientos+Avanzados+de+la+informaci%c3%b3n</link>
      <pubDate>2013-04-11T15:06:00+02:00</pubDate>
      <author>SolidQ</author>
      <authorEncoded>SolidQ</authorEncoded>
      <authorID>150</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass077EF201C84148A4B409E2444372C7F8"&gt;&lt;p&gt;Este curso, dirigido a profesionales del Análisis y Tratamiento de la Información, consultores, jefes de proyectos de BI y a responsables de sistemas de Información o Administradores de sistemas; se llevará a cabo los días &lt;span&gt;25 de Abril en Coruña y el 26 de Abri&lt;/span&gt;&lt;span&gt;l en Vig&lt;/span&gt;o.&lt;/p&gt;
&lt;p&gt;Nuestro compañero &lt;a target="_blank" href="http://www.solidq.com/ib-es/nosotros/Pages/description.aspx?name=Antonio+Soto"&gt;Antonio Soto&lt;/a&gt;, será el formador de este curso orientado a que el asistente comprenda la diferenciación de la aplicación de las técnicas Big Data, análisis de memoria o de la Minería de Datos “tradicional”. &lt;/p&gt;
&lt;h1&gt;Temario &lt;/h1&gt;
&lt;p&gt;Introducción: La revolución de los datos. &lt;br /&gt;o Big Data, Data Science y lo que nos pueden proporcionar. &lt;br /&gt;o Actores de mercado en Big Data. &lt;br /&gt;o Utilidades de Big Data.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Escenarios de Business Analytics. &lt;br /&gt;o Análisis de gran cantidad de datos no estructurados: Microsoft HDInsight. &lt;br /&gt;o Análisis de datos en memoria: Microsoft StreamInsight. &lt;br /&gt;o Análisis en profundidad: SQL Server. &lt;br /&gt;o Escenarios de Integración.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;• ¿Y cómo exploto toda esta información?: Microsoft Excel &lt;br /&gt;o PowerPivot. &lt;br /&gt;o Complementos Excel para Minería de Datos. &lt;br /&gt;o Acceso a Datos Hadoop. &lt;br /&gt;o Data Explorer.&lt;/p&gt;
&lt;p&gt;Para más información sobre este curso organizado por &lt;a target="_blank" href="http://www.vitaedigital.com/"&gt;Vitae Consultores&lt;/a&gt; puedes descargarte el &lt;a target="_blank" href="http://www.vitaedigital.com/docs/o_469_f_409.pdf"&gt;folleto en este enlace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.solidq.com/ib-es/nosotros/Documents/SolidQ-BigDataBrochure-Abril-2013.pdf" title="Big Data en SolidQ, ¿Para qué es importante Big Data?"&gt;&lt;img width="203" height="40" border="0" src="/SolidQ/PublishingImages/BigDataEnSolidQ.JPG" alt="Qué ofrecemos desde SolidQ" title="Qué ofrecemos en SolidQ" style="background-image:none;float:none;margin-left:auto;display:block;margin-right:auto" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass077EF201C84148A4B409E2444372C7F8"&gt;&lt;p&gt;Este curso, dirigido a profesionales del Análisis y Tratamiento de la Información, consultores, jefes de proyectos de BI y a responsables de sistemas de Información o Administradores de sistemas; se llevará a cabo los días &lt;span&gt;25 de Abril en Coruña y el 26 de Abri&lt;/span&gt;&lt;span&gt;l en Vig&lt;/span&gt;o.&lt;/p&gt;
&lt;p&gt;Nuestro compañero &lt;a target="_blank" href="http://www.solidq.com/ib-es/nosotros/Pages/description.aspx?name=Antonio+Soto"&gt;Antonio Soto&lt;/a&gt;, será el formador de este curso orientado a que el asistente comprenda la diferenciación de la aplicación de las técnicas Big Data, análisis de memoria o de la Minería de Datos “tradicional”. &lt;/p&gt;
&lt;h1&gt;Temario...&lt;/h1&gt;&lt;/div&gt;</shortDescription>
      <category name="Events" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Events" nameEnconded="Events" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>SQL Server &amp; Business Intelligence Conference 2013 - Milan</title>
      <ItemID>15</ItemID>
      <link>http://blogs.solidq.com/SolidQ/Post.aspx?ID=15&amp;title=SQL+Server+%26+Business+Intelligence+Conference+2013+-+Milan</link>
      <pubDate>2013-04-10T18:55:00+02:00</pubDate>
      <author>SolidQ</author>
      <authorEncoded>SolidQ</authorEncoded>
      <authorID>150</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass5C468F06B78340F5B770DC260FF6198C"&gt;&lt;p&gt;The most important technical conference in Italy, the “&lt;a href="http://www.sqlconference.it/events/2013/default.aspx" target="_blank"&gt;SQL Server &amp;amp; BI Conference 2013&lt;/a&gt;” will be held in Milan during May 28-29. During these days, SQL Developers, SQL DBAs, BI Professionals and Excel Power Users will gather up to learn as much as they can about SQL Server and BI.&lt;/p&gt;
&lt;a href="/SolidQ/Lists/Posts/Attachments/15/danilo-horz_2_0054D1FA.jpg"&gt;&lt;img width="431" height="184" title="danilo-horz" alt="danilo-horz" src="/SolidQ/Lists/Posts/Attachments/15/danilo-horz_thumb_0054D1FA.jpg" border="0" style="background-image:none;display:inline" /&gt;&lt;/a&gt; &lt;p&gt;There are four SolidQ Mentors &lt;a href="http://www.sqlconference.it/events/2013/agenda.aspx" target="_blank"&gt;speaking&lt;/a&gt;:&lt;/p&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Danilo Dominici &lt;/strong&gt;– &lt;/em&gt;“SQL Server 2012 Virtualization Best Practices&amp;quot;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Francesco De Chirico&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;-  “Monitoring MDX Queries in Analysis Services&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Davide Mauri&lt;/strong&gt;&lt;/em&gt; – “Integration Services 2012: Automating DWH Patterns through Metadata” and “Query Optimizer and Data Distribution Statistics”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Gianluca Hotz&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;– “SQL Server Security in a vulnerable world” and “PowerShell for SQL DBA”&lt;/p&gt;&lt;/li&gt;&lt;/div&gt;
&lt;div class="ExternalClass5C468F06B78340F5B770DC260FF6198C"&gt;&lt;p&gt; &lt;/p&gt;
&lt;p&gt;See you in Milan!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Follow our &lt;a href="/"&gt;blogs&lt;/a&gt; to read more about technical information and tips.&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass5C468F06B78340F5B770DC260FF6198C"&gt;&lt;p&gt;The most important technical conference in Italy, the “&lt;a href="http://www.sqlconference.it/events/2013/default.aspx" target="_blank"&gt;SQL Server &amp;amp; BI Conference 2013&lt;/a&gt;” will be held in Milan during May 28-29. During these days, SQL Developers, SQL DBAs, BI Professionals and Excel Power Users will gather up to learn as much as they can about SQL Server and BI.&lt;/p&gt;
&lt;a href="/SolidQ/Lists/Posts/Attachments/15/danilo-horz_2_0054D1FA.jpg"&gt;&lt;img width="431" height="184" title="danilo-horz" alt="danilo-horz" src="/SolidQ/Lists/Posts/Attachments/15/danilo-horz_thumb_0054D1FA.jpg" border="0" style="background-image:none;display:inline" /&gt;&lt;/a&gt; &lt;p&gt;There are four SolidQ Mentors &lt;a href="http://www.sqlconference.it/events/2013/agenda.aspx" target="_blank"&gt;speaking&lt;/a&gt;:&lt;/p&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Danilo Dominici &lt;/strong&gt;– &lt;/em&gt;“SQL Server 2012 Virtualization Best Practices&amp;quot;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Francesco De Chirico&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;-  “Monitoring MDX Queries in Analysis Services&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Davide Mauri&lt;/strong&gt;&lt;/em&gt; –...&lt;/p&gt;&lt;/li&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Enkel funktion för att dela upp en sträng</title>
      <ItemID>16</ItemID>
      <link>http://blogs.solidq.com/SQL-Server-pa-svenska/Post.aspx?ID=16&amp;title=Enkel+funktion+f%c3%b6r+att+dela+upp+en+str%c3%a4ng</link>
      <pubDate>2013-04-06T18:08:37+02:00</pubDate>
      <author>Peter Larsson</author>
      <authorEncoded>Peter+Larsson</authorEncoded>
      <authorID>125</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass9A73942C72014FEC8108254DF299E602"&gt;&lt;p&gt;Det finns flera fall där man behöver dela upp en sträng i flera delar. En anledning kan vara att man behöver en flexibel parameter till en lagrad procedur. En annan kan vara att man arbetar med en tabell som inte är normaliserad.&lt;/p&gt;  &lt;p&gt;Jag påträffade en annan sorts problem i vintras när jag arbetade med en stor kund. Deras applikation lämnade ifrån sig en sträng till databasen och strängens innehåll var beroende på vad användarna gjort för val i klienten med hänsyn till checkboxar, fritextrutor och annat. Dessa värden skulle sedan in till en lagrad procedur för att bygga ihop en dynamisk fråga. Jag lyckades till slut att göra proceduren 10 000 000 gånger snabbare och en av faktorerna (förutom omdesign av datamodellen) var att hantera den sträng som kom från klienten på ett effektivt sätt som möjligt. Vill du veta mer om listor i SQL Server kan du läsa här &lt;a href="http://www.sommarskog.se/arrays-in-sql.html"&gt;http://www.sommarskog.se/arrays-in-sql.html&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Som de flesta vet är just hantering av strängar inte en av SQL Servers styrkor. Men det finns sätt att göra det effektivt på! Vad jag kommer att visa nu är en funktion som hanterar multipla attribut med flerval samt wildcard.&lt;/p&gt;  &lt;p&gt;Ett typisk strängvärde kan se ut som “&lt;span style="font-size:9.5pt;font-family:consolas;color:green;line-height:107%"&gt;PersonID=201304061234&lt;/span&gt;“. Vad den informationen betyder är att kolumnen PersonID ska vara lika med det personnummer som skickades med. Det här är ganska trivialt att dela upp med T-SQL.  Strängen kan också se ut så här “&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;Utbildningsnivå=Kandidat|Stad=Malmö&lt;/span&gt;”. De olika attributen kan alltså vara uppdelade med ett pipe-tecken.&lt;/p&gt;  &lt;p&gt;I min kunds fall visade det sig dessutom att det finns flera olika klienter som anropade den aktuella proceduren. Från en klient kan strängen se ut så här “&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:green"&gt;Medlemskap=Guld|Medlemskap=Silver|Inkasso=Nej&lt;/span&gt;” medan den kan se ut så här “&lt;span style="font-size:9.5pt;font-family:consolas;color:green"&gt;Medlemskap=Guld,Silver|Inkasso=Nej&lt;/span&gt;” från en annan klient. Till en början innebar det naturligtvis en utmaning men när du tittar närmare på de kombinationer som finns, uppdagar ett mönster sig.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;De olika attributen är uppdelade med “|”&lt;/li&gt;    &lt;li&gt;Attribut och värde är uppdelat med “=”&lt;/li&gt;    &lt;li&gt;Flervalsmöjligheter är uppdelade med “,”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Finns det ett samband mellan de fyra olika stränginnehållen ovan? Ja, det finns det faktiskt. Om vi börjar i andra ändan, dvs med det slutresultat vi vill ha, så syns det ganska tydligt.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="198"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Attribut&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="200"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Värde&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="198"&gt;PersonID&lt;/td&gt;        &lt;td valign="top" width="201"&gt;201304061234&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Attribut&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="198"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Värde&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Utbildningsnivå&lt;/td&gt;        &lt;td valign="top" width="198"&gt;Kandidat&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Stad&lt;/td&gt;        &lt;td valign="top" width="198"&gt;Malmö&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Attribut&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="200"&gt;         &lt;p align="center"&gt;&lt;strong&gt;Värde&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Medlemskap&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Guld&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Medlemskap&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Silver&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Inkasso&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Nej&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Aha! Det som ska göras är en normalisering av stränginnehållet. När denna insikt lagt sig startade jag att fundera på hur man på enklast möjliga sätt ska skriva en rutin för att dela på strängen på det önskade viset. Redan i planeringsstadiet föll en iterativ process bort, mest med tanke på komplexiteten att hantera komma eller inte komma och när kommer pipen. Likamedtecknet är det enklaste i detta fallet.&lt;/p&gt;  &lt;p&gt;Precis om jag redovisade ovan gjorde jag också på papper hos kunden. När jag brottades med hur jag skulle likställa attributet Medlemskap mellan de olika klienterna insåg jag att en OUTER APPLY skulle göra hela skillnaden! Och då föddes tanken med att skriva funktionen som en Inline Table-Valued Function (IVTF) för absolut bästa prestanda. För att underhållet av funktionen skulle krävas ett minimum av specialkunskaper valde att jag att arbeta med XML.&lt;/p&gt;  &lt;p&gt;Första åtgärden var att dela upp strängen med pipetecknet för att separera de olika attributen. Vad jag ville åstadkomma var ett XML-dokument som såg ut så här&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Medlemskap=Guld,Silver&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Inkasso=Nej&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Den biten är ganska lätt. Jag gjorde en REPLACE på “|”till de olika xml-elementen med hjälp av den här statementet&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue;line-height:107%"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;line-height:107%"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;Men det är inte tillräckligt. Jag vill ju även dela upp strängen i attribut och värden som olika kolumner. Det kan vi göra genom att lägga till en extra REPLACE i samma statement! Då ser statementet ut så här&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;'='&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt; &lt;/p&gt; &lt;/p&gt;  &lt;p&gt;och producerar ett XML-dokument som ser ut så här&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Medlemskap&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Guld,Silver&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Inkasso&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;Nej&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt; &lt;/p&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt;&lt;/p&gt; Vid en första anblick kan det se konstigt ut att jag benämner de båda kolumnerna som “c”. Tänk då på att vi arbetar med XML och vi kan särskilja dessa med deras inbördes positioner. Detta är i normala fall inget som ska ha en betydelse men för den här funktionen måste det ha en betydelse då vi inte vet om det ens finns ett värde för attributet.&lt;/p&gt;  &lt;p&gt;Sätter vi ihop statementet till en fungerande fråga som ska fungera som bas för funktionen får vi skriva en wrapper och hantera utdatat som XML.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Data       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;'='&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt; &lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I detta läge vill vi omvandla XML-dokumentet i mindre dokument, eftersom varje nod “r” ska bli en minst en rad i resultatsetet. Det gör vi genom att dela upp XML-dokumentet med en CROSS APPLY. Här kan vi använda CROSS APPLY eftersom det måste finnas minst en nod “r” för annars är XML-dokumentet tomt.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;query&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'.'&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;'='&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;nodes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(r)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt; Nu har vi två XML-dokument som ser ut så här&lt;/p&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Medlemskap&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Guld,Silver&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt; &lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;Inkasso&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;c&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;Nej&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;c&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:#a31515"&gt;r&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;&amp;gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt;Nu kommer det att bli lite svårare eftersom vi ska kontrollera om värdet är ett flerval genom att dela upp nod “c” i två delar igen. Och här får vi ju inte dela upp attributet med hjälp av komma! För att särskilja de två noderna “c” mellan attribut och värde använder vi deras inbördes ordning med hjälp av xquery-noteringen “[]”.&lt;/p&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;query&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'.'&lt;/span&gt;&lt;span style="color:gray"&gt;),       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;'='&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;nodes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(r)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style="color:blue"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;value&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(c[2])'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'VARCHAR(MAX)'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;','&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt; &lt;/p&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Detta statement ger ett resultatset som har två kolumner &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;Medlemskap&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;Guld&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;,&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;Silver&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Guld&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Silver&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;Inkasso&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;Nej&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;c&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:teal"&gt;r&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas;color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                 &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Nej&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt; &lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="SV" style=""&gt;     &lt;p&gt;Vad vi nu behöver är en sista uppdelning på den andra kolumnen och dela upp noderna “r”. Denna gång använder vi OUTER APPLY eftersom vi inte vet om det ens finns ett värde för attributet.&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;query&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'.'&lt;/span&gt;&lt;span style="color:gray"&gt;),       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;,       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:teal"&gt;x&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;query&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'.'&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;FROM&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;'='&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;nodes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(r)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;CROSS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style="color:blue"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;value&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(c[2])'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'VARCHAR(MAX)'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;','&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;OUTER&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;nodes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(r)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;x&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style=""&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style=""&gt;     &lt;p&gt;OUTER APPLY gör att vi nu får tre rader i resultatsetet (Andra och tredje kolumnen)&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Guld&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Silver&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Guld&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Guld&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Silver&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Silver&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Nej&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style=""&gt;                 &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:teal"&gt;Nej&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span lang="SV" style=""&gt;     &lt;p&gt;Nu är det klart och vi kan skriva funktionen så här&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:blue"&gt;FUNCTION&lt;/span&gt; &lt;span style="color:teal"&gt;dbo&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;fnTokenizeAttributes       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt; &lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;MAX&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;)     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;RETURNS&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt; &lt;span style="color:blue"&gt;TABLE       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;AS     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;RETURN&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:gray"&gt;(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;WITH&lt;/span&gt; &lt;span style="color:teal"&gt;cteAttributes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;KeyType&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:teal"&gt;KeyValue&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;AS &lt;/span&gt;&lt;span style="color:gray"&gt;(       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style="color:fuchsia"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;value&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(c[1])'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'VARCHAR(48)'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;''&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;KeyType&lt;/span&gt;&lt;span style="color:gray"&gt;,       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                                    &lt;/span&gt;&lt;span style="color:fuchsia"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;x&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;value&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(text()[1])'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'VARCHAR(512)'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;''&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;KeyValue       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&lt;span style="color:blue"&gt;FROM&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                                        &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;@AttributeList&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'|'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;'='&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;c&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/c&amp;gt;&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                                    &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:gray"&gt;CROSS&lt;/span&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;d&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;Data&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;nodes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(r)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:gray"&gt;CROSS&lt;/span&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style="color:blue"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                                         &lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'&amp;lt;r&amp;gt;'&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:fuchsia"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;r&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;value&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(c[2])'&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'VARCHAR(MAX)'&lt;/span&gt;&lt;span style="color:gray"&gt;),&lt;/span&gt; &lt;span style="color:red"&gt;','&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/r&amp;gt;&amp;lt;r&amp;gt;'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:gray"&gt;+&lt;/span&gt; &lt;span style="color:red"&gt;'&amp;lt;/r&amp;gt;'&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:blue"&gt;XML&lt;/span&gt;&lt;span style="color:gray"&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                                    &lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style="color:gray"&gt;OUTER&lt;/span&gt; &lt;span style="color:gray"&gt;APPLY&lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:teal"&gt;f&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;.&lt;/span&gt;&lt;span style="color:teal"&gt;nodes&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'(r)'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;x&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;n&lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT&lt;/span&gt; &lt;span style="color:blue"&gt;DISTINCT&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:fuchsia"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;KeyType&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;KeyType&lt;/span&gt;&lt;span style="color:gray"&gt;,       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;                               &lt;/span&gt;&lt;span style="color:fuchsia"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;KeyValue&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;/span&gt; &lt;span style="color:blue"&gt;AS&lt;/span&gt; &lt;span style="color:teal"&gt;KeyValue       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;span style="color:blue"&gt;FROM&lt;/span&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color:teal"&gt;cteAttributes       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;span style="color:blue"&gt;WHERE&lt;/span&gt;&lt;span style=""&gt;           &lt;/span&gt;&lt;span style="color:fuchsia"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:teal"&gt;KeyType&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;/span&gt; &lt;span style="color:gray"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:red"&gt;''       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:gray"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas;color:blue"&gt;GO&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;text-autospace:"&gt;&lt;span style="font-size:9.5pt;font-family:consolas"&gt;     &lt;p&gt; &lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   &lt;p&gt;Vad jag också gjorde i funktionen var att sätta saknade kolumner med NULL-värde till tomsträng. Detta gör jag eftersom det kan finnas attribut utan värden. Dessutom kontrollerar jag att inga rader med tomma attribut returneras samt tar bort alla dubbletter.&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass9A73942C72014FEC8108254DF299E602"&gt;&lt;p&gt;Det finns flera fall där man behöver dela upp en sträng i flera delar. En anledning kan vara att man behöver en flexibel parameter till en lagrad procedur. En annan kan vara att man arbetar med en tabell som inte är normaliserad.&lt;/p&gt;  &lt;p&gt;Jag påträffade en annan sorts problem i vintras när jag arbetade med en stor kund. Deras applikation lämnade ifrån sig en sträng till databasen och strängens innehåll var beroende på vad användarna gjort för val i klienten med hänsyn till checkboxar, fritextrutor och annat....&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Swedish" nameEncoded="Swedish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>TypeScript en SharePoint 2013</title>
      <ItemID>240</ItemID>
      <link>http://blogs.solidq.com/sharepoint/Post.aspx?ID=240&amp;title=TypeScript+en+SharePoint+2013</link>
      <pubDate>2013-04-03T12:03:18+02:00</pubDate>
      <author>Roberto Ramón Berna</author>
      <authorEncoded>Roberto+Ram%c3%b3n+Berna</authorEncoded>
      <authorID>68</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass0B0E8E841EB94C06933C5EB72D9037DC"&gt;&lt;p&gt;Muy buenas;&lt;/p&gt;  &lt;p&gt;hace algún tiempo que salió TypeScript y desde el mismo momento que salió he intentado buscar el hueco para indagar sobre él, hoy ha llegado ese día &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/sharepoint/Lists/Posts/Attachments/240/wlEmoticon-smile_2_310088E0.png" /&gt;.&lt;/p&gt;  &lt;p&gt;Para empezar vamos a hacer una introducción sobre TypeScript.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Qué es TypeScript?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo primero que hay que tener claro para responder a esta pregunta, es que TypeScript &lt;strong&gt;no&lt;/strong&gt; es un nuevo lenguaje de programación. Podríamos decir que TypeScript es una mejora o una extensión de JavaScript que nos aporta la posibilidad de utilizar &lt;strong&gt;tipado estático&lt;/strong&gt; para organizar mucho mejor nuestro código. ¿Cuántas veces hemos visto un archivo .js con unas cientos de líneas y nos hemos puesto a temblar para entenderlas?, pues para ahorrarnos ese mal rato ha surgido TypeScript, para hacernos ganar en &lt;strong&gt;mantenibilidad, &lt;/strong&gt;es decir, para generar un código mucho más fácil de leer. &lt;/p&gt;  &lt;p&gt;Es importante saber que dicho tipado &lt;strong&gt;no es obligatorio&lt;/strong&gt; de utilizar, podremos utilizarlo cuando lo consideremos oportuno o mejor dicho, cuando de verdad nos resulte de utilidad. El código JavaScript podrá convivir en un fichero escrito en TypeScript sin problemas. Un archivo TypeScript tiene una extensión .ts (&lt;strong&gt;T&lt;/strong&gt;ype&lt;strong&gt;S&lt;/strong&gt;cript), el cual es necesario compilar para transformar este tipado a JavaScript plano (con el que estamos acostumbrados a trabajar). La gran ventaja de que se compile a JavaScript plano, es que funcionará en todos los navegadores y podremos utilizar en nuestro código una estructura basada en &lt;strong&gt;clases y módulos,&lt;/strong&gt; siguiendo el modelo de la programación orientada a objetos.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Cómo lo integro en SharePoint 2013?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo primero que debemos hacer, es instalar el &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=34790" target="_blank"&gt;plugin&lt;/a&gt; de TypeScript para poder agregar a nuestro proyecto un archivo con extensión .ts. (Este ejemplo está hecho con la versión 0.8.0.0)&lt;/p&gt;  &lt;p&gt;Para demostrar dicha integración, crearemos una SharePoint-Hosted App.&lt;/p&gt;  &lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/240/typeProjectSharePoint_310088E0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" title="typeProjectSharePoint" border="0" alt="typeProjectSharePoint" src="/sharepoint/Lists/Posts/Attachments/240/typeProjectSharePoint_thumb_310088E0.png" width="598" height="303" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Dentro del módulo “Scripts” que se autogenera con el proyecto, añadimos el archivo TypeScript.&lt;/p&gt;  &lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/240/archivoTypeScript_310088E0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" title="archivoTypeScript" border="0" alt="archivoTypeScript" src="/sharepoint/Lists/Posts/Attachments/240/archivoTypeScript_thumb_310088E0.png" width="605" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Como comentábamos antes, el archivo con extensión .ts por debajo es un archivo .js.&lt;/p&gt;  &lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/240/filejs_310088E0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" title="filejs" border="0" alt="filejs" src="/sharepoint/Lists/Posts/Attachments/240/filejs_thumb_310088E0.png" width="330" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Al añadir el archivo TypeScript, éste se crea con un éjemplo de código por defecto, aquí podeís ver las semejanzas. (En este post no explicaremos código)&lt;/p&gt;  &lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/240/codejs_310088E0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" title="codejs" border="0" alt="codejs" src="/sharepoint/Lists/Posts/Attachments/240/codejs_thumb_310088E0.png" width="812" height="530" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;También tendremos Intellisense en nuestro archivo .ts.&lt;/p&gt;  &lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/240/intellisense_310088E0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" title="intellisense" border="0" alt="intellisense" src="/sharepoint/Lists/Posts/Attachments/240/intellisense_thumb_310088E0.png" width="330" height="94" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Es importante tener en mente, que nosotros vamos a trabajar con el archivo .ts, pero en realidad a la hora de lanzar la aplicación lo que se hace es compilar el archivo .ts generando uno .js. Para que todo vaya más rodado, necesitamos que esta compilación la haga automáticamente nuestro proyecto de Visual Studio, para ello tendremos que modificar el &lt;strong&gt;.csprog&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Inicialmente haremos el unload del proyecto, botón derecho sobre el proyecto y elegimos la opción “&lt;strong&gt;Unload Project&lt;/strong&gt;”.&lt;/p&gt;  &lt;p&gt;Volvemos a hacer click con el botón derecho sobre el proyecto y seleccionamos la opción “Edit SP-TypeScript-App.csprog” para editar el archivo &lt;strong&gt;.csprog&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/240/editcsprog_310088E0.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" title="editcsprog" border="0" alt="editcsprog" src="/sharepoint/Lists/Posts/Attachments/240/editcsprog_thumb_310088E0.png" width="328" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Tendremos que añadir el parámetro &lt;strong&gt;InitialTargets&lt;/strong&gt; a la etiqueta Project, que quedaría de la siguiente forma&lt;/p&gt;  &lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;Project ToolsVersion=&amp;quot;4.0&amp;quot; DefaultTargets=&amp;quot;Build&amp;quot; xmlns=&amp;quot;http://schemas.microsoft.com/developer/msbuild/2003&amp;quot; InitialTargets=&amp;quot;TypeScriptCompile&amp;quot;&amp;gt;&lt;/pre&gt;

&lt;p&gt;Justo antes de cerrar la etiqueta Project, tendremos que añadir también este código&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;  &amp;lt;Target Name=&amp;quot;TypeScriptCompile&amp;quot; BeforeTargets=&amp;quot;Build&amp;quot;&amp;gt;
    &amp;lt;Message Text=&amp;quot;Compiling TypeScript...&amp;quot; /&amp;gt;
    &amp;lt;Exec Command=&amp;quot;&amp;amp;quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.0.0\tsc&amp;amp;quot; -target ES5 @(TypeScriptCompile -&amp;gt;'&amp;amp;quot;%(fullpath)&amp;amp;quot;', ' ')&amp;quot; /&amp;gt;
  &amp;lt;/Target&amp;gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Con esto ya tendríamos todo lo necesario para realizar la &lt;strong&gt;compilación del archivo TypeScript automáticamente&lt;/strong&gt;. Guardamos y hacemos un “&lt;strong&gt;Reload Project&lt;/strong&gt;”. Ahora si introducimos código en el archivo TypeScript y hacemos un “&lt;strong&gt;Rebuild&lt;/strong&gt;” veremos que el archivo TypeScript se compila automáticamente poblando nuestro archivo JavaScript. Para completar el ciclo, el último paso que nos queda es añadir nuestro archivo JavaScript a la página.&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;../Scripts/ArchivoTypeScript.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;Como apunte final, se de buena tinta que es complicado dedicar tiempo en aprender  “mejores” formas de hacer las cosas…lo de siempre, se quiere rápido y para antes de ayer, pero si de verdad os dan la oportunidad, yo no me lo pensaría para adentrarme en el mundo TypeScript. Más adelante en otro post, entraremos más en detalle en el propio código TypeScript y veremos hasta donde podemos llegar con ello en SharePoint.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Un saludo SharePointeros !! &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/sharepoint/Lists/Posts/Attachments/240/wlEmoticon-smile_2_310088E0.png" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass0B0E8E841EB94C06933C5EB72D9037DC"&gt;&lt;p&gt;Muy buenas;&lt;/p&gt;  &lt;p&gt;hace algún tiempo que salió TypeScript y desde el mismo momento que salió he intentado buscar el hueco para indagar sobre él, hoy ha llegado ese día &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/sharepoint/Lists/Posts/Attachments/240/wlEmoticon-smile_2_310088E0.png" /&gt;.&lt;/p&gt;  &lt;p&gt;Para empezar vamos a hacer una introducción sobre TypeScript.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Qué es TypeScript?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo primero que hay que tener claro para responder a esta pregunta, es que TypeScript &lt;strong&gt;no&lt;/strong&gt; es un nuevo lenguaje de programación. Podríamos decir que TypeScript es una mejora o una extensión de JavaScript que nos aporta la posibilidad de...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Build 2013 - WOW</title>
      <ItemID>113</ItemID>
      <link>http://blogs.solidq.com/kspencer/Post.aspx?ID=113&amp;title=Build+2013+-+WOW</link>
      <pubDate>2013-04-02T23:27:56+02:00</pubDate>
      <author>Ken Spencer</author>
      <authorEncoded>Ken+Spencer</authorEncoded>
      <authorID>30</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass2900965BF2574097B7C6972CFEF213CA"&gt;&lt;p&gt;Its interesting to read the news and see all the negative stuff about Microsoft. Most of the writes don’t know what the real world is all about just like the reporters on the news. &lt;/p&gt;  &lt;p&gt;For a read on how important Windows and other Microsoft technologies is, check out this: &lt;a title="http://www.zdnet.com/microsofts-build-2013-conference-sells-out-in-under-three-hours-7000013411/" href="http://www.zdnet.com/microsofts-build-2013-conference-sells-out-in-under-three-hours-7000013411/"&gt;http://www.zdnet.com/microsofts-build-2013-conference-sells-out-in-under-three-hours-7000013411/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The 2013 Microsoft Build conference sold out in 3 hours.  In 2012 it sold out in under 1 hour. So 3 and 1 is not bad. Specially since they have a bigger venue now.  So Windows Phone 8 and Windows 8 plus XBOX and of course Windows Azure are really driving things. &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass2900965BF2574097B7C6972CFEF213CA"&gt;&lt;p&gt;Its interesting to read the news and see all the negative stuff about Microsoft. Most of the writes don’t know what the real world is all about just like the reporters on the news. &lt;/p&gt;  &lt;p&gt;For a read on how important Windows and other Microsoft technologies is, check out this: &lt;a title="http://www.zdnet.com/microsofts-build-2013-conference-sells-out-in-under-three-hours-7000013411/" href="http://www.zdnet.com/microsofts-build-2013-conference-sells-out-in-under-three-hours-7000013411/"&gt;http://www.zdnet.com/microsofts-build-2013-conference-sells-out-in-under-three-hours-7000013411/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The 2013 Microsoft Build conference sold out in 3 hours.  In 2012 it sold out in under 1 hour. So 3 and 1 is not bad. Specially since...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Borrando nuestras huellas</title>
      <ItemID>244</ItemID>
      <link>http://blogs.solidq.com/ElRinconDelDBA/Post.aspx?ID=244&amp;title=Borrando+nuestras+huellas</link>
      <pubDate>2013-03-31T13:04:33+02:00</pubDate>
      <author>Rubén Garrigós</author>
      <authorEncoded>Rub%c3%a9n+Garrig%c3%b3s</authorEncoded>
      <authorID>40</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassA157934710A84397897252A8AFC57F0B"&gt;&lt;p&gt;&lt;font size="2"&gt;En ocasiones especiales cuando necesitamos acceso a bajo nivel a SQL Server no nos queda otra alternativa que realizar modificaciones directas en los catálogos de sistema. La posición oficial de Microsoft es que este tipo de operaciones no están soportadas (salvo que las realice directamente alguno de sus técnicos de soporte). Es probable que si necesitamos abrir un caso con soporte un ingeniero compruebe si hemos realizado modificaciones en las tablas de sistema.&lt;/font&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;La base de datos master es una base de datos dinámica, donde existen cambios de forma frecuente, por lo que no podría comparar el fichero original con un fichero de referencia. Por tanto para detectar cambios en las tablas de sistema se recurre al comando no documentado DBCC DBINFO.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Para poder ver el resultado de este comando primero habilitaremos la salida de los comandos DBCC al cliente con DBCC TRACEON (3604) y luego ejecutaremos el comando DBCC DBINFO:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/244/image_2_31E0E80C.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/244/image_thumb_31E0E80C.png" width="575" height="523" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Tras lanzar el comando en nuestra base de datos master vemos que el valor de dbi_updSysCatalog es una fecha cuyo valor es el siguiente “1900-01-01 00:00:00.000”. Esto indica que no se ha realizado ningún cambio en las tablas de sistema y, por lo tanto, “estamos limpios” y no tendremos problemas en caso de soporte por este tema.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Imaginemos ahora que por alguna razón muy justificada necesitamos realizar algún cambio en las tablas de sistema. Si después de dicho cambio lanzamos de nuevo el comando DBCC DBINFO veremos que la fecha dbi_updSysCatalog se actualiza a la fecha en la que hemos realizado la modificación:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/244/image_4_31E0E80C.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/244/image_thumb_1_31E0E80C.png" width="590" height="568" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Debido a que no disponemos de ningún comando que directamente nos permita resetear este valor, debemos investigar dónde se almacena dicho valor. Este valor es un valor “portable”, es decir, que si realizamos un backup de la base de datos y lo restauramos en otro servidor sigue persistiendo. Por tanto dicha información debe almacenarse con alta probabilidad dentro de los ficheros de la base de datos. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;¿Dónde tendría sentido que se almacenara? Muy probablemente en alguna de las páginas de metadatos que existen al principio de los ficheros de la base de datos. En concreto tendría sentido que estuviera en el fichero primario de la base de datos. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Con el comando DBCC PAGE podemos extraer información de las páginas de nuestra base de datos. El comando DBCC PAGE se encuentra bastante documentado por lo que no nos detendremos en este punto. Vamos a extraer información dela primera página del fichero de datos de master, la página de cabecera:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/244/image_6_31E0E80C.png"&gt;&lt;img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/244/image_thumb_2_31E0E80C.png" width="585" height="566" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Podemos ver que esta página muestra bastante información sin embargo no está la información que buscamos. La página 9 es la que contiene la información que estamos buscando:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/244/image_8_31E0E80C.png"&gt;&lt;img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/244/image_thumb_3_31E0E80C.png" width="584" height="511" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;El siguiente paso será detectar exactamente en qué parte de la página se almacena el valor de la fecha de dbi_updSysCatalog. Si comparamos dos DBCC PAGE distintos (en uno tenemos el dbi_updSysCatalog con el valor 1900-01-01 00:00:00 y en otro no) podemos ver lo siguiente:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/244/image_12_31E0E80C.png"&gt;&lt;img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/244/image_thumb_5_31E0E80C.png" width="580" height="494" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Los bytes marcados en negro son los que están almacenando la fecha que queremos modificar. Con el uso del comando DBCC WRITEPAGE (de nuevo, no documentado pero con extensa información en la web) podemos realizar la modificación sobre la página. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;ATENCION: Debemos tener mucha precaución al utilizar este comando ya que un simple error nos puede dejar la base de datos corrupta e irrecuperable. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;En nuestro caso el offset a calcular será, el resultado de sumar los 96 bytes de la cabecera (0x60) más el offset del slot 0 hasta el final de la fecha (0x280 menos 8 bytes). El offset será por tanto 0x60+0x280-0x08=0x2D8=728 bytes. El total a escribir serán 8 bytes y el valor a escribir será 0x0000000000000000 (que equivale a la fecha 1900-01-01 00:00:00.000) por lo que el comando a lanzar será el siguiente:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;DBCC WRITEPAGE (1,1,9,728,8,0x0000000000000000)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Una vez lanzado comprobaremos que el comando DBINFO muestra correctamente que hemos borrado nuestro rastro en lo que a tablas de sistema modificadas se refiere :)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/244/image_14_31E0E80C.png"&gt;&lt;img title="image" style="display:inline;background-image:none" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/244/image_thumb_6_5FCE3AC4.png" width="590" height="324" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassA157934710A84397897252A8AFC57F0B"&gt;&lt;p&gt;&lt;font size="2"&gt;En ocasiones especiales cuando necesitamos acceso a bajo nivel a SQL Server no nos queda otra alternativa que realizar modificaciones directas en los catálogos de sistema. La posición oficial de Microsoft es que este tipo de operaciones no están soportadas (salvo que las realice directamente alguno de sus técnicos de soporte). Es probable que si necesitamos abrir un caso con soporte un ingeniero compruebe si hemos realizado modificaciones en las tablas de sistema.&lt;/font&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;La base de datos master es una...&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Paralelismo en SQL Server (I)</title>
      <ItemID>243</ItemID>
      <link>http://blogs.solidq.com/ElRinconDelDBA/Post.aspx?ID=243&amp;title=Paralelismo+en+SQL+Server+(I)</link>
      <pubDate>2013-03-30T22:49:39+01:00</pubDate>
      <author>Enrique Catalá</author>
      <authorEncoded>Enrique+Catal%c3%a1</authorEncoded>
      <authorID>38</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass78C18E33FEEA4F65AD16ECA742698AD9"&gt;&lt;p&gt;En SQL Server podemos ajustar el paralelismo desde diversos puntos de vista, para conseguir diferentes resultados en función de nuestras necesidades. Una cosa que debemos recordar siempre es que aunque SQL Server posee reglas para auto-optimizarse en función del hardware detectado al iniciarse, es cierto tambien que debemos realizar ajustes al mismo en función de cómo estemos utilizando la instancia, esto es, qué tipo de peticiones le hacemos al motor relacional. &lt;/p&gt;  &lt;p&gt;Dicho esto, SQL Server nos ofrece las siguientes posibilidades a la hora de afinar el paralelismo:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A nivel Hardware &lt;/li&gt;    &lt;li&gt;A nivel de instancia &lt;/li&gt;    &lt;li&gt;A nivel de conexión &lt;/li&gt;    &lt;li&gt;A nivel de sentencia T-SQL &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;em&gt;NOTA: En este post, vamos a introducirnos en los significados de cada una de dichas configuraciones, para ir familiarizándonos de cara a los futuros posts que tratarán sobre el tema.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;A nivel hardware&lt;/h2&gt;  &lt;p&gt;SQL Server es capaz de detectar el hardware en el que está corriendo de forma que se ajusta de forma diferente para aprovechar todas sus caracteristicas en cada momento. &lt;/p&gt;  &lt;p&gt;De forma muy genérica, es capaz de distinguir entre correr en un hardware SMP, cuya arquitectura de alto nivel sería esta:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_2_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_118BB41D.png" width="244" height="115" /&gt;&lt;/a&gt;Y detectar si está corriendo en Hardware NUMA (&lt;a href="http://es.wikipedia.org/wiki/NUMA" target="_blank"&gt;Non-Uniform Memory Access&lt;/a&gt;), cuya arquitectura de alto nivel seria esta:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_4_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_1_118BB41D.png" width="448" height="140" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El hardware NUMA es bastante común en entornos críticos donde se requiere alto rendimiento, pero debido a sus beneficios y reducción de costes es cada vez mas frecuente encontrarlos en equipos “estandard” empresariales. En este tipo de arquitecturas, se dispone de varios nodos NUMA, cada uno compuesto por sus propios bancos de memoria, CPU y controladora, estando todos los nodos interconectados entre si. Típicamente el SO abstrae de la gestión de memoria y CPU a las aplicaciones que corren en dicho hardware, pero si se quiere que la aplicación explote al máximo las prestaciones de la máquina hay que realizarle ciertos “ajustes”. Una de las razones mas importantes es que si existe por ejemplo un thread corriendo sobre el NODO1 que debe acceder a una página de memoria alojada en otro nodo (digamos NODO2), típicamente se tarda entre 3 y 4 veces el tiempo que se tardaría en acceder a dicha página, si dicha página se encontrase en el NODO1. Por tanto, si la aplicación supiese que corre en hardware NUMA y se hiciera lo posible por tratar de almacenar la memoria relacionada cerca entre si dentro de los mismos nodos NUMA, se estaría favoreciendo el rendimiento enormemente (recordemos entre 3 y 4 veces la penalización por acceso al exterior). Este concepto es el que denominaremos a partir de ahora como DATA LOCALITY y trata de resumir la esencia de buscar siempre, que el dato se encuentre lo mas cerca del origen que lo pide, tanto él como los que futuramente puedan ser accedidos.&lt;/p&gt;  &lt;p&gt;Dado que SQL Server es una aplicación diseñada para aprovechar arquitecturas NUMA, nosotros podemos obviamente modificar los parámetros hardware del sistema para que SQL Server se autoajuste en función del nº de nodos disponibles, por ejemplo. Obviamente este concepto de “afinamiento” es méramente anecdótico y se ha añadido para recordar al lector que SQL Server posee un mecanismo de auto-afinamiento que en este caso aprovecha el hardware existente favoreciendo DATA LOCALITY.&lt;/p&gt;  &lt;p&gt;Además, entre otras cosas incrementa el nº de hidden schedulers (como por ejemplo lazywritter) de forma que SQL Server creará 1 por cada nodo NUMA disponible. &lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_6_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_2_118BB41D.png" width="471" height="106" /&gt;&lt;/a&gt;    &lt;br /&gt;*Imagen donde se puede observar el contenido del fichero ERRORLOG indicando cómo se han detectado 3 nodos NUMA hardware en el sistema y el nº de procesos LAZY WRITTER creados (uno por cada nodo numa)&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;A nivel de instancia&lt;/h2&gt;  &lt;p&gt;A nivel de instancia es donde mas podemos afinar el comportamiento de SQL Server. Tenemos las siguientes posibilidades:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;1.Máscaras de afinidiad &lt;/li&gt;    &lt;li&gt;2.Degree of parallelism &lt;/li&gt;    &lt;li&gt;3.cost threshold for parallelism &lt;/li&gt;    &lt;li&gt;4.max worker threads &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h3&gt;Máscaras de afinidad&lt;/h3&gt;  &lt;p&gt;A la hora de configurar las máscaras de afinidad, podemos trabajarlo en 3 niveles:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;1. Afinidad de procesador&lt;/h4&gt; &lt;/blockquote&gt;  &lt;p&gt;La afinidad de procesador se usa para indicar qué CPU podrán ser accesibles por SQL Server. Además, podremos vincular hilos a determinados procesadores. El resultado real de desactivar CPU es que SQL Server desactivará los schedulers asociados y por tanto efectívamente no utilizará dichas CPU&lt;/p&gt;  &lt;p&gt;¿Para qué querríamos hacer esto?&lt;/p&gt;  &lt;p&gt;Como sabemos, podemos tener mas de una instancia SQL Server instalada en la misma máquina. En estos escenarios, para evitar peleas por el recurso CPU que entorpezcan el rendimiento general del sistema, es una buena práctica des-solapar las CPU de ambas instancias.&lt;/p&gt;  &lt;p&gt;Por ejemplo, si tenemos 8 CPU y 2 instancias instaladas, dejaríamos activadas las CPU 0-3 para la instancia 1 y las CPU 4-7 para la instancia 2.&lt;/p&gt;  &lt;p&gt;Para más información: &lt;a title="http://msdn.microsoft.com/en-us/library/ms187104.aspx" href="http://msdn.microsoft.com/en-us/library/ms187104.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms187104.aspx&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;2. Afinidad de E/S&lt;/h4&gt; &lt;/blockquote&gt;  &lt;p&gt;Toda operación de E/S debe ser finalizada (cálculo de checksum, número de bytes transferidos, número de página correcto,…) y para ello se realiza un consumo de CPU. Este tipo de operaciones es realizado por el proceso denominado LAZY WRITTER por un scheduler oculto. Configurando la afinidad de E/S podremos indicar qué CPU podrán ser accesibles por el scheduler oculto que realiza estas tareas. &lt;/p&gt;  &lt;p&gt;¿Por qué querríamos hacer esto?&lt;/p&gt;  &lt;p&gt;Al igual que el afinamiento de CPU, el afinamiento de E/S está pensado para mejorar el rendimiento en entornos donde la presión de E/S es alta. De esta forma, podemos limitar a determinadas CPU el gasto computacional asociado a operaciones de finalización de E/S. &lt;/p&gt;  &lt;p&gt;Tened presente, que la idea en este caso es precisamente evitar que los schedulers normales y los schedulers ocultos de finalización de E/S compitan por los mismos recursos. Esto quiere decir que lo que buscamos es esto:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_8_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_3_118BB41D.png" width="124" height="70" /&gt;&lt;/a&gt; No queremos esto:&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_10_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_4_118BB41D.png" width="123" height="78" /&gt;&lt;/a&gt;Ya que estaríamos haciendo competir por la CPU a los schedulers normales que se encuentran realizando tareas sql, y a los schedulers ocultos como el de finalización de E/S.&lt;/p&gt;  &lt;p&gt;La propia GUI de SSMS te impide las malas configuraciones evitando que puedas marcar la misma CPU para afinidad de procesador y afinidad de E/S, lo cual es algo de agradecer:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_12_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_5_118BB41D.png" width="244" height="177" /&gt;&lt;/a&gt;*Ejemplo cualquiera de configuración de afinidad CPU y afinidad E/S mediante asistente&lt;/p&gt;  &lt;p align="left"&gt;Para más información: &lt;a title="http://msdn.microsoft.com/en-us/library/ms189629.aspx" href="http://msdn.microsoft.com/en-us/library/ms189629.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189629.aspx&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;3. Afinidad de red&lt;/h4&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;Existe un método avanzado para optimizar sistemas SQL Server consistente en vincular un determinado puerto de comunicaciones, con un determinado NODO numa. Para realizar esta configuración, obviamente debemos disponer de hardware NUMA y obviamente con mas de 1 NODO.&lt;/p&gt;  &lt;p align="left"&gt;La idea es que consitamos un aumento de rendimiento a base de facilitar DATA LOCALITY mediante cierta “inteligencia” por nuestra parte:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_14_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_6_118BB41D.png" width="444" height="255" /&gt;&lt;/a&gt;  &lt;br /&gt;*Imagen que muestra afinidad de red vinculado 4 puertos a 4 nodos NUMA&lt;/p&gt;  &lt;p&gt;¿Por qué querríamos hacer esto?&lt;/p&gt;  &lt;p&gt;La idea que pretendemos llevar a cabo es favorecer estadísticamente que los datos utilizados por determinadas conexiones se encuentren siempre en el mismo NODO numa ( o al menos que estadísticamente sea mucho mas probable). &lt;/p&gt;  &lt;p&gt;Lo que se hace es vincular un determinado puerto (por ejemplo en la imagen el puerto 8000) a un determinado nodo NUMA (en dicho ejemplo al NODO 1). Luego, en las aplicaciones, redirigiremos la cadena de conexión para indicar que nos conectaremos a la instancia SQL Server mediante el puerto 8000, consiguiendo que dicha aplicacion siempre utilice de entrada el nodo NUMA 1 y por tanto, que los datos de páginas a acceder se encuentren mas probablemente en los bancos de memoria de dicho NODO.&lt;/p&gt;  &lt;p&gt;En entornos críticos, aplicando este tipo de configuraciones se puede llegar a obtener aumentos de rendimiento interesantes rondando el 20%.&lt;/p&gt;  &lt;p&gt;Para más información: &lt;a title="http://support.microsoft.com/kb/299641" href="http://support.microsoft.com/kb/299641"&gt;http://support.microsoft.com/kb/299641&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h3&gt;Degree of parallelism&lt;/h3&gt;  &lt;p&gt;El grado de paralelismo es posiblemente la configuración mas comunmente utilizada a la hora de afinar el grado de paralelismo de SQL Server. En este caso, estamos hablando del grado de paralelismo a nivel de instancia.&lt;/p&gt;  &lt;p&gt;Su configuración indica el máximo número de CPUs que un determinado worker puede utilizar, esto es, el nº de hilos que un determinado operador puede abrir como máximo en ejecución.&lt;/p&gt;  &lt;p&gt;No debe confundirse con la afinidad de CPU, ya que en este caso no estamos desactivando CPU, estamos limitando el nº de hilos disponibles para resolver una consulta. Además, su valor es determinado en tiempo de ejecución y no afecta para nada al plan cache.&lt;/p&gt;  &lt;p&gt;Su valor además puede ser especificado a nivel de workload group dentro de una configuración de Resource Governor. Haciendo esto, estaremos configurando la forma de proceder en términos de hilos por operador, para determinadas conexiones a SQL Server.&lt;/p&gt;  &lt;p&gt;Para más información: &lt;a title="http://msdn.microsoft.com/en-us/library/ms188611(v=sql.105).aspx" href="http://msdn.microsoft.com/en-us/library/ms188611(v=sql.105).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms188611(v=sql.105).aspx&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Cost threshold for parallelism&lt;/h3&gt;  &lt;p&gt;Utilizado para modificar el nº de planes de ejecuciones paralelos generados en el sistema, es una de las configuraciones mas desaprovechadas por los DBA de SQL Server, quizás por su escasa divulgación y porque requiere un conocimiento del negocio en el que está corriendo SQL Server para poder explotarla con éxito.&lt;/p&gt;  &lt;p&gt;La idea es que un sistema OLTP puro no debería tener ejecuciones paralelas, ya que implica que SQL Server ha determinado un coste elevado para su resolución, pero a su vez, SQL Server finalmente tambien acaba resolviendo operaciones no OLTP ( las tan temidas consultas gigantescas a la BBDD para devolver informes :) ). La idea por tanto es jugar con este parámetro, para aumentar o disminuir el nº de operaciones paralelas que se ejecutan. Reconozco que es un parámetro un tanto “peligroso” en tanto en cuanto no se posee un control absoluto de lo que va a suceder en el sistema a ciencia cierta (cambias estadísticamente el nº de planes a generarse, pero no sabes cuales serán ya que no los puedes vincular a ellos, como con “degree of parallelism”). Es por ello que solo debes tocarlo si estas seguro de lo que deseas conseguir y siempre y cuando seas capaz de medir el impacto de su modifición para saber si vas en la dirección correcta.&lt;/p&gt;  &lt;p&gt;Su valor es utilizado por SQL Server cuando se está evaluando el plan de ejecución a utilizar, de forma que cambiar su valor influirá en cómo se ejecutará el plan de ejecución.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_16_118BB41D.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_7_118BB41D.png" width="365" height="74" /&gt;&lt;/a&gt; *Pseudo código donde se utiliza “threshold for parallelism” para obtener plan de ejecución &lt;/p&gt;  &lt;p align="left"&gt;Para más información: &lt;a title="http://msdn.microsoft.com/en-us/library/ms188603(v=sql.105).aspx" href="http://msdn.microsoft.com/en-us/library/ms188603(v=sql.105).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms188603(v=sql.105).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt; &lt;/p&gt;  &lt;h3&gt;Max worker threads&lt;/h3&gt;  &lt;p&gt;Este parámetro sirve para configurar el número de subprocesso de trabajo disponibles para los procesos de SQL Server. Modificar este parámetro puede optimizar el rendimiento cuando un gran número de conexiones se abren contra la instancia SQL Server ya que generalmente se crea un subproceso de sistema independiente para cada solicitud, pero gracias a esto se pueden agrupar varias solicitudes a determinados grupos de trabajo. &lt;/p&gt;  &lt;p&gt;Esta característica, al igual que la característica “threshold for parallelism” se considera avanzada y solo recomendable aplicarla si se poseen conocimientos profundos de SQL Server y de cómo se puede beneficiar el escenario concreto donde se aplicará. &lt;/p&gt;  &lt;p&gt;Para hacerse una idea, puedes ver la siguiente tabla donde se obtienen los valores de max worker threads que SQL Server configura dependiendo del entorno donde se está ejecutando y su versión de binarios&lt;/p&gt;  &lt;p&gt;&lt;a href="/elrincondeldba/Lists/Posts/Attachments/243/image_18_3F7906D5.png"&gt;&lt;img title="image" style="border-width:0px;margin-right:auto;margin-left:auto;float:none;display:block" border="0" alt="image" src="/elrincondeldba/Lists/Posts/Attachments/243/image_thumb_8_3F7906D5.png" width="291" height="152" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Para más información: &lt;a title="http://msdn.microsoft.com/es-es/library/ms187024(v=sql.105).aspx" href="http://msdn.microsoft.com/es-es/library/ms187024(v=sql.105).aspx"&gt;http://msdn.microsoft.com/es-es/library/ms187024(v=sql.105).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;A nivel de conexión&lt;/h2&gt;  &lt;p&gt;A nivel de conexión SQL Server nos ofrece la posibilidad de configurar el grado de paralelismo mediante el uso de Resource Governor. De esta forma, podemos configurar SQL Server para que dependiendo de nuestra función de enrutado de resource governor, se comporte diferente en términos de paralelismo.&lt;/p&gt;  &lt;p&gt;¿Para qué querríamos hacer esto?&lt;/p&gt;  &lt;p&gt;Bueno, pues podríamos forzar a que todas las operaciones de reindexado de índices, backups, recálculo de estadísticas…por defecto funcionaran al máximo DOP posible con el fin de optimizar los recursos.&lt;/p&gt;  &lt;p&gt;Otra posibilidad tambien podría ser predefinir que todas las conexiones de una aplicación que utiliza SQL Server como OLTP puro, utilicen un DOP de 1. &lt;/p&gt;  &lt;p&gt;Como vemos, nos ofrece unas posibilidades bastante mas que interesantes a la hora de optimizar sistemas utilizados por aplicaciones heterogéneas.&lt;/p&gt;  &lt;p&gt;Para más información: &lt;a title="http://technet.microsoft.com/es-es/library/bb895232(v=sql.105).aspx" href="http://technet.microsoft.com/es-es/library/bb895232(v=sql.105).aspx"&gt;http://technet.microsoft.com/es-es/library/bb895232(v=sql.105).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;A nivel de sentencia T-SQL&lt;/h2&gt;  &lt;p&gt;A nivel de sentencia T-SQL tenemos la cláusula MAXDOP con la que podemos especificar el valor “degree of parallelism” que queremos que tenga la sentencia concreta a la que se lo apliquemos. Como hemos visto, el grado de paralelismo puede especificarse a nivel de instancia, de conexión (con resource governor) y ahora de sentencia; la precedencia siempre es la que posea el nivel de granuldaridad mas bajo. De esta forma, sea cual sea la configuracion DOP de instancia y Resource Governor, si una sentencia posee MAXDOP=8, dicha sentencia utilizará como mucho 8 hilos por operador, independientemente de los valores configurados a nivel de instancia y/o resource governor.&lt;/p&gt;  &lt;p&gt;¿Por qué querríamos configurar una consulta con un MAXDOP distinto?&lt;/p&gt;  &lt;p&gt;Imaginemos que a la instancia le hemos configurador DOP = 1, por lo que por defecto, todas las peticiones serán en serie, luego configuramos resource governor con un workload group para que tenga DOP = 4 una determinada aplicación,….¿qué pasa si queremos lanzar desde dicha aplicación cliente una agregación de datos masiva y nuestra máquina tiene 32 CPU? Esta la podríamos realizar con MAXDOP=0 y daría igual el resto de configuraciones, siempre sería capaz de crear si le hiciera falta hasta 32 hilos por operador. &lt;/p&gt;  &lt;p&gt;Para más información: &lt;a title="http://msdn.microsoft.com/en-us/library/ms181714.aspx" href="http://msdn.microsoft.com/en-us/library/ms181714.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms181714.aspx&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass78C18E33FEEA4F65AD16ECA742698AD9"&gt;&lt;p&gt;En SQL Server podemos ajustar el paralelismo desde diversos puntos de vista, para conseguir diferentes resultados en función de nuestras necesidades. Una cosa que debemos recordar siempre es que aunque SQL Server posee reglas para auto-optimizarse en función del hardware detectado al iniciarse, es cierto tambien que debemos realizar ajustes al mismo en función de cómo estemos utilizando la instancia, esto es, qué tipo de peticiones le hacemos al motor relacional. &lt;/p&gt;  &lt;p&gt;Dicho esto, SQL Server nos ofrece...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="SQL Server" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SQL+Server" nameEnconded="SQL+Server" />
      <category name="Paralelismo" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Paralelismo" nameEnconded="Paralelismo" />
      <category name="Parallelism" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Parallelism" nameEnconded="Parallelism" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>SSIS – Data Profiling</title>
      <ItemID>112</ItemID>
      <link>http://blogs.solidq.com/kspencer/Post.aspx?ID=112&amp;title=SSIS+%e2%80%93+Data+Profiling</link>
      <pubDate>2013-03-27T21:30:22+01:00</pubDate>
      <author>Ken Spencer</author>
      <authorEncoded>Ken+Spencer</authorEncoded>
      <authorID>30</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass02E16CFD2CE04CDCBDD6A73ECD94297F"&gt;&lt;p&gt;SSIS (SQL Server Integration Services) is a powerful technology for most things data related. This includes moving data in and out of SQL Server and many other things like copying files or in my case today profiling data. &lt;/p&gt;  &lt;p&gt;The following table shows a problem we run into all the time with many clients. In this case we have a lookup table that lists product categories. As you can see there is a lot of bad data there where the category names are not consistent. For instance Belt is also shown as &lt;i&gt;belt, blt,&lt;/i&gt; and &lt;i&gt;bt&lt;/i&gt;. And it’s not usually just the database issue necessarily its either the database is not designed right and/or the applications are not handling data correctly.&lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_2_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_7DFC04F4.png" width="176" height="314" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We saw this recently where a database had a global option table for all types of fields and the data was really bogus just like this figure shows. &lt;/p&gt;  &lt;p&gt;The only way you can really clean up your data is to profile it and monitor it. And there are good tools coming out like the new features in SQL Server 2012 which I will get into in another post. &lt;/p&gt;  &lt;p&gt;This discussion brings me to the SSIS Data Profiler for this post. This SSIS task is really cool and will let us do things like analyze the key strength of columns, look at the column lengths for the current data, analyze the data in those columns and so forth. It’s nice because this is right out of the box in SQL Server. Let’s dig in and see how this works. &lt;/p&gt;  &lt;p&gt;The following figure shows the Data Profiling Task on the design panel of SSIS 1012. This task is the only thing in the current project. &lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_4_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_1_7DFC04F4.png" width="514" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once you have the task in the design surface you can configure it by double clicking it or right clicking and selecting Edit. The next figure shows the edit dialog. When the Data Profiling Task runs it outputs its results to a file. Notice how the DestinationType property is set to FileConnection and the Destination property to the DataProfile.xml connection. This is where the results will end up when the task runs. &lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_6_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_2_7DFC04F4.png" width="581" height="381" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now that you have an output location, you can create a profile of your data. The easiest way to do this is to click the Quick Profile button shown in the last figure. This will open the following dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_8_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_3_7DFC04F4.png" width="452" height="385" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can see that I have already selected the Localhost.db connection and the ProductCategory table. Then I checked all of the boxes to create a complete profile. Next I clicked Ok and the profile was done.&lt;/p&gt;  &lt;p&gt;Then I ran the package in debug mode. &lt;/p&gt;  &lt;p&gt;Now the really cool thing is the Data Profile Viewer. You can find this in the Start menu and also it’s in in Data Profiling Tasks property page in the General area where you can just click Open Profile Viewer (see the 2&lt;sup&gt;nd&lt;/sup&gt; figure) to run it. &lt;/p&gt;  &lt;p&gt;This brings up the following dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_10_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_4_7DFC04F4.png" width="604" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This tool allows us to dig into the results of our data profile and see what’s going on with our data. There is lots of good info in this output depending upon what you are looking at. For instance, you can find out the key strength of columns, look at a profile of the data, check column length against data and more. &lt;/p&gt;  &lt;p&gt;In the case I mentioned early on, we really want to look at the data and its consistency. You can click on the Column Pattern Profiles item to dig into what your data looks like. The next figure shows this view after I also clicked on the Category column:&lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_12_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_5_7DFC04F4.png" width="617" height="454" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can also click the Drill Down button to the right of All Rows to display all the data that a row represents. For instance if I were to click Drill Down, the display would change to this:&lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_14_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_6_7DFC04F4.png" width="624" height="461" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can see the two discrete types of data that make up PANTS is &lt;i&gt;Pants&lt;/i&gt; and &lt;i&gt;pants&lt;/i&gt;. To drill into another field, double click it and it will change the drill down details. &lt;/p&gt;  &lt;p&gt;As you can see from this image there’s lots of fields that are not correct. The next image shows the Pattern Distribution after I clicked the Pattern header to sort it. Now its clear that Belt and Blt are the same. &lt;/p&gt;  &lt;p&gt;&lt;a href="/kspencer/Lists/Posts/Attachments/112/image_16_7DFC04F4.png"&gt;&lt;img title="image" style="display:inline" border="0" alt="image" src="/kspencer/Lists/Posts/Attachments/112/image_thumb_7_7DFC04F4.png" width="633" height="277" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now that I have identified this problem, I can run this query in SSMS:&lt;/p&gt;  &lt;p&gt;select * from [dbo].[ProductCategory] where description = 'Belts'&lt;/p&gt;  &lt;p&gt;This shows me that we have 3 entries for Belts where we should have 1 entry. &lt;/p&gt;  &lt;p&gt;15 Belt Belts&lt;/p&gt;  &lt;p&gt;16 belt Belts&lt;/p&gt;  &lt;p&gt;17 blt Belts&lt;/p&gt;  &lt;p&gt;This type of cleanup should be done on any database that’s been in production for any length of time. When you find these problems, you can look at related tables and figure out where to make other data changes. And you should look at your applications and make sure no one has put in hard references or is feeding a list with hard coded values such as Belt or Blt and such. &lt;/p&gt;  &lt;p&gt;It’s also worth looking at cleaning up your data layout and making lookups normalized if they are not already. &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass02E16CFD2CE04CDCBDD6A73ECD94297F"&gt;&lt;p&gt;SSIS (SQL Server Integration Services) is a powerful technology for most things data related. This includes moving data in and out of SQL Server and many other things like copying files or in my case today profiling data. &lt;/p&gt;  &lt;p&gt;The following table shows a problem we run into all the time with many clients. In this case we have a lookup table that lists product categories. As you can see there is a lot of bad data there where the category names are not consistent. For instance Belt is also shown as &lt;i&gt;belt,...&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>El Sign in as Different User en SharePoint 2013</title>
      <ItemID>239</ItemID>
      <link>http://blogs.solidq.com/sharepoint/Post.aspx?ID=239&amp;title=El+Sign+in+as+Different+User+en+SharePoint+2013</link>
      <pubDate>2013-03-25T12:29:00+01:00</pubDate>
      <author>Roberto Ramón Berna</author>
      <authorEncoded>Roberto+Ram%c3%b3n+Berna</authorEncoded>
      <authorID>68</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass740B411654564754909E4C78B1B6926D"&gt;&lt;p&gt;Muy buenas a todos;&lt;/p&gt;
&lt;p&gt;recientemente, trasteando con SharePoint 2013, me ha surgido la necesidad de cambiar el usuario  con el que estoy logueado en mi aplicación, hasta ahí todo bien. Cuando voy a buscar la opción en la parte superior derecha donde se encuentra también el “Sign Out, descubro que la opción para cambiar de usuario no está. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/239/SignOut_5D064E0B.png"&gt;&lt;img width="244" height="108" title="SignOut" alt="SignOut" src="/sharepoint/Lists/Posts/Attachments/239/SignOut_thumb_0AF3A0C4.png" border="0" style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;A continuación vamos a ver&lt;strong&gt; tres formas&lt;/strong&gt; de como saltarnos esta limitación para llegar a poder loguearnos con otro usuario.&lt;/p&gt;
&lt;p&gt;1º Concatenando a nuestra url “&lt;strong&gt;/_layouts/closeConnection.aspx?loginasanotheruser=true&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;Al igual que en SharePoint 2010, podemos forzar ese logueo con otro usuario mediante url,. Quizás lo más complicado de esta opción es tener siempre en mente dicha cadena.&lt;/p&gt;
&lt;p&gt;Ejemplo:                                                &lt;a href="http://summitsolidq2013/SitePages/Home.aspx"&gt;http://summitsolidq2013/&lt;strong&gt;SitePages/Home.aspx&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Log in con un usuario diferente : &lt;a href="http://summitsolidq2013/_layouts/closeConnection.aspx?loginasanotheruser=true"&gt;http://summitsolidq2013&lt;strong&gt;/_layouts/closeConnection.aspx?loginasanotheruser=true&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;2º Abriendo el explorador con un usuario diferente&lt;/p&gt;
&lt;p&gt;Botón derecho sobre  nuestro navegador Internet Explorer  “&lt;strong&gt;Run as different user&lt;/strong&gt;” y metemos los credenciales del usuario con el que queremos aparecer logueados en nuestra aplicación.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;3º Añadir el código necesario para que aparezca siempre.&lt;/p&gt;
&lt;p&gt;Abrimos el archivo “&lt;strong&gt;Welcome.ascx&lt;/strong&gt;” que se encuentra en la siguiente ruta  “&lt;strong&gt;\15\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx&lt;/strong&gt; ”.&lt;/p&gt;
&lt;p&gt;Le agregamos el siguiente código, que básicamente lo que hace es añadir un elemento más al menú.&lt;/p&gt;
&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;SharePoint:MenuItemTemplate runat=&amp;quot;server&amp;quot; ID=&amp;quot;ID_LoginAsDifferentUser&amp;quot; Text=&amp;quot;&amp;lt;%$Resources:wss,personalactions_loginasdifferentuser%&amp;gt;&amp;quot; Description=&amp;quot;&amp;lt;%$Resources:wss,personalactions_loginasdifferentuserdescription%&amp;gt;&amp;quot; MenuGroupId=&amp;quot;100&amp;quot; Sequence=&amp;quot;100&amp;quot; UseShortId=&amp;quot;true&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Como podemos ver en la siguiente imagen, ya tendremos el “&lt;strong&gt;Sign in as Different User&lt;/strong&gt;” agregado en nuestro menú. &lt;/p&gt;
&lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/239/SignInAsDifferentUser_0AF3A0C4.png"&gt;&lt;img width="244" height="134" title="SignInAsDifferentUser" alt="SignInAsDifferentUser" src="/sharepoint/Lists/Posts/Attachments/239/SignInAsDifferentUser_thumb_0AF3A0C4.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Por último cabe mencionar que el paso 3, aconsejaría realizarlo solo en &lt;strong&gt;entornos de prueba y desarrollo&lt;/strong&gt;. Si no está la opción en el menú, no es porque se hayan olvidado de ella, será por algún motivo en especial.  En este post de &lt;a href="http://blogs.technet.com/b/stefan_gossner/archive/2012/01/19/be-careful-when-using-the-quot-sign-in-as-different-user-quot-feature-in-sharepoint.aspx" target="_blank"&gt;Stefan Gossner&lt;/a&gt; , citan algunas de las posibles razones que pueden haber llevado al equipo de producto a quitar dicho elemento del menú.&lt;/p&gt;
&lt;p&gt;Un saludo y espero que haya sido de utilidad &lt;img class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/sharepoint/Lists/Posts/Attachments/239/wlEmoticon-smile_2_0AF3A0C4.png" style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass740B411654564754909E4C78B1B6926D"&gt;&lt;p&gt;Muy buenas a todos;&lt;/p&gt;
&lt;p&gt;recientemente, trasteando con SharePoint 2013, me ha surgido la necesidad de cambiar el usuario  con el que estoy logueado en mi aplicación, hasta ahí todo bien. Cuando voy a buscar la opción en la parte superior derecha donde se encuentra también el “Sign Out, descubro que la opción para cambiar de usuario no está. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="/sharepoint/Lists/Posts/Attachments/239/SignOut_5D064E0B.png"&gt;&lt;img width="244" height="108" title="SignOut" alt="SignOut" src="/sharepoint/Lists/Posts/Attachments/239/SignOut_thumb_0AF3A0C4.png" border="0" style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;A continuación vamos a ver&lt;strong&gt; tres formas&lt;/strong&gt; de como saltarnos esta limitación para llegar a poder loguearnos con otro usuario.&lt;/p&gt;
&lt;p&gt;1º Concatenando...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="SharePoint 2013" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SharePoint+2013" nameEnconded="SharePoint+2013" />
      <category name="SharePoint Designer" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=SharePoint+Designer" nameEnconded="SharePoint+Designer" />
      <category name="XML" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=XML" nameEnconded="XML" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>What Are DQS and MDS About</title>
      <ItemID>146</ItemID>
      <link>http://blogs.solidq.com/dsarka/Post.aspx?ID=146&amp;title=What+Are+DQS+and+MDS+About</link>
      <pubDate>2013-03-23T10:21:43+01:00</pubDate>
      <author>Dejan Sarka</author>
      <authorEncoded>Dejan+Sarka</authorEncoded>
      <authorID>46</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassE71AD3219BBF43A09F2A8C20AF525098"&gt;&lt;p&gt;This is just a very quick information about SQL Server 2012 Data Quality Services (DQS) and Master Data Services (MDS). If you don't have a clue what they are useful for, this blog post should give you the basic idea.
&lt;/p&gt;&lt;p&gt;Many companies or organizations do regular data cleansing. When you cleanse the data, the data quality goes up to some higher level. The data quality level is determined by the amount of work invested in the cleansing. As time passes, the data quality deteriorates, and you need to repeat the cleansing process. If you spend an equal amount of effort as you did with the previous cleansing, you can expect the same level of data quality as you had after the previous cleansing. And then the data quality deteriorates over time again, and the cleansing process starts over and over again.
&lt;/p&gt;&lt;p&gt;The idea of Data Quality Services is to mitigate the cleansing process. While the amount of time you need to spend on cleansing decreases, you will achieve higher and higher levels of data quality. While cleansing, you learn what types of errors to expect, discover error patterns, find domains of correct values, etc. You don't throw away this knowledge. You store it and use it to find and correct the same issues automatically during your next cleansing process. The following figure shows this graphically.
&lt;/p&gt;&lt;p&gt;&lt;img src="/dsarka/Lists/Photos/032313_0820_WhatAreDQSa1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;The idea of master data management, which you can perform with Master Data Services (MDS), is to prevent data quality from deteriorating. Once you reach a particular quality level, the MDS application—together with the defined policies, people, and master data management processes—allow you to maintain this level permanently. This idea is shown in the following picture.
&lt;/p&gt;&lt;p&gt;&lt;img src="/dsarka/Lists/Photos/032313_0820_WhatAreDQSa2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Not an in-depth blog post, as I said; however, I hope it brings some basic understanding about the purpose of DQS and MDS.&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassE71AD3219BBF43A09F2A8C20AF525098"&gt;&lt;p&gt;This is just a very quick information about SQL Server 2012 Data Quality Services (DQS) and Master Data Services (MDS). If you don't have a clue what they are useful for, this blog post should give you the basic idea.
&lt;/p&gt;&lt;p&gt;Many companies or organizations do regular data cleansing. When you cleanse the data, the data quality goes up to some higher level. The data quality level is determined by the amount of work invested in the cleansing. As time passes, the data quality deteriorates, and you need to repeat...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="Data Quality" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Data+Quality" nameEnconded="Data+Quality" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Data Explorer: llega el self-service ETL</title>
      <ItemID>172</ItemID>
      <link>http://blogs.solidq.com/BICorner/Post.aspx?ID=172&amp;title=Data+Explorer%3a+llega+el+self-service+ETL</link>
      <pubDate>2013-03-21T20:51:00+01:00</pubDate>
      <author>Pau Sempere Sanchez</author>
      <authorEncoded>Pau+Sempere+Sanchez</authorEncoded>
      <authorID>94</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass1C0127FC03CC4486B78D373CD671B03C"&gt;&lt;p&gt;Recientemente se publicó la versión preview de &lt;strong&gt;Data Explorer&lt;/strong&gt; para &lt;strong&gt;Excel (&lt;/strong&gt;La podéis descargar de &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=36803" target="_blank"&gt;aquí&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;El producto llega a su versión previa al lanzamiento después de haber tenido dos versiones, el cliente de escritorio y el servicio en la nube, publicadas hace algo más de un año, y que ofrecían un servicio muy similar aunque con ligeras diferencias respecto a la conectividad y posibilidad de publicación de resultados. &lt;/p&gt;
&lt;p&gt;Ahora, el producto ha evolucionado y mejorado, y se integra con &lt;strong&gt;Excel&lt;/strong&gt; (tanto 2010 como 2013). Viene a llenar el hueco que quedaba entre los orígenes de datos y el modelo de datos en el paradigma de self-service &lt;strong&gt;BI&lt;/strong&gt; que &lt;strong&gt;Microsoft&lt;/strong&gt; propuso con la aparición de &lt;strong&gt;SQL Server 2012&lt;/strong&gt;, con BISM y la posibilidad de escalar desde el análisis sobre el modelo de datos personal hasta un BI empresarial en un servidor de&lt;strong&gt; Analysis Services&lt;/strong&gt;. Data Explorer viene a cubrir la funcionalidad de integración de datos en el sistema de self-service BI como PowerPivot cubre la funcionalidad de análisis. &lt;/p&gt;
&lt;p&gt;El hecho de que se enmarque dentro de Excel es uno de los hechos más relevantes de esta preview, dando más importancia si cabe a &lt;strong&gt;Excel&lt;/strong&gt; dentro del ecosistema de &lt;strong&gt;BI&lt;/strong&gt; de &lt;strong&gt;Microsoft&lt;/strong&gt;. En ella los analistas de negocio se sienten cómodos, tienen pericia y son capaces de desenvolverse con naturalidad, lo que reduce mucho la curva de aprendizaje de nuevas herramientas que estén enmarcadas en él. Además, nos permite combinar rápidamente los datos que descubramos e importemos con el resto de funcionalidades integradas en &lt;strong&gt;Excel&lt;/strong&gt; para realizar análisis cómodos y rápidos sin tener que esperar a grandes desarrollos &lt;strong&gt;ETL&lt;/strong&gt; y de sistemas analíticos, pero teniendo la posibilidad de que a partir de estos análisis iniciales surja todo un modelo de análisis empresarial. ¡Incluso podemos añadir directamente la información obtenida con &lt;strong&gt;Data&lt;/strong&gt; &lt;strong&gt;Explorer&lt;/strong&gt; a un modelo de datos en &lt;strong&gt;PowerPivot&lt;/strong&gt;! &lt;/p&gt;
&lt;p&gt;En este post vamos a ilustrar como combinar fuentes de información “no estándar” obtenidas con &lt;strong&gt;Data Explorer&lt;/strong&gt; con &lt;strong&gt;Power&lt;/strong&gt; &lt;strong&gt;View&lt;/strong&gt; incluido en Excel 2013 para realizar un análisis rápido y vistoso en cuestión de minutos. &lt;/p&gt;
&lt;p&gt;Supongamos que somos el responsable de marketing de una empresa y queremos saber qué se ha dicho recientemente en &lt;strong&gt;Twitter&lt;/strong&gt; acerca de nuestra organización. Obviamente nos interesa qué se ha dicho, pero también es importante saber quién lo ha dicho y, entre otras cosas, desde dónde se ha dicho (o en su defecto, dónde ubica &lt;strong&gt;Twitter&lt;/strong&gt; a los usuarios que lo han dicho). La &lt;strong&gt;geolocalización&lt;/strong&gt; de la información es un activo cada vez más importante en la inteligencia de negocio, especialmente con la facilidad con la que podemos integrarla con &lt;strong&gt;Power View&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Para ello, habiendo descargado e instalado&lt;strong&gt; Data Explorer&lt;/strong&gt; para &lt;strong&gt;Excel 2013&lt;/strong&gt;, abrimos un libro de &lt;strong&gt;Excel&lt;/strong&gt; en blanco, y hacemos clic en la nueva pestaña “DATA EXPLORER”. Una vez nos aparezca la cinta de opciones, donde podemos elegir todas las fuentes de datos disponibles, seleccionaremos “From Web”. Como vamos a leer datos desde &lt;strong&gt;Twitter&lt;/strong&gt;, debemos saber el formato en el que debemos preguntar a &lt;strong&gt;Twitter&lt;/strong&gt;. En nuestro caso realizaremos la consulta para obtener tweets sobre &lt;strong&gt;SolidQ&lt;/strong&gt;. La URL desde la que obtener la información quedaría parecida a ésta: &lt;span style="font-family:&amp;quot;calibri&amp;quot;, &amp;quot;sans-serif&amp;quot;;color:#1f497d;font-size:11pt"&gt;&lt;a title="https://search.twitter.com/search.json?q=solidq&amp;amp;rpp=50" href="https://search.twitter.com/search.json?q=SolidQ&amp;amp;rpp=50"&gt;&lt;span style="color:#1f497d;text-decoration:none;text-underline:none"&gt;https://search.twitter.com/search.json?q=SolidQ&amp;amp;rpp=50&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;. Podéis encontrar información sobre los parámetros de búsqueda del API de &lt;strong&gt;Twitter&lt;/strong&gt; &lt;a href="https://dev.twitter.com/docs/api/1/get/search" target="_blank"&gt;aquí&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_2_29F77683.png" target="_blank"&gt;&lt;img width="518" height="198" title="DataExplorerWebContent" alt="DataExplorerWebContent" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_29F77683.png" border="0" style="background-image:none;border-right-width:0px;margin:5px 15px 0px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Twitter nos devuelve un bloque de datos en formato JSON, pero Data Explorer está esperando un documento HTML. Por tanto, cuando intentemos importar la información, nos dará el siguiente error: &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_4_29F77683.png" target="_blank"&gt;&lt;img width="511" height="216" title="QueryingJSONFromDataExplorer" alt="QueryingJSONFromDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_1_29F77683.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lo que vemos es que DataExplorer nos está dando una tabla y un documento en HTML con un error (espera HTML y recibe JSON). Un pequeño truco para saltarnos esta situación es usar el lenguaje de fórmulas de &lt;strong&gt;Data Explorer&lt;/strong&gt;, que tiene soporte para interpretar datos estructurados (tanto en &lt;strong&gt;JSON&lt;/strong&gt; como en &lt;strong&gt;XML&lt;/strong&gt;). Si modificamos la fórmula por ésta, añadiendo&lt;strong&gt; Json.Document&lt;/strong&gt; en vez de &lt;strong&gt;Web.Page&lt;/strong&gt; para especificarle que lo que va a recibir son datos en &lt;strong&gt;JSON&lt;/strong&gt;: &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_6_29F77683.png" target="_blank"&gt;&lt;img width="602" height="289" title="ParsingJSONFromDataExplorer" alt="ParsingJSONFromDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_2_29F77683.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tenemos información estructurada sobre la respuesta de &lt;strong&gt;Twitter&lt;/strong&gt; a nuestra consulta. Los tweets que nos interesan se encuentran en la lista de elementos contenida &lt;/p&gt;
&lt;p&gt;dentro del campo “results”. Clicamos en el enlace (en verde claro en la captura) para realizar automáticamente un drill down y veremos el detalle de la lista. &lt;/p&gt;
&lt;p&gt;Ahora queremos convertir estos resultados de información estructurada en una tabla, que es con lo que trabajaremos en &lt;strong&gt;Excel&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Si hacemos botón derecho sobre la cabecera de la columna y seleccionamos To Table:&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_8_29F77683.png" target="_blank"&gt;&lt;img width="425" height="260" title="ListToTableDataExplorer" alt="ListToTableDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_3_29F77683.png" border="0" style="background-image:none;border-right-width:0px;margin:0px 10px 0px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez lo hemos convertido a tabla, seleccionaremos un delimitador (si lo hubiese, en este caso son datos ya estructurados y no será necesario) &lt;/p&gt;
&lt;p&gt;y podremos elegir qué columnas queremos expandir haciendo clic sobre el icono en la esquina superior derecha. &lt;/p&gt;
&lt;p&gt;Nosotros vamos a escoger los siguientes &lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;from_user&lt;/strong&gt;: El nombre del usuario en Twitter&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;from_user_id_str&lt;/strong&gt;: Su identificador interno en Twitter en formato de cadena de caracteres&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;profile_image_url_https&lt;/strong&gt;: Las fotos siempre quedan bonitas &lt;img class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/bicorner/Lists/Posts/Attachments/172/wlEmoticon-smile_2_29F77683.png" style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" /&gt;. Obteniendo la URL donde localizamos la foto del usuario podremos ver la imagen en Excel gracias a su interacción con Bing&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;text&lt;/strong&gt;: El tweet en sí&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_30_29F77683.png" target="_blank"&gt;&lt;img width="432" height="302" title="ColumnsDataExplorer" alt="ColumnsDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_14_29F77683.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ahora renombramos las columnas solo para tener más claro que significa cada una (y poder identificarlas fácilmente en el análisis posterior). Sólo con cambiar el nombre de la columna, como si fuese una columna más de &lt;strong&gt;Excel&lt;/strong&gt;, &lt;strong&gt;Data Explorer&lt;/strong&gt; aplicará la operación correspondiente en su lenguaje de fórmulas. Si nos fijamos en la parte derecha de la pantalla, en la sección Steps, vamos a poder ir viendo cada uno de los pasos que hemos realizado para llegar hasta el punto actual, y lo que es mejor, al cambiar o actualizar la información en un paso intermedio (cambiar el parámetro de consulta a &lt;strong&gt;Twitter&lt;/strong&gt;, por ejemplo), ¡la información se actualiza en cascada en todos los pasos posteriores de manera automática!&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_14_29F77683.png" target="_blank"&gt;&lt;img width="644" height="198" title="RenameFormulaDataExplorer" align="left" alt="RenameFormulaDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_6_29F77683.png" border="0" style="background-image:none;border-right-width:0px;margin:0px 20px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_16_29F77683.png" target="_blank"&gt;&lt;img width="198" height="197" title="StepsListDataExplorer" alt="StepsListDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_7_29F77683.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Twitter ofrece funcionalidad para localizar desde donde se está twitteando. Tiene sentido sobre todo al usar los servicios &lt;strong&gt;GPS&lt;/strong&gt; de los dispositivos móviles, y más aún si la localización tiene relación con lo que se está publicando. Pero no todo el mundo usa esta opción, y por ello vamos a usar de nuevo el &lt;strong&gt;API&lt;/strong&gt; de &lt;strong&gt;Twitter&lt;/strong&gt; para obtener la localización que los usuarios definen cuando registran su cuenta a través del ID de usuario (campo UserID) que previamente habíamos obtenido. En este caso la fórmula que usaremos será muy parecida a la anterior, pero concatenando el valor del campo UserID para construir la consulta, y conseguiremos llegar a la localización añadiendo una columna personalizada y seleccionando el campo de los datos estructurados en &lt;strong&gt;JSON&lt;/strong&gt; directamente.&lt;/p&gt;
&lt;p&gt;Primero tendremos que transformar la columna UserID en una de datos tipo texto, ya que es de tipo de datos numérico y no nos dejará usarla para ser concatenada a la fórmula. &lt;/p&gt;
&lt;p&gt;Pulsando con el botón derecho sobre la última columna, seleccionamos Insert Column – Custom: &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_18_29F77683.png" target="_blank"&gt;&lt;img width="385" height="315" title="InsertCustomColumnDataExplorer" alt="InsertCustomColumnDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_8_1505F410.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lo cual nos permitirá añadir la expresión en lenguaje de fórmulas de&lt;strong&gt; Data Explorer&lt;/strong&gt; de una manera muy parecida a la que usamos para conseguir los tweets: &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_28_1505F410.png"&gt;&lt;img width="644" height="316" title="TwitterFromDataExplorer" alt="TwitterFromDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_13_1505F410.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Conseguiremos acceder directamente a la localización del usuario con la selección del campo “[location]”. Si obtuviésemos una lista de resultados y tuviesemos que elegir un elemento antes de seleccionar el campo que queremos obtener, tendríamos que usar los operadores {}. Por tanto, quedaría tal que Funcion(…){N elemento}[campo]. &lt;/p&gt;
&lt;p&gt;Puede que veamos un error de este tipo al intentar conseguir datos externos:&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_22_1505F410.png" target="_blank"&gt;&lt;img width="644" height="57" title="DataExplorerError" alt="DataExplorerError" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_10_1505F410.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para evitarlo, activamos la opción “&lt;strong&gt;Fast Combine&lt;/strong&gt;” de&lt;strong&gt; Data Explorer&lt;/strong&gt; para poder usar datos de otras fuentes de datos sin recibir este error que nos avisa de que no podemos usar fuentes de datos de diferentes orígenes, en lo que parece una restricción interna de &lt;strong&gt;Data Explorer&lt;/strong&gt; para evitar incongruencias al mezclar datos desde fuentes externas diversas.&lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_24_1505F410.png" target="_blank"&gt;&lt;img width="352" height="244" title="FastCombineDataExplorer" alt="FastCombineDataExplorer" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_11_1505F410.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ya tenemos añadida la localización de cada uno de los usuarios que han publicado tweets sobre SolidQ. La mayoría serán localizaciones válidas, pero otras no lo serán. Aquí entraría en juego la combinación de &lt;strong&gt;Data Explorer&lt;/strong&gt; o incluso &lt;strong&gt;Excel&lt;/strong&gt; con servicios externos de validación y calidad de datos, pero es un tema que requeriría un post adicional, o incluso varios &lt;img class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/bicorner/Lists/Posts/Attachments/172/wlEmoticon-smile_2_29F77683.png" style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" /&gt;&lt;/p&gt;
&lt;p&gt;Renombramos la columna que hemos obtenido como Location y clicamos en Done para volver a nuestra hoja de Excel.&lt;/p&gt;
&lt;p&gt;Ahora que ya tenemos los datos con su localización y las fotos de los usuarios de Twitter podemos hacer rápidamente un informe con &lt;strong&gt;Power View&lt;/strong&gt; que nos muestre dónde han sucedido estos tweets (o por lo menos donde se localiza al usuario que los publicó). &lt;/p&gt;
&lt;p&gt;En un par de clics podríamos tener algo así: &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_32_3A8F7171.png" target="_blank"&gt;&lt;img width="804" height="504" title="PowerViewFromTwitter" alt="PowerViewFromTwitter" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_15_3A8F7171.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O aprovecharnos de la funcionalidad de &lt;strong&gt;PowerPivot&lt;/strong&gt; para mostrar imágenes en los informes de &lt;strong&gt;Power View&lt;/strong&gt;, marcar el campo PictureURL como de tipo “&lt;strong&gt;imageURL&lt;/strong&gt;” en las opciones avanzadas de &lt;strong&gt;PowerPivot&lt;/strong&gt; y poder ver el avatar de quién escribió qué y desde dónde: &lt;/p&gt;
&lt;p&gt;&lt;a href="/bicorner/Lists/Posts/Attachments/172/image_34_3A8F7171.png" target="_blank"&gt;&lt;img width="804" height="504" title="PowerViewFromTwitterPictures" alt="PowerViewFromTwitterPictures" src="/bicorner/Lists/Posts/Attachments/172/image_thumb_16_3A8F7171.png" border="0" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Habrá que esperar a la versión final de &lt;strong&gt;Data Explorer&lt;/strong&gt; para poder medir todo su potencia y facilidad de uso pero hemos visto que ya en la preview podemos obtener datos desde fuentes externas (el API de Twitter, en este caso) de manera relativamente sencilla y toda la potencia de análisis que nos brinda el hecho de que esté integrado dentro de &lt;strong&gt;Excel&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Os animo desde aquí a que descarguéis Data Explorer para empezar a investigar cómo importar datos y cómo combinarlos.&lt;/p&gt;
&lt;p&gt;Espero que os haya gustado, en próximos posts y artículos seguiremos hablando de Data Explorer y las funcionalidades que ofrece para integración y modelado de datos. Feliz análisis &lt;img class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="/bicorner/Lists/Posts/Attachments/172/wlEmoticon-smile_2_29F77683.png" style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass1C0127FC03CC4486B78D373CD671B03C"&gt;&lt;p&gt;Recientemente se publicó la versión preview de &lt;strong&gt;Data Explorer&lt;/strong&gt; para &lt;strong&gt;Excel (&lt;/strong&gt;La podéis descargar de &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=36803" target="_blank"&gt;aquí&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;El producto llega a su versión previa al lanzamiento después de haber tenido dos versiones, el cliente de escritorio y el servicio en la nube, publicadas hace algo más de un año, y que ofrecían un servicio muy similar aunque con ligeras diferencias respecto a la conectividad y posibilidad de publicación de resultados. &lt;/p&gt;
&lt;p&gt;Ahora, el producto ha evolucionado y mejorado, y se integra con &lt;strong&gt;Excel&lt;/strong&gt; (tanto 2010...&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="powerpivot" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=powerpivot" nameEnconded="powerpivot" />
      <category name="ETL" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=ETL" nameEnconded="ETL" />
      <category name="Data Explorer" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Data+Explorer" nameEnconded="Data+Explorer" />
      <category name="Power View" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Power+View" nameEnconded="Power+View" />
      <category name="Excel 2013" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Excel+2013" nameEnconded="Excel+2013" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=Spanish" nameEncoded="Spanish" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Windows Phone 8 - Pandora</title>
      <ItemID>111</ItemID>
      <link>http://blogs.solidq.com/kspencer/Post.aspx?ID=111&amp;title=Windows+Phone+8+-+Pandora</link>
      <pubDate>2013-03-21T16:01:29+01:00</pubDate>
      <author>Ken Spencer</author>
      <authorEncoded>Ken+Spencer</authorEncoded>
      <authorID>30</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassE77C6F4E56A34404B2312C6013C61FFE"&gt;&lt;p&gt;Today the new Pandora app for the phone came out. Apps are coming out fast and furious. &lt;/p&gt;  &lt;p&gt;Check this out on &lt;a href="http://blogs.windows.com/windows_phone/b/windowsphone/archive/2013/03/21/pandora-for-windows-phone-8-is-here-for-free-ad-free-until-2014-and-with-exclusive-features.aspx" target="_blank"&gt;TrendSpotter&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassE77C6F4E56A34404B2312C6013C61FFE"&gt;&lt;p&gt;Today the new Pandora app for the phone came out. Apps are coming out fast and furious. &lt;/p&gt;  &lt;p&gt;Check this out on &lt;a href="http://blogs.windows.com/windows_phone/b/windowsphone/archive/2013/03/21/pandora-for-windows-phone-8-is-here-for-free-ad-free-until-2014-and-with-exclusive-features.aspx" target="_blank"&gt;TrendSpotter&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>More on Htc 8x replacement</title>
      <ItemID>110</ItemID>
      <link>http://blogs.solidq.com/kspencer/Post.aspx?ID=110&amp;title=More+on+Htc+8x+replacement</link>
      <pubDate>2013-03-21T15:59:34+01:00</pubDate>
      <author>Ken Spencer</author>
      <authorEncoded>Ken+Spencer</authorEncoded>
      <authorID>30</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassBE19B7D2A3DF4F1A9E98D137F469B6D1"&gt;&lt;p&gt;Man, i love the Windows Phone 8.    &lt;br /&gt;Got my new phone from Verizon. &lt;/p&gt;  &lt;p&gt;fired it up, logged in. Then went to mail and put in email / password. &lt;/p&gt;  &lt;p&gt;Bank. Outlook.com is hooked up and my contacts are there. &lt;/p&gt;  &lt;p&gt;Plugged in the phone to the usb and fired up media player. Sync. &lt;/p&gt;  &lt;p&gt;Now my phone is right back to where the other one was with no fuss. Just have to reinstall some apps. &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassBE19B7D2A3DF4F1A9E98D137F469B6D1"&gt;&lt;p&gt;Man, i love the Windows Phone 8.    &lt;br /&gt;Got my new phone from Verizon. &lt;/br&gt;  &lt;p&gt;fired it up, logged in. Then went to mail and put in email / password. &lt;/p&gt;  &lt;p&gt;Bank. Outlook.com is hooked up and my contacts are there. &lt;/p&gt;  &lt;p&gt;Plugged in the phone to the usb and fired up media player. Sync. &lt;/p&gt;  &lt;p&gt;Now my phone is right back to where the other one was with no fuss. Just have to reinstall some apps. &lt;/p&gt;&lt;/p&gt;&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>Windows Phone 8 – Verizon Support</title>
      <ItemID>109</ItemID>
      <link>http://blogs.solidq.com/kspencer/Post.aspx?ID=109&amp;title=Windows+Phone+8+%e2%80%93+Verizon+Support</link>
      <pubDate>2013-03-18T20:44:02+01:00</pubDate>
      <author>Ken Spencer</author>
      <authorEncoded>Ken+Spencer</authorEncoded>
      <authorID>30</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClassAEE7A6136A16403EAE22B20F50076AA8"&gt;&lt;p&gt;Some good news. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;I have the htc 8x and love this phone. There's only been one issue with it so far. &lt;/p&gt;  &lt;p&gt;Fairly frequently i get a message that says the SIM card is invalid.  I called the other week and Verizon suggested some changes in settings. Got better and then it came back hard. &lt;/p&gt;  &lt;p&gt;So today i called. After 5 minutes, i have a new phone coming overnight thanks to the warranty.  Yeah for Verizon. &lt;/p&gt;  &lt;p&gt;I also found this thread on the issue:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://answers.microsoft.com/en-us/winphone/forum/wp8-wpnetwork/htc-8x-sim-card-is-missing-or-invalid/16962008-df41-4959-a6ea-f03b00d5d118?page=~pagenum~" href="http://answers.microsoft.com/en-us/winphone/forum/wp8-wpnetwork/htc-8x-sim-card-is-missing-or-invalid/16962008-df41-4959-a6ea-f03b00d5d118?page=~pagenum~"&gt;http://answers.microsoft.com/en-us/winphone/forum/wp8-wpnetwork/htc-8x-sim-card-is-missing-or-invalid/16962008-df41-4959-a6ea-f03b00d5d118?page=~pagenum~&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It was interesting enough in the last post where they pointed to this article on iphones:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://wooservers.com/blog/2010/07/10/fixing-iphone-4g-no-sim-installed-problem/" href="http://wooservers.com/blog/2010/07/10/fixing-iphone-4g-no-sim-installed-problem/"&gt;http://wooservers.com/blog/2010/07/10/fixing-iphone-4g-no-sim-installed-problem/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Looks like they have the same issue.  I have not tested the tape ideas in this article but if the issue comes up again i am going to give it a try. &lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClassAEE7A6136A16403EAE22B20F50076AA8"&gt;&lt;p&gt;Some good news. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;I have the htc 8x and love this phone. There's only been one issue with it so far. &lt;/p&gt;  &lt;p&gt;Fairly frequently i get a message that says the SIM card is invalid.  I called the other week and Verizon suggested some changes in settings. Got better and then it came back hard. &lt;/p&gt;  &lt;p&gt;So today i called. After 5 minutes, i have a new phone coming overnight thanks to the warranty.  Yeah for Verizon. &lt;/p&gt;  &lt;p&gt;I also found this thread on the issue:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://answers.microsoft.com/en-us/winphone/forum/wp8-wpnetwork/htc-8x-sim-card-is-missing-or-invalid/16962008-df41-4959-a6ea-f03b00d5d118?page=~pagenum~" href="http://answers.microsoft.com/en-us/winphone/forum/wp8-wpnetwork/htc-8x-sim-card-is-missing-or-invalid/16962008-df41-4959-a6ea-f03b00d5d118?page=~pagenum~"&gt;http://answers.microsoft.com/en-us/winphone/forum/wp8-wpnetwork/htc-8x-sim-card-is-missing-or-invalid/16962008-df41-4959-a6ea-f03b00d5d118?page=~pagenum~&lt;/a&gt;&lt;/p&gt;...&lt;/div&gt;</shortDescription>
      <category name="None" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=None" nameEnconded="None" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
    <item>
      <title>PASS SQL Saturday #188 Portugal</title>
      <ItemID>14</ItemID>
      <link>http://blogs.solidq.com/SolidQ/Post.aspx?ID=14&amp;title=PASS+SQL+Saturday+%23188+Portugal</link>
      <pubDate>2013-03-15T11:28:00+01:00</pubDate>
      <author>SolidQ</author>
      <authorEncoded>SolidQ</authorEncoded>
      <authorID>150</authorID>
      <comments>None</comments>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">None</wfw:commentRss>
      <description>&lt;div class="ExternalClass0C37E951938F465F93C4CDEA4A3DC62B"&gt;&lt;p&gt;SQL Saturday will be held March 16 at Microsoft Portugal, Lisbon, 1990-110, Portugal. As you know, this event is a free training event for SQL Server Pofessionals and SQL Server lovers. This event is about to beat the record of 320+ registrations!&lt;/p&gt;
&lt;p&gt;We are proud to announce that from a total of 31 speakers, 5 are part of the SolidQ team:&lt;/p&gt;
&lt;table width="603" border="0" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="131" valign="top"&gt;&lt;img width="101" height="121" src="/SolidQ/PublishingImages/Mentors/regisbaccaro.jpg" alt="" style="display:block;float:none;margin-left:auto;margin-right:auto" /&gt;&lt;/td&gt;
&lt;td width="340" valign="top"&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=188&amp;amp;sessionid=11962" target="_blank"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;&lt;a href="http://www.twitter.com/regbac" target="_blank"&gt;&lt;u&gt;&lt;img src="/SolidQ/PublishingImages/Mentors/twittericon%2016px.png" alt="" /&gt;&lt;/u&gt;&lt;/a&gt; &lt;a href="http://www.twitter.com/regbac" target="_blank"&gt;Régis Baccaro | Database development with SSDT&lt;/a&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="1"&gt;“In this session we'll dive into Online and Offline development as well as the Productivity and tools that the SSDT team keeps providing to us.”&lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;&lt;/td&gt;
&lt;td width="130" valign="top"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width="135" valign="top"&gt; &lt;/td&gt;
&lt;td width="332" valign="top"&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=188&amp;amp;sessionid=12981" target="_blank"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;&lt;a href="http://www.twitter.com/enriquecatala" target="_blank"&gt;&lt;img src="/SolidQ/PublishingImages/Mentors/twittericon%2016px.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.twitter.com/enriquecatala" target="_blank"&gt;Enrique Catalá | Parallelism in SQL Server&lt;/a&gt;&lt;/font&gt;&lt;font size="1"&gt; &lt;br /&gt;&lt;br /&gt;“In this session we will discuss about the parallelism in SQL Server. We will talk about configuration parameters, parallel execution plans, parallel operators and more. We also will talk about problems and best practices.”&lt;/font&gt; &lt;br /&gt;&lt;/td&gt;
&lt;td width="135" valign="top"&gt;&lt;img width="117" height="117" src="/SolidQ/PublishingImages/Mentors/sqlint_ecatala.png" alt="" style="display:block;float:none;margin-left:auto;margin-right:auto" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width="138" valign="top"&gt;&lt;img width="104" height="104" src="/SolidQ/PublishingImages/Mentors/sqlint_erincon.png" alt="" style="display:block;float:none;margin-left:auto;margin-right:auto" /&gt;&lt;/td&gt;
&lt;td width="327" valign="top"&gt;&lt;div&gt;&lt;font size="1"&gt;&lt;img src="/SolidQ/PublishingImages/Mentors/twittericon%2016px.png" alt="" /&gt;  &lt;a href="http://www.twitter.com/erincon"&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/enriquecatala" target="_blank"&gt;&lt;font size="2"&gt;&lt;font color="#0072bc"&gt;Eladio Rincón | Parallelism in SQL Server&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&lt;font size="1"&gt;“In this session we will introduce the main concepts about transactional replication and two real cases to show the scale-out benefits of this technology. At the end we will talk about common best practices for transactional replication.”&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td width="139" valign="top"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width="140" valign="top"&gt; &lt;/td&gt;
&lt;font size="2"&gt;&lt;/font&gt;&lt;td width="322" valign="top"&gt;&lt;font size="2"&gt;&lt;a href="http://www.twitter.com/rpertusa" target="_blank"&gt;&lt;img src="/SolidQ/PublishingImages/Mentors/twittericon%2016px.png" alt="" /&gt; Rubén Pertusa | Sentiment analysis using SSAS 2012&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font size="1"&gt;”This session reviews some text mining and integration techniques for extracting and incorporating these insights from Big Data into our analytical platform. Real life samples and practical demos will be shown using Microsoft technologies. Co-speaker: Javier Torrenteras (SolidQ BI Manager)”&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td width="142" valign="top"&gt;&lt;img width="94" height="111" src="/SolidQ/PublishingImages/Mentors/sqlint_rpertusa_.png" alt="" style="display:block;float:none;margin-left:auto;margin-right:auto" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width="141" valign="top"&gt;&lt;img width="84" height="84" src="/SolidQ/PublishingImages/Mentors/milosRadivojevic.jpg" alt="" style="display:block;float:none;margin-left:auto;margin-right:auto" /&gt;&lt;/td&gt;
&lt;td width="320" valign="top"&gt;&lt;font size="2"&gt;&lt;a href="http://www.twitter.com/MilosSQL" target="_blank"&gt;&lt;img src="/SolidQ/PublishingImages/Mentors/twittericon%2016px.png" alt="" /&gt; Milos Radivojevic | Identifying and Solving Sort Warning Problems&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;”&lt;font size="1"&gt;We will see how to identify this problem in SQL Server 2008 and more elegant in SQL Server 2012 and of course we can discuss how to prevent this problem.”&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td width="146" valign="top"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;You will find the extended session details on the event’s &lt;a href="http://www.sqlsaturday.com/188/eventhome.aspx" target="_blank"&gt;official website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hope you enjoy your SQL Saturday!&lt;/p&gt;&lt;/div&gt;</description>
      <shortDescription>&lt;div class="ExternalClass0C37E951938F465F93C4CDEA4A3DC62B"&gt;&lt;p&gt;SQL Saturday will be held March 16 at Microsoft Portugal, Lisbon, 1990-110, Portugal. As you know, this event is a free training event for SQL Server Pofessionals and SQL Server lovers. This event is about to beat the record of 320+ registrations!&lt;/p&gt;
&lt;p&gt;We are proud to announce that from a total of 31 speakers, 5 are part of the SolidQ team:&lt;/p&gt;
&lt;table width="603" border="0" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="131" valign="top"&gt;&lt;img width="101" height="121" src="/SolidQ/PublishingImages/Mentors/regisbaccaro.jpg" alt="" style="display:block;float:none;margin-left:auto;margin-right:auto" /&gt;&lt;/td&gt;
&lt;td width="340" valign="top"&gt;&lt;a href="http://www.sqlsaturday.com/viewsession.aspx?sat=188&amp;amp;sessionid=11962" target="_blank"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;&lt;a href="http://www.twitter.com/regbac" target="_blank"&gt;&lt;u&gt;&lt;img src="/SolidQ/PublishingImages/Mentors/twittericon%2016px.png" alt="" /&gt;&lt;/u&gt;&lt;/a&gt; &lt;a href="http://www.twitter.com/regbac" target="_blank"&gt;Régis Baccaro | Database development with SSDT&lt;/a&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="1"&gt;“In this session we'll dive into Online and Offline development as well as...&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</shortDescription>
      <category name="Events" urlAbsolute="http://blogs.solidq.com/Pages/Home.aspx?category=Events" nameEnconded="Events" />
      <dc:language name="http://blogs.solidq.com/Pages/Home.aspx?language=English" nameEncoded="English" xmlns:dc="http://purl.org/dc/elements/1.1/"></dc:language>
    </item>
  </channel>
</rss>