Problema:
Construyes un informe en Report Server (SSRS) que presenta datos cubo en Analisys services (SASS) con una dimensión fecha. Que se ordena alfabéticamente, por ejemplo Diciembre va antes que Enero (abcDE...)
Solución:
En el editor de consultas Define columnas calculadas para obtener el valor de la fecha:
WITH fechaOrden AS fecha.value
Luego usa estas columnas para ordenar.
Comentario:
A veces basta con eleminar el orden defnido en SSRS pero esto crea una dependencia de el orden definido para esa dimensión en el SSAS.
lunes, 4 de junio de 2012
lunes, 14 de mayo de 2012
Error "Caracter no valido" al cargar el marco de trabajo Ajax
Sintomas:
Al cargar el marco de trabajo Ajax.net te sale un error relativo a que no puede cargar un recurso por n caracter no valido, algo así como:
Mensaje: Carácter no válido
Línea: 1
Carácter: 1
Código: 0
URI: http://localhost:49572/ScriptResource.axd?d=Ykf5uYfHLMOTN8BtRqtc_ruMw6ZUqBJt1OWGfKlZYuW4OHPrfqn4T155wLMKQKT-TTe0QdvV3eMPsjF89c0QYJJ0GQLiUNzcqJeL0f297udP4iRwm7UHGN9_c62CjU2yISoaK-KhDs4-39z8_boNcg2&t=ffffffffbad362a4
Solución:Introduce en el Web Config la siguiente sección:
Parece que el problema está en la compresión y el IE8
Solución obtenida en este blog
lunes, 23 de abril de 2012
Cuartiles en SSAS
Problema:
Obtener los cuartiles en un cubo Microsoft Analysys Services.
Solución: La función para calcular cuartiles no existe en MDX. Existen varias formas de calcularlos como puede leerse en este interesante articulo de ElectroVoid, pero la optima es usar una procedimiento almacenado SSAS.
Hay que desarrollarlo en un lenguaje .NET, en el articulo mencionado utilizan C#, yo aportó aquí el código VB.NET.
Luego añadir el ensamblado al servidor SSAS, a la base de datos o al proyecto (ver msdn) Si alguien necesita la ddl que me lo diga.<(p>
Obtener los cuartiles en un cubo Microsoft Analysys Services.
Solución: La función para calcular cuartiles no existe en MDX. Existen varias formas de calcularlos como puede leerse en este interesante articulo de ElectroVoid, pero la optima es usar una procedimiento almacenado SSAS.
Hay que desarrollarlo en un lenguaje .NET, en el articulo mencionado utilizan C#, yo aportó aquí el código VB.NET.
Imports Microsoft.AnalysisServices
Namespace Percentiles
Public Class Percentil
_
Public Shared Function Cuartil(ByVal conjunto As AdomdServer.Set, _
ByVal expr As AdomdServer.Expression, _
ByVal Qtile As Integer) As AdomdServer.MDXValue
If Qtile < 0 Or Qtile > 4 Then Throw New ArgumentOutOfRangeException(Qtile)
Dim valores = New List(Of Double)
For Each tupla In conjunto.Tuples
Dim mdxVal = expr.Calculate(tupla)
If mdxVal.ToChar <> ChrW(0) Then valores.Add(mdxVal.ToDouble)
Next
If valores.Count > 0 Then
valores.Sort()
Dim cuenta = valores.Count
If (Qtile = 4) OrElse (cuenta = 1) Then Return (AdomdServer.MDXValue.FromDouble(valores.Item(cuenta - 1)))
Dim porcentaje As Double = CDbl(Qtile) / 4.0
Dim qidx As Double = porcentaje * CDbl(cuenta - 1)
Dim qfloor = Math.Floor(qidx)
Dim qfrac = qidx - qfloor
Return AdomdServer.MDXValue.FromDouble( _
valores.Item(CInt(qfloor)) _
+ (qfrac * (valores.Item(CInt(qfloor + 1)) _
- valores.Item(CInt(qfloor)) _
)) _
)
Else
Return Nothing
End If
End Function
_
Public Shared Function CuartilOrdenado(ByVal conjunto As AdomdServer.Set, _
ByVal expr As AdomdServer.Expression, _
ByVal Qtile As Integer) As AdomdServer.MDXValue
'En esta versión la llamada debe realizarse con el conjunto ordenado y sin valores vacios
If Qtile < 0 Or Qtile > 4 Then Throw New ArgumentOutOfRangeException(Qtile)
Dim valores = New List(Of Double)
For Each tupla In conjunto.Tuples
Dim mdxVal = expr.Calculate(tupla)
valores.Add(mdxVal.ToDouble)
Next
If valores.Count > 0 Then
Dim cuenta = valores.Count
If (Qtile = 4) OrElse (cuenta = 1) Then Return (AdomdServer.MDXValue.FromDouble(valores.Item(cuenta - 1)))
Dim porcentaje As Double = CDbl(Qtile) / 4.0
Dim qidx As Double = porcentaje * CDbl(cuenta - 1)
Dim qfloor = Math.Floor(qidx)
Dim qfrac = qidx - qfloor
Return AdomdServer.MDXValue.FromDouble( _
valores.Item(CInt(qfloor)) _
+ (qfrac * (valores.Item(CInt(qfloor + 1)) _
- valores.Item(CInt(qfloor)) _
)) _
)
Else
Return Nothing
End If
End Function
End Class
End Namespace
Observad que he creado dos metodos, en el primero incluyo el ordenado y la eliminación de elementos vacios, en el segundo espero recibir el conjunto con estas tareas realizadas.percentiles.cuartilOrdenado(
ORDER(
NONEMPTY
(descendants([DimEmpresas].[Facturacion].currentmember, [DimEmpresas].[Facturacion].[Empresa])
,[Measures].[% A-1 VN Euros]
)
,[Measures].[% A-1 VN Euros]
,BASC
)
,[Measures].[% A-1 VN Euros]
,3)
Para desarrollar la aplicación instalar SSAS en la máquina de desarrollo y añadi una referencia a msmgdsrv.dll en C:\Archivos de programa\Microsoft SQL Server\MSAS10_50.MSSQLSERVER\OLAP\binLuego añadir el ensamblado al servidor SSAS, a la base de datos o al proyecto (ver msdn) Si alguien necesita la ddl que me lo diga.<(p>
jueves, 12 de abril de 2012
Crear una tabla desde una lista separada por comas
La siguiente función devuelve una tabla desde una lista de números separados por comas:
FUNCTION [dbo].[fnSplitCSVxml]
(@NumberList VARCHAR(4096))
RETURNS @SplitList TABLE( ListMember INT)
AS
BEGIN
DECLARE @xml XML
SET @NumberList = LTRIM(RTRIM(@NumberList))
IF LEN(@NumberList) = 0
RETURN
SET @xml = '' + REPLACE(@NumberList,',','') + ''
INSERT INTO @SplitList
SELECT x.i.value('.','VARCHAR(MAX)') AS Member
FROM @xml.nodes('//n') x(i)
RETURN
END
Tiene diversas aplicaciones del tipo:
SELECT A from B Where B.c in dbo.fnSplitList(@cadena)
Pero es especialmente interesante para informes de Report Server que usen parametros con multiples valores.
Archivo del blog
-
►
2015
(22)
- ► septiembre (1)
-
►
2013
(34)
- ► septiembre (3)
-
►
2012
(38)
- ► septiembre (2)
-
►
2011
(28)
- ► septiembre (2)
-
►
2010
(17)
- ► septiembre (2)
Etiquetas
- VB.NET (25)
- REPORT SERVER (14)
- SSRS (14)
- ASP.NET (13)
- umbraco (10)
- MVC (8)
- RSSS (8)
- SCCM (7)
- SSAS (6)
- WSUS (6)
- exchange (6)
- jquery mobile (6)
- VISUAL STUDIO (5)
- jquery (5)
- BLAZOR (4)
- Outlook (4)
- VMWARE (4)
- VS2012 (4)
- D3 (3)
- END POINT SECURITY (3)
- FOREFRONT TMG (3)
- IIS7.5 (3)
- JSON (3)
- PDF (3)
- Sharepoint (3)
- WINFORMS (3)
- Windows 10 (3)
- piwik (3)
- url-rewrite (3)
- BIDS (2)
- CUMULUS (2)
- D3JS (2)
- EF5 (2)
- HttpClient (2)
- IE10 (2)
- LINQ (2)
- T-SQL (2)
- VCENTER (2)
- VS2010 (2)
- Windows (2)
- chrome (2)
- forefront (2)
- javascript (2)
- reportviewer (2)
- windows 8 (2)
- AJAX (1)
- AJAX.NET (1)
- ANALYTICS (1)
- APACHE (1)
- BLOGGER (1)
- C# (1)
- C#8 (1)
- CANTO (1)
- DICTIONARY (1)
- DOTNET.ZIP (1)
- EF6 (1)
- Entity Framework 5 (1)
- Forefront DTS SQL (1)
- GOBI (1)
- Google analytics (1)
- HP (1)
- IE9 (1)
- ITEXTSHARP (1)
- LINQ TO XML (1)
- LSSI (1)
- MDX (1)
- MudBlazor (1)
- NRT (1)
- NuGet (1)
- Office365 (1)
- Outlook OAuth2 Office365 (1)
- Outlook app (1)
- PODDLE (1)
- Powershell (1)
- QRCode.js (1)
- RAZOR (1)
- SERVICIOS WEB (1)
- SSL (1)
- TLS (1)
- TMG (1)
- ToolScriptManager (1)
- VCard (1)
- VMWare Converter (1)
- VS2015 (1)
- VS2019 (1)
- VS2022 (1)
- Virtualbox (1)
- WAN (1)
- WASM (1)
- WCF (1)
- WEBAPI (1)
- WEBASSEMBLY (1)
- WINDOWS FORMS (1)
- Windows Server Update Services (1)
- Windows update (1)
- XML (1)
- android (1)
- cortana (1)
- courier (1)
- examine (1)
- iSCSI (1)
- ipad (1)
- java (1)
- jquery.steps (1)
- jquery.validator (1)
- metro (1)
- tasktask (1)
- tinyMCE (1)
- vizdata (1)