lemarcfj
Hola,
Necesito desesperadamente una fórmula DAX o una consulta que deduzca de manera efectiva los datos de Facebook Ads provenientes de mi almacén de BigQuery. Utilizo una herramienta ETL para replicar automáticamente los datos de FB Ads al almacén. Dado que tenemos un almacén de solo anexos, las filas repetidas de la ventana de atribución de 28 días de Facebook se agregan y dan como resultado valores duplicados para diferentes dimensiones (campañas). La herramienta ETL (llamada Stitch) que se proporciona aquí proporciona esta consulta de muestra:
SELECCIONAR DISTINTO o. *
DESDE [stitch-analytics-bigquery-123:ecommerce.orders] o
UNIR INTERNAMENTE (
SELECCIONAR ID,
MAX (_sdc_sequence) AS seq,
MAX (_sdc_batched_at) COMO lote
DESDE [stitch-analytics-bigquery-123:ecommerce.orders]
GRUPO POR id) oo
ON o.id = oo.id
Y o._sdc_sequence = oo.seq
Y o._sdc_batched_at = oo.batch
Este enfoque utiliza una subconsulta para obtener una lista única de la clave principal de cada fila, el número de secuencia máximo (_sdc_sequence) y la marca de tiempo máxima por lotes en (_sdc_batched_at). Dado que es posible tener registros duplicados en su almacén, la consulta también selecciona solo registros distintos de la última versión de la fila. Luego une la tabla original a la Clave principal, la secuencia máxima y el máximo de lotes, lo que hace que todos los demás valores de columna estén disponibles para consultas.
¿Alguien puede ayudarme con una fórmula / consulta DAX que se adapte a lo que necesito? Adjunto un archivo de Excel con datos de muestra y columnas _sdc del ejemplo anterior. También tiene el aspecto que tendría una tabla deducida ideal. ¡Gracias por adelantado!
yan
En respuesta a v-yuezhe-msft
@lemarcfj estás en el camino equivocado. Evite la deduplicación en el lado del cliente, ya que necesitaría importar todo antes de hacerlo, a menos que PowerQuery sea lo suficientemente inteligente como para desplegarse correctamente (es decir, traducir a SQL nativo).
Es mejor deducir el lado de BQ e importar el conjunto de datos filtrado en su lugar.
1. No utilice una vista de BigQuery para deduplicar sobre la marcha, ya que es probable que esto sea lento.
2. Instale una tabla separada que contenga los registros únicos de ‘campaña’; puede programar dicha consulta en BQ para que se ejecute diariamente, por ejemplo
3. Una vez que se crea / actualiza la tabla, consulte esa en PowerBI. Evitaría el controlador ODBC y puede usar el conector de BigQuery integrado tal cual (y aprovechar DirectQuery).
Sin embargo, su lógica de depup no está clara y necesita una revisión; por ejemplo, pensé que estaría interesado en sumar el gasto en lugar del último. Aun así, probablemente terminará usando una función de ventana como ROW_NUM () para ordenar por lo que sea y mantener el primer registro de cada ventana (por ejemplo, campaña).
Puede buscar en Stackoverflow, ya que muchos ya han preguntado cómo deduplicar, o puede hacer una nueva pregunta si es lo suficientemente específico.
v-yuezhe-msft
@lemarcfj,
Crea la siguiente columna en tu tabla.
RANK = RANKX(FILTER('Raw','Raw'[Facebook Campaign]=EARLIER('Raw'[Facebook Campaign])&&'Raw'[_sdc_sequence]=EARLIER('Raw'[_sdc_sequence])),'Raw'[_sdc_batched_at],,DESC)
Crea las siguientes medidas en tu tabla.
MAXSDC_SEQUENCE = CALCULATE(MAX('Raw'[_sdc_sequence]),ALLEXCEPT('Raw','Raw'[Facebook Campaign]))
chkmeasure = IF(MAX('Raw'[_sdc_sequence])=[MAXSDC_SEQUENCE]&&MAX('Raw'[RANK])=1,1,0)
Cree una tabla visual como se muestra en la siguiente captura de pantalla, arrastre chkmeasure al filtro de nivel visual y establezca su valor en 1.
Saludos,
Lydia
lemarcfj
En respuesta a v-yuezhe-msft
Creo que necesito que se complete toda esta consulta al ingresar al modelo de datos para que los datos que estoy presentando en los paneles ya se extraigan de la tabla más «reciente». No tengo los recursos internos para escribir la consulta directamente en BigQuery. ¿Cómo se puede hacer esto para que los datos extraídos en el modelo utilicen esta consulta?
Otro ejemplo de dónde esto es un problema es si un Campaign_Name no tiene un 1 = verdadero, obtendrá valores en blanco, lo que sería el caso siempre que no incluya la fecha de lote más reciente incluida en el filtro. ¿Tiene sentido?
lemarcfj
En respuesta a v-yuezhe-msft
Disculpas, puedes ignorar el último mensaje. Le faltaba un símbolo al DAX. Su solución parece estar funcionando parcialmente, ya que de hecho extrajo un número más cercano a un valor deducido, pero faltan algunos de los campain_name. La lógica que identifica los nombres de campaña con un 1 o 0 no considera TODAS las variantes de nombre de campaña.
v-yuezhe-msft
En respuesta a lemarcfj
@lemarcfj,
¿Podría publicar todos los datos en su tabla y publicar el resultado esperado basado en los datos de muestra?
Además, cuando se usa el conector de Google BigQuery en Power BI Desktop, no es posible escribir una declaración SQL. Un método es crear una fuente de datos ODBC para bigQuery y luego conectarse a la fuente de datos ODBC junto con la declaración SQL.
Saludos,
Lydia
yan
En respuesta a v-yuezhe-msft
@lemarcfj estás en el camino equivocado. Evite la deduplicación en el lado del cliente, ya que necesitaría importar todo antes de hacerlo, a menos que PowerQuery sea lo suficientemente inteligente como para desplegarse correctamente (es decir, traducir a SQL nativo).
Es mejor deducir el lado de BQ e importar el conjunto de datos filtrado en su lugar.
1. No utilice una vista de BigQuery para deduplicar sobre la marcha, ya que es probable que esto sea lento.
2. Instale una tabla separada que contenga los registros únicos de ‘campaña’; puede programar dicha consulta en BQ para que se ejecute diariamente, por ejemplo
3. Una vez que se crea / actualiza la tabla, consulte esa en PowerBI. Evitaría el controlador ODBC y puede usar el conector de BigQuery integrado tal cual (y aprovechar DirectQuery).
Sin embargo, su lógica de depup no está clara y necesita una revisión; por ejemplo, pensé que estaría interesado en sumar el gasto en lugar del último. Aun así, probablemente terminará usando una función de ventana como ROW_NUM () para ordenar por lo que sea y mantener el primer registro de cada ventana (por ejemplo, campaña).
Puede buscar en Stackoverflow, ya que muchos ya han preguntado cómo deduplicar, o puede hacer una nueva pregunta si es lo suficientemente específico.
lemarcfj
En respuesta a yan
Gracias por su respuesta. Sospeché que tendría más sentido deducir del lado BQ y lo acabas de confirmar. Pude obtener la consulta que necesito para que esto suceda, pero desafortunadamente soy más una estrategia híbrida / analista técnico y no sabría qué hacer con la consulta dentro de la interfaz de BQ en lo que respecta a la programación. Y qué no.
yan
En respuesta a lemarcfj
De todos modos, no para este foro de PowerBI.
Investigue en línea o comuníquese con Stackoverflow. En este último, muestre señales de que intentó algo, ya que la comunidad está ahí para ayudar, no para brindar consultoría gratuita. Por cierto, muchos de nosotros tenemos sombreros híbridos, soy un asesor fiscal, así que vea esto como una oportunidad de aprendizaje. 😉
Buena suerte !
lemarcfj
En respuesta a yan
Hola,
Pude hacer que mi consulta funcionara en el lado de BQ, gracias por su sugerencia. No escribí personalmente la consulta, pero de todos modos funcionó.
Espero poder averiguar cómo se define / selecciona la clave principal para poder reutilizar la consulta para otras tablas para las que tengo este problema. Gracias de nuevo.
LeMarc
lemarcfj
En respuesta a v-yuezhe-msft
Gracias. Intenté agregar la columna calculada usando:
RANK = RANKX (FILTER (‘FB_ads_insights’, ‘FB_ads_insights'[campaign_name]= ANTES (‘FB_ads_insights'[campaign_name]) & ‘FB_ads_insights'[_sdc_sequence]= ANTES (‘FB_ads_insights'[_sdc_sequence])), ‘FB_ads_insights'[_sdc_batched_at],, DESC)
Y obtuve el siguiente error: Las operaciones de comparación de DAX no admiten la comparación de valores de tipo True / False con valores de tipo Text. Considere usar la función VALOR o FORMATO para convertir uno de los valores.
Observe que utilicé los nombres verdaderos de la tabla / columna aquí. ¿Qué columnas deben tener qué formato? Sdc_sequence viene como un número decimal pero se está convirtiendo a notación científica en Power BI (134343 + N) o como se llame. ¿Debería convertir eso a un formato diferente?
Greg_Deckler
Los datos de muestra y el resultado esperado ayudarían enormemente. ¿Importa si la solución está en DAX o Power Query? Consulte esta publicación sobre cómo obtener una respuesta rápida a su pregunta: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490
lemarcfj
En respuesta a Greg_Deckler
Disculpas por eso. No me importa lo que sea, siempre que obtenga lo que necesito. Me imagino que esto sería más una Power Query.
Los datos de muestra se pueden encontrar aquí.
v-yuezhe-msft
En respuesta a lemarcfj
@lemarcfj,
¿Podría describir más detalles sobre la lógica que usa para obtener datos deducidos de la tabla sin procesar? Intento ejecutar la consulta SQL que proporcionaste, pero encontré que no hay una columna de identificación en el archivo de Excel de muestra.
Saludos,
Lydia
lemarcfj
En respuesta a v-yuezhe-msft
Entonces, esa consulta SQL fue solo una consulta de muestra que encontré en la publicación del blog de Slack aquí. En mi archivo de muestra, creo que la dimensión que nos gustaría usar en lugar de «id» sería el nombre de la campaña, ya que esa es la dimensión con la que me gustaría ver los datos y luego una métrica de gasto deducida.
lemarcfj
En respuesta a lemarcfj
Hola,
¡Sí! Como un FYI, esa consulta de muestra que proporcioné no tiene relación con mi conjunto de datos de muestra. La consulta debe adaptarse a mi conjunto de datos y a lo que espero lograr. Entonces, si bien la consulta logrará la deduplicación, no es una consulta que se haya creado específicamente para mí. Dicho eso si [Facebook Campaign] es mi dimensión principal.
Muchas gracias por su ayuda con esto.
v-yuezhe-msft
En respuesta a lemarcfj
@lemarcfj ,
¿Podría describir la lógica que utiliza para obtener la fecha de datos duplicados basada en datos de muestra?
Saludos,
Lydia
lemarcfj
En respuesta a v-yuezhe-msft
Hola Lydia, avísame si esto ayuda:
Coge la última versión de cada fila
En cada tabla de integración generada por Stitch, verá algunas columnas precedidas de _sdc. La columna en la que nos centraremos aquí es la _sdc_sequence columna. Esta columna es una época de Unix (hasta el milisegundo) adjunta al registro durante la replicación y puede ayudar a determinar el orden de todas las versiones de una fila.
Stitch usa estos valores de secuencia en algunos lugares para ordenar correctamente las filas para la carga, pero también se puede usar para obtener la última versión de un registro en una tabla de solo anexión.
Echemos un vistazo a un ejemplo. Supongamos que tenemos un pedidos tabla que contiene:
- Una clave principal de identificación,
- El sistema _sdc columnas agregadas por Stitch, y
- Otras columnas de atributos de orden
Si desea crear una instantánea de la última versión de esta tabla, puede ejecutar una consulta como esta:
SELECT DISTINCT o.*
FROM [stitch-analytics-bigquery-123:ecommerce.orders] o
INNER JOIN (
SELECT id,
MAX(_sdc_sequence) AS seq,
MAX(_sdc_batched_at) AS batch
FROM [stitch-analytics-bigquery-123:ecommerce.orders]
GROUP BY id) oo
ON o.id = oo.id
AND o._sdc_sequence = oo.seq
AND o._sdc_batched_at = oo.batch
Este enfoque utiliza una subconsulta para obtener una lista única de la clave principal de cada fila, el número de secuencia máximo y el lote máximo en la marca de tiempo. Dado que es posible tener registros duplicados en su almacén, la consulta también selecciona solo registros distintos de la última versión de la fila. Luego une la tabla original a la Clave principal, la secuencia máxima y el lote máximo en, lo que hace que todos los demás valores de columna estén disponibles para consultas.
v-yuezhe-msft
En respuesta a lemarcfj
@lemarcfj,
Quieres decir [Facebook Campaign]? Cuando ejecuto la consulta SQL a continuación en función de su tabla de muestra, no obtuve ningún resultado en
SELECT DISTINCT o.* FROM [stitch-analytics-bigquery-123:ecommerce.orders] o INNER JOIN ( SELECT [Facebook Campaign], MAX(_sdc_sequence) AS seq, MAX(_sdc_batched_at) AS batch FROM [stitch-analytics-bigquery-123:ecommerce.orders] GROUP BY [Facebook Campaign]) oo ON o.[Facebook Campaign] = oo.[Facebook Campaign] AND o._sdc_sequence = oo.seq AND o._sdc_batched_at = oo.batch
Saludos,
Lydia