Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
mcclurej
Helper I
Helper I

La importación de datos desde Oracle Database a través de un editor avanzado da como resultado el desplazamiento de fechas

Tengo una consulta específica creada y almacenada en Oracle como una vista:

SELECT
	TEAM_ASSIGNED
,	REPORT_YEAR
,	REPORT_MONTH
,	REPORT_MONTH_NUM
,	REPORT_DAY
,	REPORT_DAY_NUM
,	REPORT_DATE
,	REPORT_PERIOD_FLAG
,	INCOMING
,	TRIAGE_AND_TRANSFERRED
,	RESOLVED
,	BALANCE
FROM SCHEMA_NAME.VW_CRM_INCIDENTS_HISTORY
WHERE 1=1
AND REPORT_DATE = '01/NOV/20'

Los tipos de datos son:

TEAM_ASSIGNED	        VARCHAR2(256)
REPORT_YEAR	        VARCHAR2(4)
REPORT_MONTH	        VARCHAR2(3)
REPORT_MONTH_NUM	VARCHAR2(2)
REPORT_DAY	        VARCHAR2(9)
REPORT_DAY_NUM	        VARCHAR2(2)
REPORT_DATE	        DATE
REPORT_PERIOD_FLAG	CHAR(14)
INCOMING	        NUMBER
TRIAGE_AND_TRANSFERRED	NUMBER
RESOLVED	        NUMBER
BALANCE	                NUMBER

Cuando ejecuto la consulta anterior en Oracle, obtengo cero resultados (como se esperaba). Sin embargo, cuando ejecuto la consulta en Power BI, obtengo varios miles de filas!
Al quitar el filtro de fechas se muestra que todas las fechas REPORT_DATE han tenido un desplazamiento de -1 día para ellos. Lo que es aún más extraño es que el valor REPORT_DAY se muestra como SUNDAY aunque no haya absolutamente ningún domingo en el conjunto de datos. La siguiente función es lo que se utiliza para crear el campo REPORT_DAY:

    , CASE WHEN TO_CHAR(TRANSACTION_DATE,'D') = 6 
            THEN TO_CHAR(TRANSACTION_DATE + 2,'DAY') 
            ELSE 
      CASE WHEN TO_CHAR(TRANSACTION_DATE,'D') = 7 
            THEN TO_CHAR(TRANSACTION_DATE + 1,'DAY') 
            ELSE 
      CASE WHEN TO_CHAR(TRANSACTION_DATE,'HH24') >= 17 
            AND TO_CHAR(TRANSACTION_DATE + 1,'D') = 6 
            THEN TO_CHAR(TRANSACTION_DATE + 3,'DAY') 
            ELSE 
      CASE WHEN TO_CHAR(TRANSACTION_DATE,'HH24') >= 17 
            THEN TO_CHAR(TRANSACTION_DATE + 1,'DAY') 
            ELSE TO_CHAR(TRANSACTION_DATE,'DAY') 
      END END END END AS REPORT_DAY 

Puede ver que estamos moviendo explícitamente el REPORT_DAY hacia adelante hasta el lunes donde es sábado, o domingo, o viernes después de las 5 p. m.

Mi sospecha es que Power BI está analizando de alguna manera toda la vista en Power BI antes de enviarla al analizador de Oracle Query para que se ejecute. De este modo, se utilizan los valores de zona horaria y fecha internos de Power BI (por ejemplo, NLS de Power BI) en lugar del servidor de Oracle para el que se supone que se ejecuta la consulta.

¿Es esto cierto, o hay otra explicación, y alguien tiene un método para resolver este problema?

PD: Debo mencionar que la función REPORT_DATE es la siguiente:

    , CASE WHEN TO_CHAR(TRANSACTION_DATE,'D') = 6 
            THEN TRUNC(TRANSACTION_DATE + 2) 
            ELSE 
      CASE WHEN TO_CHAR(TRANSACTION_DATE,'D') = 7 
            THEN TRUNC(TRANSACTION_DATE + 1) 
            ELSE 
      CASE WHEN TO_CHAR(TRANSACTION_DATE,'HH24') >= 17 
            AND TO_CHAR(TRANSACTION_DATE + 1,'D') = 6 
            THEN TRUNC(TRANSACTION_DATE + 3) 
            ELSE 
      CASE WHEN TO_CHAR(TRANSACTION_DATE,'HH24') >= 17 
            THEN TRUNC(TRANSACTION_DATE + 1) 
            ELSE TRUNC(TRANSACTION_DATE) 
      END END END END AS REPORT_DATE 

actualizar:
He reducido el problema a la declaración 'D' de la función TO_CHAR:

mcclurej_0-1607043103878.png

1 ACCEPTED SOLUTION
mcclurej
Helper I
Helper I

Así que trabajar alrededor es quitar todas las referencias a TO_CHAR([DATE],'D') y en su lugar usar TO_CHAR([DATE],'DY') Solo puedo suponer que esto es porque los servidores de Power BI comienzan sus semanas el domingo en lugar del lunes, y por lo tanto todos los números de día comienzan un día antes. Afortunadamente, los nombres de día permanecen iguales, por lo que puede utilizar la función DY para buscar MON para comenzar su semana.

View solution in original post

1 REPLY 1
mcclurej
Helper I
Helper I

Así que trabajar alrededor es quitar todas las referencias a TO_CHAR([DATE],'D') y en su lugar usar TO_CHAR([DATE],'DY') Solo puedo suponer que esto es porque los servidores de Power BI comienzan sus semanas el domingo en lugar del lunes, y por lo tanto todos los números de día comienzan un día antes. Afortunadamente, los nombres de día permanecen iguales, por lo que puede utilizar la función DY para buscar MON para comenzar su semana.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.