Filtrar declaración SQL

Un usuario Pregunto ✅

Raul

Hola todos,

Tengo esta fuente de consulta SQL para un archivo de Power BI:

WITH TotalCostes1 AS (SELECT SUM(Coste) AS TCoste1, [Cod_ cliente], Areas
FROM dbo.AuxFact AS F1
WHERE (CodConcepto = 'FFGO' AND ([Fecha registro] Between '20180101' and '20181031') OR
([Fecha registro] Between '20180101' and '20181031') AND (Tipo = 'Abono')
GROUP BY [Cod_ cliente], Areas), 
TotalCostes2 AS (SELECT SUM(Coste) AS TCoste2, [Cod_ cliente]
FROM dbo.AuxFact AS F2
WHERE ([Fecha registro] Between '20180101' and '20181031') AND (Areas="FIS")
GROUP BY [Cod_ cliente])

SELECT dbo.AuxFact.Colaborador, dbo.AuxFact.Horas, dbo.AuxFact.Coste, dbo.AuxFact.[Fecha registro], dbo.AuxFact.Areas, 
dbo.AuxFact.Delegacion, dbo.AuxFact.[Cod_ cliente], CAST(dbo.AuxFact.Facturacion AS FLOAT) AS Facturacion,
CASE WHEN AuxFact.Areas="FIS" THEN TCoste1 - ISNULL(TCoste2, 0) ELSE TCoste1 END AS TmpCost 
FROM dbo.AuxFact LEFT OUTER JOIN
TotalCostes2 AS TC2 ON dbo.AuxFact.[Cod_ cliente] = TC2.[Cod_ cliente] LEFT OUTER JOIN
TotalCostes1 AS TC1 ON dbo.AuxFact.[Cod_ cliente] = TC1.[Cod_ cliente] AND dbo.AuxFact.Areas = TC1.Areas

El SQL declaración tiene un filtro de fecha fija (entre ‘20180101’ y ‘20181031’) que quiero que se seleccione como variable en el filtro de informe de Power BI:

Filtro.jpg

¿Cómo puedo hacer que el filtro de fecha seleccionado en el Informe de Power BI aplicado en la declaración SQL devuelva los valores para este período?

Muchísimas gracias.

hola @Raul

La segmentación en el informe es un filtro para el modelo de datos y debe usar Parámetros en Power Query

aquí hay un blog para que se refiera a:

https://www.mssqltips.com/sqlservertip/4475/using-parameters-in-power-bi/

Atentamente,

Lin

Raul

En respuesta a v-lili6-msft

Gracias @ v-lili6-msft por tu publicación, pero creo que esta no es la mejor opción para mí porque no quiero especificar ningún parámetro. Quiero seleccionar un período de fecha en la cortadora y luego, aplicar este período para filtrar la oración SQL.

Creo que la mejor opción es cambiar la declaración SQL. Necesito el TotalCoste (731,53) y el TotalFacturacio (2.913,18) para un Cliente (BAST), Áreas (LAB) y período de fecha (01/01 / 2018-30 / 11/2018) especificado con los filtros (segmentaciones ) del informe para crear una columna de cálculo: Rep = (Coste * TotalFacturacio) / TotalCoste (TotalFacturacio no se especifica en el ejemplo de consulta SQL)

Intenté con una medida dentro del archivo Power BI, pero el rendimiento no es posible (cuando no aplico ningún filtro, el informe se bloquea). Por eso lo hago dentro de la consulta SQL.

¿Alguien tiene una consulta optimizada?

En respuesta a Raul

hola @Raul

Sé lo que quiere, pero en power bi, la declaración SQL se usa para obtener datos para la fuente de datos,

pero la segmentación solo se puede usar para filtrar el modelo de datos en el informe, también la columna de cálculo o la tabla de cálculo no pueden verse afectadas por ninguna segmentación.

La cortadora solo puede afectar calcular la medida.

https://www.sqlbi.com/articles/calculated-columns-and-measures-in-dax/

para su requerimiento, puede intentar crear una medida y luego usar el filtro de nivel visual para filtrar si no la segmentación se muestra en blanco.

Atentamente,

Lin

Raul

En respuesta a v-lili6-msft

Hola @ v-lili6-msft y gracias.

Cuando tu dices «luego use el filtro de nivel visual para filtrar si la cortadora no se muestra en blanco «, ¿qué quieres decir? No te entiendo.

Saludos.

En respuesta a Raul

hola @Raul

Por ejemplo:

Paso 1:

Cree una tabla de hechos para el campo que sería arrastrado a la cortadora

En mi pbix de muestra, usaría Period

luego crea una relación entre ellos

201812034

Paso 2:

Puede intentar usar SELECTEDVALUE o ISFILTER para crear una medida simple como la que se muestra a continuación:

Measure 11 = IF(ISFILTERED(InvoiceDetail[Period])=TRUE(),1,2)

Measure 12 = IF(ISBLANK(SELECTEDVALUE(InvoiceDetail[Period]))=TRUE(),2,1)

Luego arrastre la medida al filtro de nivel visual

p.ej. Arrastro la Medida 11 al filtro de nivel visual y establezco el filtro en 1

2018125201812035

Además, puede copiar una columna de período

y usa estos dos elementos visuales

Measure 11 = IF(ISFILTERED(InvoiceDetail[Period filter]),1)

Measure 12 = IF(ISBLANK(SELECTEDVALUE('InvoiceDetail'[Period filter]))=FALSE(),1)

luego arrastre el campo de copia a la cortadora

201812036201812037

https://docs.microsoft.com/en-us/power-bi/power-bi-report-add-filter

aquí están mis dos archivos pbix, inténtelo.

https://www.dropbox.com/s/dfwi75ksjffmo91/test4.pbix?dl=0

https://www.dropbox.com/s/yahgvm0vp1mk7k0/test5.pbix?dl=0

Atentamente,

Lin

Raul

En respuesta a v-lili6-msft

Hola @ v-lily6-msft,
Muchas gracias por su explicación completa y su ejemplo, es muy claro y comprensible, pero no resuelva mi problema con el filtro de fecha o las medidas.
¿Alguien tiene otra sugerencia? Gracias.

TomMartens

En respuesta a Raul

Hola @Raul,

por lo que hay algunos puntos que deben tenerse en cuenta:

  • el modo de conexión «consulta directa» permite consultar de forma interactiva los datos de SQL Server pero no permite crear columnas calculadas, solo medidas
  • el modo de conexión «importar» permite «columnas calculadas», pero el número de filas es fijo hasta la próxima actualización de datos

Desde mi punto de vista, la mayor flexibilidad se obtiene al importar los datos a Power BI o usar Analysis Services Tabular (en las instalaciones o con Azure) si el tamaño del modelo de datos excede Power BI Desktop o el tamaño disponible para los conjuntos de datos en Power. Servicio BI.

¿Cuál es el número actual de filas / columnas y cuál es su crecimiento esperado para los próximos años?

Tal vez, si proporciona algunos datos de muestra, podamos proporcionar algunas declaraciones DAX, que superarán los problemas de rendimiento que enfrenta.

Gracias,

Tomás

Raul

En respuesta a TomMartens

Hola @TomMartens,

Este es un ejemplo de mi archivo Power BI. El número total de registros en este momento es de unos 320.000 y crece alrededor de 100.000 por año. El número de columnas es aproximadamente 15.

Archivo PWBI

No sé si las fórmulas de las medidas TempCOST, TempFACT y Distribución son la mejor opción. En la visualización de la tabla final no se muestran las medidas TempCOST y TempFACT.

Gracias por tu ayuda.

Deja un comentario

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