

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Informes, fuentes de datos y paneles de control del vendedor en AWS Marketplace
<a name="reports-and-data-feed"></a>

Como AWS Marketplace vendedor, puedes utilizar las siguientes herramientas para recopilar y analizar información sobre las ventas de tus productos:
+ [Fuentes de datos](data-feeds.md) que proporcionan información adicional del cliente que puede utilizar para identificar la información del cliente para las transacciones mostradas en los informes.
+ [Paneles](dashboards.md) de control impulsados por [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) con tablas, gráficos e información que le ayudan a acceder a los datos financieros y analizarlos.

AWS Marketplace proporciona la mayor cantidad de datos posible en informes, fuentes de datos y paneles y, al mismo tiempo, cumple con lo siguiente:
+ Estándares y principios de Amazon para proteger los datos de los clientes.
+ Los términos y condiciones que los compradores aceptan cuando compran un producto en AWS Marketplace. Como vendedor, está obligado por contrato a administrar de forma segura los datos del comprador y a eliminar los datos a petición del comprador.

**nota**  
Para cancelar los correos electrónicos de notificación de un informe, póngase en contacto con el equipo de [AWS Marketplace Seller Operations](https://aws.amazon.com/marketplace/management/contact-us/). 

Para obtener más información sobre los informes, las fuentes de datos y los paneles de control, consulte los siguientes temas. AWS Marketplace

**Topics**
+ [Fuentes de datos de entrega de vendedores en AWS Marketplace](data-feed-service.md)
+ [Informes complementarios](supplementary-reports.md)
+ [Paneles de vendedores](dashboards.md)

# Fuentes de datos de entrega de vendedores en AWS Marketplace
<a name="data-feed-service"></a>

AWS Marketplace proporciona fuentes de datos como mecanismo para enviar información estructurada y actualizada sobre productos y clientes desde los sistemas de AWS Marketplace a los buckets de Amazon S3 del vendedor para la ETL (extracción, transformación y carga) entre las herramientas de inteligencia empresarial propiedad del vendedor. Las fuentes de datos recopilan y entregan archivos de valores separados por comas (CSV) a un bucket de Amazon S3 cifrado que proporcione. Las fuentes de datos se generan en un día y contienen 24 horas de datos del día anterior. En esta sección se ofrece información general de las fuentes de datos y se explica cómo acceder a ellas y utilizarlas. Las secciones siguientes describen cada fuente de datos. 

Los datos transaccionales se entregan y se adjuntan en una estructura bitemporal para que los vendedores puedan almacenar y consultar los datos en dos líneas temporales con marcas de tiempo para ambas:
+ Hora válida: cuando un hecho ocurre en el mundo real (“lo que se sabe”).
+ Hora del sistema: cuando ese hecho se registra en la base de datos (“cuando se sabe”).

Las fuentes de datos se envían todos los días a medianoche (UTC) tras una actualización del día anterior que contiene 24 horas de datos del día anterior. Una actualización puede estar definida por la suscripción de un cliente, la facturación a un cliente o el desembolso de un pago por parte de AWS.

**Topics**
+ [Almacenamiento y estructura de las fuentes de datos de AWS Marketplace](data-feed-details.md)
+ [Acceso a fuentes de datos](data-feed-accessing.md)
+ [Recopilación y análisis de datos con fuentes de datos](data-feed-using.md)
+ [Descripción general de las tablas de fuentes de datos](data-feed-joining.md)
+ [Ejemplos de consultas de fuentes de datos](data-feed-full-examples.md)
+ [Data feeds](data-feeds.md)

# Almacenamiento y estructura de las fuentes de datos de AWS Marketplace
<a name="data-feed-details"></a>

AWS Marketplace proporciona fuentes de datos como mecanismo para enviar información estructurada y actualizada sobre productos y clientes desde los sistemas de AWS Marketplace a los buckets de Amazon S3 del vendedor para la ETL (extracción, transformación y carga) entre las herramientas de inteligencia empresarial propiedad del vendedor. En este tema se proporciona más información sobre la estructura y el almacenamiento de las fuentes de datos.

Las fuentes de datos recopilan y entregan archivos de valores separados por comas (CSV) a un bucket de Amazon S3 cifrado que proporcione. Los archivos CSV tienen las siguientes características:
+ Siguen los [estándares 4180](https://tools.ietf.org/html/rfc4180).
+ La codificación de caracteres es UTF-8 sin BOM.
+ Las comas se utilizan como separadores entre valores.
+ El carácter de escape de los campos son las comillas dobles. 
+ `\n` es el carácter de salto de línea.
+ Las fechas se notifican en la zona horaria UTC, están en formato de fecha y hora ISO 8601 y son precisas en un segundo.
+ Todos los valores `*_period_start_date` y `*_period_end_date` son inclusivos, lo que significa que `23:59:59` es la última marca temporal posible de cualquier día. 
+ Todos los campos monetarios van precedidos por un campo de moneda. 
+ Los campos monetarios utilizan un carácter de punto (`.`) como separador decimal y no usan una coma (,) como separador de miles. 

Las fuentes de datos se generan y almacenan de la siguiente manera:
+ Las fuentes de datos se generan en un día y contienen 24 horas de datos del día anterior. 
+ En el bucket de Amazon S3, las fuentes de datos se organizan por mes con el siguiente formato:

  `bucket-name/data-feed-name_version/year=YYYY/month=MM/data.csv`
+ A medida que se genera cada fuente de datos diaria, se agrega al archivo CSV existente de ese mes. Cuando comienza un nuevo mes, se genera un nuevo archivo CSV para cada fuente de datos. 
+ La información en las fuentes de datos se rellena desde 01/01/2010 hasta 30/04/2020 (inclusive) y está disponible en el [archivo CSV](#data-feed-details) de la subcarpeta `year=2010/month=01`.

  Puede observar casos en los que el archivo del mes actual de una fuente de datos determinada contiene solo encabezados de columna y no datos. Esto significa que no hubo entradas nuevas de ese mes para la fuente. Esto puede suceder con fuentes de datos que se actualizan con menos frecuencia, como la fuente de productos. En estos casos, los datos están disponibles en la carpeta rellenada. 
+ En Amazon S3, puede crear una [política de ciclo de vida de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-lifecycle.html) para administrar el tiempo de mantenimiento de los archivos en el bucket. 
+ Puede configurar Amazon SNS para que le notifique cuando los datos se entreguen al bucket de Amazon S3 cifrado. Para obtener más información sobre cómo configurar las notificaciones, consulte [Introducción a Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

## Creación de un historial de los datos
<a name="data-feed-historization"></a>

Cada fuente de datos incluye columnas que documentan el historial de los datos. Excepto `valid_to`, estas columnas son comunes a todas las fuentes de datos. Se incluyen como un esquema de historial común y son útiles para consultar los datos. 


| Nombre de la columna  | Descripción  | 
| --- | --- | 
| valid\$1from | La primera fecha para la que es válido el valor de la clave principal en relación con los valores de otros campos. | 
| valid\$1to | Esta columna solo se muestra en la fuente de datos de [dirección](data-feed-address.md) y siempre está en blanco. | 
| insert\$1date | La fecha en la que se insertó un registro en la fuente de datos. | 
| update\$1date | La fecha en la que se actualizó por última vez el registro.  | 
| delete\$1date | Esta columna siempre está en blanco. | 

A continuación, se muestra un ejemplo de estas columnas. 


|  valid\$1from  |  valid\$1to  |  insert\$1date  |  update\$1date  |  delete\$1date  | 
| --- | --- | --- | --- | --- | 
|  2018-12-12T02:00:00Z  |   |  2018-12-12T02:00:00Z  |  2018-12-12T02:00:00Z  |   | 
|  2019-03-29T03:00:00Z  |   |  2019-03-29T03:00:00Z  |  2019-03-29T03:00:00Z  |   | 
|  2019-03-29T03:00:00Z  |   |  2019-03-29T03:00:00Z  |  2019-04-28T03:00:00Z  |   | 

El campo `valid_from` y `update_date` en conjunto forman un *modelo de datos bitemporal*. El campo `valid_from`, como su propio nombre indica, señala desde qué fecha es válido el elemento. Si el elemento se ha editado, puede tener varios registros en la fuente, cada uno con una `update_date` diferente, pero con la misma fecha `valid_from`. Por ejemplo, para encontrar el valor actual de un elemento, debe buscar el registro con la `update_date` más reciente en la lista de registros con la fecha `valid_from` más reciente.

En el ejemplo anterior, el registro se creó originalmente el 12 de diciembre de 2018. A continuación, se modificó la dirección del registro el 29 de marzo de 2019. Más tarde, el 28 de abril de 2019, se corrigió el cambio de dirección (por lo que `valid_from` no cambió, pero la `update_date` sí). Si se corrige la dirección (algo poco frecuente), se modifica retroactivamente el registro con respecto a la fecha `valid_from` original, por lo que el campo no cambia. Una consulta para buscar la fecha `valid_from` más reciente devolverá dos registros; el que tenga la `update_date` más reciente mostrará el registro actual real.

# Acceso a fuentes de datos
<a name="data-feed-accessing"></a>

Con AWS Marketplace, puede usar fuentes de datos como mecanismo para enviar información estructurada y actualizada sobre productos y clientes desde los sistemas de AWS Marketplace a los buckets de Amazon S3 para la ETL (extracción, transformación y carga) entre las herramientas de inteligencia empresarial propiedad del vendedor. Debe configurar el entorno para recibir fuentes de datos a un bucket de Amazon S3 cifrado. En este tema se muestra cómo acceder a fuentes de datos y cancelar la suscripción a las mismas.

**Topics**
+ [Acceso a una fuente de datos](#data-feed-accessing-procedure)
+ [Políticas de fuentes de datos](#data-feed-policies)
+ [Cancelación de la suscripción a fuentes de datos](#data-feed-unsubscribing)

## Acceso a una fuente de datos
<a name="data-feed-accessing-procedure"></a>

1. Asigne a un ingeniero de inteligencia empresarial o de datos con experiencia en SQL y ETL (extracción, transformación, carga). Esta persona también necesita experiencia en la configuración de API.

1. Configure un bucket de Amazon Simple Storage Service y una suscripción a las fuentes de datos. Utilice el ID de cuenta de vendedor de AWS asociado a sus publicaciones de productos de Marketplace. Para ello, puede [ver este vídeo de YouTube](https://www.youtube.com/watch?v=heCsZdOT-hw) o seguir los pasos que se indican a continuación.

   El vídeo y los pasos explican cómo utilizar una [plantilla de CloudFormation](https://s3.amazonaws.com/aws-marketplace-reports-resources/DataFeedsResources.yaml) que ayuda a simplificar la configuración.

   1. Abra un navegador web, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) y, a continuación, vaya a [Configurar almacenamiento de datos de clientes](https://aws.amazon.com/marketplace/management/reports/data-feed-configuration).

   1. Elija **Crear recursos con la plantilla de CloudFormation** para abrir la plantilla en la consola de CloudFormation en otra ventana.

   1. En la plantilla, especifique lo siguiente y, a continuación, elija **Siguiente**:
      + Nombre de la pila: el conjunto de recursos que se crea para permitir el acceso a las fuentes de datos.
      + Nombre del bucket de Amazon S3: el bucket en el que se almacenan las fuentes de datos.
      + (Opcional) Nombre del tema Amazon SNS: el tema para recibir notificaciones cuando Amazon Simple Storage Service entrega nuevos datos al bucket.

   1. En la página **Revisar**, confirme sus entradas y elija **Crear pila**. Se abrirá una nueva página con el estado y los detalles de CloudFormation.

   1. En la pestaña **Recursos**, copie los nombres de recurso de Amazon (ARN) de los siguientes recursos de la página de CloudFormation en los campos de la página [Configurar almacenamiento de datos de clientes](https://aws.amazon.com/marketplace/management/reports/data-feed-configuration) de AWS Marketplace:
      + Bucket de Amazon S3 para almacenar fuentes de datos
      + Clave de AWS KMS para cifrar el bucket de Amazon S3
      + (Opcional) Tema Amazon SN para recibir notificaciones cuando AWS entrega nuevos datos al bucket de Amazon S3.

   1. En la página **Configurar almacenamiento de datos de clientes**, elija **Enviar**.

   1. (Opcional) Edite las políticas creadas por la plantilla de CloudFormation. Consulte [Políticas de fuentes de datos](#data-feed-policies) para obtener más detalles.

      Ahora está suscrito a las fuentes de datos. La próxima vez que se generen fuentes de datos, puede acceder a los datos.

1. Utilice una operación ETL (extraer, transformar, cargar) para conectar las fuentes de datos a su almacenamiento de datos o base de datos relacional.
**nota**  
Las herramientas de datos tienen distintas capacidades. Debe contar con la participación de un ingeniero de inteligencia empresarial o un ingeniero de datos para configurar la integración de forma que se adapte a las capacidades de la herramienta.

1. Para ejecutar o crear consultas SQL, configure las fuentes de datos para aplicar las claves principales y externas en su herramienta de datos. Cada fuente de datos representa una tabla única y debe configurar todas las fuentes de datos del esquema de datos con las relaciones entre entidades. Para obtener más información acerca de las tablas y las relaciones de entidades, consulte [Descripción general de las tablas de fuentes de datos](data-feed-joining.md) en esta guía.

1. Configure Amazon Simple Notification Service para que actualice automáticamente su almacenamiento de datos o base de datos relacional. Puede configurar las notificaciones de Amazon SNS para enviar alertas cuando los datos de cada fuente única se entreguen a un bucket de Amazon S3. Estas notificaciones se pueden aprovechar para actualizar automáticamente el almacenamiento de datos del vendedor cuando se reciben nuevos datos a través de las fuentes de datos, si la herramienta de datos del vendedor admite esta capacidad. Consulte [Introducción a Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

   Notificaciones de ejemplo:

   ```
   {
           "mainExecutionId": "1bc08b11-ab4b-47e1-866a-9c8f38423a98",
           "executionId": "52e862a9-42d2-41e0-8010-810af84d39b1",
           "subscriptionId": "27ae3961-b13a-44bc-a1a7-365b2dc181fd",
           "processedFiles": [],
           "executionStatus": "SKIPPED",
           "errors": [],
           "feedType": "[data feed name]"
           }
   ```

   Las notificaciones pueden tener los siguientes estados de `executionStatus`:
   + `SKIPPED`: el vendedor no tiene datos nuevos para ese día.
   + `COMPLETED`: hemos enviado la fuente con nuevos datos.
   + `FAILED`: el envío de la fuente tiene un problema.

1. Valide la configuración mediante la ejecución de consultas SQL. Puede usar las [consultas de ejemplo de esta guía](https://docs.aws.amazon.com/marketplace/latest/userguide/data-feed-full-examples.html), o bien las consultas de GitHub, en [https://github.com/aws-samples/aws-marketplace-api-samples/tree/main/seller-data-feeds/queries](https://github.com/aws-samples/aws-marketplace-api-samples/tree/main/seller-data-feeds/queries).
**nota**  
Los ejemplos de consultas de esta guía se han escrito para AWS Athena. Es posible que necesite modificar las consultas para usarlas con sus herramientas.

1. Determine dónde quieren consumir los datos los usuarios empresariales. Por ejemplo, puede hacer lo siguiente:
   + Exporte los datos.csv de su almacenamiento de datos o base de datos SQL.
   + Conecte los datos a una herramienta de visualización como PowerBI o Tableau.
   + Asigne datos a su CRM, ERP o herramientas financieras, como Salesforce, Infor o Netsuite.

Para obtener más información acerca de las plantillas de CloudFormation, consulte [Trabajo con plantillas de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) en la *Guía del usuario de AWS CloudFormation*.

## Políticas de fuentes de datos
<a name="data-feed-policies"></a>

Cuando la plantilla de CloudFormation cree su bucket de Amazon S3, se crearán políticas de acceso asociadas a ese bucket, la clave de AWS KMS y el tema de Amazon SNS. Las políticas permiten al servicio de informes de AWS Marketplace escribir en su bucket y tema de SNS la información de la fuente de datos. Cada política tendrá una sección como la siguiente (este ejemplo es del bucket de Amazon S3).

```
        {
            "Sid": "AwsMarketplaceDataFeedsAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": "reports.marketplace.amazonaws.com"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketAcl",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
```

En esta política, AWS Marketplace utiliza la entidad principal del servicio `reports.marketplace.amazonaws.com` para enviar los datos al bucket de Amazon S3. Ha especificado *amzn-s3-demo-bucket* en la plantilla de CloudFormation.

Cuando el servicio de informes de AWS Marketplace llame a Amazon S3, AWS KMS o Amazon SNS, proporciona el ARN de los datos que pretende escribir en el bucket. Para asegurarse de que los únicos datos que se escriben en su bucket son los que se escriben en su nombre, puede especificar el `aws:SourceArn` en la condición de la política. En el siguiente ejemplo, debe reemplazar el *account-id* del identificador de su Cuenta de AWS.

```
        {
           "Sid": "AwsMarketplaceDataFeedsAccess",
           "Effect": "Allow",
           "Principal": {
                "Service": "reports.marketplace.amazonaws.com"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketAcl",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ,
            "Condition": {
                "StringEquals": {
                        "aws:SourceAccount": "account-id",
                        "aws:SourceArn": ["arn:aws:marketplace::account-id:AWSMarketplace/SellerDataSubscription/DataFeeds_V1",
                        "arn:aws:marketplace::account-id:AWSMarketplace/SellerDataSubscription/Example-Report"]
                        }
                }
        },
```

## Cancelación de la suscripción a fuentes de datos
<a name="data-feed-unsubscribing"></a>

Abra un navegador web e inicie sesión en [Management Portal de AWS Marketplace](https://aws.amazon.com/marketplace/management/). A continuación, vaya a la [página de contacto](https://aws.amazon.com/marketplace/management/contact-us/) para enviar una solicitud de cancelación de suscripción al equipo de operaciones de vendedores de AWS Marketplace. La solicitud de cancelación de suscripción puede tardar hasta 10 días laborables en procesarse.

# Recopilación y análisis de datos con fuentes de datos
<a name="data-feed-using"></a>

AWS Marketplace proporciona fuentes de datos como mecanismo para enviar información estructurada sobre up-to-date productos y clientes desde AWS Marketplace los sistemas a los depósitos de Amazon S3 del vendedor para obtener ETL (extracción, transformación y carga) entre herramientas de inteligencia empresarial propiedad del vendedor. Cuando los datos están disponibles en el bucket de Amazon S3, puede utilizar fuentes de datos de las siguientes maneras:
+ Descargue los archivos .CSV del bucket de Amazon S3 que creó en [Acceso a fuentes de datos](data-feed-accessing.md) para que pueda consultar los datos en una hoja de cálculo.
+ Utilice ETL (extraer, transformar y cargar), consultas SQL, herramientas de análisis empresarial para recopilar y analizar los datos.

  Puede utilizar AWS los servicios para recopilar y analizar datos o cualquier herramienta de terceros que pueda analizar conjuntos de datos basados en archivos.CSV.

Para obtener más información acerca de las fuentes de datos para recopilar y analizar datos, consulte el siguiente ejemplo.

## Ejemplo: utilice los AWS servicios para recopilar y analizar datos
<a name="data-feed-using-example"></a>

En el procedimiento siguiente se supone que ya ha configurado el entorno para recibir fuentes de datos en un bucket de Amazon S3 y que el bucket contiene fuentes de datos.

**Para recopilar y analizar datos de fuentes de datos**

1. Desde la [consola de AWS Glue](https://console.aws.amazon.com/glue), [cree un rastreador](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) para conectarse al bucket de Amazon S3 que almacena las fuentes de datos, extraiga los datos que desee y cree tablas de metadatos en AWS Glue Data Catalog.

   Para obtener más información al respecto AWS Glue, consulte la [https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html).

1. Desde la [consola de Athena](https://console.aws.amazon.com/athena), [ejecute consultas de SQL en los datos de AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/querying-athena-tables.html).

   Para obtener más información sobre Athena, consulte la [https://docs.aws.amazon.com/athena/latest/ug/what-is.html](https://docs.aws.amazon.com/athena/latest/ug/what-is.html). 

1. Desde la [consola rápida](http://quicksight.aws.amazon.com), [cree un análisis](https://docs.aws.amazon.com/quick/latest/userguide/creating-an-analysis.html) y, a continuación, [cree una imagen](https://docs.aws.amazon.com/quick/latest/userguide/creating-a-visual.html) de los datos.

   Para obtener más información sobre Quick, consulta la [https://docs.aws.amazon.com/quick/latest/userguide/welcome.html](https://docs.aws.amazon.com/quick/latest/userguide/welcome.html).

Para ver un ejemplo detallado de una forma de utilizar AWS los servicios para recopilar y analizar datos en fuentes de datos, consulta [Uso del servicio de entrega de feeds de datos del vendedor, Amazon Athena y Quick para crear informes de vendedores](https://aws.amazon.com/blogs/awsmarketplace/using-seller-data-feed-delivery-service-amazon-athena-and-amazon-quicksight-to-create-seller-reports/) en el AWS Marketplace blog.

# Descripción general de las tablas de fuentes de datos
<a name="data-feed-joining"></a>

AWS Marketplace proporciona datos como un conjunto de tablas que puede unir para proporcionar más contexto a sus consultas.

AWS Marketplace proporciona los siguientes dominios generales, o categorías de interés, en sus fuentes de datos:
+ **Catálogo**: incluye información sobre los productos y las ofertas de su cuenta.
+ **Cuentas**: incluye información sobre las cuentas que ofrecen o compran productos AWS Marketplace (sus propias cuentas o las cuentas de las partes con las que trabaja, como socios de canal o compradores).
+ **Ingresos**: incluye información sobre la facturación, los desembolsos y los impuestos.
+ **Adquisiciones**: incluye información sobre los acuerdos de las ofertas de productos que ha creado como vendedor de registro. 

En este diagrama se muestran las tablas en los dominios de catálogo, cuentas e ingresos.

![\[Entity relationship diagram showing how data feeds relate to each other.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-overview.png) 

## Tablas relacionadas con el catálogo
<a name="data-feed-catalog-domain"></a>

En el siguiente diagrama se muestran las relaciones entre las tablas del dominio del catálogo, así como los campos de las tablas. 

![\[Relaciones entre las tablas Product, Offer_Product, Offer, Offer_Target y Legacy_ID_Mapping del dominio Catalog.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-catalog-details.png)


Las tablas `Product`, `Offer_Product`, `Offer`, `Offer_Target`, and `Legacy_id_mapping` están en el dominio Catalog.

La tabla `Offer_Target` incluye un campo de valor para el `account_id` del objetivo, pero solo cuando el valor `target_type` es `account`.

La tabla `Legacy_id_mapping` no se utiliza para los datos actuales.

**nota**  
Para obtener más información sobre estas tablas, incluida una descripción de cada campo de la tabla y las uniones que se pueden crear, consulte los temas siguientes:  
[Fuente de datos del producto](data-feed-product.md)
[Fuente de datos de productos de la oferta](data-feed-offer-product.md)
[Fuente de datos de ofertas](data-feed-offer.md)
[Ofrecer fuente de datos de destino](data-feed-offer-target.md)
[Fuente de datos de mapeo heredada](data-feed-legacy-mapping.md)

## Tablas relacionadas con las cuentas
<a name="data-feed-accounts-domain"></a>

En el siguiente diagrama se muestran las relaciones entre las tablas `Account` y `Address` del dominio de cuentas, así como los campos de las tablas.

![\[Relación entre las tablas de cuentas y direcciones del dominio de cuentas y los campos de cada tabla.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-accounts-details.png)


**nota**  
Para obtener más información sobre estas tablas, incluida una descripción de cada campo de la tabla y las uniones que puede crear, consulte los temas siguientes:  
[Fuente de datos de cuenta](data-feed-account.md)
[Fuente de datos de direcciones](data-feed-address.md)

## Tablas relacionadas con los ingresos
<a name="data-feed-revenue-domain"></a>

En el siguiente diagrama se muestran las relaciones entre las tablas `Billing_Event` y `Tax_Item` del dominio de ingresos, así como los campos de las tablas. La tabla `Billing_Event` incluye información sobre los desembolsos, así como los eventos de facturación.

![\[Relaciones entre las tablas Billing_Event y Tax_Item del dominio de ingresos y los campos de cada tabla.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-revenue-details.png)


**nota**  
Para obtener más información sobre estas tablas, incluida una descripción de cada campo de la tabla y las uniones que puede crear, consulte los temas siguientes:  
[Fuente de datos de eventos de facturación](data-feed-billing-event.md)
[Fuente de datos de elementos de impuestos](data-feed-tax-item.md)

### Tablas relacionadas con las adquisiciones
<a name="procurement-tables"></a>

El siguiente diagrama muestra los campos de la tabla de acuerdos en el dominio de Adquisiciones.

**nota**  
Para obtener más información sobre estas tablas, incluida una descripción de cada campo de la tabla y las uniones que se pueden crear, consulte [Fuente de datos de acuerdos](data-feed-agreements.md) en esta guía.

En las siguientes secciones se proporcionan diagramas de *relaciones entre entidades* (ER) para cada dominio. Cada diagrama de ER muestra las tablas y los campos de cada tabla, así como los campos que puede usar para unir las tablas.

**nota**  
Los diagramas de ER de esta sección no incluyen los campos comunes a todas las fuentes de datos. Para obtener más información acerca de los campos comunes, consulte [Almacenamiento y estructura de las fuentes de datos de AWS Marketplace](data-feed-details.md).

En la siguiente tabla, se describen los símbolos que se usan en los diagramas de ER.


| Símbolo | Descripción | 
| --- | --- | 
|  ![\[Una imagen de las letras “PK” como símbolo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-primary-key.png)  |  **Clave principal**: clave principal de la tabla. Cuando se usa con los campos `valid_from` y `update_date`, es única. Para obtener más información sobre el uso conjunto de estos campos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization). Si hay más de un campo marcado como clave principal, los campos juntos forman la clave principal.  | 
|  ![\[Una imagen de las letras “FK” como símbolo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-foreign-key.png)  |   **Clave externa**: campo que representa una clave principal en una tabla diferente. No es necesariamente única en la tabla.   En algunos casos, la clave externa puede estar en blanco si el registro de la tabla actual no tiene un registro correspondiente en la tabla externa.   | 
|  ![\[Una imagen de las letras “AK” como símbolo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-alternate-key.png)  |   **Clave alternativa**: tecla que se puede utilizar como clave en la tabla. Sigue las mismas reglas de exclusividad que la clave principal.  | 
|  ![\[Imagen de una línea con una cruz en un extremo y un círculo y una bifurcación en el otro.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-one-to-many.png)  |   **Conector**: las líneas entre los campos representan una conexión, es decir, dos campos que se pueden usar para unir tablas. Los extremos de la línea representan el tipo de conexión. Este ejemplo representa una conexión de uno a varios.  | 

**Tipos de conectores**

En la siguiente tabla se muestran los tipos de extremos que puede tener cada conector.


| Tipo de conector | Descripción | 
| --- | --- | 
|  ![\[Imagen de una línea con una cruz en un extremo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-one-to-n.png)  |   **Uno a n**: un conector con este extremo representa una unión que tiene exactamente un valor en este lado de la unión.  | 
|  ![\[Imagen de una línea con una cruz en un extremo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-zero-or-one-to-n.png)  |   **Cero o uno a n**: un conector con este extremo representa una unión que tiene valores de cero o uno en este lado de la unión.  | 
|  ![\[Imagen de una línea con un círculo y una ramificación en un extremo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-optional-many-to-n.png)  |   **Cero o más a n**: un conector con este extremo representa una unión que tiene cero, uno o varios valores en este lado de la unión.  | 
|  ![\[Imagen de una línea con una cruz y una ramificación en un extremo.\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/images/datafeeds-one-or-more-to-n.png)  |   **Uno o más a n**: un conector con este extremo representa una unión que tiene uno o varios valores en este lado de la unión.  | 

# Ejemplos de consultas de fuentes de datos
<a name="data-feed-full-examples"></a>

En esta sección se ofrecen ejemplos de consultas complejas que utilizan las fuentes de datos proporcionadas por AWS Marketplace. Estos ejemplos son similares al [Paneles de vendedores](dashboards.md) que se obtiene del AWS Marketplace Management Portal. Puede personalizar estas consultas para crear otros informes que necesite.

**Topics**
+ [Acuerdos y renovaciones](#data-feed-example-agreements)
+ [Ingresos facturados](#data-feed-example-billed-revenue)
+ [Facturas no cobradas o abonadas](#data-feed-example-collections)
+ [Facturas gravadas](#data-feed-example-tax)
+ [Abonos por producto](#data-feed-example-disbursement-by-product)
+ [Informe de compensación de ventas](#data-feed-example-sales-compensation)

## Acuerdos y renovaciones
<a name="data-feed-example-agreements"></a>

Para encontrar los datos del acuerdo y de la renovación, puede ejecutar un conjunto de consultas como las que se muestran en el siguiente ejemplo. Las consultas se complementan entre sí para crear la sección de datos detallados del panel de **acuerdos y renovaciones**. Puede usar el ejemplo que se muestra o personalizarlo para sus datos y casos de uso.

Los comentarios de las consultas explican lo que hacen las consultas y cómo modificarlas.

```
      Query currently under development.
```

## Ingresos facturados
<a name="data-feed-example-billed-revenue"></a>

Para encontrar los datos las facturas, puede ejecutar un conjunto de consultas como las que se muestran en el siguiente ejemplo. Las consultas se complementan entre sí para crear el informe de **Ingresos facturados.** Puede usar el ejemplo que se muestra o personalizarlo para sus datos y casos de uso.

Los comentarios de las consultas explican lo que hacen las consultas y cómo modificarlas.

```
-- Billed revenue report

-- General note: When executing this query we are assuming that the data ingested in the database uses 
-- two time axes (the valid_from column and the update_date column).
-- See documentation for more details: https://docs.aws.amazon.com/marketplace/latest/userguide/data-feed.html#data-feed-details

-- An account_id has several valid_from dates (each representing a separate revision of the data)
-- but because of bi-temporality, an account_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
with accounts_with_uni_temporal_data as (
  select
    account_id,
    aws_account_id,
    encrypted_account_id,
    mailing_address_id,
    tax_address_id,
    tax_legal_name,
    from_iso8601_timestamp(valid_from) as valid_from,
    tax_registration_number
  from
    (
      select
        account_id,
        aws_account_id,
        encrypted_account_id,
        mailing_address_id,
        tax_address_id,
        tax_legal_name,
        valid_from,
        delete_date,
        tax_registration_number,
        row_number() over (partition by account_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
      from
        accountfeed_v1
    )
    where
      -- keep latest ...
      row_num = 1
      -- ... and remove the soft-deleted one.
      and (delete_date is null or delete_date = '')
  ),

accounts_with_history as (
  with accounts_with_history_with_extended_valid_from as (
    select
      account_id,
      -- sometimes, this columns gets imported as a "bigint" and loses heading 0s -> casting to a char and re-adding heading 0s (if need be)
      substring('000000000000'||cast(aws_account_id as varchar),-12) as aws_account_id,
      encrypted_account_id,
      mailing_address_id,
      tax_address_id,
      tax_legal_name,
      -- The start time of account valid_from is extended to '1970-01-01 00:00:00', because:
      -- ... in tax report transformations, some tax line items with invoice_date cannot
      -- ... fall into the default valid time range of the associated account
      case
        when lag(valid_from) over (partition by account_id order by valid_from asc) is null
          then cast('1970-01-01 00:00:00' as timestamp)
        else valid_from
      end as valid_from
    from accounts_with_uni_temporal_data
    )
  select
    account_id,
    aws_account_id,
    encrypted_account_id,
    mailing_address_id,
    tax_address_id,
    tax_legal_name,
    valid_from,
    coalesce(
      lead(valid_from) over (partition by account_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp)
    ) as valid_to
  from
    accounts_with_history_with_extended_valid_from
),

-- An address_id has several valid_from dates (each representing a separate revision of the data)
-- but because of bi-temporality, an account_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
address_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    address_id,
    company_name,
    email_domain,
    country_code,
    state_or_region,
    city,
    postal_code,
    row_num
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      address_id,
      company_name,
      email_domain,
      country_code,
      state_or_region,
      city,
      postal_code,
      row_number() over (partition by address_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      addressfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

-- We are only interested in the most recent tuple (BTW: a given address is not supposed to change over time but when bugs ;-) so this query mainly does nothing)
address_with_latest_revision as (
  select
    valid_from,
    address_id,
    company_name,
    email_domain,
    country_code,
    state_or_region,
    city,
    postal_code,
    row_num_latest_revision
  from
  (
    select
      valid_from,
      address_id,
      company_name,
      email_domain,
      country_code,
      state_or_region,
      city,
      postal_code,
      row_number() over (partition by address_id order by valid_from desc) as row_num_latest_revision
    from
      address_with_uni_temporal_data
  )
  where
    row_num_latest_revision = 1
),

accounts_with_history_with_company_name as (
  select
    awh.account_id,
    awh.aws_account_id,
    awh.encrypted_account_id,
    awh.mailing_address_id,
    awh.tax_address_id,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when address.company_name = '' then null else address.company_name end,
      awh.tax_legal_name) as mailing_company_name,
    address.email_domain,
    awh.valid_from,
    -- For BYOL, the agreement might be accepted (using some external non-AWS system or manual process) days before
    -- that BYOL agreement is entered into AWS Marketplace by the buyer. Therefore, the buyer is permitted to manually
    -- enter a backdated acceptance date, which might predate the point in time when the account was created.
    -- To work around this, we need to adjust the valid_from of the account to be
    -- earlier than the earliest possible backdated BYOL agreement acceptance date.
    case
      when lag(awh.valid_from) over (partition by aws_account_id order by awh.valid_from asc) is null
      then date_add('Day', -212, awh.valid_from)
      -- 212 is the longest delay between acceptance_date of the agreement and the account start_Date
      else awh.valid_from
    end as valid_from_adjusted,
    awh.valid_to
  from accounts_with_history as awh
  left join address_with_latest_revision as address on
    awh.mailing_address_id = address.address_id and awh.mailing_address_id is not null
),

-- An agreement_id has several valid_from dates (each representing an agreement revision)
-- but because of bi-temporality, an agreement_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
agreements_with_uni_temporal_data as (
  select
    agreement_id,
    origin_offer_id,
    proposer_account_id,
    acceptor_account_id,
    agreement_revision,
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(start_date) as start_date,
    from_iso8601_timestamp(end_date) as end_date,
    from_iso8601_timestamp(acceptance_date) as acceptance_date,
    agreement_type,
    previous_agreement_id,
    agreement_intent
  from
  (
    select
      --empty value in Athena shows as '', change all '' value to null
      case when agreement_id = '' then null else agreement_id end as agreement_id,
      origin_offer_id,
      proposer_account_id,
      acceptor_account_id,
      agreement_revision,
      valid_from,
      delete_date,
      start_date,
      end_date,
      acceptance_date,
      agreement_type,
      previous_agreement_id,
      agreement_intent,
      row_number() over (partition by agreement_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      -- TODO change to agreementfeed_v1 when Agreement Feed is GA'ed
      agreementfeed
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

agreements_with_history as (
  with agreements_with_window_functions as (
    select
      agreement_id,
      origin_offer_id as offer_id,
      proposer_account_id,
      acceptor_account_id,
      agreement_revision,
      start_date,
      end_date,
      acceptance_date,
      -- The start time of agreement valid_from is extended to '1970-01-01 00:00:00', because:
      -- ... in usage report transformations, some usage line items with usage_date cannot
      -- ... fall into the default valid time range of the associated agreement
      case
          when lag(valid_from) over (PARTITION BY agreement_id order by valid_from asc) is null
          then timestamp '1970-01-01 00:00:00'
          else valid_from
      end as valid_from,
      coalesce(
          lead(valid_from) over (partition by agreement_id order by valid_from asc),
          timestamp '2999-01-01 00:00:00'
      ) as valid_to,
      rank() over (partition by agreement_id order by valid_from asc) version,
      agreement_type,
      previous_agreement_id,
      agreement_intent
    from
      agreements_with_uni_temporal_data
  )
  select
    agreement_id,
    offer_id,
    proposer_account_id,
    acceptor_account_id,
    agreement_revision,
    start_date,
    end_date,
    acceptance_date,
    valid_from,
    case
        when version=1 and valid_from<timestamp '2023-03-03 06:16:08.743' then timestamp '1970-01-01'
        -- The following 60 minute adjustment is to handle special case where When Renewal happens for a contract
        when version=1 then date_add('minute',-60,valid_from)
        else valid_from
    end as valid_from_adjusted,
    valid_to,
    agreement_type,
    previous_agreement_id,
    agreement_intent
  from
    agreements_with_window_functions
),

-- An offer_id has several valid_from dates (each representing an offer revision)
-- but because of bi-temporality, an offer_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
offers_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    offer_id,
    offer_revision,
    name,
    expiration_date,
    opportunity_id,
    opportunity_name,
    opportunity_description,
    seller_account_id
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      offer_id,
      offer_revision,
      name,
      expiration_date,
      opportunity_id,
      opportunity_name,
      opportunity_description,
      seller_account_id,
      row_number() over (partition by offer_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      offerfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

-- Here, we build the validity time range (adding valid_to on top of valid_from) of each offer revision.
-- We will use it to get Offer name at invoice time.
-- NB: If you'd rather get "current" offer name, un-comment "offers_with_latest_revision"
offers_with_history as (
  select
    offer_id,
    offer_revision,
    name,
    opportunity_id,
    opportunity_name,
    opportunity_description,
    valid_from,
    -- When we try to look up an offer revision as at the acceptance date of a BYOL agreement, we run into a problem.
    -- For BYOL, the agreement might be accepted (using some external non-AWS system or manual process) days before
    -- that BYOL agreement is entered into AWS Marketplace by the buyer. Therefore, the buyer is permitted to manually
    -- enter a backdated acceptance date, which might predate the point in time when the first revision of the offer
    -- was created. To work around this, we need to adjust the valid_from on the first revision of the offer to be
    -- earlier than the earliest possible backdated BYOL agreement acceptance date.
    case
      when lag(valid_from) over (partition by offer_id order by valid_from asc) is null and valid_from<cast('2021-04-01' as timestamp)
      then date_add('Day', -3857, valid_from)
      -- 3857 is the longest delay between acceptance_date of an agreement and the first revision of the offer
      when lag(valid_from) over (partition by offer_id order by valid_from asc) is null and valid_from >= cast('2021-04-01' as timestamp)
      then date_add('Day', -1460, valid_from)
      --after 2021 for the two offers we need to adjust for 2 more years
      else valid_from
    end as valid_from_adjusted,
    coalesce(
      lead(valid_from) over (partition by offer_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp))
    as valid_to
  from offers_with_uni_temporal_data
),
-- provided for reference only if you are interested into get "current" offer name
-- (ie. not used afterwards)
offers_with_latest_revision as (
  select
    offer_id,
    offer_revision,
    name,
    opportunity_name,
    opportunity_description,
    valid_from,
    null valid_to
  from
  (
    select
      offer_id,
      offer_revision,
      name,
      opportunity_name,
      opportunity_description,
      valid_from,
      null valid_to,
      row_number() over (partition by offer_id order by valid_from desc) as row_num_latest_revision
    from
      offers_with_uni_temporal_data
  )
  where
    row_num_latest_revision = 1
),

-- An offer_target_id has several valid_from dates (each representing an offer revision)
-- but because of bi-temporality, an offer_target_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
offer_targets_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    offer_target_id,
    offer_id,
    offer_revision,
    target_type,
    polarity,
    value
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      offer_target_id,
      offer_id,
      offer_revision,
      target_type,
      polarity,
      value,
      row_number() over (partition by offer_target_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      offertargetfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

offer_target_type as (
  select
    offer_id,
    offer_revision,
    substring(
      -- The first character indicates the priority (lower value means higher precedence):
      min(
        case
          when offer_target.target_type='BuyerAccounts' then '1Private'
          when offer_target.target_type='ParticipatingPrograms' then '2Program:'||cast(offer_target.value as varchar)
          when offer_target.target_type='CountryCodes' then '3GeoTargeted'
          -- well, there is no other case today, but rather be safe...
          else '4Other Targeting'
        end
      ),
      -- Remove the first character that was only used for th priority in the "min" aggregate function:
      2
    ) as offer_target
  from
    offer_targets_with_uni_temporal_data as offer_target
  group by
    offer_id,
    offer_revision
),

offers_with_history_with_target_type as (
  select
    offer.offer_id,
    offer.offer_revision,
    -- even though today it is not possible to combine several types of targeting in a single offer, let's ensure the query is still predictable if this gets possible in the future
    max(
      case
        when off_tgt.offer_target is null then 'Public'
        else off_tgt.offer_target
      end
    ) as offer_target,
    min(offer.name) as name,
    min(offer.opportunity_name) as opportunity_name,
    min(offer.opportunity_description) as opportunity_description,
    offer.valid_from,
    offer.valid_from_adjusted,
    offer.valid_to,
    offer.opportunity_id
  from
    offers_with_history as offer
  left join offer_target_type as off_tgt on
    offer.offer_id = off_tgt.offer_id
    and offer.offer_revision = off_tgt.offer_revision
  group by
    offer.offer_id,
    offer.offer_revision,
    offer.valid_from,
    offer.valid_from_adjusted,
    offer.valid_to,
    offer.opportunity_id
),

-- provided for reference only if you are interested into get "current" offer targets
-- (ie. not used afterwards)
offers_with_latest_revision_with_target_type as (
  select
    offer.offer_id,
    offer.offer_revision,
    -- even though today it is not possible to combine several types of targeting in a single offer, let's ensure the query is still predictable if this gets possible in the future
    max(
      distinct
      case
        when off_tgt.target_type is null then 'Public'
        when off_tgt.target_type='BuyerAccounts' then 'Private'
        when off_tgt.target_type='ParticipatingPrograms' then 'Program:'||cast(off_tgt.value as varchar)
        when off_tgt.target_type='CountryCodes' then 'GeoTargeted'
        -- well, there is no other case today, but rather be safe...
        else 'Other Targeting'
      end
    ) as offer_target,
    min(offer.name) as name,
    min(offer.opportunity_name) as opportunity_name,
    min(offer.opportunity_description) as opportunity_description,
    offer.valid_from,
    offer.valid_to
  from
    offers_with_latest_revision offer
    -- left joining because public offers don't have targets
    left join offer_targets_with_uni_temporal_data off_tgt on
      offer.offer_id=off_tgt.offer_id and offer.offer_revision=off_tgt.offer_revision
  group by
    offer.offer_id,
    offer.offer_revision,
    -- redundant with offer_revision, as each revision has a dedicated valid_from (but cleaner in the group by)
    offer.valid_from,
    offer.valid_to
),

-- A product_id has several valid_from dates (each representing a product revision),
-- but because of bi-temporality, each product_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
products_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    product_id,
    manufacturer_account_id,
    product_code,
    title
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      product_id,
      manufacturer_account_id,
      product_code,
      title,
      row_number() over (partition by product_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      productfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

products_with_history as (
  select
    product_id,
    title,
    valid_from,
    -- Offerv2 can have upto 50 years and Offerv3 is upto 5 years of past date
    case
      when lag(valid_from) over (partition by product_id order by valid_from asc) is null and valid_from<cast('2021-04-01' as timestamp)
        then date_add('Day', -3857, valid_from)
      -- 3827 is the longest delay between acceptance_date of an agreement and the product
      -- we are keeping 3857 as a consistency between the offers and products
      when lag(valid_from) over (partition by product_id order by valid_from asc) is null and valid_from >= cast('2021-04-01' as timestamp)
        then date_add('Day', -2190, valid_from)
      --after 2021 for the two offers we need to adjust for 2 more years
      else valid_from 
    end as valid_from_adjusted,
    coalesce(
      lead(valid_from) over (partition by product_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp)
    ) as valid_to,
    product_code,
    manufacturer_account_id
  from
    products_with_uni_temporal_data
),

legacy_products as (
  select
    legacy_id,
    new_id
  from
    legacyidmappingfeed_v1
  where
    mapping_type='PRODUCT'
  group by
    legacy_id,
    new_id
),

-- A given billing_event_id represents an accounting event and thus has only one valid_from date,
-- but because of bi-temporality, a billing_event_id (+ its valid_from) can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
billing_events_with_uni_temporal_data as (
  select
    billing_event_id,
    valid_from,
    update_date,
    delete_date,
    invoice_date,
    transaction_type,
    transaction_reference_id,
    parent_billing_event_id,
    bank_trace_id,
    broker_id,
    product_id,
    disbursement_billing_event_id,
    action,
    from_account_id,
    to_account_id,
    end_user_account_id,
    billing_address_id,
    amount,
    currency,
    balance_impacting,
    --empty value in Athena shows as '', change all '' value to null
    case when agreement_id = '' then null else agreement_id end as agreement_id,
    invoice_id,
    payment_due_date,
    usage_period_start_date,
    usage_period_end_date,
    buyer_transaction_reference_id,
    row_num
  from
  (
    select
      billing_event_id,
      from_iso8601_timestamp(valid_from) as valid_from,
      from_iso8601_timestamp(update_date) as update_date,
      delete_date,
      from_iso8601_timestamp(invoice_date) as invoice_date,
      transaction_type,
      transaction_reference_id,
      parent_billing_event_id,
      -- casting in case data was imported as number
      cast(bank_trace_id as varchar) as bank_trace_id,
      broker_id,
      product_id,
      disbursement_billing_event_id,
      action,
      from_account_id,
      to_account_id,
      end_user_account_id,
      billing_address_id,
      -- casting in case data was imported as varchar
      cast(amount as decimal(38,6)) as amount,
      currency,
      balance_impacting,
      agreement_id,
      invoice_id,
      case when payment_due_date is null or payment_due_date = '' then null else from_iso8601_timestamp(payment_due_date) end as payment_due_date,
      from_iso8601_timestamp(usage_period_start_date) as usage_period_start_date,
      from_iso8601_timestamp(usage_period_end_date) as usage_period_end_date,
      buyer_transaction_reference_id,
      row_number() over (partition by billing_event_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      billingeventfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

-- Here we select the account_id of the current seller (We identify this by looking for the to_account_id related to revenue transactions).
-- We will use it later to distinguish own agreements from agreements generated by channel partners.
seller_account as (
  select
    from_account_id as seller_account_id
  from
    billing_events_with_uni_temporal_data bill
  where
    -- Assumption here is only seller will pay listing fee. As of 12/21/2021, there are cases that Channel partner have 0 listing fee for CPPO, so the amount could be 0.
    bill.transaction_type like 'AWS_REV_SHARE' and amount <= 0 and action = 'INVOICED'
  group by
    -- from_account_id is always the same for all those "listing fee" transactions == the seller of record himself.
    -- If this view returns more than 1 record, the overall query will fail (on purpose). Please contact AWS Marketplace if this happens.
    from_account_id
),

billing_event_with_business_flags as (
  select
    bl.billing_event_id,
    bl.end_user_account_id,
    bl.agreement_id,
    aggrement.proposer_account_id,
    aggrement.offer_id,
    aggrement.acceptor_account_id,
    case
      -- For AWS and BALANCE_ADJUSTMENT, the billing event feed will show the "AWS Marketplace" account as the
      -- receiver of the funds and the seller as the payer. We are not interested in this information here.
      -- Null values will be ignored by the `max` aggregation function.
      when bl.transaction_type like 'AWS%' then null
      -- For BALANCE_ADJUSTMENT, payer is seller themselves
      when bl.invoice_id is null then bl.to_account_id
      -- We get the payer of the invoice from *any* transaction type that is not AWS and not BALANCE_ADJUSTMENT (because they are the same for a given end user + agreement + product).
      else bl.from_account_id
    end as payer_account_id,
    bl.product_id,
    bl.action,
    bl.transaction_type,
    bl.parent_billing_event_id,
    bl.disbursement_billing_event_id,
    bl.amount,
    bl.currency,
    bl.balance_impacting,
    bl.invoice_date,
    bl.payment_due_date,
    bl.usage_period_start_date,
    bl.usage_period_end_date,
    bl.invoice_id,
    bl.billing_address_id,
    bl.transaction_reference_id,
    bl.buyer_transaction_reference_id,
    case when disbursement.bank_trace_id = 'EMEA_MP_TEST_TRACE_ID' then null else disbursement.bank_trace_id end as bank_trace_id,
    case when disbursement.bank_trace_id = 'EMEA_MP_TEST_TRACE_ID' then null else disbursement.invoice_date end as disbursement_date,
    disbursement.billing_event_id as disbursement_id,
    -- We will use disbursement_id_or_invoiced as part of the PK, so it cannot be null:
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when disbursement.billing_event_id = '' then null else disbursement.billing_event_id end,
      '<invoiced>') as disbursement_id_or_invoiced,
    bl.broker_id,
    case
      when bl.invoice_id is null /* transaction_type = 'BALANCE_ADJUSTMENT' */
        then (select seller_account_id from seller_account) ||':'|| cast(bl.invoice_date as varchar)
      else bl.buyer_transaction_reference_id
        ||'-'|| case when bl.agreement_id is null or bl.agreement_id = '' then ' ' else bl.agreement_id end
        ||'-'|| case when bl.end_user_account_id is null or bl.end_user_account_id = '' then ' ' else bl.end_user_account_id end
        ||'-'|| coalesce(cast(bl.usage_period_start_date as varchar),' ')
        ||'-'|| coalesce(cast(bl.usage_period_end_date as varchar),' ')
    end as internal_buyer_line_item_id,
    bl.buyer_transaction_reference_id <> bl.transaction_reference_id as is_seller_invoice,
    case when bl.transaction_type = 'SELLER_REV_SHARE' and (select seller_account_id from seller_account) <> bl.to_account_id then true else false end as is_cog,
    case when bl.transaction_type in('SELLER_REV_SHARE_CREDIT', 'SELLER_REV_SHARE_REFUND') and (select seller_account_id from seller_account) <> bl.to_account_id then true else false end as is_cog_refund,
    --TODO: replace below logic once we can create a logic the identify reseller/manufacturer without depending on agreement feed
    case when aggrement.proposer_account_id <> (select seller_account_id from seller_account) then true else false end as is_manufacturer_view_of_reseller
  from
    billing_events_with_uni_temporal_data as bl
    left join billing_events_with_uni_temporal_data as disbursement on
      disbursement.transaction_type like 'DISBURSEMENT%'
        and disbursement.action = 'DISBURSED'
        and disbursement.transaction_type IN ('DISBURSEMENT', 'DISBURSEMENT_FAILURE')
        and bl.disbursement_billing_event_id = disbursement.billing_event_id
    left join agreements_with_history as aggrement on
      bl.agreement_id = aggrement.agreement_id
        and bl.invoice_date >= aggrement.valid_from_adjusted
        and bl.invoice_date<aggrement.valid_to
    left join accounts_with_history awh on
      bl.to_account_id = awh.account_id
        and bl.invoice_date >= awh.valid_from
        and bl.invoice_date<awh.valid_to
  where
    bl.transaction_type not like 'DISBURSEMENT%' and
      (bl.agreement_id is null or bl.agreement_id = ''
      or aggrement.agreement_id is not null)
),

-- listagg function in athena does not support partitioning, grouping here and then joining to the main query
seller_invoice_list as (
  select
    internal_buyer_line_item_id,
    listagg(case when not is_seller_invoice then null else invoice_id end,',') within group (order by case when not is_seller_invoice then null else cast(invoice_date as varchar) end) as seller_invoice_id_or_null,
    listagg(case when not is_seller_invoice then null else cast(invoice_date as varchar) end,',') within group (order by case when not is_seller_invoice then null else cast(invoice_date as varchar) end) as seller_invoice_date_or_null
  from
    (
    -- listagg function in athena does not support ordering by another field when distinct is used,
    -- here we first select distinct invoices and then do the listagg order by invoice_date
    select distinct internal_buyer_line_item_id, is_seller_invoice, invoice_id, invoice_date
    from billing_event_with_business_flags) distinct_invoices
  group by internal_buyer_line_item_id
  order by internal_buyer_line_item_id
),

billing_event_with_categorized_transaction as (
-- Use the flags that were created in the previous transformation in more calculated columns:
-- NOTE: This transformation has no joins and no window functions
  select
    billing_event_id,
    end_user_account_id,
    agreement_id,
    proposer_account_id,
    offer_id,
    acceptor_account_id,
    case when is_cog or is_cog_refund then null else payer_account_id end as payer_account_id,
    product_id,
    action,
    transaction_type,
    parent_billing_event_id,
    disbursement_billing_event_id,
    amount,
    currency,
    balance_impacting,
    invoice_date,
    payment_due_date,
    usage_period_start_date,
    usage_period_end_date,
    invoice_id,
    billing_address_id,
    transaction_reference_id,
    buyer_transaction_reference_id,
    bank_trace_id,
    disbursement_date,
    disbursement_id,
    disbursement_id_or_invoiced,
    broker_id,
    bl.internal_buyer_line_item_id,
    is_seller_invoice,
    is_cog,
    is_cog_refund,
    is_manufacturer_view_of_reseller,

    -- Buyer/seller columns:
    case when is_seller_invoice then null else invoice_id end as buyer_invoice_id_or_null,
    seller_invoices.seller_invoice_id_or_null,
    case when is_seller_invoice then null else invoice_date end as buyer_invoice_date_or_null,
    seller_invoices.seller_invoice_date_or_null,

    -- Categorized amounts by transaction type:
    case when transaction_type =   'SELLER_REV_SHARE' and not is_cog then amount else 0 end as gross_revenue,
    case when transaction_type in ('SELLER_REV_SHARE_REFUND','SELLER_REV_SHARE_CREDIT') and not is_cog_refund then amount else 0 end as gross_refund,
    case when transaction_type =   'SELLER_REV_SHARE' and     is_cog then amount else 0 end as cogs,
    case when transaction_type in ('SELLER_REV_SHARE_REFUND','SELLER_REV_SHARE_CREDIT') and     is_cog_refund then amount else 0 end as cogs_refund,
    case when transaction_type =   'AWS_REV_SHARE' then amount else 0 end as aws_rev_share,
    case when transaction_type in ('AWS_REV_SHARE_REFUND','AWS_REV_SHARE_CREDIT') then amount else 0 end as aws_refund_share,
    case when transaction_type =   'AWS_TAX_SHARE' and not is_seller_invoice then amount else 0 end as aws_tax_share,             -- AWS tax share from _buyer_  invoice
    case when transaction_type =   'AWS_TAX_SHARE' and     is_seller_invoice then amount else 0 end as aws_tax_share_listing_fee, -- AWS tax share from _seller_ invoice
    case when transaction_type =   'AWS_TAX_SHARE_REFUND' and not is_seller_invoice then amount else 0 end as aws_tax_share_refund,
    case when transaction_type =   'AWS_TAX_SHARE_REFUND' and     is_seller_invoice then amount else 0 end as aws_tax_share_refund_listing_fee,
    case when transaction_type =   'SELLER_TAX_SHARE' then amount else 0 end as seller_tax_share,
    case when transaction_type =   'SELLER_TAX_SHARE_REFUND' then amount else 0 end as seller_tax_share_refund,
    case when transaction_type =   'BALANCE_ADJUSTMENT' then amount else 0 end as balance_adjustment,
    case when transaction_type =   'SELLER_REV_SHARE_CREDIT' then amount else 0 end as seller_rev_credit,
    case when transaction_type =   'AWS_REV_SHARE_CREDIT' then amount else 0 end as aws_ref_fee_credit
  from
    billing_event_with_business_flags as bl
    left join seller_invoice_list as seller_invoices
      on bl.internal_buyer_line_item_id = seller_invoices.internal_buyer_line_item_id
    ),

line_items_aggregated as (
-- This transformation has the only "group by" in all of these transformations.
-- NOTE: This transformation has no joins and no window functions
  select
    internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    broker_id,
    currency,
    agreement_id,
    proposer_account_id,
    acceptor_account_id,
    max(payer_account_id) as payer_account_id,
    offer_id,
    end_user_account_id,
    usage_period_start_date,
    usage_period_end_date,
    max(payment_due_date) payment_due_date,
    buyer_transaction_reference_id,
    bank_trace_id,
    disbursement_date,
    max(billing_address_id) as billing_address_id,

    -- Buyer/seller columns:
    max(buyer_invoice_id_or_null) as buyer_invoice_id,
    max(seller_invoice_id_or_null) as seller_invoice_id,
    max(buyer_invoice_date_or_null) as buyer_invoice_date,
    max(seller_invoice_date_or_null) as seller_invoice_date,
  
    -- Categorized amounts by transaction type:
    -- When disbursement_id_or_invoiced = '<invoiced>',    these are invoiced amounts
    -- When disbursement_id_or_invoiced <> '<invoiced>' these are disbursed amounts for _this_ specific disbursement_id
    sum(gross_revenue) as gross_revenue_this_disbursement_id_or_invoiced,
    sum(gross_refund) as gross_refund_this_disbursement_id_or_invoiced,
    sum(cogs) as cogs_this_disbursement_id_or_invoiced,
    sum(cogs_refund) as cogs_refund_this_disbursement_id_or_invoiced,
    sum(aws_rev_share) as aws_rev_share_this_disbursement_id_or_invoiced,
    sum(aws_refund_share) as aws_refund_share_this_disbursement_id_or_invoiced,
    sum(aws_tax_share) as aws_tax_share_this_disbursement_id_or_invoiced,
    sum(aws_tax_share_listing_fee) as aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    sum(aws_tax_share_refund) as aws_tax_share_refund_this_disbursement_id_or_invoiced,
    sum(aws_tax_share_refund_listing_fee) as aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    sum(seller_tax_share) as seller_tax_share_this_disbursement_id_or_invoiced,
    sum(seller_tax_share_refund) as seller_tax_share_refund_this_disbursement_id_or_invoiced,
    sum(balance_adjustment) as balance_adjustment_this_disbursement_id_or_invoiced,
    sum(seller_rev_credit) as seller_rev_credit_this_disbursement_id_or_invoiced,
    sum(aws_ref_fee_credit) as aws_ref_fee_credit_this_disbursement_id_or_invoiced
  from
    billing_event_with_categorized_transaction as billing_categorized
  group by
    internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    broker_id,
    -- The following columns are included the in group by but they are intentionally omitted from the PK.
    -- These columns should have the _same_ values for each record in the PK.
    product_id,
    currency,
    agreement_id,
    proposer_account_id,
    acceptor_account_id,
    offer_id,
    end_user_account_id,
    usage_period_start_date,
    usage_period_end_date,
    buyer_transaction_reference_id,
    bank_trace_id,
    disbursement_date
),

-- listagg function in athena does not support partitioning, grouping here and then joining to the main query
disbursement_list as (
  select
    internal_buyer_line_item_id,
    listagg(cast(disbursement_date as varchar),',') within group (order by cast(disbursement_date as varchar)) as disbursement_date_list,
    listagg(bank_trace_id,',') within group (order by cast(disbursement_date as varchar)) as disburse_bank_trace_id_list
    from (
    -- listagg function in athena does not support ordering by another field when distinct is used,
    -- here we first select distinct bank_trace_ids and then do the listagg order by disbursement_date
    select distinct internal_buyer_line_item_id, disbursement_date, bank_trace_id
  from billing_event_with_business_flags) distinct_disbursements
  group by internal_buyer_line_item_id
  order by internal_buyer_line_item_id
),

line_items_with_window_functions as (
--add flag next step compare gross_revenue and gross_revenue_disbursed or gross_refund and gross_refund_disbursed
  select
    line_item.internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    broker_id,
    currency,
    agreement_id,
    proposer_account_id,
    acceptor_account_id,
    -- when there's aws_rev_Share adjustment/refund to a seller_rev_share invoice, it can happen that for the same aws_rev_share invoice_id, there are multiple disbursement events,
    -- using windows function to map payer_account_id of seller_rev_share to all corresponding aws_rev_Share
    max(payer_account_id) over (partition by line_item.internal_buyer_line_item_id) as payer_account_id,
    offer_id,
    end_user_account_id,
    usage_period_start_date,
    usage_period_end_date,
    payment_due_date,
    bank_trace_id,
    disbursement_date,
    billing_address_id,

    -- Buyer/seller columns:
    max(buyer_invoice_id) over (partition by line_item.internal_buyer_line_item_id) as buyer_invoice_id,
    seller_invoice_id,
    max(buyer_invoice_date) over (partition by line_item.internal_buyer_line_item_id) as buyer_invoice_date,
    seller_invoice_date,

    -- When disbursement_id_or_invoiced = '<invoiced>', these are actually invoiced amounts
    -- When disbursement_id_or_invoiced <> '<invoiced>' these are disbursed amounts for _this_ specific disbursement_id
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    -- IMPORTANT: All window functions partitioned by internal_buyer_line_item_id:

    -- Invoiced amounts, categorized by transaction type:
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then gross_revenue_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end)over (partition by line_item.internal_buyer_line_item_id) as gross_revenue_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then gross_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as gross_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then cogs_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then cogs_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_rev_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_rev_share_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_refund_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_refund_share_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_tax_share_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_listing_fee_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_listing_fee_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then seller_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then seller_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then balance_adjustment_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as balance_adjustment_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then seller_rev_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_rev_credit_invoiced,
    sum(case when disbursement_id_or_invoiced = '<invoiced>' then aws_ref_fee_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_ref_fee_credit_invoiced,

    -- Total disbursed amounts (for all disbursement_id values), categorized by transaction type:
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then gross_revenue_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as gross_revenue_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then gross_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as gross_refund_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then cogs_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then cogs_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_refund_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_rev_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_rev_share_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_refund_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_refund_share_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_tax_share_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_listing_fee_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_listing_fee_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then seller_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then seller_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_refund_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then balance_adjustment_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as balance_adjustment_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then seller_rev_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_rev_credit_disbursed,
    sum(case when disbursement_id_or_invoiced <> '<invoiced>' then aws_ref_fee_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_ref_fee_credit_disbursed,

    -- aggregate multiple disbursement
    max(disbursement_date) over (partition by line_item.internal_buyer_line_item_id) as last_disbursement_date,
    first_value(case when disbursement_id_or_invoiced = '<invoiced>' then null else disbursement_id_or_invoiced end) over(partition by line_item.internal_buyer_line_item_id order by coalesce(disbursement_date,cast('1900-01-01' as timestamp)) desc rows between unbounded preceding and unbounded following) as last_disbursement_id,
    first_value(bank_trace_id) over (partition by line_item.internal_buyer_line_item_id order by coalesce(disbursement_date,cast('1900-01-01' as timestamp)) desc rows between unbounded preceding and unbounded following) as last_disburse_bank_trace_id,
    disb_list.disbursement_date_list,
    disb_list.disburse_bank_trace_id_list
  from
    line_items_aggregated as line_item
    left join disbursement_list disb_list
      on line_item.internal_buyer_line_item_id = disb_list.internal_buyer_line_item_id
),

cppo_offer_id as (
  select
    -- Channel partner offers do not exist in offertargetfeed_v1 table (as per legal requirement), causing cppo offer be defined as 'Public' in previous step, we will convert them back to 'Private' in next step
    offer_id
  from
    offers_with_uni_temporal_data
  where
    -- seller_account_id is null means the ISV owns the offer
    seller_account_id is not null
    and seller_account_id <>  (select seller_account_id from seller_account)
  group by
    offer_id
),

line_items_with_window_functions_enrich_offer_product_address as (
  select
    internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    line.product_id,
    legacy_product.legacy_id as legacy_product_id,
    products.title as product_title,
    line.broker_id,
    line.currency,
    line.end_user_account_id,
    acc_enduser.encrypted_account_id as end_user_encrypted_account_id,
    acc_enduser.aws_account_id as end_user_aws_account_id,
    acc_payer.aws_account_id as payer_aws_account_id,
    acc_payer.encrypted_account_id payer_encrypted_account_id,
    line.agreement_id,
    agreement.agreement_revision,
    line.proposer_account_id,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.start_date end as Agreement_Start_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.end_date end as Agreement_End_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.acceptance_date end as Agreement_Acceptance_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.valid_from end as agreement_updated_date,
    case when offer.offer_id like 'aiqoffer-%' then null else line.usage_period_start_date end as Usage_Period_Start_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else line.usage_period_end_date end as Usage_Period_End_Date,

    line.acceptor_account_id,
    acc_subscriber.aws_account_id as subscriber_aws_account_id,
    acc_subscriber.encrypted_account_id as subscriber_encrypted_account_id,
    offer.offer_id,
    case
      when offer.offer_id in (
        select distinct offer_id
        from cppo_offer_id)
        then 'Private'
      else offer.offer_target
    end as offer_target,
    offer.name offer_name,
    offer.opportunity_name offer_opportunity_name,
    offer.opportunity_description offer_opportunity_description,
    offer.opportunity_id,
    payment_due_date,
    line.bank_trace_id,
    disbursement_date,
    billing_address_id,
    buyer_invoice_id,
    seller_invoice_id,
    buyer_invoice_date,
    seller_invoice_date,
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    gross_revenue_invoiced,
    gross_refund_invoiced,
    cogs_invoiced,
    cogs_refund_invoiced,
    aws_rev_share_invoiced,
    aws_refund_share_invoiced,
    aws_tax_share_invoiced,
    aws_tax_share_listing_fee_invoiced,
    aws_tax_share_refund_invoiced,
    aws_tax_share_refund_listing_fee_invoiced,
    seller_tax_share_invoiced,
    seller_tax_share_refund_invoiced,
    balance_adjustment_invoiced,
    seller_rev_credit_invoiced,
    aws_ref_fee_credit_invoiced,
    gross_revenue_disbursed,
    gross_refund_disbursed,
    cogs_disbursed,
    cogs_refund_disbursed,
    aws_rev_share_disbursed,
    aws_refund_share_disbursed,
    aws_tax_share_disbursed,
    aws_tax_share_listing_fee_disbursed,
    aws_tax_share_refund_disbursed,
    aws_tax_share_refund_listing_fee_disbursed,
    seller_tax_share_disbursed,
    seller_tax_share_refund_disbursed,
    balance_adjustment_disbursed,
    seller_rev_credit_disbursed,
    aws_ref_fee_credit_disbursed,
    last_disbursement_date,
    last_disbursement_id,
    last_disburse_bank_trace_id,
    disbursement_date_list,
    disburse_bank_trace_id_list,
    products.product_code,
    acc_products.aws_account_id as manufacturer_aws_account_id,
    products.manufacturer_account_id,
    --add subscriber and payer addressID, payer address preference order: tax address > billing address > mailing address,  subscriber address preference order: tax address >  mailing address
    coalesce (
      --empty value in Athena shows as '', change all '' value to null in order to follow the preference order logic above
      case when acc_subscriber.tax_address_id ='' then null else acc_subscriber.tax_address_id end,
      case when acc_subscriber.mailing_address_id = '' then null else acc_subscriber.mailing_address_id end) as subscriber_address_id,
    coalesce (
      case when acc_payer.tax_address_id = '' then null else acc_payer.tax_address_id end,
      case when line.billing_address_id = '' then null else line.billing_address_id end,
      case when acc_payer.mailing_address_id = '' then null else acc_payer.mailing_address_id end) as payer_address_id,
    coalesce (
      case when acc_enduser.tax_address_id = '' then null else acc_enduser.tax_address_id end,
      case when line.billing_address_id = '' then null else line.billing_address_id end,
      case when acc_enduser.mailing_address_id = '' then null else acc_enduser.mailing_address_id end) as end_user_address_id
  from
    line_items_with_window_functions as line
  left join agreements_with_history as agreement on
      line.agreement_id = agreement.agreement_id and line.buyer_invoice_date >= agreement.valid_from_adjusted and line.buyer_invoice_date<agreement.valid_to
  left join offers_with_history_with_target_type as offer on
        line.offer_id = offer.offer_id and line.buyer_invoice_date >= offer.valid_from and line.buyer_invoice_date<offer.valid_to
  left join products_with_history as products on
        line.product_id = products.product_id and line.buyer_invoice_date >= products.valid_from_adjusted and line.buyer_invoice_date<products.valid_to
  left join legacy_products as legacy_product on
        line.product_id = legacy_product.new_id
  left join accounts_with_history_with_company_name as acc_payer on
        line.payer_account_id = acc_payer.account_id and line.buyer_invoice_date >= acc_payer.valid_from and line.buyer_invoice_date<acc_payer.valid_to
  left join accounts_with_history_with_company_name as acc_enduser on
        line.end_user_account_id = acc_enduser.account_id and line.buyer_invoice_date >= acc_enduser.valid_from and line.buyer_invoice_date<acc_enduser.valid_to
  left join accounts_with_history_with_company_name as acc_subscriber on
        line.acceptor_account_id = acc_subscriber.account_id and line.buyer_invoice_date >= acc_subscriber.valid_from and line.buyer_invoice_date<acc_subscriber.valid_to
  left join accounts_with_history_with_company_name as acc_products on
        products.manufacturer_account_id = acc_products.account_id and line.buyer_invoice_date >= acc_products.valid_from and line.buyer_invoice_date<acc_products.valid_to

),

line_items_with_window_functions_enrich_offer_product_address_name as (
  select
    line.internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    legacy_product_id,
    product_title,
    broker_id,
    currency,
    end_user_address_id,
    end_user_account_id,
    end_user_encrypted_account_id,
    end_user_aws_account_id,
    add_enduser.company_name end_user_company_name,
    add_enduser.email_domain end_user_email_domain,
    add_enduser.city end_user_city,
    add_enduser.state_or_region end_user_state,
    add_enduser.country_code end_user_country,
    add_enduser.postal_code end_user_postal_code,
    payer_aws_account_id,
    payer_encrypted_account_id,
    payer_address_id,
    add_payer.company_name payer_company_name,
    add_payer.email_domain payer_email_domain,
    add_payer.city payer_city,
    add_payer.state_or_region payer_state,
    add_payer.country_code payer_country,
    add_payer.postal_code payer_postal_code,
    agreement_id,
    agreement_revision,
    agreement_start_date,
    agreement_end_date,
    agreement_acceptance_date,
    agreement_updated_date,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.aws_account_id end as reseller_aws_account_id,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.mailing_company_name end as reseller_company_name,
    usage_period_start_date,
    usage_period_end_date,
    proposer_account_id,
    acc_proposer.aws_account_id as proposer_aws_account_id,
    acceptor_account_id,
    subscriber_aws_account_id,
    subscriber_encrypted_account_id,
    subscriber_address_id,
    add_subscriber.company_name subscriber_company_name,
    add_subscriber.email_domain subscriber_email_domain,
    add_subscriber.city subscriber_city,
    add_subscriber.state_or_region subscriber_state,
    add_subscriber.country_code subscriber_country,
    add_subscriber.postal_code subscriber_postal_code,
    offer_id,
    offer_target,
    offer_name,
    offer_opportunity_name,
    offer_opportunity_description,
    opportunity_id,
    payment_due_date,
    bank_trace_id,
    disbursement_date,
    billing_address_id,
    max(buyer_invoice_id)as buyer_invoice_id,
    max(seller_invoice_id)as seller_invoice_id,
    max(buyer_invoice_date)as buyer_invoice_date,
    max(seller_invoice_date)as seller_invoice_date,
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    (gross_revenue_this_disbursement_id_or_invoiced + gross_refund_this_disbursement_id_or_invoiced + aws_rev_share_this_disbursement_id_or_invoiced + aws_refund_share_this_disbursement_id_or_invoiced + seller_tax_share_this_disbursement_id_or_invoiced + seller_tax_share_refund_this_disbursement_id_or_invoiced
      + cogs_this_disbursement_id_or_invoiced + cogs_refund_this_disbursement_id_or_invoiced + aws_tax_share_listing_fee_this_disbursement_id_or_invoiced + aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced) as seller_net_revenue_this_disbursement_id_or_invoiced,
    gross_revenue_invoiced,
    gross_refund_invoiced,
    cogs_invoiced,
    cogs_refund_invoiced,
    aws_rev_share_invoiced,
    aws_refund_share_invoiced,
    aws_tax_share_invoiced,
    aws_tax_share_listing_fee_invoiced,
    aws_tax_share_refund_invoiced,
    aws_tax_share_refund_listing_fee_invoiced,
    seller_tax_share_invoiced,
    seller_tax_share_refund_invoiced,
    balance_adjustment_invoiced,
    seller_rev_credit_invoiced,
    aws_ref_fee_credit_invoiced,
    gross_revenue_disbursed,
    gross_refund_disbursed,
    cogs_disbursed,
    cogs_refund_disbursed,
    aws_rev_share_disbursed,
    aws_refund_share_disbursed,
    aws_tax_share_disbursed,
    aws_tax_share_listing_fee_disbursed,
    aws_tax_share_refund_disbursed,
    aws_tax_share_refund_listing_fee_disbursed,
    seller_tax_share_disbursed,
    seller_tax_share_refund_disbursed,
    balance_adjustment_disbursed,
    seller_rev_credit_disbursed,
    aws_ref_fee_credit_disbursed,
    (gross_revenue_invoiced + gross_revenue_disbursed) as uncollected_gross_revenue,
    -- net revenue = gross revenue - listing fee - tax - cogs
    (gross_revenue_invoiced + gross_refund_invoiced + aws_rev_share_invoiced + aws_refund_share_invoiced + seller_tax_share_invoiced + seller_tax_share_refund_invoiced + cogs_invoiced + cogs_refund_invoiced + aws_tax_share_listing_fee_invoiced + aws_tax_share_refund_listing_fee_invoiced) as seller_net_revenue,
    (gross_revenue_invoiced + gross_refund_invoiced + aws_rev_share_invoiced + aws_refund_share_invoiced + seller_tax_share_invoiced + seller_tax_share_refund_invoiced + cogs_invoiced + cogs_refund_invoiced + aws_tax_share_listing_fee_invoiced + aws_tax_share_refund_listing_fee_invoiced
      + gross_revenue_disbursed + gross_refund_disbursed + aws_rev_share_disbursed + aws_refund_share_disbursed + seller_tax_share_disbursed + seller_tax_share_refund_disbursed + cogs_disbursed + cogs_refund_disbursed + aws_tax_share_listing_fee_disbursed + aws_tax_share_refund_listing_fee_disbursed) as uncollected_seller_net_revenue,
    last_disbursement_date,
    last_disbursement_id,
    last_disburse_bank_trace_id,
    disbursement_date_list,
    disburse_bank_trace_id_list,
    product_code,
    manufacturer_aws_account_id,
    manufacturer_account_id,
    acc_manu.mailing_company_name as manufacturer_company_name,
    cast(null as varchar) as AR_Period,
    case
      when (
        (gross_revenue_invoiced <>0 and gross_revenue_invoiced = -1 * gross_revenue_disbursed)
        or (gross_refund_invoiced <> 0 and gross_refund_invoiced = -1 * gross_refund_disbursed)
        or (balance_adjustment_invoiced <> 0 and balance_adjustment_invoiced = -1 * balance_adjustment_disbursed)
        or (seller_tax_share_refund_invoiced <> 0 and seller_tax_share_refund_invoiced = -1 * seller_tax_share_refund_disbursed)
        or (gross_revenue_invoiced = 0 and gross_refund_invoiced = 0 and balance_adjustment_invoiced = 0 and seller_tax_share_refund_invoiced = 0 and last_disbursement_id is not null)) then 'Yes'
      when gross_revenue_disbursed = 0 and gross_refund_disbursed = 0 and balance_adjustment_disbursed = 0 and seller_tax_share_disbursed = 0 and seller_tax_share_refund_disbursed = 0 then 'No'
      else 'Partial'
    end as Disbursement_Flag
  from line_items_with_window_functions_enrich_offer_product_address as line
  left join accounts_with_history_with_company_name as acc_manu on
    line.manufacturer_account_id = acc_manu.account_id and line.buyer_invoice_date >= acc_manu.valid_from_adjusted and line.buyer_invoice_date <= acc_manu.valid_to
  left join accounts_with_history_with_company_name as acc_proposer on
    line.proposer_account_id = acc_proposer.account_id and line.buyer_invoice_date >= acc_proposer.valid_from and line.buyer_invoice_date<acc_proposer.valid_to
  left join address_with_latest_revision as add_payer on
    line.payer_address_id = add_payer.address_id
  left join address_with_latest_revision as add_subscriber on
    line.subscriber_address_id = add_subscriber.address_id
  left join address_with_latest_revision as add_enduser on
    line.end_user_address_id = add_enduser.address_id
  group by
    line.internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    legacy_product_id,
    product_title,
    broker_id,
    currency,
    end_user_address_id,
    end_user_account_id,
    end_user_encrypted_account_id,
    end_user_aws_account_id,
    add_enduser.company_name,
    add_enduser.email_domain,
    add_enduser.city,
    add_enduser.state_or_region,
    add_enduser.country_code,
    add_enduser.postal_code,
    payer_aws_account_id,
    payer_encrypted_account_id,
    payer_address_id,
    add_payer.company_name,
    add_payer.email_domain,
    add_payer.city,
    add_payer.state_or_region,
    add_payer.country_code,
    add_payer.postal_code,
    agreement_id,
    agreement_revision,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.aws_account_id end,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.mailing_company_name end,
    agreement_start_date,
    agreement_end_date,
    agreement_acceptance_date,
    agreement_updated_date,
    usage_period_start_date,
    usage_period_end_date,
    acceptor_account_id,
    subscriber_aws_account_id,
    subscriber_encrypted_account_id,
    subscriber_address_id,
    add_subscriber.company_name,
    add_subscriber.email_domain,
    add_subscriber.city,
    add_subscriber.state_or_region,
    add_subscriber.country_code,
    add_subscriber.postal_code,
    offer_id,
    offer_target,
    offer_name,
    offer_opportunity_name,
    offer_opportunity_description,
    opportunity_id,
    payment_due_date,
    bank_trace_id,
    disbursement_date,
    billing_address_id,
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    gross_revenue_invoiced,
    gross_refund_invoiced,
    cogs_invoiced,
    cogs_refund_invoiced,
    aws_rev_share_invoiced,
    aws_refund_share_invoiced,
    aws_tax_share_invoiced,
    aws_tax_share_listing_fee_invoiced,
    aws_tax_share_refund_invoiced,
    aws_tax_share_refund_listing_fee_invoiced,
    seller_tax_share_invoiced,
    seller_tax_share_refund_invoiced,
    balance_adjustment_invoiced,
    seller_rev_credit_invoiced,
    aws_ref_fee_credit_invoiced,
    gross_revenue_disbursed,
    gross_refund_disbursed,
    cogs_disbursed,
    cogs_refund_disbursed,
    aws_rev_share_disbursed,
    aws_refund_share_disbursed,
    aws_tax_share_disbursed,
    aws_tax_share_listing_fee_disbursed,
    aws_tax_share_refund_disbursed,
    aws_tax_share_refund_listing_fee_disbursed,
    seller_tax_share_disbursed,
    seller_tax_share_refund_disbursed,
    balance_adjustment_disbursed,
    seller_rev_credit_disbursed,
    aws_ref_fee_credit_disbursed,
    last_disbursement_date,
    last_disbursement_id,
    last_disburse_bank_trace_id,
    disbursement_date_list,
    disburse_bank_trace_id_list,
    product_code,
    manufacturer_aws_account_id,
    manufacturer_account_id,
    acc_manu.mailing_company_name,
    proposer_account_id,
    acc_proposer.aws_account_id
),

billed_revenue as (
  select
    ------------------
    -- Invoice Info --
    ------------------
    buyer_invoice_date as Invoice_Date,
    Payment_Due_Date as Payment_Due_Date,
    concat(
      'Net ',
      case
        when abs(date_diff('Day', Payment_due_date, buyer_invoice_date))>180 then '180+'
        else cast(abs(date_diff('Day', Payment_due_date, buyer_invoice_date)) as varchar)
        end,
      ' days'
    ) as payment_terms,
    buyer_invoice_id as Invoice_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when seller_invoice_id = '' then null else seller_invoice_id end,
      'Not applicable') as Listing_Fee_Invoice_ID,

    ---------------------------
    --End user Information --
    ---------------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when End_User_Company_Name = '' then null else End_User_Company_Name end,
      'Not available') as End_User_Company_Name,
    End_User_AWS_Account_ID,
    End_User_Encrypted_Account_ID,
    End_User_Email_Domain,
    End_User_City,
    End_User_State as End_User_State_or_Region,
    End_User_Country,
    End_User_Postal_Code,
    End_User_Address_ID,

    ---------------------------
    --Subscriber Information --
    ---------------------------
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Company_Name is null or Subscriber_Company_Name = '' then 'Not provided'
      else Subscriber_Company_Name
      end as Subscriber_Company_Name,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Subscriber_AWS_Account_ID
      end as Subscriber_AWS_Account_ID,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Subscriber_Encrypted_Account_ID
      end as Subscriber_Encrypted_Account_ID,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Email_Domain is null or Subscriber_Email_Domain = '' then 'Not provided'
      else Subscriber_Email_Domain
      end as Subscriber_Email_Domain,
    case
      when Agreement_id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_City is null or Subscriber_City = '' then 'Not provided'
      else Subscriber_City
      end as Subscriber_City,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_State is null or Subscriber_State = '' then 'Not provided'
      else Subscriber_State
      end as Subscriber_State_or_Region,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Country is null or Subscriber_Country = '' then 'Not provided'
      else Subscriber_Country
      end as Subscriber_Country,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Postal_Code is null or Subscriber_Postal_Code = '' then 'Not provided'
      else Subscriber_Postal_Code
      end as Subscriber_Postal_Code,
    case
      when Agreement_ID is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Address_ID is null or Subscriber_Address_ID = '' then 'Not provided'
      else Subscriber_Address_ID
      end as Subscriber_Address_ID,

    ----------------------
    -- Procurement Info --
    ----------------------
     -- product title at time of invoice. It is possible that the title changes over time and therefore there may be multiple product titles mapped to a single product id.
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Product_Title = '' then null else Product_Title end,
      'Not provided') as Product_Title,
    -- offer name at time of invoice. It is possible that the name changes over time therefore there may be multiple offer names mapped to a single offer id.
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when (Offer_Name is null or Offer_Name = '') and Offer_Target = 'Public' then 'Not applicable'
      else Offer_Name
      end as Offer_Name,
    case
      when Agreement_Id is null or Agreement_ID = ''
      then 'Not available'
      else Offer_ID
      end as Offer_ID,
    -- offer target at time of invoice.,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Offer_Target
      end as Offer_Visibility,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Agreement_ID = '' then null else Agreement_ID end,
      'Not available') as Agreement_ID,
    Agreement_Start_Date,
    Agreement_Acceptance_Date,
    Agreement_End_Date,
    Usage_Period_Start_Date,
    Usage_Period_End_Date,

    -----------------------
    -- Disbursement Info --
    -----------------------
    case
      when Disbursement_Flag = 'Yes' then 'Disbursed'
      when Disbursement_Flag = 'No' then 'Not Disbursed'
      else 'Other'
      end as Disbursement_Status,
    last_disbursement_date as disbursement_date,
    case
      when Disbursement_Flag = 'No' then 'Not applicable'
      when disburse_bank_trace_id_list is null or disburse_bank_trace_id_list = '' then 'Not available'
      else disburse_bank_trace_id_list
    end as disburse_bank_trace_id,

    --------------
    -- Revenues --
    --------------
    -- We are rounding the sums using 2 decimal precision
    -- Note that the rounding method might differ between SQL implementations.
    -- The monthly revenue report is using RoundingMode.HALF_UP. This might create tiny discrepancies between this SQL output
    -- and the legacy report
    round(gross_revenue_invoiced,2) as Gross_Revenue,
    round(gross_refund_invoiced,2) as Gross_Refund,
    round(aws_rev_share_invoiced,2) as Listing_Fee,
    round(aws_refund_share_invoiced,2) as Listing_Fee_Refund,
    truncate(
      case
        when gross_revenue_invoiced != 0 then abs(aws_rev_share_invoiced/gross_revenue_invoiced)
        when gross_refund_invoiced != 0 then abs(aws_refund_share_invoiced/gross_refund_invoiced)
        else 0
      end
      ,4) as Listing_Fee_Percentage,
    round(seller_tax_share_invoiced,2) as Seller_Tax_Share,
    round(seller_tax_share_refund_invoiced,2) as Seller_Tax_Share_Refund,
    round(aws_tax_share_invoiced,2) as AWS_Tax_Share,
    round(aws_tax_share_refund_invoiced,2) as AWS_Tax_Share_Refund,
    round(aws_tax_share_listing_fee_invoiced,2) as AWS_Tax_Share_Listing_Fee,
    round(aws_tax_share_refund_listing_fee_invoiced,2) as AWS_Tax_Share_Refund_Listing_Fee,
    round(cogs_invoiced,2) as Wholesale_cost,
    round(cogs_refund_invoiced,2) as Wholesale_cost_Refund,
    round(seller_net_revenue,2) as Seller_Net_Revenue,
    currency as Currency,

    substring(internal_buyer_line_item_id,1,strpos(internal_buyer_line_item_id,'-')-1) as Transaction_Reference_ID,
    broker_id as AWS_seller_of_record,

    -----------------
    -- Resale info --
    -----------------
    case
      when Opportunity_Id is null or Opportunity_Id = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Opportunity_Id
    end as Resale_authorization_ID,
    case
      when Offer_Opportunity_Name is null or Offer_Opportunity_Name = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Offer_Opportunity_Name
    end as Resale_authorization_name,
    case
      when Offer_Opportunity_Description is null or Offer_Opportunity_Description = '' then
        case
         when Offer_Target = 'Public' then 'Not applicable'
         when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
         else null
        end
      else Offer_Opportunity_Name
    end as Resale_authorization_description,
    case
      when (Reseller_AWS_Account_ID is not null and Reseller_AWS_Account_ID != '')
        and (Reseller_Company_Name is null or Reseller_Company_Name = '') then 'Not available'
      when (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '')
        and (opportunity_id is null or opportunity_id = '') then 'Not applicable'
      when (select seller_account_id from seller_account) <> manufacturer_aws_account_id
        and (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '') then 'Not applicable'
      else Reseller_Company_Name
    end as Reseller_Company_Name,
    case
      when (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '')
        and (Opportunity_Id is null or Opportunity_Id = '') then 'Not applicable'
      when (select seller_account_id from seller_account) <> manufacturer_aws_account_id
        and (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '') then 'Not applicable'
      else Reseller_AWS_Account_ID
    end as Reseller_AWS_Account_ID,

    -----------------------
    -- Payer Information --
    -----------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Payer_Company_Name = '' then null else Payer_Company_Name end,
      'Not available') as Payer_Company_Name,
    Payer_AWS_Account_ID,
    Payer_Encrypted_Account_ID,
    Payer_Email_Domain,
    Payer_City,
    Payer_State as Payer_State_or_Region,
    Payer_Country,
    Payer_Postal_Code,
    Payer_Address_ID,

    ---------------------
    -- ISV Information --
    ---------------------
    manufacturer_aws_account_id as ISV_Account_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Manufacturer_Company_Name = '' then null else Manufacturer_Company_Name end,
      'Not available') as ISV_Company_Name,

    ---------------------
    -- Products info --
    ---------------------
    Legacy_Product_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Product_ID = '' then null else Product_ID end,
      'Not provided') as Product_ID,
    Product_Code
  from
    line_items_with_window_functions_enrich_offer_product_address_name as line
  where disbursement_id_or_invoiced = '<invoiced>'

)

select *
from billed_revenue
where invoice_date >= date_add('DAY', -90, current_date)
--where invoice_date between cast('2023-01-01' as timestamp) and cast('2024-03-01' as timestamp)
```

## Facturas no cobradas o abonadas
<a name="data-feed-example-collections"></a>

Para encontrar las facturas no cobradas o abonadas, puede ejecutar un conjunto de consultas como las que se muestran en el siguiente ejemplo. Las consultas se complementan entre sí para crear el informe de **Cargos y abonos**. Puede usar el ejemplo que se muestra o personalizarlo para sus datos y casos de uso.

Los comentarios de las consultas explican lo que hacen las consultas y cómo modificarlas.

```
-- Collections and disbursements report

-- General note: When running this query, we assume that the data ingested in the database uses
-- two time axes (the valid_from column and the update_date column).
-- See documentation for more details: https://docs.aws.amazon.com/marketplace/latest/userguide/data-feed.html#data-feed-details

-- An account_id has several valid_from dates (each representing a separate revision of the data)
-- but because of bi-temporality, an account_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
with accounts_with_uni_temporal_data as (
  select
    account_id,
    aws_account_id,
    encrypted_account_id,
    mailing_address_id,
    tax_address_id,
    tax_legal_name,
    from_iso8601_timestamp(valid_from) as valid_from,
    tax_registration_number
  from
    (
      select
        account_id,
        aws_account_id,
        encrypted_account_id,
        mailing_address_id,
        tax_address_id,
        tax_legal_name,
        valid_from,
        delete_date,
        tax_registration_number,
        row_number() over (partition by account_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
      from
        accountfeed_v1
    )
    where
      -- keep latest ...
      row_num = 1
      -- ... and remove the soft-deleted one.
      and (delete_date is null or delete_date = '')
  ),

accounts_with_history as (
  with accounts_with_history_with_extended_valid_from as (
    select
      account_id,
      -- sometimes, this columns gets imported as a "bigint" and loses heading 0s -> casting to a char and re-adding heading 0s (if need be)
      substring('000000000000'||cast(aws_account_id as varchar),-12) as aws_account_id,
      encrypted_account_id,
      mailing_address_id,
      tax_address_id,
      tax_legal_name,
      -- The start time of account valid_from is extended to '1970-01-01 00:00:00', because:
      -- ... in tax report transformations, some tax line items with invoice_date cannot
      -- ... fall into the default valid time range of the associated account
      case
        when lag(valid_from) over (partition by account_id order by valid_from asc) is null
          then cast('1970-01-01 00:00:00' as timestamp)
        else valid_from
      end as valid_from
    from accounts_with_uni_temporal_data
    )
  select
    account_id,
    aws_account_id,
    encrypted_account_id,
    mailing_address_id,
    tax_address_id,
    tax_legal_name,
    valid_from,
    coalesce(
      lead(valid_from) over (partition by account_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp)
    ) as valid_to
  from
    accounts_with_history_with_extended_valid_from
),

-- An address_id has several valid_from dates (each representing a separate revision of the data)
-- but because of bi-temporality, an account_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
address_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    address_id,
    company_name,
    email_domain,
    country_code,
    state_or_region,
    city,
    postal_code,
    row_num
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      address_id,
      company_name,
      email_domain,
      country_code,
      state_or_region,
      city,
      postal_code,
      row_number() over (partition by address_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      addressfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

-- We are only interested in the most recent tuple (BTW: a given address is not supposed to change over time but when bugs ;-) so this query mainly does nothing)
address_with_latest_revision as (
  select
    valid_from,
    address_id,
    company_name,
    email_domain,
    country_code,
    state_or_region,
    city,
    postal_code,
    row_num_latest_revision
  from
  (
    select
      valid_from,
      address_id,
      company_name,
      email_domain,
      country_code,
      state_or_region,
      city,
      postal_code,
      row_number() over (partition by address_id order by valid_from desc) as row_num_latest_revision
    from
      address_with_uni_temporal_data
  )
  where
    row_num_latest_revision = 1
),

accounts_with_history_with_company_name as (
  select
    awh.account_id,
    awh.aws_account_id,
    awh.encrypted_account_id,
    awh.mailing_address_id,
    awh.tax_address_id,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when address.company_name = '' then null else address.company_name end,
      awh.tax_legal_name) as mailing_company_name,
    address.email_domain,
    awh.valid_from,
    -- For BYOL, the agreement might be accepted (using some external non-AWS system or manual process) days before
    -- that BYOL agreement is entered into AWS Marketplace by the buyer. Therefore, the buyer is permitted to manually
    -- enter a backdated acceptance date, which might predate the point in time when the account was created.
    -- To work around this, we need to adjust the valid_from of the account to be
    -- earlier than the earliest possible backdated BYOL agreement acceptance date.
    case
      when lag(awh.valid_from) over (partition by aws_account_id order by awh.valid_from asc) is null
      then date_add('Day', -212, awh.valid_from)
      -- 212 is the longest delay between acceptance_date of the agreement and the account start_Date
      else awh.valid_from
    end as valid_from_adjusted,
    awh.valid_to
  from accounts_with_history as awh
  left join address_with_latest_revision as address on
    awh.mailing_address_id = address.address_id and awh.mailing_address_id is not null
),

-- An agreement_id has several valid_from dates (each representing an agreement revision)
-- but because of bi-temporality, an agreement_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
agreements_with_uni_temporal_data as (
  select
    agreement_id,
    origin_offer_id,
    proposer_account_id,
    acceptor_account_id,
    agreement_revision,
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(start_date) as start_date,
    from_iso8601_timestamp(end_date) as end_date,
    from_iso8601_timestamp(acceptance_date) as acceptance_date,
    agreement_type,
    previous_agreement_id,
    agreement_intent
  from
  (
    select
      --empty value in Athena shows as '', change all '' value to null
      case when agreement_id = '' then null else agreement_id end as agreement_id,
      origin_offer_id,
      proposer_account_id,
      acceptor_account_id,
      agreement_revision,
      valid_from,
      delete_date,
      start_date,
      end_date,
      acceptance_date,
      agreement_type,
      previous_agreement_id,
      agreement_intent,
      row_number() over (partition by agreement_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      -- TODO change to agreementfeed_v1 when Agreement Feed is GA'ed
      agreementfeed
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

agreements_with_history as (
  with agreements_with_window_functions as (
    select
      agreement_id,
      origin_offer_id as offer_id,
      proposer_account_id,
      acceptor_account_id,
      agreement_revision,
      start_date,
      end_date,
      acceptance_date,
      -- The start time of agreement valid_from is extended to '1970-01-01 00:00:00', because:
      -- ... in usage report transformations, some usage line items with usage_date cannot
      -- ... fall into the default valid time range of the associated agreement
      case
          when lag(valid_from) over (PARTITION BY agreement_id order by valid_from asc) is null
          then timestamp '1970-01-01 00:00:00'
          else valid_from
      end as valid_from,
      coalesce(
          lead(valid_from) over (partition by agreement_id order by valid_from asc),
          timestamp '2999-01-01 00:00:00'
      ) as valid_to,
      rank() over (partition by agreement_id order by valid_from asc) version,
      agreement_type,
      previous_agreement_id,
      agreement_intent
    from
      agreements_with_uni_temporal_data
  )
  select
    agreement_id,
    offer_id,
    proposer_account_id,
    acceptor_account_id,
    agreement_revision,
    start_date,
    end_date,
    acceptance_date,
    valid_from,
    case
        when version=1 and valid_from < timestamp '2023-03-03 06:16:08.743' then timestamp '1970-01-01'
        -- The following 60 minute adjustment is to handle special case where When Renewal happens for a contract
        when version=1 then date_add('minute',-60,valid_from)
        else valid_from
    end as valid_from_adjusted,
    valid_to,
    agreement_type,
    previous_agreement_id,
    agreement_intent
  from
    agreements_with_window_functions
),

-- An offer_id has several valid_from dates (each representing an offer revision)
-- but because of bi-temporality, an offer_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
offers_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    offer_id,
    offer_revision,
    name,
    expiration_date,
    opportunity_id,
    opportunity_name,
    opportunity_description,
    seller_account_id
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      offer_id,
      offer_revision,
      name,
      expiration_date,
      opportunity_id,
      opportunity_name,
      opportunity_description,
      seller_account_id,
      row_number() over (partition by offer_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      offerfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

-- Here, we build the validity time range (adding valid_to on top of valid_from) of each offer revision.
-- We will use it to get Offer name at invoice time.
-- NB: If you'd rather get "current" offer name, un-comment "offers_with_latest_revision"
offers_with_history as (
  select
    offer_id,
    offer_revision,
    name,
    opportunity_id,
    opportunity_name,
    opportunity_description,
    valid_from,
    -- When we try to look up an offer revision as at the acceptance date of a BYOL agreement, we run into a problem.
    -- For BYOL, the agreement might be accepted (using some external non-AWS system or manual process) days before
    -- that BYOL agreement is entered into AWS Marketplace by the buyer. Therefore, the buyer is permitted to manually
    -- enter a backdated acceptance date, which might predate the point in time when the first revision of the offer
    -- was created. To work around this, we need to adjust the valid_from on the first revision of the offer to be
    -- earlier than the earliest possible backdated BYOL agreement acceptance date.
    case
      when lag(valid_from) over (partition by offer_id order by valid_from asc) is null and valid_from < cast('2021-04-01' as timestamp)
      then date_add('Day', -3857, valid_from)
      -- 3857 is the longest delay between acceptance_date of an agreement and the first revision of the offer
      when lag(valid_from) over (partition by offer_id order by valid_from asc) is null and valid_from >= cast('2021-04-01' as timestamp)
      then date_add('Day', -1460, valid_from)
      --after 2021 for the two offers we need to adjust for 2 more years
      else valid_from
    end as valid_from_adjusted,
    coalesce(
      lead(valid_from) over (partition by offer_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp))
    as valid_to
  from offers_with_uni_temporal_data
),
-- provided for reference only if you are interested into get "current" offer name
-- (ie. not used afterwards)
offers_with_latest_revision as (
  select
    offer_id,
    offer_revision,
    name,
    opportunity_name,
    opportunity_description,
    valid_from,
    null valid_to
  from
  (
    select
      offer_id,
      offer_revision,
      name,
      opportunity_name,
      opportunity_description,
      valid_from,
      null valid_to,
      row_number() over (partition by offer_id order by valid_from desc) as row_num_latest_revision
    from
      offers_with_uni_temporal_data
  )
  where
    row_num_latest_revision = 1
),

-- An offer_target_id has several valid_from dates (each representing an offer revision)
-- but because of bi-temporality, an offer_target_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
offer_targets_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    offer_target_id,
    offer_id,
    offer_revision,
    target_type,
    polarity,
    value
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      offer_target_id,
      offer_id,
      offer_revision,
      target_type,
      polarity,
      value,
      row_number() over (partition by offer_target_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      offertargetfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

offer_target_type as (
  select
    offer_id,
    offer_revision,
    substring(
      -- The first character indicates the priority (lower value means higher precedence):
      min(
        case
          when offer_target.target_type='BuyerAccounts' then '1Private'
          when offer_target.target_type='ParticipatingPrograms' then '2Program:'||cast(offer_target.value as varchar)
          when offer_target.target_type='CountryCodes' then '3GeoTargeted'
          -- well, there is no other case today, but rather be safe...
          else '4Other Targeting'
        end
      ),
      -- Remove the first character that was only used for th priority in the "min" aggregate function:
      2
    ) as offer_target
  from
    offer_targets_with_uni_temporal_data as offer_target
  group by
    offer_id,
    offer_revision
),

offers_with_history_with_target_type as (
  select
    offer.offer_id,
    offer.offer_revision,
    -- even though today it is not possible to combine several types of targeting in a single offer, let's ensure the query is still predictable if this gets possible in the future
    max(
      case
        when off_tgt.offer_target is null then 'Public'
        else off_tgt.offer_target
      end
    ) as offer_target,
    min(offer.name) as name,
    min(offer.opportunity_name) as opportunity_name,
    min(offer.opportunity_description) as opportunity_description,
    offer.valid_from,
    offer.valid_from_adjusted,
    offer.valid_to,
    offer.opportunity_id
  from
    offers_with_history as offer
  left join offer_target_type as off_tgt on
    offer.offer_id = off_tgt.offer_id
    and offer.offer_revision = off_tgt.offer_revision
  group by
    offer.offer_id,
    offer.offer_revision,
    offer.valid_from,
    offer.valid_from_adjusted,
    offer.valid_to,
    offer.opportunity_id
),

-- provided for reference only if you are interested into get "current" offer targets
-- (ie. not used afterwards)
offers_with_latest_revision_with_target_type as (
  select
    offer.offer_id,
    offer.offer_revision,
    -- even though today it is not possible to combine several types of targeting in a single offer, let's ensure the query is still predictable if this gets possible in the future
    max(
      distinct
      case
        when off_tgt.target_type is null then 'Public'
        when off_tgt.target_type='BuyerAccounts' then 'Private'
        when off_tgt.target_type='ParticipatingPrograms' then 'Program:'||cast(off_tgt.value as varchar)
        when off_tgt.target_type='CountryCodes' then 'GeoTargeted'
        -- well, there is no other case today, but rather be safe...
        else 'Other Targeting'
      end
    ) as offer_target,
    min(offer.name) as name,
    min(offer.opportunity_name) as opportunity_name,
    min(offer.opportunity_description) as opportunity_description,
    offer.valid_from,
    offer.valid_to
  from
    offers_with_latest_revision offer
    -- left joining because public offers don't have targets
    left join offer_targets_with_uni_temporal_data off_tgt on
      offer.offer_id=off_tgt.offer_id and offer.offer_revision=off_tgt.offer_revision
  group by
    offer.offer_id,
    offer.offer_revision,
    -- redundant with offer_revision, as each revision has a dedicated valid_from (but cleaner in the group by)
    offer.valid_from,
    offer.valid_to
),

-- A product_id has several valid_from dates (each representing a product revision),
-- but because of bi-temporality, each product_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
products_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    product_id,
    manufacturer_account_id,
    product_code,
    title
  from
  (
    select
      valid_from,
      update_date,
      delete_date,
      product_id,
      manufacturer_account_id,
      product_code,
      title,
      row_number() over (partition by product_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      productfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

products_with_history as (
  select
    product_id,
    title,
    valid_from,
    -- Offerv2 can have upto 50 years and Offerv3 is upto 5 years of past date
    case
      when lag(valid_from) over (partition by product_id order by valid_from asc) is null and valid_from < cast('2021-04-01' as timestamp)
        then date_add('Day', -3857, valid_from)
      -- 3827 is the longest delay between acceptance_date of an agreement and the product
      -- we are keeping 3857 as a consistency between the offers and products
      when lag(valid_from) over (partition by product_id order by valid_from asc) is null and valid_from >= cast('2021-04-01' as timestamp)
        then date_add('Day', -2190, valid_from)
      --after 2021 for the two offers we need to adjust for 2 more years
      else valid_from 
    end as valid_from_adjusted,
    coalesce(
      lead(valid_from) over (partition by product_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp)
    ) as valid_to,
    product_code,
    manufacturer_account_id
  from
    products_with_uni_temporal_data
),

legacy_products as (
  select
    legacy_id,
    new_id
  from
    legacyidmappingfeed_v1
  where
    mapping_type='PRODUCT'
  group by
    legacy_id,
    new_id
),

-- A given billing_event_id represents an accounting event and thus has only one valid_from date,
-- but because of bi-temporality, a billing_event_id (+ its valid_from) can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
billing_events_with_uni_temporal_data as (
  select
    billing_event_id,
    valid_from,
    update_date,
    delete_date,
    invoice_date,
    transaction_type,
    transaction_reference_id,
    parent_billing_event_id,
    bank_trace_id,
    broker_id,
    product_id,
    disbursement_billing_event_id,
    action,
    from_account_id,
    to_account_id,
    end_user_account_id,
    billing_address_id,
    amount,
    currency,
    balance_impacting,
    --empty value in Athena shows as '', change all '' value to null
    case when agreement_id = '' then null else agreement_id end as agreement_id,
    invoice_id,
    payment_due_date,
    usage_period_start_date,
    usage_period_end_date,
    buyer_transaction_reference_id,
    row_num
  from
  (
    select
      billing_event_id,
      from_iso8601_timestamp(valid_from) as valid_from,
      from_iso8601_timestamp(update_date) as update_date,
      delete_date,
      from_iso8601_timestamp(invoice_date) as invoice_date,
      transaction_type,
      transaction_reference_id,
      parent_billing_event_id,
      -- casting in case data was imported as number
      cast(bank_trace_id as varchar) as bank_trace_id,
      broker_id,
      product_id,
      disbursement_billing_event_id,
      action,
      from_account_id,
      to_account_id,
      end_user_account_id,
      billing_address_id,
      -- casting in case data was imported as varchar
      cast(amount as decimal(38,6)) as amount,
      currency,
      balance_impacting,
      agreement_id,
      invoice_id,
      case when payment_due_date is null or payment_due_date = '' then null else from_iso8601_timestamp(payment_due_date) end as payment_due_date,
      from_iso8601_timestamp(usage_period_start_date) as usage_period_start_date,
      from_iso8601_timestamp(usage_period_end_date) as usage_period_end_date,
      buyer_transaction_reference_id,
      row_number() over (partition by billing_event_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
    from
      billingeventfeed_v1
  )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

-- Here we select the account_id of the current seller (We identify this by looking for the to_account_id related to revenue transactions).
-- We will use it later to distinguish own agreements from agreements generated by channel partners.
seller_account as (
  select
    from_account_id as seller_account_id
  from
    billing_events_with_uni_temporal_data bill
  where
    -- Assumption here is only seller will pay listing fee. As of 12/21/2021, there are cases that Channel partner have 0 listing fee for CPPO, so the amount could be 0.
    bill.transaction_type like 'AWS_REV_SHARE' and amount <= 0 and action = 'INVOICED'
  group by
    -- from_account_id is always the same for all those "listing fee" transactions == the seller of record himself.
    -- If this view returns more than 1 record, the overall query will fail (on purpose). Please contact AWS Marketplace if this happens.
    from_account_id
),

billing_event_with_business_flags as (
  select
    bl.billing_event_id,
    bl.end_user_account_id,
    bl.agreement_id,
    aggrement.proposer_account_id,
    aggrement.offer_id,
    aggrement.acceptor_account_id,
    case
      -- For AWS and BALANCE_ADJUSTMENT, the billing event feed will show the "AWS Marketplace" account as the
      -- receiver of the funds and the seller as the payer. We are not interested in this information here.
      -- Null values will be ignored by the `max` aggregation function.
      when bl.transaction_type like 'AWS%' then null
      -- For BALANCE_ADJUSTMENT, payer is seller themselves
      when bl.invoice_id is null then bl.to_account_id
      -- We get the payer of the invoice from *any* transaction type that is not AWS and not BALANCE_ADJUSTMENT (because they are the same for a given end user + agreement + product).
      else bl.from_account_id
    end as payer_account_id,
    bl.product_id,
    bl.action,
    bl.transaction_type,
    bl.parent_billing_event_id,
    bl.disbursement_billing_event_id,
    bl.amount,
    bl.currency,
    bl.balance_impacting,
    bl.invoice_date,
    bl.payment_due_date,
    bl.usage_period_start_date,
    bl.usage_period_end_date,
    bl.invoice_id,
    bl.billing_address_id,
    bl.transaction_reference_id,
    bl.buyer_transaction_reference_id,
    case when disbursement.bank_trace_id = 'EMEA_MP_TEST_TRACE_ID' then null else disbursement.bank_trace_id end as bank_trace_id,
    case when disbursement.bank_trace_id = 'EMEA_MP_TEST_TRACE_ID' then null else disbursement.invoice_date end as disbursement_date,
    disbursement.billing_event_id as disbursement_id,
    -- We will use disbursement_id_or_invoiced as part of the PK, so it cannot be null:
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when disbursement.billing_event_id = '' then null else disbursement.billing_event_id end,
      '<invoiced>') as disbursement_id_or_invoiced,
    bl.broker_id,
    case
      when bl.invoice_id is null /* transaction_type = 'BALANCE_ADJUSTMENT' */
        then (select seller_account_id from seller_account) ||':'|| cast(bl.invoice_date as varchar)
      else bl.buyer_transaction_reference_id
        ||'-'|| case when bl.agreement_id is null or bl.agreement_id = '' then ' ' else bl.agreement_id end
        ||'-'|| case when bl.end_user_account_id is null or bl.end_user_account_id = '' then ' ' else bl.end_user_account_id end
        ||'-'|| coalesce(cast(bl.usage_period_start_date as varchar),' ')
        ||'-'|| coalesce(cast(bl.usage_period_end_date as varchar),' ')
    end as internal_buyer_line_item_id,
    bl.buyer_transaction_reference_id <> bl.transaction_reference_id as is_seller_invoice,
    case when bl.transaction_type = 'SELLER_REV_SHARE' and (select seller_account_id from seller_account) <> bl.to_account_id then true else false end as is_cog,
    case when bl.transaction_type in('SELLER_REV_SHARE_CREDIT', 'SELLER_REV_SHARE_REFUND') and (select seller_account_id from seller_account) <> bl.to_account_id then true else false end as is_cog_refund,
    --TODO: replace below logic once we can create a logic the identify reseller/manufacturer without depending on agreement feed
    case when aggrement.proposer_account_id <> (select seller_account_id from seller_account) then true else false end as is_manufacturer_view_of_reseller
  from
    billing_events_with_uni_temporal_data as bl
    left join billing_events_with_uni_temporal_data as disbursement on
      disbursement.transaction_type like 'DISBURSEMENT%'
        and disbursement.action = 'DISBURSED'
        and disbursement.transaction_type IN ('DISBURSEMENT', 'DISBURSEMENT_FAILURE')
        and bl.disbursement_billing_event_id = disbursement.billing_event_id
    left join agreements_with_history as aggrement on
      bl.agreement_id = aggrement.agreement_id
        and bl.invoice_date >= aggrement.valid_from_adjusted
        and bl.invoice_date < aggrement.valid_to
    left join accounts_with_history awh on
      bl.to_account_id = awh.account_id
        and bl.invoice_date >= awh.valid_from
        and bl.invoice_date < awh.valid_to
  where
    bl.transaction_type not like 'DISBURSEMENT%' and
      (bl.agreement_id is null or bl.agreement_id = ''
      or aggrement.agreement_id is not null)
),

-- listagg function in athena does not support partitioning, grouping here and then joining to the main query
seller_invoice_list as (
  select
    internal_buyer_line_item_id,
    listagg(case when not is_seller_invoice then null else invoice_id end,',') within group (order by case when not is_seller_invoice then null else cast(invoice_date as varchar) end) as seller_invoice_id_or_null,
    listagg(case when not is_seller_invoice then null else cast(invoice_date as varchar) end,',') within group (order by case when not is_seller_invoice then null else cast(invoice_date as varchar) end) as seller_invoice_date_or_null
  from
    (
    -- listagg function in athena does not support ordering by another field when distinct is used,
    -- here we first select distinct invoices and then do the listagg order by invoice_date
    select distinct internal_buyer_line_item_id, is_seller_invoice, invoice_id, invoice_date
    from billing_event_with_business_flags) distinct_invoices
  group by internal_buyer_line_item_id
  order by internal_buyer_line_item_id
),

billing_event_with_categorized_transaction as (
-- Use the flags that were created in the previous transformation in more calculated columns:
-- NOTE: This transformation has no joins and no window functions
  select
    billing_event_id,
    end_user_account_id,
    agreement_id,
    proposer_account_id,
    offer_id,
    acceptor_account_id,
    case when is_cog or is_cog_refund then null else payer_account_id end as payer_account_id,
    product_id,
    action,
    transaction_type,
    parent_billing_event_id,
    disbursement_billing_event_id,
    amount,
    currency,
    balance_impacting,
    invoice_date,
    payment_due_date,
    usage_period_start_date,
    usage_period_end_date,
    invoice_id,
    billing_address_id,
    transaction_reference_id,
    buyer_transaction_reference_id,
    bank_trace_id,
    disbursement_date,
    disbursement_id,
    disbursement_id_or_invoiced,
    broker_id,
    bl.internal_buyer_line_item_id,
    is_seller_invoice,
    is_cog,
    is_cog_refund,
    is_manufacturer_view_of_reseller,

    -- Buyer/seller columns:
    case when is_seller_invoice then null else invoice_id end as buyer_invoice_id_or_null,
    seller_invoices.seller_invoice_id_or_null,
    case when is_seller_invoice then null else invoice_date end as buyer_invoice_date_or_null,
    seller_invoices.seller_invoice_date_or_null,

    -- Categorized amounts by transaction type:
    case when transaction_type =   'SELLER_REV_SHARE' and not is_cog then amount else 0 end as gross_revenue,
    case when transaction_type in ('SELLER_REV_SHARE_REFUND','SELLER_REV_SHARE_CREDIT') and not is_cog_refund then amount else 0 end as gross_refund,
    case when transaction_type =   'SELLER_REV_SHARE' and     is_cog then amount else 0 end as cogs,
    case when transaction_type in ('SELLER_REV_SHARE_REFUND','SELLER_REV_SHARE_CREDIT') and     is_cog_refund then amount else 0 end as cogs_refund,
    case when transaction_type =   'AWS_REV_SHARE' then amount else 0 end as aws_rev_share,
    case when transaction_type in ('AWS_REV_SHARE_REFUND','AWS_REV_SHARE_CREDIT') then amount else 0 end as aws_refund_share,
    case when transaction_type =   'AWS_TAX_SHARE' and not is_seller_invoice then amount else 0 end as aws_tax_share,             -- AWS tax share from _buyer_  invoice
    case when transaction_type =   'AWS_TAX_SHARE' and     is_seller_invoice then amount else 0 end as aws_tax_share_listing_fee, -- AWS tax share from _seller_ invoice
    case when transaction_type =   'AWS_TAX_SHARE_REFUND' and not is_seller_invoice then amount else 0 end as aws_tax_share_refund,
    case when transaction_type =   'AWS_TAX_SHARE_REFUND' and     is_seller_invoice then amount else 0 end as aws_tax_share_refund_listing_fee,
    case when transaction_type =   'SELLER_TAX_SHARE' then amount else 0 end as seller_tax_share,
    case when transaction_type =   'SELLER_TAX_SHARE_REFUND' then amount else 0 end as seller_tax_share_refund,
    case when transaction_type =   'BALANCE_ADJUSTMENT' then amount else 0 end as balance_adjustment,
    case when transaction_type =   'SELLER_REV_SHARE_CREDIT' then amount else 0 end as seller_rev_credit,
    case when transaction_type =   'AWS_REV_SHARE_CREDIT' then amount else 0 end as aws_ref_fee_credit
  from
    billing_event_with_business_flags as bl
    left join seller_invoice_list as seller_invoices
      on bl.internal_buyer_line_item_id = seller_invoices.internal_buyer_line_item_id
    ),

line_items_aggregated as (
-- This transformation has the only "group by" in all of these transformations.
-- NOTE: This transformation has no joins and no window functions
  select
    internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    broker_id,
    currency,
    agreement_id,
    proposer_account_id,
    acceptor_account_id,
    max(payer_account_id) as payer_account_id,
    offer_id,
    end_user_account_id,
    usage_period_start_date,
    usage_period_end_date,
    max(payment_due_date) payment_due_date,
    buyer_transaction_reference_id,
    bank_trace_id,
    disbursement_date,
    max(billing_address_id) as billing_address_id,

    -- Buyer/seller columns:
    max(buyer_invoice_id_or_null) as buyer_invoice_id,
    max(seller_invoice_id_or_null) as seller_invoice_id,
    max(buyer_invoice_date_or_null) as buyer_invoice_date,
    max(seller_invoice_date_or_null) as seller_invoice_date,
  
    -- Categorized amounts by transaction type:
    -- When disbursement_id_or_invoiced = '<invoiced>',    these are invoiced amounts
    -- When disbursement_id_or_invoiced <> ''<invoiced>' these are disbursed amounts for _this_ specific disbursement_id
    sum(gross_revenue) as gross_revenue_this_disbursement_id_or_invoiced,
    sum(gross_refund) as gross_refund_this_disbursement_id_or_invoiced,
    sum(cogs) as cogs_this_disbursement_id_or_invoiced,
    sum(cogs_refund) as cogs_refund_this_disbursement_id_or_invoiced,
    sum(aws_rev_share) as aws_rev_share_this_disbursement_id_or_invoiced,
    sum(aws_refund_share) as aws_refund_share_this_disbursement_id_or_invoiced,
    sum(aws_tax_share) as aws_tax_share_this_disbursement_id_or_invoiced,
    sum(aws_tax_share_listing_fee) as aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    sum(aws_tax_share_refund) as aws_tax_share_refund_this_disbursement_id_or_invoiced,
    sum(aws_tax_share_refund_listing_fee) as aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    sum(seller_tax_share) as seller_tax_share_this_disbursement_id_or_invoiced,
    sum(seller_tax_share_refund) as seller_tax_share_refund_this_disbursement_id_or_invoiced,
    sum(balance_adjustment) as balance_adjustment_this_disbursement_id_or_invoiced,
    sum(seller_rev_credit) as seller_rev_credit_this_disbursement_id_or_invoiced,
    sum(aws_ref_fee_credit) as aws_ref_fee_credit_this_disbursement_id_or_invoiced
  from
    billing_event_with_categorized_transaction as billing_categorized
  group by
    internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    broker_id,
    -- The following columns are included the in group by but they are intentionally omitted from the PK.
    -- These columns should have the _same_ values for each record in the PK.
    product_id,
    currency,
    agreement_id,
    proposer_account_id,
    acceptor_account_id,
    offer_id,
    end_user_account_id,
    usage_period_start_date,
    usage_period_end_date,
    buyer_transaction_reference_id,
    bank_trace_id,
    disbursement_date
),

-- listagg function in athena does not support partitioning, grouping here and then joining to the main query
disbursement_list as (
  select
    internal_buyer_line_item_id,
    listagg(cast(disbursement_date as varchar),',') within group (order by cast(disbursement_date as varchar)) as disbursement_date_list,
    listagg(bank_trace_id,',') within group (order by cast(disbursement_date as varchar)) as disburse_bank_trace_id_list
    from (
    -- listagg function in athena does not support ordering by another field when distinct is used,
    -- here we first select distinct bank_trace_ids and then do the listagg order by disbursement_date
    select distinct internal_buyer_line_item_id, disbursement_date, bank_trace_id
  from billing_event_with_business_flags) distinct_disbursements
  group by internal_buyer_line_item_id
  order by internal_buyer_line_item_id
),

line_items_with_window_functions as (
--add flag next step compare gross_revenue and gross_revenue_disbursed or gross_refund and gross_refund_disbursed
  select
    line_item.internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    broker_id,
    currency,
    agreement_id,
    proposer_account_id,
    acceptor_account_id,
    -- when there's aws_rev_Share adjustment/refund to a seller_rev_share invoice, it can happen that for the same aws_rev_share invoice_id, there are multiple disbursement events,
    -- using windows function to map payer_account_id of seller_rev_share to all corresponding aws_rev_Share
    max(payer_account_id) over (partition by line_item.internal_buyer_line_item_id) as payer_account_id,
    offer_id,
    end_user_account_id,
    usage_period_start_date,
    usage_period_end_date,
    payment_due_date,
    bank_trace_id,
    disbursement_date,
    billing_address_id,

    -- Buyer/seller columns:
    max(buyer_invoice_id) over (partition by line_item.internal_buyer_line_item_id) as buyer_invoice_id,
    seller_invoice_id,
    max(buyer_invoice_date) over (partition by line_item.internal_buyer_line_item_id) as buyer_invoice_date,
    seller_invoice_date,

    -- When disbursement_id_or_invoiced = ''<invoiced>', these are actually invoiced amounts
    -- When disbursement_id_or_invoiced <> ''<invoiced>' these are disbursed amounts for _this_ specific disbursement_id
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    -- IMPORTANT: All window functions partitioned by internal_buyer_line_item_id:

    -- Invoiced amounts, categorized by transaction type:
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then gross_revenue_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end)over (partition by line_item.internal_buyer_line_item_id) as gross_revenue_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then gross_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as gross_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then cogs_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then cogs_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_rev_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_rev_share_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_refund_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_refund_share_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_tax_share_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_listing_fee_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_listing_fee_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then seller_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then seller_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_refund_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then balance_adjustment_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as balance_adjustment_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then seller_rev_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_rev_credit_invoiced,
    sum(case when disbursement_id_or_invoiced = ''<invoiced>' then aws_ref_fee_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_ref_fee_credit_invoiced,

    -- Total disbursed amounts (for all disbursement_id values), categorized by transaction type:
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then gross_revenue_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as gross_revenue_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then gross_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as gross_refund_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then cogs_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then cogs_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as cogs_refund_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_rev_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_rev_share_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_refund_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_refund_share_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_tax_share_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_listing_fee_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_tax_share_refund_listing_fee_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then seller_tax_share_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then seller_tax_share_refund_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_tax_share_refund_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then balance_adjustment_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as balance_adjustment_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then seller_rev_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as seller_rev_credit_disbursed,
    sum(case when disbursement_id_or_invoiced '<> ''<invoiced>' then aws_ref_fee_credit_this_disbursement_id_or_invoiced else cast(0 as decimal(38,6)) end) over (partition by line_item.internal_buyer_line_item_id) as aws_ref_fee_credit_disbursed,

    -- aggregate multiple disbursement
    max(disbursement_date) over (partition by line_item.internal_buyer_line_item_id) as last_disbursement_date,
    first_value(case when disbursement_id_or_invoiced = ''<invoiced>' then null else disbursement_id_or_invoiced end) over(partition by line_item.internal_buyer_line_item_id order by coalesce(disbursement_date,cast('1900-01-01' as timestamp)) desc rows between unbounded preceding and unbounded following) as last_disbursement_id,
    first_value(bank_trace_id) over (partition by line_item.internal_buyer_line_item_id order by coalesce(disbursement_date,cast('1900-01-01' as timestamp)) desc rows between unbounded preceding and unbounded following) as last_disburse_bank_trace_id,
    disb_list.disbursement_date_list,
    disb_list.disburse_bank_trace_id_list
  from
    line_items_aggregated as line_item
    left join disbursement_list disb_list
      on line_item.internal_buyer_line_item_id = disb_list.internal_buyer_line_item_id
),

cppo_offer_id as (
  select
    -- Channel partner offers do not exist in offertargetfeed_v1 table (as per legal requirement), causing cppo offer be defined as 'Public' in previous step, we will convert them back to 'Private' in next step
    offer_id
  from
    offers_with_uni_temporal_data
  where
    -- seller_account_id is null means the ISV owns the offer
    seller_account_id is not null
    and seller_account_id '<>  (select seller_account_id from seller_account)
  group by
    offer_id
),

line_items_with_window_functions_enrich_offer_product_address as (
  select
    internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    line.product_id,
    legacy_product.legacy_id as legacy_product_id,
    products.title as product_title,
    line.broker_id,
    line.currency,
    line.end_user_account_id,
    acc_enduser.encrypted_account_id as end_user_encrypted_account_id,
    acc_enduser.aws_account_id as end_user_aws_account_id,
    acc_payer.aws_account_id as payer_aws_account_id,
    acc_payer.encrypted_account_id payer_encrypted_account_id,
    line.agreement_id,
    agreement.agreement_revision,
    line.proposer_account_id,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.start_date end as Agreement_Start_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.end_date end as Agreement_End_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.acceptance_date end as Agreement_Acceptance_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else agreement.valid_from end as agreement_updated_date,
    case when offer.offer_id like 'aiqoffer-%' then null else line.usage_period_start_date end as Usage_Period_Start_Date,
    case when offer.offer_id like 'aiqoffer-%' then null else line.usage_period_end_date end as Usage_Period_End_Date,

    line.acceptor_account_id,
    acc_subscriber.aws_account_id as subscriber_aws_account_id,
    acc_subscriber.encrypted_account_id as subscriber_encrypted_account_id,
    offer.offer_id,
    case
      when offer.offer_id in (
        select distinct offer_id
        from cppo_offer_id)
        then 'Private'
      else offer.offer_target
    end as offer_target,
    offer.name offer_name,
    offer.opportunity_name offer_opportunity_name,
    offer.opportunity_description offer_opportunity_description,
    offer.opportunity_id,
    payment_due_date,
    line.bank_trace_id,
    disbursement_date,
    billing_address_id,
    buyer_invoice_id,
    seller_invoice_id,
    buyer_invoice_date,
    seller_invoice_date,
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    gross_revenue_invoiced,
    gross_refund_invoiced,
    cogs_invoiced,
    cogs_refund_invoiced,
    aws_rev_share_invoiced,
    aws_refund_share_invoiced,
    aws_tax_share_invoiced,
    aws_tax_share_listing_fee_invoiced,
    aws_tax_share_refund_invoiced,
    aws_tax_share_refund_listing_fee_invoiced,
    seller_tax_share_invoiced,
    seller_tax_share_refund_invoiced,
    balance_adjustment_invoiced,
    seller_rev_credit_invoiced,
    aws_ref_fee_credit_invoiced,
    gross_revenue_disbursed,
    gross_refund_disbursed,
    cogs_disbursed,
    cogs_refund_disbursed,
    aws_rev_share_disbursed,
    aws_refund_share_disbursed,
    aws_tax_share_disbursed,
    aws_tax_share_listing_fee_disbursed,
    aws_tax_share_refund_disbursed,
    aws_tax_share_refund_listing_fee_disbursed,
    seller_tax_share_disbursed,
    seller_tax_share_refund_disbursed,
    balance_adjustment_disbursed,
    seller_rev_credit_disbursed,
    aws_ref_fee_credit_disbursed,
    last_disbursement_date,
    last_disbursement_id,
    last_disburse_bank_trace_id,
    disbursement_date_list,
    disburse_bank_trace_id_list,
    products.product_code,
    acc_products.aws_account_id as manufacturer_aws_account_id,
    products.manufacturer_account_id,
    --add subscriber and payer addressID, payer address preference order: tax address>billing address>mailing address,  subscriber address preference order: tax address> mailing address
    coalesce (
      --empty value in Athena shows as '', change all '' value to null in order to follow the preference order logic above
      case when acc_subscriber.tax_address_id ='' then null else acc_subscriber.tax_address_id end,
      case when acc_subscriber.mailing_address_id = '' then null else acc_subscriber.mailing_address_id end) as subscriber_address_id,
    coalesce (
      case when acc_payer.tax_address_id = '' then null else acc_payer.tax_address_id end,
      case when line.billing_address_id = '' then null else line.billing_address_id end,
      case when acc_payer.mailing_address_id = '' then null else acc_payer.mailing_address_id end) as payer_address_id,
    coalesce (
      case when acc_enduser.tax_address_id = '' then null else acc_enduser.tax_address_id end,
      case when line.billing_address_id = '' then null else line.billing_address_id end,
      case when acc_enduser.mailing_address_id = '' then null else acc_enduser.mailing_address_id end) as end_user_address_id
  from
    line_items_with_window_functions as line
  left join agreements_with_history as agreement on
      line.agreement_id = agreement.agreement_id and line.buyer_invoice_date >= agreement.valid_from_adjusted and line.buyer_invoice_date < agreement.valid_to
  left join offers_with_history_with_target_type as offer on
        line.offer_id = offer.offer_id and line.buyer_invoice_date >= offer.valid_from and line.buyer_invoice_date < offer.valid_to
  left join products_with_history as products on
        line.product_id = products.product_id and line.buyer_invoice_date >= products.valid_from_adjusted and line.buyer_invoice_date < products.valid_to
  left join legacy_products as legacy_product on
        line.product_id = legacy_product.new_id
  left join accounts_with_history_with_company_name as acc_payer on
        line.payer_account_id = acc_payer.account_id and line.buyer_invoice_date >= acc_payer.valid_from and line.buyer_invoice_date < acc_payer.valid_to
  left join accounts_with_history_with_company_name as acc_enduser on
        line.end_user_account_id = acc_enduser.account_id and line.buyer_invoice_date >= acc_enduser.valid_from and line.buyer_invoice_date < acc_enduser.valid_to
  left join accounts_with_history_with_company_name as acc_subscriber on
        line.acceptor_account_id = acc_subscriber.account_id and line.buyer_invoice_date >= acc_subscriber.valid_from and line.buyer_invoice_date < acc_subscriber.valid_to
  left join accounts_with_history_with_company_name as acc_products on
        products.manufacturer_account_id = acc_products.account_id and line.buyer_invoice_date >= acc_products.valid_from and line.buyer_invoice_date < acc_products.valid_to

),

line_items_with_window_functions_enrich_offer_product_address_name as (
  select
    line.internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    legacy_product_id,
    product_title,
    broker_id,
    currency,
    end_user_address_id,
    end_user_account_id,
    end_user_encrypted_account_id,
    end_user_aws_account_id,
    add_enduser.company_name end_user_company_name,
    add_enduser.email_domain end_user_email_domain,
    add_enduser.city end_user_city,
    add_enduser.state_or_region end_user_state,
    add_enduser.country_code end_user_country,
    add_enduser.postal_code end_user_postal_code,
    payer_aws_account_id,
    payer_encrypted_account_id,
    payer_address_id,
    add_payer.company_name payer_company_name,
    add_payer.email_domain payer_email_domain,
    add_payer.city payer_city,
    add_payer.state_or_region payer_state,
    add_payer.country_code payer_country,
    add_payer.postal_code payer_postal_code,
    agreement_id,
    agreement_revision,
    agreement_start_date,
    agreement_end_date,
    agreement_acceptance_date,
    agreement_updated_date,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.aws_account_id end as reseller_aws_account_id,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.mailing_company_name end as reseller_company_name,
    usage_period_start_date,
    usage_period_end_date,
    proposer_account_id,
    acc_proposer.aws_account_id as proposer_aws_account_id,
    acceptor_account_id,
    subscriber_aws_account_id,
    subscriber_encrypted_account_id,
    subscriber_address_id,
    add_subscriber.company_name subscriber_company_name,
    add_subscriber.email_domain subscriber_email_domain,
    add_subscriber.city subscriber_city,
    add_subscriber.state_or_region subscriber_state,
    add_subscriber.country_code subscriber_country,
    add_subscriber.postal_code subscriber_postal_code,
    offer_id,
    offer_target,
    offer_name,
    offer_opportunity_name,
    offer_opportunity_description,
    opportunity_id,
    payment_due_date,
    bank_trace_id,
    disbursement_date,
    billing_address_id,
    max(buyer_invoice_id)as buyer_invoice_id,
    max(seller_invoice_id)as seller_invoice_id,
    max(buyer_invoice_date)as buyer_invoice_date,
    max(seller_invoice_date)as seller_invoice_date,
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    (gross_revenue_this_disbursement_id_or_invoiced + gross_refund_this_disbursement_id_or_invoiced + aws_rev_share_this_disbursement_id_or_invoiced + aws_refund_share_this_disbursement_id_or_invoiced + seller_tax_share_this_disbursement_id_or_invoiced + seller_tax_share_refund_this_disbursement_id_or_invoiced
      + cogs_this_disbursement_id_or_invoiced + cogs_refund_this_disbursement_id_or_invoiced + aws_tax_share_listing_fee_this_disbursement_id_or_invoiced + aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced) as seller_net_revenue_this_disbursement_id_or_invoiced,
    gross_revenue_invoiced,
    gross_refund_invoiced,
    cogs_invoiced,
    cogs_refund_invoiced,
    aws_rev_share_invoiced,
    aws_refund_share_invoiced,
    aws_tax_share_invoiced,
    aws_tax_share_listing_fee_invoiced,
    aws_tax_share_refund_invoiced,
    aws_tax_share_refund_listing_fee_invoiced,
    seller_tax_share_invoiced,
    seller_tax_share_refund_invoiced,
    balance_adjustment_invoiced,
    seller_rev_credit_invoiced,
    aws_ref_fee_credit_invoiced,
    gross_revenue_disbursed,
    gross_refund_disbursed,
    cogs_disbursed,
    cogs_refund_disbursed,
    aws_rev_share_disbursed,
    aws_refund_share_disbursed,
    aws_tax_share_disbursed,
    aws_tax_share_listing_fee_disbursed,
    aws_tax_share_refund_disbursed,
    aws_tax_share_refund_listing_fee_disbursed,
    seller_tax_share_disbursed,
    seller_tax_share_refund_disbursed,
    balance_adjustment_disbursed,
    seller_rev_credit_disbursed,
    aws_ref_fee_credit_disbursed,
    (gross_revenue_invoiced + gross_revenue_disbursed) as uncollected_gross_revenue,
    -- net revenue = gross revenue - listing fee - tax - cogs
    (gross_revenue_invoiced + gross_refund_invoiced + aws_rev_share_invoiced + aws_refund_share_invoiced + seller_tax_share_invoiced + seller_tax_share_refund_invoiced + cogs_invoiced + cogs_refund_invoiced + aws_tax_share_listing_fee_invoiced + aws_tax_share_refund_listing_fee_invoiced) as seller_net_revenue,
    (gross_revenue_invoiced + gross_refund_invoiced + aws_rev_share_invoiced + aws_refund_share_invoiced + seller_tax_share_invoiced + seller_tax_share_refund_invoiced + cogs_invoiced + cogs_refund_invoiced + aws_tax_share_listing_fee_invoiced + aws_tax_share_refund_listing_fee_invoiced
      + gross_revenue_disbursed + gross_refund_disbursed + aws_rev_share_disbursed + aws_refund_share_disbursed + seller_tax_share_disbursed + seller_tax_share_refund_disbursed + cogs_disbursed + cogs_refund_disbursed + aws_tax_share_listing_fee_disbursed + aws_tax_share_refund_listing_fee_disbursed) as uncollected_seller_net_revenue,
    last_disbursement_date,
    last_disbursement_id,
    last_disburse_bank_trace_id,
    disbursement_date_list,
    disburse_bank_trace_id_list,
    product_code,
    manufacturer_aws_account_id,
    manufacturer_account_id,
    acc_manu.mailing_company_name as manufacturer_company_name,
    cast(null as varchar) as AR_Period,
    case
      when (
        (gross_revenue_invoiced '<>0 and gross_revenue_invoiced = -1 * gross_revenue_disbursed)
        or (gross_refund_invoiced '<> 0 and gross_refund_invoiced = -1 * gross_refund_disbursed)
        or (balance_adjustment_invoiced '<> 0 and balance_adjustment_invoiced = -1 * balance_adjustment_disbursed)
        or (seller_tax_share_refund_invoiced '<> 0 and seller_tax_share_refund_invoiced = -1 * seller_tax_share_refund_disbursed)
        or (gross_revenue_invoiced = 0 and gross_refund_invoiced = 0 and balance_adjustment_invoiced = 0 and seller_tax_share_refund_invoiced = 0 and last_disbursement_id is not null)) then 'Yes'
      when gross_revenue_disbursed = 0 and gross_refund_disbursed = 0 and balance_adjustment_disbursed = 0 and seller_tax_share_disbursed = 0 and seller_tax_share_refund_disbursed = 0 then 'No'
      else 'Partial'
    end as Disbursement_Flag
  from line_items_with_window_functions_enrich_offer_product_address as line
  left join accounts_with_history_with_company_name as acc_manu on
    line.manufacturer_account_id = acc_manu.account_id and line.buyer_invoice_date >= acc_manu.valid_from_adjusted and line.buyer_invoice_date <= acc_manu.valid_to
  left join accounts_with_history_with_company_name as acc_proposer on
    line.proposer_account_id = acc_proposer.account_id and line.buyer_invoice_date >= acc_proposer.valid_from and line.buyer_invoice_date < acc_proposer.valid_to
  left join address_with_latest_revision as add_payer on
    line.payer_address_id = add_payer.address_id
  left join address_with_latest_revision as add_subscriber on
    line.subscriber_address_id = add_subscriber.address_id
  left join address_with_latest_revision as add_enduser on
    line.end_user_address_id = add_enduser.address_id
  group by
    line.internal_buyer_line_item_id,
    disbursement_id,
    disbursement_id_or_invoiced,
    product_id,
    legacy_product_id,
    product_title,
    broker_id,
    currency,
    end_user_address_id,
    end_user_account_id,
    end_user_encrypted_account_id,
    end_user_aws_account_id,
    add_enduser.company_name,
    add_enduser.email_domain,
    add_enduser.city,
    add_enduser.state_or_region,
    add_enduser.country_code,
    add_enduser.postal_code,
    payer_aws_account_id,
    payer_encrypted_account_id,
    payer_address_id,
    add_payer.company_name,
    add_payer.email_domain,
    add_payer.city,
    add_payer.state_or_region,
    add_payer.country_code,
    add_payer.postal_code,
    agreement_id,
    agreement_revision,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.aws_account_id end,
    case when proposer_account_id = (select seller_account_id from seller_account) then null else acc_proposer.mailing_company_name end,
    agreement_start_date,
    agreement_end_date,
    agreement_acceptance_date,
    agreement_updated_date,
    usage_period_start_date,
    usage_period_end_date,
    acceptor_account_id,
    subscriber_aws_account_id,
    subscriber_encrypted_account_id,
    subscriber_address_id,
    add_subscriber.company_name,
    add_subscriber.email_domain,
    add_subscriber.city,
    add_subscriber.state_or_region,
    add_subscriber.country_code,
    add_subscriber.postal_code,
    offer_id,
    offer_target,
    offer_name,
    offer_opportunity_name,
    offer_opportunity_description,
    opportunity_id,
    payment_due_date,
    bank_trace_id,
    disbursement_date,
    billing_address_id,
    gross_revenue_this_disbursement_id_or_invoiced,
    gross_refund_this_disbursement_id_or_invoiced,
    cogs_this_disbursement_id_or_invoiced,
    cogs_refund_this_disbursement_id_or_invoiced,
    aws_rev_share_this_disbursement_id_or_invoiced,
    aws_refund_share_this_disbursement_id_or_invoiced,
    aws_tax_share_this_disbursement_id_or_invoiced,
    aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_this_disbursement_id_or_invoiced,
    aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,
    seller_tax_share_this_disbursement_id_or_invoiced,
    seller_tax_share_refund_this_disbursement_id_or_invoiced,
    balance_adjustment_this_disbursement_id_or_invoiced,
    seller_rev_credit_this_disbursement_id_or_invoiced,
    aws_ref_fee_credit_this_disbursement_id_or_invoiced,
    gross_revenue_invoiced,
    gross_refund_invoiced,
    cogs_invoiced,
    cogs_refund_invoiced,
    aws_rev_share_invoiced,
    aws_refund_share_invoiced,
    aws_tax_share_invoiced,
    aws_tax_share_listing_fee_invoiced,
    aws_tax_share_refund_invoiced,
    aws_tax_share_refund_listing_fee_invoiced,
    seller_tax_share_invoiced,
    seller_tax_share_refund_invoiced,
    balance_adjustment_invoiced,
    seller_rev_credit_invoiced,
    aws_ref_fee_credit_invoiced,
    gross_revenue_disbursed,
    gross_refund_disbursed,
    cogs_disbursed,
    cogs_refund_disbursed,
    aws_rev_share_disbursed,
    aws_refund_share_disbursed,
    aws_tax_share_disbursed,
    aws_tax_share_listing_fee_disbursed,
    aws_tax_share_refund_disbursed,
    aws_tax_share_refund_listing_fee_disbursed,
    seller_tax_share_disbursed,
    seller_tax_share_refund_disbursed,
    balance_adjustment_disbursed,
    seller_rev_credit_disbursed,
    aws_ref_fee_credit_disbursed,
    last_disbursement_date,
    last_disbursement_id,
    last_disburse_bank_trace_id,
    disbursement_date_list,
    disburse_bank_trace_id_list,
    product_code,
    manufacturer_aws_account_id,
    manufacturer_account_id,
    acc_manu.mailing_company_name,
    proposer_account_id,
    acc_proposer.aws_account_id
),
invoiced_not_disbursed as(
  select
    --we will filter on rownum =1 in next step,
    -- means internal_buyer_line_item_id, there's only '<invoiced> record, no disbursement_id linked
    *,
    max(case when disbursement_id_or_invoiced = ''<invoiced>' then 1 else 2 end)
      over (partition by internal_buyer_line_item_id) rownum
  from line_items_with_window_functions_enrich_offer_product_address_name as line_items

),
collections_and_disbursements as (
  select
    ------------------
    -- Invoice Info --
    ------------------
    buyer_invoice_date as Invoice_Date,
    Payment_Due_Date as Payment_Due_Date,
    concat(
      'Net ',
      case
        when abs(date_diff('Day', Payment_due_date, buyer_invoice_date))>180 then '180+'
        else cast(abs(date_diff('Day', Payment_due_date, buyer_invoice_date)) as varchar)
        end,
      ' days'
    ) as payment_terms,
    buyer_invoice_id as Invoice_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when seller_invoice_id = '' then null else seller_invoice_id end,
      'Not applicable') as Listing_Fee_Invoice_ID,

    ---------------------------
    --End user Information --
    ---------------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when End_User_Company_Name = '' then null else End_User_Company_Name end,
      'Not available') as End_User_Company_Name,
    End_User_AWS_Account_ID,
    End_User_Encrypted_Account_ID,
    End_User_Email_Domain,
    End_User_City,
    End_User_State as End_User_State_or_Region,
    End_User_Country,
    End_User_Postal_Code,
    End_User_Address_ID,

    ---------------------------
    --Subscriber Information --
    ---------------------------
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Company_Name is null or Subscriber_Company_Name = '' then 'Not provided'
      else Subscriber_Company_Name
    end as Subscriber_Company_Name,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Subscriber_AWS_Account_ID
    end as Subscriber_AWS_Account_ID,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Subscriber_Encrypted_Account_ID
    end as Subscriber_Encrypted_Account_ID,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Email_Domain is null or Subscriber_Email_Domain = '' then 'Not provided'
      else Subscriber_Email_Domain
    end as Subscriber_Email_Domain,
    case
      when Agreement_id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_City is null or Subscriber_City = '' then 'Not provided'
      else Subscriber_City
    end as Subscriber_City,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_State is null or Subscriber_State = '' then 'Not provided'
      else Subscriber_State
    end as Subscriber_State_or_Region,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Country is null or Subscriber_Country = '' then 'Not provided'
      else Subscriber_Country
    end as Subscriber_Country,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Postal_Code is null or Subscriber_Postal_Code = '' then 'Not provided'
      else Subscriber_Postal_Code
    end as Subscriber_Postal_Code,
    case
      when Agreement_ID is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Address_ID is null or Subscriber_Address_ID = '' then 'Not provided'
      else Subscriber_Address_ID
    end as Subscriber_Address_ID,

    ----------------------
    -- Procurement Info --
    ----------------------
    -- product title at time of invoice. It is possible that the title changes over time and therefore there may be multiple product titles mapped to a single product id.
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Product_Title = '' then null else Product_Title end,
      'Not provided') as Product_Title,
    -- offer name at time of invoice. It is possible that the name changes over time therefore there may be multiple offer names mapped to a single offer id.
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when (Offer_Name is null or Offer_Name = '') and Offer_Target = 'Public' then 'Not applicable'
      else Offer_Name
    end as Offer_Name,
    case
      when Agreement_Id is null or Agreement_ID = ''
      then 'Not available'
      else Offer_ID
    end as Offer_ID,
    -- offer visibility at time of invoice.,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Offer_Target
    end as Offer_Visibility,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Agreement_ID = '' then null else Agreement_ID end,
      'Not available') as Agreement_ID,
    Agreement_Start_Date,
    Agreement_Acceptance_Date,
    Agreement_End_Date,

    Usage_Period_Start_Date,
    Usage_Period_End_Date,

    -----------------------
    -- Disbursement Info --
    -----------------------
    case
      when Disbursement_Flag = 'Yes' then 'Disbursed'
      when Disbursement_Flag = 'No' then 'Not Disbursed'
      else 'Other'
    end as Disbursement_Status,
    last_disbursement_date as disbursement_date,
    case
      when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date))
      else null
    end as Disbursement_Time,
    case
      when Disbursement_Flag = 'No' then 'Not applicable'
      when bank_trace_id is null or bank_trace_id = '' then 'Not available'
      else bank_trace_id
    end as disburse_bank_trace_id,

    --------------
    -- Revenues --
    --------------
    -- We are rounding the sums using 2 decimal precision
    -- Note that the rounding method might differ between SQL implementations.
    -- The monthly revenue report is using RoundingMode.HALF_UP. This might create tiny discrepancies between this SQL output
    -- and the legacy report
    round(-1 * gross_revenue_this_disbursement_id_or_invoiced,2) as Gross_Revenue,
    round(-1 * gross_refund_this_disbursement_id_or_invoiced,2) as Gross_Refund,
    round(-1 * aws_rev_share_this_disbursement_id_or_invoiced,2) as Listing_Fee,
    round(-1 * aws_refund_share_this_disbursement_id_or_invoiced,2) as Listing_Fee_Refund,
    truncate(
      case
        when gross_revenue_this_disbursement_id_or_invoiced != 0 then abs(aws_rev_share_this_disbursement_id_or_invoiced/gross_revenue_this_disbursement_id_or_invoiced)
        when gross_refund_this_disbursement_id_or_invoiced != 0 then abs(aws_refund_share_this_disbursement_id_or_invoiced/gross_refund_this_disbursement_id_or_invoiced)
        else 0
      end
      ,4) as Listing_Fee_Percentage,
    round(-1 * seller_tax_share_this_disbursement_id_or_invoiced,2) as Seller_Tax_Share,
    round(-1 * seller_tax_share_refund_this_disbursement_id_or_invoiced,2) as Seller_Tax_Share_Refund,
    round(-1 * aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,2) as AWS_Tax_Share_Listing_Fee,
    round(-1 * aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,2) as AWS_Tax_Share_Refund_Listing_Fee,
    round(-1 * cogs_this_disbursement_id_or_invoiced,2) as Wholesale_cost,
    round(-1 * cogs_refund_this_disbursement_id_or_invoiced,2) as Wholesale_cost_Refund,
    round(-1 * seller_net_revenue_this_disbursement_id_or_invoiced,2) as Seller_Net_Revenue,
    currency as Currency,

    substring(internal_buyer_line_item_id,1,strpos(internal_buyer_line_item_id,'-')-1) as Transaction_Reference_ID,
    broker_id as AWS_seller_of_record,

    -----------------
    -- Resale info --
    -----------------
    case
      when Opportunity_Id is null or Opportunity_Id = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Opportunity_Id
    end as Resale_authorization_ID,
    case
      when Offer_Opportunity_Name is null or Offer_Opportunity_Name = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Offer_Opportunity_Name
    end as Resale_authorization_name,
    case
      when Offer_Opportunity_Description is null or Offer_Opportunity_Description = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Offer_Opportunity_Description
    end as Resale_authorization_description,
    case
      when (Reseller_AWS_Account_ID is not null and Reseller_AWS_Account_ID != '')
        and (Reseller_Company_Name is null or Reseller_Company_Name = '') then 'Not available'
      when (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '')
        and (opportunity_id is null or opportunity_id = '') then 'Not applicable'
      when (select seller_account_id from seller_account) '<> manufacturer_aws_account_id
        and (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '') then 'Not applicable'
      else Reseller_Company_Name
    end as Reseller_Company_Name,
    case
      when (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '')
        and (Opportunity_Id is null or Opportunity_Id = '') then 'Not applicable'
      when (select seller_account_id from seller_account) '<> manufacturer_aws_account_id
        and (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '') then 'Not applicable'
      else Reseller_AWS_Account_ID
    end as Reseller_AWS_Account_ID,

    -----------------------
    -- Payer Information --
    -----------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Payer_Company_Name = '' then null else Payer_Company_Name end,
      'Not available') as Payer_Company_Name,
    Payer_AWS_Account_ID, -- "Customer AWS Account Number" in legacy report
    Payer_Encrypted_Account_ID,
    Payer_Email_Domain,
    Payer_City,
    Payer_State as Payer_State_or_Region,
    Payer_Country,
    Payer_Postal_Code,
    Payer_Address_ID,

    ---------------------
    -- ISV Information --
    ---------------------
    manufacturer_aws_account_id as ISV_Account_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Manufacturer_Company_Name = '' then null else Manufacturer_Company_Name end,
      'Not available') as ISV_Company_Name,

    ---------------------
    -- Products info --
    ---------------------
    Legacy_Product_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Product_ID = '' then null else Product_ID end,
      'Not provided') as Product_ID,
    -- this is to get the legacy product id https://sim.amazon.com/issues/MP-INSIGHTS-2561
    Product_Code,

    case when Disbursement_Flag = 'Yes' then round(-1 * seller_net_revenue_this_disbursement_id_or_invoiced,2) else 0 end as Disbursed_Net_Revenue,
    case when Disbursement_Flag = 'No' then round(-1 * seller_net_revenue_this_disbursement_id_or_invoiced,2) else 0 end as Undisbursed_Net_Revenue,
    case
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <= 0 then 'Not due'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=30 then '1-30 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=60 then '31-60 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=90 then '61-90 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=120 then '91-120 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end >=121 then '121+ days late'
      else null
    end as Disbursement_Period
  from
    line_items_with_window_functions_enrich_offer_product_address_name as line
  where disbursement_id_or_invoiced != ''<invoiced>'

  union

  select
    ------------------
    -- Invoice Info --
    ------------------
    buyer_invoice_date as Invoice_Date,
    Payment_Due_Date as Payment_Due_Date,
    concat(
      'Net ',
      case
        when abs(date_diff('Day', Payment_due_date, buyer_invoice_date)) >180 then '180+'
        else cast(abs(date_diff('Day', Payment_due_date, buyer_invoice_date)) as varchar)
      end,
      ' days'
    ) as payment_terms,
    buyer_invoice_id as Invoice_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when seller_invoice_id = '' then null else seller_invoice_id end,
      'Not applicable') as Listing_Fee_Invoice_ID,

    ---------------------------
    --End user Information --
    ---------------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when End_User_Company_Name = '' then null else End_User_Company_Name end,
      'Not available') as End_User_Company_Name,
    End_User_AWS_Account_ID,
    End_User_Encrypted_Account_ID,
    End_User_Email_Domain,
    End_User_City,
    End_User_State as End_User_State_or_Region,
    End_User_Country,
    End_User_Postal_Code,
    End_User_Address_ID,

    ---------------------------
    --Subscriber Information --
    ---------------------------
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Company_Name is null or Subscriber_Company_Name = '' then 'Not provided'
      else Subscriber_Company_Name
    end as Subscriber_Company_Name,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Subscriber_AWS_Account_ID
    end as Subscriber_AWS_Account_ID,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Subscriber_Encrypted_Account_ID
    end as Subscriber_Encrypted_Account_ID,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Email_Domain is null or Subscriber_Email_Domain = '' then 'Not provided'
      else Subscriber_Email_Domain
    end as Subscriber_Email_Domain,
    case
      when Agreement_id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_City is null or Subscriber_City = '' then 'Not provided'
      else Subscriber_City
    end as Subscriber_City,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_State is null or Subscriber_State = '' then 'Not provided'
      else Subscriber_State
    end as Subscriber_State_or_Region,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Country is null or Subscriber_Country = '' then 'Not provided'
      else Subscriber_Country
    end as Subscriber_Country,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Postal_Code is null or Subscriber_Postal_Code = '' then 'Not provided'
      else Subscriber_Postal_Code
    end as Subscriber_Postal_Code,
    case
      when Agreement_ID is null or Agreement_ID = '' then 'Not available'
      when Subscriber_Address_ID is null or Subscriber_Address_ID = '' then 'Not provided'
      else Subscriber_Address_ID
    end as Subscriber_Address_ID,

    ----------------------
    -- Procurement Info --
    ----------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Product_Title = '' then null else Product_Title end,
      'Not provided') as Product_Title,
    -- offer name at time of invoice. It is possible that the name changes over time therefore there may be multiple offer names mapped to a single offer id.
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      when (Offer_Name is null or Offer_Name = '') and Offer_Target = 'Public' then 'Not applicable'
      else Offer_Name
    end as Offer_Name,
    case
      when Agreement_Id is null or Agreement_ID = ''
      then 'Not available'
      else Offer_ID
    end as Offer_ID,
    -- offer visibility at time of invoice.,
    case
      when Agreement_Id is null or Agreement_ID = '' then 'Not available'
      else Offer_Target
    end as Offer_Visibility,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Agreement_ID = '' then null else Agreement_ID end,
      'Not available') as Agreement_ID,
    --case when Agreement_Id is null or Agreement_Id = '' then cast(null as timestamp) else Agreement_Start_Date end as Agreement_Start_Date,
    --case when Agreement_Id is null or Agreement_Id = '' then cast(null as timestamp) else Agreement_End_Date end as Agreement_End_Date,
    --case when Agreement_Id is null or Agreement_Id = '' then cast(null as timestamp) else Agreement_Acceptance_Date end as Agreement_Acceptance_Date,
    Agreement_Start_Date,
    Agreement_Acceptance_Date,
    Agreement_End_Date,

    Usage_Period_Start_Date,
    Usage_Period_End_Date,

    -----------------------
    -- Disbursement Info --
    -----------------------
    case
      when Disbursement_Flag = 'Yes' then 'Disbursed'
      when Disbursement_Flag = 'No' then 'Not Disbursed'
      else 'Other'
    end as Disbursement_Status,
    last_disbursement_date as disbursement_date,
    case
      when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date))
      else null
    end as Disbursement_Time,
    case
      when Disbursement_Flag = 'No' then 'Not applicable'
      when bank_trace_id is null or bank_trace_id = '' then 'Not available'
      else bank_trace_id
    end as disburse_bank_trace_id,

    --------------
    -- Revenues --
    --------------
    -- We are rounding the sums using 2 decimal precision
    -- Note that the rounding method might differ between SQL implementations.
    -- The monthly revenue report is using RoundingMode.HALF_UP. This might create tiny discrepancies between this SQL output
    -- and the legacy report
    round(gross_revenue_this_disbursement_id_or_invoiced,2) as Gross_Revenue,
    round(gross_refund_this_disbursement_id_or_invoiced,2) as Gross_Refund,
    round(aws_rev_share_this_disbursement_id_or_invoiced,2) as Listing_Fee,
    round(aws_refund_share_this_disbursement_id_or_invoiced,2) as Listing_Fee_Refund,
    truncate(
      case
        when gross_revenue_this_disbursement_id_or_invoiced != 0 then abs(aws_rev_share_this_disbursement_id_or_invoiced/gross_revenue_this_disbursement_id_or_invoiced)
        when gross_refund_this_disbursement_id_or_invoiced != 0 then abs(aws_refund_share_this_disbursement_id_or_invoiced/gross_refund_this_disbursement_id_or_invoiced)
        else 0
      end
      ,4) as Listing_Fee_Percentage,
    round(seller_tax_share_this_disbursement_id_or_invoiced,2) as Seller_Tax_Share,
    round(seller_tax_share_refund_this_disbursement_id_or_invoiced,2) as Seller_Tax_Share_Refund,
    round(aws_tax_share_listing_fee_this_disbursement_id_or_invoiced,2) as AWS_Tax_Share_Listing_Fee,
    round(aws_tax_share_refund_listing_fee_this_disbursement_id_or_invoiced,2) as AWS_Tax_Share_Refund_Listing_Fee,
    round(cogs_this_disbursement_id_or_invoiced,2) as Wholesale_cost,
    round(cogs_refund_this_disbursement_id_or_invoiced,2) as Wholesale_cost_Refund,
    round(seller_net_revenue_this_disbursement_id_or_invoiced,2) as Seller_Net_Revenue,
    currency as Currency,

    substring(internal_buyer_line_item_id,1,strpos(internal_buyer_line_item_id,'-')-1) as Transaction_Reference_ID,
    broker_id as AWS_seller_of_record,

    -----------------
    -- Resale info --
    -----------------
    case
      when Opportunity_Id is null or Opportunity_Id = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Opportunity_Id
    end as Resale_authorization_ID,
    case
      when Offer_Opportunity_Name is null or Offer_Opportunity_Name = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Offer_Opportunity_Name
    end as Resale_authorization_name,
    case
      when Offer_Opportunity_Description is null or Offer_Opportunity_Description = '' then
        case
          when Offer_Target = 'Public' then 'Not applicable'
          when (Offer_Target is null or Offer_Target = '') and (Agreement_Id is not null and Agreement_Id != '') then 'Not applicable'
          else null
        end
      else Offer_Opportunity_Description
    end as Resale_authorization_description,
    case
      when (Reseller_AWS_Account_ID is not null and Reseller_AWS_Account_ID != '')
        and (Reseller_Company_Name is null or Reseller_Company_Name = '') then 'Not available'
      when (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '')
        and (opportunity_id is null or opportunity_id = '') then 'Not applicable'
      when (select seller_account_id from seller_account) '<> manufacturer_aws_account_id
        and (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '') then 'Not applicable'
      else Reseller_Company_Name
    end as Reseller_Company_Name,
    case
      when (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '')
        and (Opportunity_Id is null or Opportunity_Id = '') then 'Not applicable'
      when (select seller_account_id from seller_account) '<> manufacturer_aws_account_id
        and (Reseller_AWS_Account_ID is null or Reseller_AWS_Account_ID = '') then 'Not applicable'
      else Reseller_AWS_Account_ID
    end as Reseller_AWS_Account_ID,

    -----------------------
    -- Payer Information --
    -----------------------
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Payer_Company_Name = '' then null else Payer_Company_Name end,
      'Not available') as Payer_Company_Name,
    Payer_AWS_Account_ID, -- "Customer AWS Account Number" in legacy report
    Payer_Encrypted_Account_ID,
    Payer_Email_Domain,
    Payer_City,
    Payer_State as Payer_State_or_Region,
    Payer_Country,
    Payer_Postal_Code,
    Payer_Address_ID,

    ---------------------
    -- ISV Information --
    ---------------------
    manufacturer_aws_account_id as ISV_Account_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Manufacturer_Company_Name = '' then null else Manufacturer_Company_Name end,
      'Not available') as ISV_Company_Name,

    ---------------------
    -- Products info --
    ---------------------
    -- product title at time of invoice. It is possible that the title changes over time and therefore there may be multiple product titles mapped to a single product id.
    Legacy_Product_ID,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when Product_ID = '' then null else Product_ID end,
      'Not provided') as Product_ID,
    -- this is to get the legacy product id https://sim.amazon.com/issues/MP-INSIGHTS-2561
    Product_Code,

    case when Disbursement_Flag = 'Yes' then round(seller_net_revenue_this_disbursement_id_or_invoiced,2) else 0 end as Disbursed_Net_Revenue,
    case when Disbursement_Flag = 'No' then round(seller_net_revenue_this_disbursement_id_or_invoiced,2) else 0 end as Undisbursed_Net_Revenue,
    case
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <= 0 then 'Not due'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=30 then '1-30 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=60 then '31-60 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=90 then '61-90 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end <=120 then '91-120 days late'
      when case when Disbursement_Flag = 'Yes' then date_diff('DAY', date_trunc('DAY',payment_due_date), date_trunc('DAY',last_disbursement_date)) else null end >=121 then '121+ days late'
      else null
    end as Disbursement_Period
  from
    invoiced_not_disbursed
  where rownum = 1

)

select *
from collections_and_disbursements
where payment_due_date >= date_add('DAY', -90, current_date)
--where payment_due_date between cast('2023-01-01' as timestamp) and cast('2024-12-31' as timestamp)

--where disbursement_date >= date_add('DAY', -90, current_date)
--where disbursement_date between cast('2023-01-01' as timestamp) and cast('2024-12-31' as timestamp)
```

## Facturas gravadas
<a name="data-feed-example-tax"></a>

Para encontrar las facturas gravadas, puede ejecutar un conjunto de consultas como las que se muestran en el siguiente ejemplo. Las consultas se complementan entre sí para crear el informe **Fiscal**. Puede usar el ejemplo que se muestra o personalizarlo para sus datos y casos de uso.

Los comentarios de las consultas explican lo que hacen las consultas y cómo modificarlas.

```
-- Taxation report

-- General note: When executing this query we are assuming that the data ingested in the database is using
-- two time axes (the valid_from column and the update_date column).
-- See documentation for more details: https://docs.aws.amazon.com/marketplace/latest/userguide/data-feed.html#data-feed-details

-- An account_id has several valid_from dates (each representing a separate revision of the data)
-- but because of bi-temporality, an account_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
with accounts_with_uni_temporal_data as (
  select
    account_id,
    aws_account_id,
    encrypted_account_id,
    mailing_address_id,
    tax_address_id,
    tax_legal_name,
    from_iso8601_timestamp(valid_from) as valid_from,
    tax_registration_number
  from
    (
      select
        account_id,
        aws_account_id,
        encrypted_account_id,
        mailing_address_id,
        tax_address_id,
        tax_legal_name,
        valid_from,
        delete_date,
        tax_registration_number,
        row_number() over (partition by account_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
      from
        accountfeed_v1
    )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

accounts_with_history as (
  with accounts_with_history_with_extended_valid_from as (
    select
      account_id,
      -- sometimes, this columns gets imported as a "bigint" and loses heading 0s -> casting to a char and re-adding heading 0s (if need be)
      substring('000000000000'||cast(aws_account_id as varchar),-12) as aws_account_id,
      encrypted_account_id,
      mailing_address_id,
      tax_address_id,
      tax_legal_name tax_legal_name,
      -- The start time of account valid_from is extended to '1970-01-01 00:00:00', because:
      -- ... in tax report transformations, some tax line items with invoice_date cannot
      -- ... fall into the default valid time range of the associated account
      CASE
        WHEN LAG(valid_from) OVER (PARTITION BY account_id ORDER BY valid_from ASC) IS NULL
            THEN CAST('1970-01-01 00:00:00' as timestamp)
        ELSE valid_from
      END AS valid_from
    from
      (select * from accounts_with_uni_temporal_data ) as account
  )
  select
    account_id,
    aws_account_id,
    encrypted_account_id,
    mailing_address_id,
    tax_address_id,
    tax_legal_name,
    valid_from,
    coalesce(
      lead(valid_from) over (partition by account_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp)
    ) as valid_to
  from
    accounts_with_history_with_extended_valid_from
),

-- A product_id has several valid_from dates (each representing a product revision),
-- but because of bi-temporality, each product_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
products_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    from_iso8601_timestamp(delete_date) as delete_date,
    product_id,
    manufacturer_account_id,
    product_code,
    title
  from
    (
      select
        valid_from,
        update_date,
        delete_date,
        product_id,
        manufacturer_account_id,
        product_code,
        title,
        row_number() over (partition by product_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
      from
       productfeed_v1
      )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

products_with_history as (
  select
    product_id,
    title,
    valid_from,    
    case
      when lag(valid_from) over (partition by product_id order by valid_from asc) is null and valid_from < cast('2021-04-01' as timestamp)
        then date_add('Day', -3857, valid_from)
      -- 3827 is the longest delay between acceptance_date of an agreement and the product
      -- we are keeping 3857 as a consistency between the offers and products
      when lag(valid_from) over (partition by product_id order by valid_from asc) is null and valid_from >= cast('2021-04-01' as timestamp)
        then date_add('Day', -2190, valid_from)
      --after 2021 for the two offers we need to adjust for 2 more years
      else valid_from end as valid_from_adjusted,
    coalesce(
      lead(valid_from) over (partition by product_id order by valid_from asc),
      cast('2999-01-01 00:00:00' as timestamp)
    ) as valid_to,
    product_code,
    manufacturer_account_id
  from
    products_with_uni_temporal_data
),

-- A tax_item_id has several valid_from dates (each representing a product revision),
-- but because of bi-temporality, each tax_item_id + valid_from tuple can appear multiple times with a different update_date.
-- We are only interested in the most recent tuple (ie, uni-temporal model)
tax_items_with_uni_temporal_data as (
  select
    from_iso8601_timestamp(valid_from) as valid_from,
    from_iso8601_timestamp(update_date) as update_date,
    delete_date,
    cast(tax_item_id as varchar) as tax_item_id,
    cast(invoice_id as varchar) as invoice_id,
    cast(line_item_id as varchar) as line_item_id,
    cast(customer_bill_id as varchar) as customer_bill_id,
    tax_liable_party,
    transaction_type_code,
    product_id,
    product_tax_code,
    from_iso8601_timestamp(invoice_date) as invoice_date,
    taxed_customer_account_id,
    taxed_customer_country,
    taxed_customer_state_or_region,
    taxed_customer_city,
    taxed_customer_postal_code,
    tax_location_code_taxed_jurisdiction,
    tax_type_code,
    jurisdiction_level,
    taxed_jurisdiction,
    display_price_taxability_type,
    tax_jurisdiction_rate,
    tax_amount,
    tax_currency,
    tax_calculation_reason_code,
    date_used_for_tax_calculation,
    customer_exemption_certificate_id,
    customer_exemption_certificate_id_domain,
    customer_exemption_certificate_level,
    customer_exemption_code,
    customer_exemption_domain,
    transaction_reference_id
  from
    (
      select
        valid_from,
        update_date,
        delete_date,
        tax_item_id,
        invoice_id,
        line_item_id,
        customer_bill_id,
        tax_liable_party,
        transaction_type_code,
        product_id,
        product_tax_code,
        invoice_date,
        taxed_customer_account_id,
        taxed_customer_country,
        taxed_customer_state_or_region,
        taxed_customer_city,
        taxed_customer_postal_code,
        tax_location_code_taxed_jurisdiction,
        tax_type_code,
        jurisdiction_level,
        taxed_jurisdiction,
        display_price_taxability_type,
        tax_jurisdiction_rate,
        tax_amount,
        tax_currency,
        tax_calculation_reason_code,
        date_used_for_tax_calculation,
        customer_exemption_certificate_id,
        customer_exemption_certificate_id_domain,
        customer_exemption_certificate_level,
        customer_exemption_code,
        customer_exemption_domain,
        transaction_reference_id,
        row_number() over (partition by tax_item_id, valid_from order by from_iso8601_timestamp(update_date) desc) as row_num
      from
        taxitemfeed_v1
    )
  where
    -- keep latest ...
    row_num = 1
    -- ... and remove the soft-deleted one.
    and (delete_date is null or delete_date = '')
),

taxation as (
  select
    tax_items.invoice_id,
    tax_items.line_item_id,
    tax_items.customer_bill_id,
    tax_items.tax_liable_party,
    tax_items.transaction_type_code,
    tax_items.product_id,
    product_tax_item.title as product_title,
    tax_items.product_tax_code,
    tax_items.invoice_date,
    accounts_with_history.aws_account_id as taxed_customer_account_id,
    tax_items.taxed_customer_country,
    tax_items.taxed_customer_state_or_region,
    tax_items.taxed_customer_city,
    tax_items.taxed_customer_postal_code,
    tax_items.tax_type_code as tax_type,
    tax_items.jurisdiction_level,
    tax_items.taxed_jurisdiction,
    tax_items.display_price_taxability_type,
    tax_items.tax_jurisdiction_rate,
    tax_items.tax_amount,
    tax_items.tax_currency,
    tax_items.tax_calculation_reason_code,
    tax_items.date_used_for_tax_calculation,
    coalesce(
      --empty value in Athena shows as '', change all '' value to null
      case when tax_items.customer_exemption_certificate_id = '' then null else tax_items.customer_exemption_certificate_id end,
      'Not exempt') customer_exemption_certificate_id,
    coalesce(--empty value in Athena shows as '', change all '' value to null
      case when tax_items.customer_exemption_certificate_id_domain = '' then null else tax_items.customer_exemption_certificate_id_domain end,
      'Not exempt') customer_exemption_certificate_id_domain,
    coalesce(--empty value in Athena shows as '', change all '' value to null
      case when tax_items.customer_exemption_certificate_level = '' then null else tax_items.customer_exemption_certificate_level end,
      'Not exempt') customer_exemption_certificate_level,
    coalesce(--empty value in Athena shows as '', change all '' value to null
      case when tax_items.customer_exemption_code = '' then null else tax_items.customer_exemption_code end,
      'Not exempt') customer_exemption_code,
    tax_items.transaction_reference_id
  from
    tax_items_with_uni_temporal_data as tax_items
    left join products_with_history as product_tax_item on
      tax_items.product_id = product_tax_item.product_id and tax_items.invoice_date >= product_tax_item.valid_from_adjusted and tax_items.invoice_date < product_tax_item.valid_to
    left join accounts_with_history as accounts_with_history on
      tax_items.taxed_customer_account_id = accounts_with_history.account_id and tax_items.invoice_date >= accounts_with_history.valid_from and tax_items.invoice_date < accounts_with_history.valid_to

)

select *
from taxation
where invoice_date >= date_add('DAY', -90, current_date)
--where invoice_date between cast('2023-01-01' as timestamp) and cast('2024-12-31' as timestamp)
```

## Abonos por producto
<a name="data-feed-example-disbursement-by-product"></a>

Para encontrar las cantidades que se han abonado por producto, puede ejecutar un conjunto de consultas como las que se muestran en el siguiente ejemplo. 

Estas consultas de ejemplo se complementan entre sí para crear la lista final de detalles del producto con los abonos. También muestra cómo obtener la información del producto en un momento dado específico. Puede usar el ejemplo tal y como se muestra o personalizarlo para sus datos y casos de uso.

Los comentarios de las consultas explican lo que hacen las consultas y cómo modificarlas.

**nota**  
Al ejecutar esta consulta, asumimos que los datos se ingieren con dos ejes de tiempo (las columnas `valid_from` y `update`). Para obtener más información sobre los ejes, consulte [Almacenamiento y estructura de las fuentes de datos de AWS Marketplace](data-feed-details.md).

```
    -- Get all the products and keep the latest product_id, valid_from tuple
    with products_with_uni_temporal_data as (
      select
       *
      from
      (
        select
         *,
         ROW_NUMBER() OVER (PARTITION BY product_id, valid_from 
             ORDER BY from_iso8601_timestamp(update_date) desc) 
             as row_num
        from
         productfeed_v1
      )
      where
        -- A product_id can appear multiple times with the same 
        -- valid_from date but with a different update_date column,
        -- making it effectively bi-temporal. By only taking the most
        -- recent tuple, we are converting to a uni-temporal model.
        row_num = 1
    ),

    -- Gets the latest revision of a product
    -- A product can have multiple revisions where some of the 
    -- columns, like the title, can change.
    -- For the purpose of the disbursement report, we want 
    -- to get the latest revision of a product
    products_with_latest_version as (
     select
      *
     from
     (
      select
       *,
       ROW_NUMBER() OVER (PARTITION BY product_id 
           ORDER BY from_iso8601_timestamp(valid_from) desc) 
           as row_num_latest_version
      from
       products_with_uni_temporal_data
     )
     where
      row_num_latest_version = 1
   ),

    -- Get all the accounts and keep the latest account_id, valid_from tuple
    accounts_with_uni_temporal_data as (
      select
       *
      from
      (
        select
         *,
         ROW_NUMBER() OVER (PARTITION BY account_id, valid_from ORDER BY from_iso8601_timestamp(update_date) desc) as row_num
        from
         accountfeed_v1
      )
      where
        -- An account_id can appear multiple times with the same 
        -- valid_from date but with a different update_date column,
        -- making it effectively bi-temporal. By only taking the most
        -- recent tuple, we are converting to a uni-temporal model.
        row_num = 1
    ),

    -- Gets the latest revision of an account
    -- An account can have multiple revisions where some of the 
    -- columns, like the mailing_address_id, can change.
    -- For the purpose of the disbursement report, we want 
    -- to get the latest revision of a product
    accounts_with_latest_version as (
     select
      *
     from
     (
      select
       *,
       ROW_NUMBER() OVER (PARTITION BY account_id 
           ORDER BY from_iso8601_timestamp(valid_from) desc) 
           as row_num_latest_version
      from
       accounts_with_uni_temporal_data
     )
     where
      row_num_latest_version = 1
   ),

    -- Get all the billing events and keep the 
    -- latest billing_event_id, valid_from tuple:
    billing_events_with_uni_temporal_data as (
      select
       *
      from (
        select
          billing_event_id,
          from_iso8601_timestamp(valid_from) as valid_from,
          from_iso8601_timestamp(update_date) as update_date,
          from_iso8601_timestamp(invoice_date) as invoice_date,
          transaction_type,
          transaction_reference_id,
          product_id,
          disbursement_billing_event_id,
          action,
          from_account_id,
          to_account_id,
          end_user_account_id,
          CAST(amount as decimal(20, 10)) invoice_amount,
          bank_trace_id,
          ROW_NUMBER() OVER (PARTITION BY billing_event_id, valid_from 
              ORDER BY from_iso8601_timestamp(update_date) desc) 
              as row_num
        from
          billingeventfeed_v1
        )
      where row_num = 1
    ),

    -- Get all the disbursements
    -- The billing events data is immutable.
    -- It is not required to use time windows based on the 
    -- valid_from column to get the most recent billing event
    disbursement_events as (
      select
        billing_events_raw.billing_event_id as disbursement_id,
        billing_events_raw.invoice_date as disbursement_date,
        billing_events_raw.bank_trace_id
      from
        billing_events_with_uni_temporal_data billing_events_raw
      where
        -- Only interested in disbursements, so filter out
        -- non-disbursements by selecting transaction type 
        -- to be DISBURSEMENT:
        billing_events_raw.transaction_type = 'DISBURSEMENT'
        -- Select a time period, you can adjust the dates 
        -- below if need be. For billing events use the 
        -- invoice date as the point in time of the 
        -- disbursement being initiated:
        and billing_events_raw.invoice_date >= 
            from_iso8601_timestamp('2020-10-01T00:00:00Z')
        and billing_events_raw.invoice_date < 
            from_iso8601_timestamp('2020-11-01T00:00:00Z')
    ),

    -- Get the invoices along with the line items that 
    -- are part of the above filtered disbursements
    disbursed_line_items as (
      select
        line_items.transaction_reference_id,
        line_items.product_id,
        line_items.transaction_type,
        (case
           -- Get the payer of the invoice from any 
           -- transaction type that is not AWS and 
           -- not BALANCE_ADJUSTMENT.
           -- For AWS and BALANCE_ADJUSTMENT, the billing 
           -- event feed will show the "AWS Marketplace" 
           -- account as the receiver of the funds and the 
           -- seller as the payer. Filter those out.
           when line_items.transaction_type 
               not like '%AWS%' and transaction_type 
               not like 'BALANCE_ADJUSTMENT' 
               then line_items.from_account_id
        end) as payer_account_id,
        line_items.end_user_account_id,
        invoice_amount,
        disbursements.disbursement_date,
        disbursements.disbursement_id,
        disbursements.bank_trace_id
      from
        billing_events_with_uni_temporal_data line_items
        -- Each disbursed line item is linked to the parent 
        -- disbursement via the disbursement_billing_event_id
        join disbursement_events disbursements 
          on disbursements.disbursement_id 
          = line_items.disbursement_billing_event_id
      where
        -- we are interested only in the invoice line 
        -- items that are DISBURSED
        line_items.action = 'DISBURSED'
    ),

  -- An invoice can contain multiple line items
  -- Create a pivot table to calculate the different 
  -- amounts that are part of an invoice.
  -- The new row is aggregated at 
  -- transaction_reference_id - end_user_account_id level
  invoice_amounts_aggregated as (
    select
      transaction_reference_id,
      product_id,
      -- a given disbursement id should have the 
      -- same disbursement_date
      max(disbursement_date) as disbursement_date,
      -- Build a pivot table in order to provide all the
      -- data related to a transaction in a single row.
      -- Note that the amounts are negated. This is because 
      -- when an invoice is generated, we give you the 
      -- positive amounts and the disbursement event 
      -- negates the amounts
      sum(case when transaction_type = 'SELLER_REV_SHARE' 
          then -invoice_amount else 0 end) as seller_rev_share,
      sum(case when transaction_type = 'AWS_REV_SHARE'  
          then -invoice_amount else 0 end) as aws_rev_share,
      sum(case when transaction_type = 'SELLER_REV_SHARE_REFUND'  
          then -invoice_amount else 0 end) as seller_rev_refund,
      sum(case when transaction_type = 'AWS_REV_SHARE_REFUND'  
          then -invoice_amount else 0 end) as aws_rev_refund,
      sum(case when transaction_type = 'SELLER_REV_SHARE_CREDIT'  
          then -invoice_amount else 0 end) as seller_rev_credit,
      sum(case when transaction_type = 'AWS_REV_SHARE_CREDIT'  
          then -invoice_amount else 0 end) as aws_rev_credit,
      sum(case when transaction_type = 'SELLER_TAX_SHARE'  
          then -invoice_amount else 0 end) as seller_tax_share,
      sum(case when transaction_type = 'SELLER_TAX_SHARE_REFUND'  
          then -invoice_amount else 0 end) as seller_tax_refund,
      -- This is the account that pays the invoice:
      max(payer_account_id) as payer_account_id,
      -- This is the account that subscribed to the product:
      end_user_account_id as customer_account_id,
      bank_trace_id
    from
      disbursed_line_items
    group by
      transaction_reference_id,
      product_id,
      disbursement_id,
      -- There might be a different end-user for the same 
      -- transaction reference id. Distributed licenses 
      -- is an example
      end_user_account_id,
      bank_trace_id
),

disbursed_amount_by_product as (
  select
    products.title as ProductTitle,
    products.product_code as ProductCode,
    -- We are rounding the sums using 2 decimal precision
    -- Note that the rounding method might differ 
    -- between SQL implementations.
    -- The disbursement seller report is using 
    -- RoundingMode.HALF_UP. This might create 
    -- discrepancies between this SQL output
    -- and the disbursement seller report
    round(invoice_amounts.seller_rev_share, 2) as SellerRev,
    round(invoice_amounts.aws_rev_share, 2) as AWSRefFee,
    round(invoice_amounts.seller_rev_refund, 2) as SellerRevRefund,
    round(invoice_amounts.aws_rev_refund, 2) as AWSRefFeeRefund,
    round(invoice_amounts.seller_rev_credit, 2) as SellerRevCredit,
    round(invoice_amounts.aws_rev_credit, 2) as AWSRefFeeCredit,
    (
        round(invoice_amounts.seller_rev_share, 2) +
        round(invoice_amounts.aws_rev_share, 2) +
        round(invoice_amounts.seller_rev_refund, 2) +
        round(invoice_amounts.aws_rev_refund, 2) +
        round(invoice_amounts.seller_rev_credit, 2) +
        round(invoice_amounts.aws_rev_credit, 2)
    ) as NetAmount,
    invoice_amounts.transaction_reference_id  
          as TransactionReferenceID,
    round(invoice_amounts.seller_tax_share, 2)  
          as SellerSalesTax,
    round(invoice_amounts.seller_tax_refund, 2)  
          as SellerSalesTaxRefund,
    payer_info.aws_account_id  
          as PayerAwsAccountId,
    customer_info.aws_account_id  
          as EndCustomerAwsAccountId,
    invoice_amounts.disbursement_date  
          as DisbursementDate,
    invoice_amounts.bank_trace_id  
          as BankTraceId
  from
    invoice_amounts_aggregated invoice_amounts
    join products_with_latest_version products  
      on products.product_id = invoice_amounts.product_id
    left join accounts_with_latest_version payer_info  
      on payer_info.account_id = invoice_amounts.payer_account_id
    left join accounts_with_latest_version customer_info  
      on customer_info.account_id = invoice_amounts.customer_account_id
)

select * from disbursed_amount_by_product;
```

## Informe de compensación de ventas
<a name="data-feed-example-sales-compensation"></a>

Para encontrar los ingresos facturados por cliente, puede ejecutar un conjunto de consultas como las que se muestran en el siguiente ejemplo. Las consultas de este ejemplo se complementan entre sí para crear la lista final de detalles de los clientes con el importe total facturado a cada cliente por el uso del software. Puede usar las consultas tal y como se muestran o bien personalizarlas para sus datos y casos de uso.

 Los comentarios de las consultas explican lo que hacen las consultas y cómo modificarlas.

**nota**  
Al ejecutar esta consulta, asumimos que los datos se ingieren con dos ejes de tiempo (las columnas `valid_from` y `update`). Para obtener más información, consulte [Almacenamiento y estructura de las fuentes de datos de AWS Marketplace](data-feed-details.md).

```
    -- Gets all the products and keeps the latest product_id, 
    -- valid_from tuple.
    with products_with_uni_temporal_data as (
      select
       *
      from
      (
        select
         *,
         ROW_NUMBER() OVER (PARTITION BY product_id, valid_from 
                  ORDER BY from_iso8601_timestamp(update_date) desc) 
                  as row_num
        from
         productfeed_v1
      )
      where
        -- A product_id can appear multiple times with the same 
        -- valid_from date but with a different update_date column,
        -- making it effectively bi-temporal. By only taking the most
        -- recent tuple, we are converting to a uni-temporal model.
        row_num = 1
    ),

    -- Gets the latest revision of a product
    -- A product can have multiple revisions where some of the 
    -- columns, like the title, can change.
    -- For the purpose of the sales compensation report, we want 
    -- to get the latest revision of a product
    products_with_latest_revision as (
     select
      *
     from
     (
      select
       *,
       ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY from_iso8601_timestamp(valid_from) desc) as row_num_latest_revision
      from
       products_with_uni_temporal_data
     )
     where
      row_num_latest_revision = 1
   ),

     -- Gets all the addresses and keeps the latest address_id, 
     -- aws_account_id, and valid_from combination.
     -- We're transitioning from a bi-temporal data model to an 
     -- uni-temporal data_model
     piifeed_with_uni_temporal_data as (
       select
        *
       from
       (
         select
          *,
          ROW_NUMBER() OVER (
             PARTITION BY address_id, aws_account_id, valid_from 
             ORDER BY from_iso8601_timestamp(update_date) desc) 
             as row_num
         from
          piifeed
       )
       where
         -- An address_id can appear multiple times with the same
         -- valid_from date but with a different update_date column.
         -- We are only interested in the most recent.
         row_num = 1
     ),

    -- Gets the latest revision of an address.
    -- An address_id can have multiple revisions where some of 
    -- the columns can change.
    -- For the purpose of the sales compensation report, we want to
    -- get the latest revision of an address + account_id pair.
    pii_with_latest_revision as (
      select
       *
      from
      (
       select
        *,
        ROW_NUMBER() OVER (PARTITION BY address_id, aws_account_id 
              ORDER BY from_iso8601_timestamp(valid_from) desc) 
              as row_num_latest_revision
       from
        piifeed_with_uni_temporal_data
      )
      where
       row_num_latest_revision = 1
    ),

    -- Gets all the accounts and keeps the latest 
    -- account_id, valid_from tuple.
    -- We're transitioning from a bi-temporal data 
    -- model to an uni-temporal data_model.
    accounts_with_uni_temporal_data as (
      select
       *
      from
      (
        select
         *,
         ROW_NUMBER() OVER (PARTITION BY account_id, valid_from 
             ORDER BY from_iso8601_timestamp(update_date) desc) 
             as row_num
        from
         accountfeed_v1
      )
      where
        -- An account_id can appear multiple times with the same 
        -- valid_from date but with a different update_date column.
        -- We are only interested in the most recent tuple.
        row_num = 1
    ),

    -- Gets all the historical dates for an account
    -- An account can have multiple revisions where some of the 
    -- columns like the mailing_address_id can change.
    accounts_with_history as (
     select
      *,
      -- This interval's begin_date
      case
        when
        -- First record for a given account_id
          lag(valid_from, 1) over (partition by account_id 
             order by from_iso8601_timestamp(valid_from) asc) is null
        then
          -- 'force' begin_date a bit earlier because of different 
          -- data propagation times. We'll subtract one day as one
          -- hour is not sufficient
          from_iso8601_timestamp(valid_from) - INTERVAL '1' DAY
        else
          -- not the first line -> return the real date
          from_iso8601_timestamp(valid_from)
      end as begin_date,
      -- This interval's end date.
      COALESCE(
           LEAD(from_iso8601_timestamp(valid_from), 1) 
                OVER (partition by account_id 
                ORDER BY from_iso8601_timestamp(valid_from)),
           from_iso8601_timestamp('9999-01-01T00:00:00Z')
      ) as end_date
     from
       accounts_with_uni_temporal_data
   ),

    -- Gets all the billing events and keeps the latest 
    -- billing_event_id, valid_from tuple.
    -- We're transitioning from a bi-temporal data 
    -- model to an uni-temporal data_model.
    billing_events_with_uni_temporal_data as (
      select
       *
      from (
        select
          billing_event_id,
          from_iso8601_timestamp(valid_from) as valid_from,
          from_iso8601_timestamp(update_date) as update_date,
          from_iso8601_timestamp(invoice_date) as invoice_date,
          transaction_type,
          transaction_reference_id,
          product_id,
          disbursement_billing_event_id,
          action,
          currency,
          from_account_id,
          to_account_id,
          end_user_account_id,
          -- convert an empty billing address to null. This will 
          -- later be used in a COALESCE call
          case
           when billing_address_id <> '' then billing_address_id else null
          end as billing_address_id,
          CAST(amount as decimal(20, 10)) invoice_amount,
          ROW_NUMBER() OVER (PARTITION BY billing_event_id, valid_from 
              ORDER BY from_iso8601_timestamp(update_date) desc) 
              as row_num
        from
          billingeventfeed_v1
        where
          -- The Sales Compensation Report does not contain BALANCE 
          -- ADJUSTMENTS, so we filter them out here
          transaction_type <> 'BALANCE_ADJUSTMENT'
          -- Keep only the transactions that will affect any 
          -- future disbursed amounts.
          and balance_impacting = '1'
        )
      where row_num = 1
    ),

    -- Gets the billing address for all DISBURSED invoices. This 
    -- will be the address of the payer when the invoice was paid.
    -- NOTE: For legal reasons, for CPPO transactions, the 
    -- manufacturer will not see the payer's billing address id
    billing_addresses_for_disbursed_invoices as (
      select
        billing_events_raw.transaction_reference_id,
        billing_events_raw.billing_address_id,
        billing_events_raw.from_account_id
      from
        billing_events_with_uni_temporal_data billing_events_raw
      where
        -- the disbursed items will contain the billing address id
        billing_events_raw.action = 'DISBURSED'
        -- we only want to get the billing address id for the 
        -- transaction line items where the seller is the receiver
        -- of the amount
        and billing_events_raw.transaction_type like 'SELLER_%'
      group by
        billing_events_raw.transaction_reference_id,
        billing_events_raw.billing_address_id,
        billing_events_raw.from_account_id
    ),

  -- An invoice can contain multiple line items.
  -- We create a pivot table to calculate the different amounts 
  -- that are part of an invoice.
  -- The new row is aggregated at 
  -- transaction_reference_id - end_user_account_id level
  invoiced_and_forgiven_transactions as (
    select
      transaction_reference_id,
      product_id,
      -- A transaction will have the same invoice date for all 
      -- of its line items (transaction types)
      max(invoice_date) as invoice_date,
      -- A transaction will have the same billing_address_id 
      -- for all of its line items. Remember that the billing event
      -- is uni temporal and we retrieved only the latest valid_from item
      max(billing_address_id) as billing_address_id,
      --  A transaction will have the same currency for all 
      -- of its line items
      max(currency) as currency,
      -- We're building a pivot table in order to provide all the 
      -- data related to a transaction in a single row
      sum(case when transaction_type = 'SELLER_REV_SHARE' 
            then invoice_amount else 0 end) as seller_rev_share,
      sum(case when transaction_type = 'AWS_REV_SHARE' 
            then invoice_amount else 0 end) as aws_rev_share,
      sum(case when transaction_type = 'SELLER_REV_SHARE_REFUND' 
            then invoice_amount else 0 end) as seller_rev_refund,
      sum(case when transaction_type = 'AWS_REV_SHARE_REFUND' 
            then invoice_amount else 0 end) as aws_rev_refund,
      sum(case when transaction_type = 'SELLER_REV_SHARE_CREDIT' 
            then invoice_amount else 0 end) as seller_rev_credit,
      sum(case when transaction_type = 'AWS_REV_SHARE_CREDIT' 
            then invoice_amount else 0 end) as aws_rev_credit,
      sum(case when transaction_type = 'SELLER_TAX_SHARE' 
            then invoice_amount else 0 end) as seller_tax_share,
      sum(case when transaction_type = 'SELLER_TAX_SHARE_REFUND' 
            then invoice_amount else 0 end) as seller_tax_refund,
      -- this is the account that pays the invoice.
      max(case
        -- Get the payer of the invoice from any transaction type 
        -- that is not AWS and not BALANCE_ADJUSTMENT.
        -- For AWS and BALANCE_ADJUSTMENT, the billing event feed 
        -- will show the "AWS Marketplace" account as the
        -- receiver of the funds and the seller as the payer. We 
        -- are not interested in this information here.
        when
         transaction_type not like '%AWS%' 
           and transaction_type not like 'BALANCE_ADJUSTMENT' 
         then from_account_id
       end) as payer_account_id,
      -- this is the account that subscribed to your product
      end_user_account_id as customer_account_id
    from
      billing_events_with_uni_temporal_data
    where
      -- Get invoiced or forgiven items. Disbursements are 
      -- not part of the sales compensation report
      action in ('INVOICED', 'FORGIVEN')
    group by
      transaction_reference_id,
      product_id,
      -- There might be a different end-user for the same 
      -- transaction reference id. Distributed licenses 
      -- is an example.
      end_user_account_id
),

invoiced_items_with_product_and_billing_address as (
  select
    invoice_amounts.*,
    products.product_code,
    products.title,
    payer_info.aws_account_id as payer_aws_account_id,
    payer_info.account_id as payer_reference_id,
    customer_info.aws_account_id as end_user_aws_account_id,
    (
        invoice_amounts.seller_rev_share +
        invoice_amounts.aws_rev_share +
        invoice_amounts.seller_rev_refund +
        invoice_amounts.aws_rev_refund +
        invoice_amounts.seller_rev_credit +
        invoice_amounts.aws_rev_credit +
        invoice_amounts.seller_tax_share +
        invoice_amounts.seller_tax_refund
    ) as seller_net_revenue,
    -- Try to get the billing address from the DISBURSED event 
    -- (if any). If there is no DISBURSEMENT, get the billing 
    -- address from the INVOICED item. If still no billing address, 
    -- then default to getting the mailing address of the payer.
    coalesce(billing_add.billing_address_id, 
             invoice_amounts.billing_address_id, 
             payer_info.mailing_address_id) 
          as final_billing_address_id
  from
    invoiced_and_forgiven_transactions invoice_amounts
    join products_with_latest_revision products 
        on products.product_id = invoice_amounts.product_id
    left join accounts_with_history payer_info 
        on payer_info.account_id = invoice_amounts.payer_account_id
          -- Get the Payer Information at the time of invoice creation
          and payer_info.begin_date <= invoice_amounts.invoice_date 
          and invoice_amounts.invoice_date < payer_info.end_date
    left join accounts_with_history customer_info 
        on customer_info.account_id = invoice_amounts.customer_account_id
          -- Get the End User Information at the time of invoice creation
          and customer_info.begin_date <= invoice_amounts.invoice_date 
          and invoice_amounts.invoice_date < customer_info.end_date
    left join billing_addresses_for_disbursed_invoices billing_add 
        on billing_add.transaction_reference_id = 
           invoice_amounts.transaction_reference_id
        and billing_add.from_account_id = 
            invoice_amounts.payer_account_id
),

invoices_with_full_address as (
  select
    payer_aws_account_id as "Customer AWS Account Number",
    pii_data.country as "Country",
    pii_data.state_or_region as "State",
    pii_data.city as "City",
    pii_data.postal_code as "Zip Code",
    pii_data.email_domain as "Email Domain",
    product_code as "Product Code",
    title as "Product Title",
    seller_rev_share as "Gross Revenue",
    aws_rev_share as "AWS Revenue Share",
    seller_rev_refund as "Gross Refunds",
    aws_rev_refund as "AWS Refunds Share",
    seller_net_revenue as "Net Revenue",
    currency as "Currency",
    date_format(invoice_date, '%Y-%m')as "AR Period",
    transaction_reference_id as "Transaction Reference ID",
    payer_reference_id as "Payer Reference ID",
    end_user_aws_account_id as "End Customer AWS Account ID"
  from
    invoiced_items_with_product_and_billing_address invoice_amounts
    left join pii_with_latest_revision pii_data 
        on pii_data.aws_account_id = invoice_amounts.payer_aws_account_id
        and pii_data.address_id = invoice_amounts.final_billing_address_id
    -- Filter out FORGIVEN and Field Demonstration Pricing transactions
    where seller_net_revenue <> 0
)

select * from invoices_with_full_address;
```

# Data feeds
<a name="data-feeds"></a>

AWS Marketplace proporciona una serie de fuentes de datos para ayudar a los vendedores a recopilar y analizar información sobre las ventas de tus productos. Los feeds de datos están disponibles para todos los AWS Marketplace vendedores registrados. Dado que las fuentes de datos se generan en un día, contienen los datos más actuales disponibles.

En las secciones siguientes se describe cada fuente de datos.

**Topics**
+ [Fuente de datos de cuenta](data-feed-account.md)
+ [Fuente de datos de direcciones](data-feed-address.md)
+ [Fuente de datos de acuerdos](data-feed-agreements.md)
+ [Fuente de datos de cargos por contrato](data-feed-agreement-charge.md)
+ [Fuente de datos sobre los términos del acuerdo](data-feed-agreement-term.md)
+ [Fuente de datos de eventos de facturación](data-feed-billing-event.md)
+ [Fuente de datos de uso diario](data-feed-daily-usage.md)
+ [Fuente de datos de mapeo heredada](data-feed-legacy-mapping.md)
+ [Fuente de datos de ofertas](data-feed-offer.md)
+ [Fuente de datos de productos de la oferta](data-feed-offer-product.md)
+ [Ofrecer fuente de datos de destino](data-feed-offer-target.md)
+ [Fuente de datos del producto](data-feed-product.md)
+ [Fuente de datos de elementos de impuestos](data-feed-tax-item.md)

# Fuente de datos de cuenta
<a name="data-feed-account"></a>

Esta fuente de datos proporciona información sobre todas las cuentas con las que interactúa: las suyas, las de los socios de canal con los que trabaja, las de los compradores, las de los pagadores y todas las cuentas sujetas a impuestos. 

Los datos de la cuenta son inmutables y no están asociados con ningún número de versión. Los cambios en los campos se anexan, por lo que esta fuente de datos puede tener varias filas con los mismos valores `account_id` y valores `valid_from` diferentes. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization).

La fuente de datos de la cuenta se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. 


| Nombre de la columna  | Descripción  | 
| --- | --- | 
| id\$1cuenta  | Identificador único de carácter general (GUID) de la cuenta. Se puede utilizar para unir campos de las fuentes de datos de `Product`, `Offer_Target`, `Billing_Event` y `Tax_Item`. Consulte esas fuentes de datos para obtener información sobre los campos que se pueden usar para unirse. | 
| aws\$1account\$1id  | El número de cuenta de AWS de la cuenta de AWS del vendedor, que es único por partición de AWS.  | 
| encrypted\$1account\$1id | El ID único y cifrado para un comprador individual de su aplicación. El servicio de medición de AWS Marketplace utiliza el valor de encrypted\$1account\$1id, por ejemplo, como el valor CustomerIdentifier que devuelve la acción [https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_ResolveCustomer.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_ResolveCustomer.html).  | 
| mailing\$1address\$1id | La referencia de la dirección postal de esta cuenta. | 
| tax\$1address\$1id | La referencia de la dirección fiscal de esta cuenta. | 
| tax\$1registration\$1number | Para cuentas no estadounidenses, el número de identificación fiscal de esta cuenta.  | 
| tax\$1legal\$1name | Para cuentas no estadounidenses, el nombre de la empresa legal. Este es el nombre utilizado en las facturas fiscales. | 

## Ejemplo de fuente de datos de la cuenta
<a name="data-feed-account-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de la cuenta. Para facilitar la lectura, no se muestran las columnas del historial de datos. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization).


| id\$1cuenta  | aws\$1account\$1id  | encrypted\$1account\$1id | mailing\$1address\$1id | tax\$1address\$1id | tax\$1registration\$1number | tax\$1legal\$1name | 
| --- | --- | --- | --- | --- | --- | --- | 
| xk0CSmiAm6PQ4QqEog9iiaochIzuPlkMfba7a1oDlZ | 444456660000 | Zf7oMzheGWpH | 25o3k46eN6eViOfFiiqtxwX8e3kaOiPalUiofjyFa3 |  |  |  | 
| 7nyo5jwTRoPlyX81vx9ji04eEwTurO1Ff8biQi88W8 | 555567679999 | 373vuQUqmQ8v | 5oJ6vTjSzMrrF2gvh2Vj9HfqiM800MuLEHmyFY5Lr42s8 | 5oJ6vTjSzMrrF2gvh2Vj9HfqiM800MuLEHmyFY5Lr42s8 | SE823935083345 |  | 
| VIeGa2t9j3MuxioH9wc8lsndXXCgGCGUreeXriocM5 | 73739998888 | 8SPxAYmi8MwX | NLUc5UeiMlGFTrDWCoftDPhDUF1oaSd8xgl5QM8Db7 | V5NhBYBiYogwy0WMhndGU4AfMggmuoTC2j7Pm8ZKKNNyT | DE469558025 |  | 

# Fuente de datos de direcciones
<a name="data-feed-address"></a>

**importante**  
AWS Marketplace suspenderá el PiiFeed, que se proporciona mediante el [servicio de fuentes de datos de entrega del vendedor](https://docs.aws.amazon.com/marketplace/latest/userguide/data-feed-service.html), en diciembre de 2023. Use la fuente de datos AddressFeed\$1v1 para sus necesidades de datos de direcciones. Si tiene alguna pregunta o necesita asistencia, póngase en contacto con el equipo de [operaciones de vendedores de AWS Marketplace](https://aws.amazon.com/marketplace/management/contact-us/).

Esta fuente de datos proporciona información de contacto para todas las cuentas con las que interactúa: las suyas, las de los socios de canal con los que trabaja, las de los compradores, las de los pagadores y todas las cuentas sujetas a impuestos. Cada vez que se produce una nueva transacción, se analiza la dirección del cliente de la transacción, y si no figura en su fuente de datos, se añade una nueva entrada al archivo de fuente de datos.

Los datos de dirección son inmutables. 

La fuente de datos de direcciones se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. 


| Nombre de la columna  | Descripción  | 
| --- | --- | 
| address\$1id  | La clave única de la dirección. Se puede usar para unirse desde la fuente de datos de `Billing_Event` en el campo de `billing_address_id` o desde la fuente de datos de `Account` de los campos `mailing_address_id` o `tax_address_id`. | 
| email\$1domain  | El dominio de la dirección de correo electrónico registrado para esta cuenta.  | 
| company\$1name  | El nombre de la empresa registrado para esta cuenta.  | 
| country\$1code | El código de país ISO 3166 alpha-2 registrado para esta dirección.  | 
| state\$1or\$1region  | El estado o región registrado para esta dirección.  | 
| ciudad  | La ciudad registrada para esta dirección.  | 
| postal\$1code  | El código postal registrado para esta dirección.  | 
| address\$1line\$11  | La primera línea de la dirección registrada para esta dirección.  | 
| address\$1line\$12  | La segunda línea de la dirección registrada para esta dirección.  | 
| address\$1line\$13  | La tercera línea de la dirección registrada para esta dirección.  | 

## Ejemplo de fuente de datos de direcciones
<a name="data-feed-address-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de direcciones. En la fuente de datos, esta información se presenta en una sola tabla. Para facilitar la lectura, los datos se muestran en dos tablas aquí y las columnas del historial de datos no se muestran. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization). 


| address\$1id  | email\$1domain  | company\$1name  | country\$1code  | state\$1or\$1region  | city  | postal\$1code  | 
| --- | --- | --- | --- | --- | --- | --- | 
| V5NhBYBiYogwy0WMhndGU4AfMggmuoTC2j7Pm8ZKKNNyT | a.com | Mateo Jackson's Company | DE |  | Hamburgo | 67568 | 
| G68xdbkZQDVVHzfBGw6yf5yos0A6NiSVWHmH5ViLjf | b.com | Mary Major's Company | EE. UU. | OH | Dayton | 57684 | 
| NLUc5UeiMlGFTrDWCoftDPhDUF1oaSd8xgl5QM8Db7 | c.com | Our Seller | EE. UU. | NY | Nueva York | 89475 | 




| address\$1line\$11  | address\$1line\$12  | address\$1line\$13  | 
| --- | --- | --- | 
|   |   |  | 
|  |   |  | 
|  | 19th Floor |  | 



# Fuente de datos de acuerdos
<a name="data-feed-agreements"></a>

Esta fuente de datos proporciona información sobre los acuerdos, es decir, un contrato firmado entre un proponente (vendedor registrado) y un aceptante (AWS comprador) para empezar a utilizar un producto. Esta fuente de datos proporciona información sobre los acuerdos de las ofertas de productos que ha creado como vendedor de registro.

La fuente de datos de acuerdos se actualiza cada 24 horas.

En la siguiente tabla se muestran y describen los elementos en la fuente de datos.


| Columna | Description (Descripción) | 
| --- | --- | 
| valid\$1from | La primera fecha para la que es válido el valor de la clave principal en relación con los valores de otros campos. | 
| insert\$1date | La fecha en la que se insertó un registro en la fuente de datos. | 
| update\$1date | La fecha en la que se actualizó por última vez el registro. | 
| delete\$1date | Esta columna siempre está en blanco. | 
| Status |  El estado actual del acuerdo. Entre los estados admitidos se incluyen los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-agreements.html)  | 
| estimated\$1agreement\$1value | El importe total conocido que es probable que el cliente pague durante todo el ciclo de vida del acuerdo. | 
| currency\$1code | La divisa del importe total conocido que es probable que el cliente pague durante todo el ciclo de vida del acuerdo. | 
| agreement\$1id | El identificador único para el acuerdo. | 
| license\$1ids | Los identificadores de licencia asociados al acuerdo, representados como una matriz. | 
| proposer\$1account\$1id | El vendedor que lo propuso PurchaseAgreement, representado por el identificador único global (GUID) de la cuenta del vendedor. Se puede usar para unirse a la fuente de datos de la cuenta. | 
| acceptor\$1account\$1id | El comprador que lo aceptó PurchaseAgreement, representado por el identificador único global (GUID) de la cuenta del comprador. Se puede usar para unirse a la fuente de datos de la cuenta. | 
| offer\$1revision\$1at\$1acceptance | El ID sencillo de la oferta que corresponde a este acuerdo. Se puede utilizar para unirse a las fuentes de datos de oferta y objetivo de la oferta. | 
| offer\$1set\$1id | El identificador del conjunto de ofertas asociado a la oferta. | 
| start\$1time | La fecha y la hora en las que se inicia el acuerdo. | 
| end\$1time | La fecha y la hora en las que finaliza el acuerdo. El campo es nulo para pay-as-you-go los acuerdos que no tienen fechas de finalización. | 
| time\$1acceptance\$1time | La fecha y la hora en las que se acepta la oferta o en las que se ha creado el acuerdo. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-agreements.html)  | 
| intent | La intención del comprador cuando se modificó el acuerdo por última vez. | 
| preceding\$1agreement\$1id | El ID del acuerdo anterior. | 
| status\$1reason\$1code | Motivo del cambio de estado del acuerdo. | 
| id\$1de\$1cuent\$1de\$1destinatario | La cuenta del vendedor que recibe los datos de los ficheros. Se puede usar para unirse a la fuente de datos `Account` en el campo `account_id`. | 

## Ejemplo de fuente de datos de acuerdos
<a name="agreements-feed-example"></a>


| valid\$1from | agreement\$1id | proposer\$1account\$1id | acceptor\$1account\$1id | offer\$1id | offer\$1revision\$1at\$1acceptance | offer\$1set\$1id | start\$1time | end\$1time | aceptance\$1time | intent | preceding\$1agreement\$1id | status | status\$1reason\$1code | estimated\$1agreement\$1value | currency\$1code | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 2024-06-21 20:58:00.0 | agmt-34g544dfgsd5678adsrgwe5t | 88a3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 88a3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | offer-krxxxxxxxxxxx | 1 | conjunto de ofertas: yricpu74oqox2 | 2024-06-21 20:58:00.0 | 2024-06-21 20:58:00.0 | 2024-06-21 20:58:00.0 | NUEVO |  | ACTIVE |  | 1 000 | USD | 

# Fuente de datos de cargos por contrato
<a name="data-feed-agreement-charge"></a>

Este feed de datos proporciona una descripción general del cargo asociado a un acuerdo creado por ti como vendedor registrado. Actualmente, esta fuente de datos solo proporciona información sobre los cargos de los acuerdos asociados a un plazo del calendario de pagos.

El feed de datos sobre los cargos por acuerdos se actualiza cada 24 horas.

En la siguiente tabla se muestran y describen los elementos en la fuente de datos.


| Columna | Description (Descripción) | 
| --- | --- | 
| valid\$1from | La primera fecha para la que es válido el valor de la clave principal en relación con los valores de otros campos. | 
| insert\$1date | La fecha en la que se insertó un registro en la fuente de datos. | 
| update\$1date | La fecha en la que se actualizó por última vez el registro. | 
| delete\$1date | Esta columna siempre está en blanco. | 
| cantidad | El importe a cobrar. | 
| currency\$1code | La divisa de fijación de precios del pago. | 
| hora | La fecha de cargo programada para la cuota planificada. | 
| agreement\$1id | El identificador único para el acuerdo. | 
| term\$1id | El identificador único del término. | 

## Ejemplo de fuente de datos de Agreement & Charge
<a name="agreement-charge-feed-example"></a>


| valid\$1from | insert\$1date | update\$1date | delete\$1date | cantidad | currency\$1code | hora | agreement\$1id | term\$1id | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 2024-12-24 11:31:47 ,0 | 2025-10-01 01:03:41 1,0 | 2025-10-01 01:03:41 1,0 | null | 28440,00 | USD | 2025-11-06 00:00:00.000 000 | AGMT-3KK39TBW3J6ID2VAKBP0xxxxx | TERM-3986E2C7F73768ED4FF7CD8A97B41AC0AE2AA02ADA6B68DEB9349C8604CXXXXX | 

# Fuente de datos sobre los términos del acuerdo
<a name="data-feed-agreement-term"></a>

Este feed de datos proporciona una descripción general de la duración del contrato asociada a un acuerdo creado por ti como vendedor registrado.

El feed de datos sobre la vigencia del contrato se actualiza cada 24 horas.

En la siguiente tabla se muestran y describen los elementos en la fuente de datos.


| Columna | Description (Descripción) | 
| --- | --- | 
| valid\$1from | La primera fecha para la que es válido el valor de la clave principal en relación con los valores de otros campos. | 
| insert\$1date | La fecha en la que se insertó un registro en la fuente de datos. | 
| update\$1date | La fecha en la que se actualizó por última vez el registro. | 
| delete\$1date | La fecha en que se eliminó el registro. | 
| agreement\$1id | El identificador único para el acuerdo. | 
| term\$1id | El identificador único del término. | 
| term\$1type | El tipo de término asociado al acuerdo. Consulte https://docs.aws.amazon.com/marketplace/ latest/APIReference/API \$1Types\$1 AWS\$1M arketplace\$1Agreement\$1Service.html para obtener una lista completa de los términos disponibles. | 
| term\$1configuration | Los parámetros adicionales especificados por el aceptador al aceptar el término. Esto es aplicable a ConfigurableUpfrontPricingTerms y. RenewalTerms | 

## Ejemplo de fuente de datos sobre la vigencia del acuerdo
<a name="agreement-term-feed-example"></a>


| valid\$1from | insert\$1date | update\$1date | delete\$1date | agreement\$1id | term\$1id | term\$1type | term\$1configuration | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 2024-12-24 11:31:47 ,0 | 2025-10-01 01:03:41 1,0 | 2025-10-01 01:03:41 1,0 | null | AGMT-3KK39TBW3J6ID2VAKBP0xxxxx | TERM-3986E2C7F73768ED4FF7CD8A97B41AC0AE2AA02ADA6B68DEB9349C8604CXXXXX | ConfigurableUpfrontPricingTerm | \$1"selectorValue» :"P36M», «dimensions»: [\$1"DimensionKey» :"Aplicaciones», «DimensionValue» :1\$1]\$1 | 

# Fuente de datos de eventos de facturación
<a name="data-feed-billing-event"></a>

Esta fuente de datos proporciona información sobre eventos de facturación, incluidos facturación y desembolsos. 

Por ejemplo, puede utilizar esta fuente de datos para saber cuándo y qué se factura a un comprador. También puede utilizar las [consultas de SQL de ejemplo](#data-feeds-billing-event-query-examples) para analizar los datos de esta fuente de datos.

Esta fuente de datos contiene información asociada con eventos de facturación para los que es el vendedor registrado. Para los acuerdos realizados a través de socios de canal, esta fuente de datos contiene información sobre eventos de facturación entre el fabricante y el vendedor de registro.

La fuente de datos de eventos de facturación se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

Los datos de eventos de facturación son inmutables. 

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. 


| Nombre de la columna  | Description (Descripción)  | 
| --- | --- | 
| billing\$1event\$1id | Un identificador de un evento de facturación. Este ID es único en el entorno del vendedor.  | 
| from\$1account\$1id |  La cuenta que inició el evento de facturación. Si `transaction_type` es `SELLER_REV_SHARE`, es la cuenta de pagador del comprador. Esta es una clave externa para la fuente de datos de la [cuenta](data-feed-account.md). Se puede usar para unirse a la fuente de datos de `Account` en el campo `account_id`.  | 
| to\$1account\$1id | La cuenta que recibe el importe de la transacción del producto. Esta es una clave externa para la fuente de datos de la cuenta.Se puede usar para unirse a la fuente de datos de `Account` en el campo `account_id`. | 
| end\$1user\$1account\$1id | La cuenta que utiliza el producto. Esta cuenta puede ser diferente de las cuentas de comprador y pagador.Se puede usar para unirse a la fuente de datos `Account` en el campo `account_id`. | 
| product\$1id | El identificador del producto. Esta es una clave externa para la fuente de datos del [producto](data-feed-product.md).Se puede usar para unirse a la fuente de datos de `Product` en el campo `product_id`. | 
| acción |  El tipo de acción de este evento. Los valores posibles son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html)  | 
| transaction\$1type |  El tipo de transacción. Para ver ejemplos, consulte [Escenarios de impuestos](#data-feeds-billing-event-tax-examples). Los valores posibles son los siguientes:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html)  | 
| parent\$1billing\$1event\$1id |  Cuando el valor de `broker_id` es `AWS_INC`, el valor de `action` es `DISBURSED` o `FORGIVEN` y el valor de `transaction_type` es `DISBURSEMENT`, el `parent_billing_event_id` se refiere al `billing_event_id` original que inició este evento de facturación. Si `action` tiene otro valor, este campo es nulo.  Cuando el valor de `broker_id` es `AWS_EUROPE`, `parent_billing_event_id` se refiere al `billing_event_id` original que inició este evento de facturación en los siguientes escenarios:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html) Si el valor de `broker_id` es `AWS_EUROPE`, `parent_billing_event_id` se refiere al `billing_event_id` original del anterior evento de facturación de desembolsos exitoso en el siguiente escenario: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html) Si el valor de `broker_id` es `AWS_EUROPE`, este campo es nulo para todos los escenarios restantes.  | 
| disbursement\$1billing\$1event\$1id |  El desembolso relacionado cuando el valor de `action` es `DISBURSED` y se cumple una de las siguientes condiciones:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html) En todos los demás escenarios, este valor es nulo.  | 
| cantidad | El importe del evento de facturación.  | 
| divisa | El código de moneda ISO 639. | 
| disbursement\$1amount | El importe del desembolso. En los escenarios de doble facturación, este campo contiene el importe del desembolso. En los escenarios de facturación unificada, este campo es nulo. | 
| disbursement\$1currency | El código de divisa ISO 639 para el importe del desembolso. En los escenarios de doble facturación, este campo contiene el código de divisa del desembolso. En los escenarios de facturación unificada, este campo es nulo. | 
| balance\$1impacting | Si el importe se tiene en cuenta al calcular los desembolsos del vendedor. Un valor de 0 indica que el importe se muestra con fines informativos y no tiene ningún efecto sobre el saldo. Un valor de 1 indica que este importe se tiene en cuenta al determinar los desembolsos del vendedor.  | 
| invoice\$1date | La fecha en que se creó la factura. | 
| payment\$1due\$1date |  Cuando el valor de `action` es `INVOICED`, la fecha de vencimiento de la factura.  | 
| usage\$1period\$1start\$1date | La fecha de inicio del periodo del registro. | 
| usage\$1period\$1end\$1date | La fecha de finalización del periodo del registro. | 
| invoice\$1id |  El identificador de AWS la factura.  | 
| billing\$1address\$1id | La referencia de la dirección de facturación del pagador en la fuente de datos de la dirección.Se puede usar para unirse a la fuente de datos de `Address` en el campo `address_id`. | 
| transaction\$1reference\$1id |  Un identificador que le permite hacer referencias cruzadas a datos de los siguientes informes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html)  | 
| bank\$1trace\$1id |  En el caso de las transacciones de desembolso (`transaction_type` = es `DISBURSEMENT` y la acción es `DISBURSED`), el identificador de seguimiento es asignado por el banco. El identificador de seguimiento se puede utilizar para correlacionarlo con los informes proporcionados por el banco del vendedor.  | 
| broker\$1id |  Un identificador de la entidad comercial que facilitó la transacción. Los valores posibles son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html)  | 
| buyer\$1transaction\$1reference\$1id |  Un identificador que agrupa todos los registros relacionados de la fuente de facturación mediante `GROUP BY` o la construcción de funciones de ventana en SQL. Estos registros relacionados pueden incluir la factura del comprador, la factura del vendedor y el impuesto sobre el valor añadido (VATs) sobre la tarifa de publicación.  | 
| acción\$1fecha |  La fecha en la que se produjo el evento de la transacción. La fecha específica depende del tipo de acción: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-billing-event.html)  | 
| recipient\$1account\$1id | La cuenta del vendedor que recibe los datos de los ficheros. Se puede usar para unirse a la fuente de datos `Account` en el campo `account_id`. | 
| offer\$1id | El identificador descriptivo de la oferta que está asociado a la línea de pedido de la factura del comprador.Se puede usar para unirse a la fuente de datos `Offer` en el campo `offer_id`. | 
| fecha\$1factura\$1del comprador | La fecha de la factura del artículo de la factura del comprador asociado. | 
| line\$1item\$1id | El identificador de la partida de la factura, según el nivel de detalle del desembolso. | 
| buyer\$1line\$1item\$1id | El identificador de la partida de la factura del comprador según el nivel de detalle del desembolso. | 
| charge\$1variant | Indica lo que se compra o vende.  | 
| charge\$1side | Indica si el vendedor compra o vende la variante de pago.  | 

## Escenarios de impuestos
<a name="data-feeds-billing-event-tax-examples"></a>

El modelo fiscal vigente del país y del estado del comprador y el vendedor determina cómo se recaudan y remiten los impuestos. A continuación, se muestran los escenarios posibles:
+ Los impuestos son recaudados y remitidos por AWS. En estos casos, `transaction_type` es `AWS_TAX_SHARE`. 
+ Los impuestos los recauda el vendedor AWS, los desembolsa y el vendedor los remite a las autoridades tributarias. En estos casos, `transaction_type` es `SELLER_TAX_SHARE`.
+ Los impuestos no los recauda. AWS El vendedor debe calcular los impuestos y remitirlos a las autoridades fiscales. En estos casos, AWS Marketplace no realiza cálculos de impuestos ni recibe información tributaria. El vendedor paga los impuestos de la parte de ingresos.

## Ejemplos de fuente de datos de eventos de facturación
<a name="data-feed-billing-event-sample-scenario"></a>

En esta sección se muestran ejemplos del periodo de datos del evento de facturación en el momento de la facturación y un mes después. Tenga en cuenta lo siguiente para todas las tablas de esta sección: 
+ En las fuentes de datos, los valores de `billing_event_id` son cadenas alfanuméricas de 40 caracteres. Se muestran aquí como cadenas de dos caracteres para facilitar la lectura. 
+ En la fuente de datos, esta información se presenta en una sola tabla. Para facilitar la lectura, los datos se muestran aquí en varias tablas y no aparecen todas las columnas. 

Para los ejemplos de esta sección, suponga lo siguiente: 
+ Arnav es el comprador.
  + El ID de su cuenta es `737399998888`.
  + Está ubicado en Francia, que está sujeto a las leyes de facilitadores del mercado. Para obtener más información, consulte [Ayuda fiscal de Amazon Web Service](https://aws.amazon.com/tax-help/).
  + Compró `prod-o4grxfafcxxxx` y se le facturaron 120,60 dólares por el uso mensual de ese producto.
  + Pagó la factura dentro del mes.
+ Jane es la fabricante.
  + El ID de su cuenta es `111122223333`.
+ Paulo es el vendedor de registro.
  + El ID de su cuenta es `777788889999`. 
  + Vive en Kansas, que no está sujeta a las leyes de facilitadores del mercado. 

### Fuente de datos de eventos de facturación para el vendedor de registro
<a name="billing-event-example-seller-of-record"></a>

Como vendedor de registro, Paulo factura al comprador, Arnav. 

En las siguientes tablas se muestra la información relevante en la fuente de datos de Paulo cuando factura a Arnav.


| billing\$1event\$1id  | from\$1account\$1id  | to\$1account\$1id  | end\$1user\$1account\$1id | product\$1id | action | transaction\$1type | 
| --- | --- | --- | --- | --- | --- | --- | 
| I0 | 737399998888 | 777788889999 | 737399998888 | prod-o4grxfafcxxxx | FACTURADO | SELLER\$1REV\$1SHARE | 
| I1 | 737399998888 | AWS | 737399998888 | prod-o4grxfafcxxxx | FACTURADO | AWS\$1TAX\$1COMPARTIR | 
| I2 | 777788889999 | 111122223333 | 737399998888 | prod-o4grxfafcxxxx | FACTURADO | SELLER\$1REV\$1SHARE | 
| I3 | 777788889999 | AWS | 737399998888 | prod-o4grxfafcxxxx | FACTURADO | AWS\$1REV\$1COMPARTIR | 




| parent\$1billing\$1event\$1id | disbursement\$1billing\$1event\$1id | amount | divisa | invoice\$1date | invoice\$1id | 
| --- | --- | --- | --- | --- | --- | 
|  |  | 100 | USD | 2018-12-31T00:00:00Z | 781216640 | 
|  |  | 20.6 | USD | 2018-12-31T00:00:00Z | 781216640 | 
|  |  | -80 | USD | 2018-12-31T00:04:07Z | 788576665 | 
|  |  | -0.2 | USD | 2018-12-31T00:04:07Z | 788576665 | 

En las siguientes tablas se muestra la información relevante en la fuente de datos de Paulo al final del mes, después de que Arnav pague la factura.


| billing\$1event\$1id  | from\$1account\$1id  | to\$1account\$1id  | end\$1user\$1account\$1id | product\$1id | action | transaction\$1type | 
| --- | --- | --- | --- | --- | --- | --- | 
| I10 | 737399998888 | 777788889999 | 737399998888 |  | DESEMBOLSADO | SELLER\$1REV\$1SHARE | 
| I12 | 777788889999 | 111122223333 | 737399998888 |  | DESEMBOLSADO | SELLER\$1REV\$1SHARE | 
| I13 | 777788889999 | AWS | 737399998888 | prod-o4grxfafcxxxx | DESEMBOLSADO | AWS\$1REV\$1COMPARTIR | 
| I14 | AWS | 777788889999 |  |  | DESEMBOLSADO | ABONO | 




| parent\$1billing\$1event\$1id | disbursement\$1billing\$1event\$1id | amount | divisa | invoice\$1date | invoice\$1id | 
| --- | --- | --- | --- | --- | --- | 
| I0 | I14 | -100 | USD | 2018-12-31T00:00:00Z | 781216640 | 
| I2 | I14 | 80 | USD | 2018-12-31T00:04:07Z | 788576665 | 
| I3 | I14 | 0.2 | USD | 2018-12-31T00:04:07Z | 788576665 | 
|  |  | 19.8 | USD |  |  | 

### Fuente de datos de eventos de facturación para el fabricante
<a name="billing-event-example-manufacturer"></a>

En las siguientes tablas se muestra la información relevante en la fuente de datos de Jane cuando Paulo factura a Arnav.


| billing\$1event\$1id  | from\$1account\$1id  | to\$1account\$1id  | end\$1user\$1account\$1id | product\$1id | action | transaction\$1type | 
| --- | --- | --- | --- | --- | --- | --- | 
| I5 | 777788889999 | 111122223333 |  | prod-o4grxfafcxxxx | FACTURADO | SELLER\$1REV\$1SHARE | 
| I6 | 777788889999 | 111122223333 |  | prod-o4grxfafcxxxx | FACTURADO | SELLER\$1TAX\$1SHARE | 
| I7 | 111122223333 | AWS |  | prod-o4grxfafcxxxx | FACTURADO | AWS\$1REV\$1COMPARTIR | 




| parent\$1billing\$1event\$1id | disbursement\$1billing\$1event\$1id | amount | divisa | invoice\$1date | invoice\$1id | 
| --- | --- | --- | --- | --- | --- | 
|  |  | 73.5 |  | 2018-12-31T00:04:07Z | 788576665 | 
|  |  | 6.5 |  | 2018-12-31T00:04:07Z | 788576665 | 
|  |  | -7.35 |  | 2018-12-31T00:04:07Z | 788576665 | 

En las siguientes tablas se muestra la información relevante en la fuente de datos de Jane al final del mes, después de pagar la factura.


| billing\$1event\$1id  | from\$1account\$1id  | to\$1account\$1id  | end\$1user\$1account\$1id | product\$1id | action | transaction\$1type | 
| --- | --- | --- | --- | --- | --- | --- | 
| I30 | 777788889999 | 111122223333 |  | prod-o4grxfafcxxxx | DESEMBOLSADO | SELLER\$1REV\$1SHARE | 
| I31 | 777788889999 | 111122223333 |  | prod-o4grxfafcxxxx | DESEMBOLSADO | SELLER\$1TAX\$1SHARE | 
| I32 | 111122223333 | AWS |  | prod-o4grxfafcxxxx | DESEMBOLSADO | AWS\$1REV\$1COMPARTIR | 
| I33 | AWS | 111122223333 |  |  | DESEMBOLSADO | ABONO | 




| parent\$1billing\$1event\$1id | disbursement\$1billing\$1event\$1id | amount | divisa | invoice\$1date | invoice\$1id | 
| --- | --- | --- | --- | --- | --- | 
| I5 | I33 | -73.5 | USD |  |  | 
| I6 | I33 | -6.5 | USD |  |  | 
| I7 | I33 | 7.35 | USD |  |  | 
|  |  | 72.65 | USD |  |  | 

## Consultas de ejemplo
<a name="data-feeds-billing-event-query-examples"></a>

Como se describe en [Recopilación y análisis de datos con fuentes de datos](data-feed-using.md), puede utilizar [Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) para ejecutar consultas sobre los datos que se recopilan y almacenan como fuentes de datos en el bucket de Amazon S3 administrado. En esta sección se proporcionan algunos ejemplos de formas comunes de hacerlo. Todos los ejemplos suponen que se utiliza una moneda única.

## Ejemplo 1: Importe facturado, incluidos los impuestos
<a name="data-feed-example-query-tax-invoice"></a>

Para saber cuánto se facturó a los compradores, incluidos los impuestos, puede ejecutar una consulta como la que se muestra en el siguiente ejemplo. 

```
SELECT sum(amount) FROM billing_event 
WHERE 
  action = 'INVOICED'
  AND
  (
    (transaction_type in ('SELLER_REV_SHARE', 'SELLER_TAX_SHARE')
      -- to discard SELLER_REV_SHARE from Manufacturer to Channel Partner, aka cost of goods
      AND to_account_id='seller-account-id'
    )
  OR transaction_type= 'AWS_TAX_SHARE'
  );
```

## Ejemplo 2: Importe facturado a los compradores en nombre del vendedor
<a name="data-feed-example-query-invoice-for-seller"></a>

Para saber cuántos compradores se facturaron en nombre de un vendedor, puede ejecutar una consulta como la que se muestra en el siguiente ejemplo.

```
SELECT sum(amount) FROM billing_event 
WHERE
  action = 'INVOICED'
  AND transaction_type in ('SELLER_REV_SHARE', 'SELLER_TAX_SHARE')
  AND to_account_id='seller-account-id'
;
```

## Ejemplo 3: El importe AWS se puede recaudar en nombre del vendedor
<a name="data-feed-example-query-aws-collect"></a>

Para saber cuánto se AWS puede cobrar en nombre de un vendedor, menos los reembolsos, los créditos y las cuentas condonadas, puedes realizar una consulta como se muestra en el siguiente ejemplo.

```
SELECT sum(amount) FROM billing_event 
WHERE
  -- what is invoiced on behalf of SELLER, incl. refunds/ credits and cost of goods
  transaction_type like 'SELLER_%' 
  -- FORGIVEN action records will "negate" related INVOICED
  and action in ('INVOICED','FORGIVEN') 
;
```

## Ejemplo 4: Importe que el vendedor puede recaudar
<a name="data-feed-example-query-seller-collect"></a>

Para saber cuánto pueden recaudar los vendedores, puede ejecutar una consulta como la que se muestra en el siguiente ejemplo. En este ejemplo, se eliminan las tasas de publicación y los impuestos que se AWS recaudan y se añaden los ajustes de saldo excepcionales. 

```
SELECT sum(amount) FROM billing_event
WHERE
  (transaction_type like 'SELLER_%' -- what is invoiced on behalf of SELLER
  or transaction_type like 'AWS_REV_%' -- what is owed to AWS
  or transaction_type = 'BALANCE_ADJUSTMENT' -- exceptionnal case
  )
  and action in ('INVOICED','FORGIVEN')
;
```

También puede utilizar la siguiente consulta para recopilar la misma información, como se muestra en el ejemplo siguiente.

```
SELECT sum(amount) FROM billing_event
WHERE
  balance_impacting = 1
  and action in ('INVOICED','FORGIVEN')
;
```

En el siguiente ejemplo se muestra la misma información, pero está restringida a las transacciones de 2018 y supone que todos los compradores pagaron sus facturas. 

```
SELECT sum(amount) FROM billing_event
WHERE
  invoice_date between '2018-01-01' and '2018-12-31'
  and balance_impacting = 1
  and action in ('INVOICED','FORGIVEN')
;
```

## Ejemplo 5: Importe de los desembolsos
<a name="data-feed-example-query-disbursements"></a>

Para averiguar la cantidad que se ha desembolsado, puede ejecutar una consulta como la que se muestra en el siguiente ejemplo.

```
select sum(amount) FROM billing_event
WHERE
  action ='DISBURSED'
  and transaction_type like 'DISBURSEMENT%'
;
```

## Ejemplo 6: Importe pendiente de desembolso
<a name="data-feed-example-query-pending-disbursement"></a>

Para averiguar el importe pendiente de desembolso, puede ejecutar una consulta como la que se muestra en el siguiente ejemplo. Esta consulta elimina los importes que ya se han desembolsado. 

```
SELECT sum(amount) FROM billing_event targeted 
WHERE
   (transaction_type like 'SELLER_%'  -- what is invoiced on behalf of SELLER
    or transaction_type like 'AWS_REV_%'  -- what is owed to AWS
    or transaction_type = 'BALANCE_ADJUSTMENT' -- exceptionnal case
   ) 
  -- DISBURSEMENT action records will "negate" 'INVOICED'
  -- but do not take into account failed disbursements
   AND 
    (not exists
      (select 1 
        from billing_event disbursement
          join billing_event failed_disbursement
           on disbursement.billing_event_id=failed_disbursement.parent_billing_event_id
        where
         disbursement.transaction_type='DISBURSEMENT'
         and failed_disbursement.transaction_type='DISBURSEMENT_FAILURE'
         and targeted.disbursement_billing_event_id=disbursement.billing_event_id
      )
    ) 
;
```

Otra forma de obtener la misma información es ejecutar una consulta como la que se muestra en el siguiente ejemplo para obtener el saldo del vendedor:

```
SELECT sum(amount) FROM billing_event
WHERE
 balance_impacting = 1
;
```

En la siguiente consulta se amplía nuestro ejemplo. Restringe los resultados a las transacciones de 2018 y devuelve más detalles sobre las transacciones.

```
select sum(residual_amount_per_transaction)
from
 (SELECT
    max(billed_invoices.amount) invoiced_amount,
    sum(nvl(disbursed_invoices.amount,0)) disbursed_amount,
    -- Exercise left to the reader:
    -- use transaction_type to distinguish listing fee vs seller-owed money
    -- still pending collection
    max(transaction_type) transaction_type,
    max(billed_invoices.amount) 
      + sum(nvl(disbursed_invoices.amount,0)) residual_amount_per_transaction
  FROM billing_event billed_invoices
    -- find related disbursements
    left join billing_event disbursed_invoices
      on disbursed_invoices.action='DISBURSED'
      and disbursed_invoices.parent_billing_event_id=billed_invoices.billing_event_id
  WHERE
    billed_invoices.invoice_date between '2018-01-01' and '2018-12-31'
    and billed_invoices.transaction_type like 'SELLER_%' -- invoiced on behalf of SELLER
    and billed_invoices.action in ('INVOICED','FORGIVEN')
    -- do not take into account failed disbursements
    AND not exists
      (select 1 from billing_event failed_disbursement
       where disbursed_invoices.disbursement_billing_event_id = failed_disbursement.parent_billing_event_id
      )
   GROUP BY billed_invoices.billing_event_id
);
```

## Ejemplo 7: Saldo del conjunto de facturas
<a name="data-feed-example-query-balance-invoice-set"></a>

Para conocer la suma de un conjunto de facturas, puede ejecutar una consulta como la que se muestra en el siguiente ejemplo.

```
SELECT invoice_id, sum(amount) FROM billing_event targeted
WHERE
  -- invoice_id is only not null for invoiced records AND disbursed records 
  -- linking them to related disbursement -> no need to filter more precisely
  invoice_id in ('XXX','YYY') 
  -- filter out failed disbursements 
  AND not exists
      (select 1 
        from billing_event disbursement
          join billing_event failed_disbursement
           on disbursement.billing_event_id=failed_disbursement.parent_billing_event_id
        where
         disbursement.transaction_type='DISBURSEMENT'
         and failed_disbursement.transaction_type='DISBURSEMENT_FAILURE'
         and targeted.disbursement_billing_event_id=disbursement.billing_event_id
      ) 
  group by invoice_id;
```

# Fuente de datos de uso diario
<a name="data-feed-daily-usage"></a>

Este feed de datos proporciona información detallada sobre el uso diario de tus productos, incluidas las métricas de uso de los clientes, los ingresos estimados y los detalles de los precios. Los datos te ayudan a hacer un seguimiento del uso que hacen los clientes de tus productos y a calcular los ingresos estimados en función de los patrones de uso.

El feed de datos de uso diario se actualiza cada 24 horas.

En la siguiente tabla se muestran y describen los elementos en la fuente de datos.


| Columna | Description (Descripción) | 
| --- | --- | 
| valid\$1from | La primera fecha para la que es válido el valor de la clave principal en relación con los valores de otros campos. | 
| insert\$1date | La fecha en la que se insertó un registro en la fuente de datos. | 
| update\$1date | La fecha en la que se actualizó por última vez el registro. | 
| delete\$1date | La fecha en que se borró temporalmente el registro. | 
| usage\$1feed\$1id | El identificador único del registro de uso. Se trata de un hash salado por vendedor que garantiza la privacidad de los datos y, al mismo tiempo, mantiene la exclusividad del registro. | 
| usage\$1date | La fecha de uso del cliente, sin el componente de hora. La hora se omite porque el uso se agrega para cada día. | 
| product\$1id | El identificador descriptivo del producto. Se puede utilizar para unir los `product_id` campos de las fuentes de datos Account, Billing\$1Event y Offer\$1Product. | 
| agreement\$1id | El identificador único para el acuerdo. Si está presente, siempre comienza con. `agmnt-` En ocasiones, este campo puede ser nulo o no coincidir con las líneas de facturación correspondientes. | 
| end\$1user\$1account\$1id | La cuenta que realmente utilizó el producto, representada por el identificador único global (GUID) de la cuenta del usuario final. Se puede usar para unirse a la fuente de datos de la cuenta. Se trata de un hachís salado por vendedor, no del ID de cuenta de AWS sin procesar. | 
| payer\$1account\$1id | La cuenta que se espera que pague por el uso del producto, representada por el identificador único global (GUID) de la cuenta del pagador. Se puede usar para unirse a la fuente de datos de la cuenta. Se trata de un hachís salado por vendedor, no del ID de cuenta de AWS sin procesar. | 
| region | La AWS región en la que se produjo el uso por parte del comprador. | 
| dimension\$1key | La clave de dimensión configurada por el vendedor al publicar la oferta. | 
| usage\$1unit | Una clasificación de las unidades de uso, que describe el tipo de medición de uso. | 
| usage\$1quantity | El valor de uso del AWS servicio o tipo de uso asociado al registro de facturación. El valor se proporciona con un máximo de 2 decimales. | 
| pricing\$1currency | La divisa de los ingresos estimados. | 
| ingresos\$1estimados\$1en\$1moneda\$1precios | Los ingresos estimados se calculan utilizando las variables y. `usage_rate_per_unit` `usage_quantity` El valor se proporciona con un máximo de 2 decimales. En el caso de las opiniones de los ISV sobre el uso de las ofertas de los distribuidores, este valor debe multiplicarse por el porcentaje de participación en los ingresos. | 
| recipient\$1account\$1id | La cuenta del vendedor que recibe los datos de los ficheros. | 
| offer\$1id | El identificador descriptivo de la oferta. Coincidirá con el offer\$1id del acuerdo de compra cuando esté disponible. Se puede utilizar para unirse a las fuentes de datos de oferta y objetivo de la oferta. Por motivos de coherencia, este campo siempre no es nulo. | 
| usage\$1rate\$1per\$1unit\$1in\$1pricing\$1currency | La tasa de uso por unidad que se puede multiplicar por la para verificar la. `usage_quantity` `estimated_revenue_in_pricing_currency` El valor se proporciona con un máximo de 6 decimales. | 
| descripción del artículo de carga | La descripción completa del elemento de cargo, normalmente con el formato offer\$1term\$1description\$1region\$1dimension\$1description para los cargos basados en el uso. | 

## Ejemplo de fuente de datos de uso diario
<a name="daily-usage-feed-example"></a>

A continuación se muestra un ejemplo del feed de datos de uso diario con columnas clave. Para facilitar la lectura, algunas columnas no se muestran.


| usage\$1date | product\$1id | agreement\$1id | region | dimension\$1key | unidad\$1uso | usage\$1quantity | pricing\$1currency | ingresos\$1estimados\$1en\$1precios\$1monetarios | offer\$1id | tasa de uso por unidad en la divisa de fijación de precios | descripción del artículo de carga | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 15-01-2025 | prod-abcd1234efgh5678 | agmnt-wxyz9876abcd5432 | us-east-1 | USE1\$1InputTokenCount | unidades | 24,00 | USD | 12.00 | oferta-mnop5432qrst7890 | 0.500000 | Uso del software AWS Marketplace \$1 US-East-1 \$1 Millones de tokens de entrada | 
| 15-01-2025 | prod-ijkl9876mnop1234 | agmnt-stuv5432wxyz9876 | us-west-2 | USE1\$1InputTokenCount | unidades | 1000,00 | USD | 5.50 | oferta-abcd9876efgh5432 | 0.005500 | Uso del software AWS Marketplace \$1 US-West-2\$1Llamadas a la API | 

# Fuente de datos de mapeo heredada
<a name="data-feed-legacy-mapping"></a>

Esta fuente de datos muestra cómo el producto IDs y la oferta se IDs relacionan con los identificadores únicos globales heredados (GUIDs). Los antiguos GUIDs se utilizaban en informes antiguos y los nuevos se IDs utilizan en fuentes de datos y en AWS Marketplace APIs.

Esta fuente de datos proporciona información sobre todos los productos que ha creado como vendedor de registro y todos los productos que está autorizado a revender.

La fuente de datos de mapeo heredada se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. 


| Nombre de la columna  | Description (Descripción)  | 
| --- | --- | 
| mapping\$1type | Si se trata del ID de un producto o el ID de una oferta.  | 
| legacy\$1id | El ID heredado de este producto u oferta. | 
| new\$1id | El ID sencillo de este producto u oferta. Este ID se utiliza como clave principal y con todas las acciones de la API actuales.  | 

## Ejemplo de fuente de datos de mapeo heredada
<a name="data-feed-legacy-mapping-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de mapeo heredada. Para facilitar la lectura, no se muestran las columnas del historial de datos. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization).


| mapping\$1type | legacy\$1id  | new\$1id | 
| --- | --- | --- | 
| OFFER | 8a806c74-dbd6-403e-9362-bb08f417ff37 | offer-dacpxznflfwin | 
| PRODUCT | 1368541d-890b-4b6c-9bb9-4a55306ab642 | prod-o4grxfafcxxxy | 
| OFFER | 558d8382-6b3a-4c75-8345-a627b552f5f1 | offer-gszhmle5npzip | 



# Fuente de datos de ofertas
<a name="data-feed-offer"></a>

La oferta de fuente de datos proporciona información sobre todas las ofertas que ha creado como vendedor de registro. Si una sola oferta tiene varias revisiones, todas las revisiones se incluyen en la fuente de datos.

Cuando realiza una revisión de la oferta y los datos de un campo expuesto cambian, se crea un nuevo registro en la fuente de datos para la misma clave principal (`offer_id` más `offer_revision`). Sin embargo, el campo de `valid_from` tiene un valor diferente. Para obtener más información acerca de las columnas del historial de fuentes de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization).

La fuente de datos de la oferta se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. 


| Nombre de la columna  | Description (Descripción)  | 
| --- | --- | 
| offer\$1id | El identificador sencillo de la oferta.Se puede usar para unirse al campo `offer_id` de la fuente de datos `Offer_Product`. | 
| offer\$1revision | La revisión de la oferta. Este campo y el campo offer\$1id se combinan para formar la clave principal.Con `offer_id`, se puede utilizar para unirse a los campos `offer_id` y `offer_revision` de la fuente de datos `Target_Offer`. | 
| name | El nombre definido por el vendedor de la oferta.  | 
| expiration\$1date | La fecha y la hora en que caduca la oferta. | 
| opportunity\$1name | Cualquier dato de oportunidad enlazado con esta oferta. Si la oferta está vinculada a una oportunidad de AWS , este campo se rellena. | 
| opportunity\$1description | Cualquier información descriptiva enlazada con esta oferta. Si la oferta está vinculada a una oportunidad de AWS , este campo se rellena. | 
| seller\$1account\$1id | Identificador único de carácter general (GUID) de la cuenta del vendedor. Se puede usar para unirse al campo de account\$1id de la fuente de datos de la cuenta. | 
| opportunity\$1id | El identificador de la oportunidad solo se rellena si un distribuidor vende su producto. Todas las ofertas creadas por distintos socios del canal (o vendedores) tienen el mismo opportunity\$1id si el producto es el mismo.  | 
| id\$1de\$1cuenta\$1destinatario | La cuenta del vendedor que recibe los datos de los ficheros. Se puede usar para unirse a la fuente de datos `Account` en el campo `account_id`. | 

## Ejemplo de fuente de datos de oferta
<a name="data-feed-offer-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de la oferta. Para facilitar la lectura, no se muestran las columnas del historial de datos. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization).


| offer\$1id  | offer\$1revision | name | expiration\$1date | opportunity\$1name | opportunity\$1description | seller\$1account\$1id | opportunity\$1id | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| offer-dacpxznflfwin | 1 | Oferta del programa el Contrato de empresa | 9999-01-01T00:00:00Z |  |  |  |  | 
| offer-gszhmle5npzip | 1 | Oferta privada creada por el vendedor | 2020-10-31T00:00:00Z |  |  |  |  | 
| offer-hmzhyle8nphlp | 1 | Oferta del programa el Contrato de empresa | 9999-01-01T00:00:00Z |  |  |  |  | 

# Fuente de datos de productos de la oferta
<a name="data-feed-offer-product"></a>

Una oferta puede tener varios productos y un producto se puede incluir en diferentes ofertas. Esta fuente de datos muestra información sobre las relaciones entre ofertas y productos. 

Esta fuente de datos proporciona información sobre todas las ofertas de productos que ha creado como vendedor de registro.

Cuando agrega o elimina un producto de una oferta, crea una revisión de la oferta. 

La fuente de datos de productos de la oferta se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. Para obtener información sobre las columnas del historial de fuentes de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization).


| Nombre de la columna  | Descripción  | 
| --- | --- | 
| offer\$1id | El identificador sencillo de esta oferta.Se puede usar para unirse al campo `offer_id` de la fuente de datos `Offer`. | 
| offer\$1revision | Se combina con el campo offer\$1id para formar la clave externa de la revisión de la oferta. | 
| product\$1id | El identificador sencillo del producto, esta es la clave externa del producto que esta oferta expone. Se puede usar para unirse al campo `product_id` de la fuente de datos `Product`. | 

## Ejemplo de fuente de datos de productos de la oferta
<a name="data-feed-offer-product-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de productos de la oferta. 


| offer\$1id  | offer\$1revision | product\$1id | 
| --- | --- | --- | 
| offer-dacpxznflfwin | 10 | prod-o4grxfafcxxxx | 
| offer-gszhmle5npzip | 24 | prod-o4grxfafcxxxy | 

# Ofrecer fuente de datos de destino
<a name="data-feed-offer-target"></a>

Esta fuente de datos muestra los destinos de la revisión de una oferta para todas las ofertas que ha creado como vendedor de registro. Si una sola oferta tiene varias revisiones, todas las revisiones se incluyen en la fuente de datos.

Cuando realiza una revisión de la oferta y los datos de un campo expuesto cambian, se crea un nuevo registro en la fuente de datos para la misma clave principal (`offer_id` más `offer_revision`), pero con un valor diferente para el campo `valid_from`. 

La fuente de datos de destino de la oferta se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos.


| Nombre de la columna  | Descripción  | 
| --- | --- | 
| offer\$1target\$1id | La clave principal de la fuente. | 
| offer\$1id\$1offer\$1revision | El identificador y la revisión de la oferta. Estas dos columnas hacen referencia a la oferta a la que se refiere este destino.Se puede utilizar para unirse a los campos `offer_id` y `offer_revision` de la fuente de datos `Target`. | 
| target\$1type | Indica si el destinatario de la oferta es BuyerAccounts, lo que indica una oferta privada o ParticipatingPrograms. | 
| polarity | Indica si se pretende que la oferta se realice en `target_type`. Los valores aceptables son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-offer-target.html)  | 
| valor | Una cadena que representa el destino: un ID de cuenta de AWS o un programa que se puede utilizar con una oferta. Por ejemplo, [Contrato estándar para AWS Marketplace (SCMP)](standardized-license-terms.md#standard-contracts) o [AWS Marketplace Programa de demostración de campo (FDP)](field-demonstration-program.md). | 

## Ejemplo de fuente de datos de destino de oferta
<a name="data-feed-offer-target-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de destino de la oferta. Para facilitar la lectura, no se muestran las columnas del historial de datos. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization). 


| offer\$1target\$1id  | offer\$1id  | offer\$1revision | target\$1type | polarity | valor | 
| --- | --- | --- | --- | --- | --- | 
| 925ddc73f6a373b7d5544ea3210610803b600 | offer-dacpxznflfwin | 1 | ParticipatingPrograms | PositiveTargeting | EnterpriseContract | 
| 471ff22ae3165278f1fb960d3e14517bcd601 | offer-gszhmle5npzip | 1 | ParticipatingPrograms | PositiveTargeting | FieldDemonstration | 
| 511ff22adfj65278f1fb960d3e14517bcd6e602 | offer-gszhmle5npzip | 1 | ParticipatingPrograms  | PositiveTargeting | EnterpriseContract | 

# Fuente de datos del producto
<a name="data-feed-product"></a>

Esta fuente de datos proporciona información sobre todos los productos que ha creado como vendedor de registro y todos los productos que está autorizado a revender.

Los datos del producto son mutables. Esto significa que cuando cambia el valor de uno de los campos siguientes, se crea un nuevo registro en la fuente de datos con un valor diferente para el campo `valid_from`. Para obtener más información acerca de las columnas del historial de fuentes de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization). 

La fuente de datos del producto se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. 


| Nombre de la columna  | Descripción  | 
| --- | --- | 
| product\$1id | El identificador sencillo del producto.Se puede utilizar para unirse a los campos `product_id` de las fuentes de datos `Account`, `Billing_Event` y `Offer_Product`. | 
| manufacturer\$1account\$1id | El identificador del propietario del producto. Esta es una clave externa para la fuente de datos de la [cuenta](data-feed-account.md).Se puede usar para unirse al campo `account_id` de la fuente de datos `Account`. | 
| product\$1code | El código de producto de concesión de derechos existente utilizado para medir el producto. Este valor también se utiliza para unir datos con un informe o para hacer referencia a lo que se proporciona en el Servicio de medición de AWS Marketplace. | 
| título | El título del producto.  | 

## Ejemplo de fuente de datos de productos
<a name="data-feed-product-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de destino de la oferta. Para facilitar la lectura, no se muestran las columnas del historial de datos. Para obtener información sobre los campos del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization). 


| product\$1id  | manufacturer\$1account\$1id  | product\$1code | título | 
| --- | --- | --- | --- | 
| prod-o4grxfafcxxxx | 555568000000 | product\$1code\$11 | Product1 | 
| prod-t3grxfafcxxxy | 444457000000 | product\$1code\$12 | Product2 | 
| prod-x8faxxfafcxxy | 666678000000 | product\$1code\$13 | Product3 | 

# Fuente de datos de elementos de impuestos
<a name="data-feed-tax-item"></a>

Esta fuente de datos proporciona información sobre los cálculos de impuestos correspondientes a una factura de cliente.

Puede haber varias líneas de pedido (`line_item_id`) para un producto determinado (`product_id`) de una factura de cliente determinada (`invoice_id`), una o más para cada jurisdicción fiscal. Esto ocurre, por ejemplo, con las facturas basadas en el uso para los clientes que utilizan diferentes normas AWS regionales de distintas AWS entidades (por ejemplo, EE. UU. e Irlanda). Para obtener más información sobre dónde se AWS recaudan los impuestos sobre las ventas, el IVA o el GST de sus ventas y los remite a las autoridades fiscales locales, en nombre de AWS, Inc., consulte la Ayuda [tributaria de Amazon Web Service](https://aws.amazon.com/tax-help/).

La fuente de datos de elementos de impuestos se actualiza cada 24 horas, por lo que los nuevos datos están disponibles diariamente.

Los datos de elementos de impuestos son inmutables. 

En la tabla siguiente se incluyen los nombres y descripciones de las columnas de la fuente de datos. Para obtener información sobre las columnas del historial de datos, consulte [Creación de un historial de los datos](data-feed-details.md#data-feed-historization). 


| Nombre de la columna  | Description (Descripción)  | 
| --- | --- | 
| tax\$1item\$1id | Identificador único de un registro de elemento de impuestos. | 
| invoice\$1id | El identificador de la AWS factura. Puede utilizar este valor con el valor de product\$1id para buscar eventos de facturación de impuestos relacionados. | 
| line\$1item\$1id | Identificador único de una partida de factura de cliente. Las transacciones de reembolso tienen el mismo ID de partida que sus transacciones de impuestos avanzadas. | 
| customer\$1bill\$1id | Identificador único de la factura del cliente. Los compradores pueden compartir este identificador con el vendedor para ayudar a identificar y resolver las preguntas de cálculo de impuestos.  | 
| tax\$1liable\$1party | `AWS` o `Seller`. Si el vendedor es la parte sujeta a impuestos, se recaudan los impuestos. Si AWS es la parte sujeta a impuestos, el impuesto sobre las ventas es recaudado y remitido por AWS. Para obtener más información, consulte [Vendedores de AWS Marketplace y recaudación de impuestos](https://aws.amazon.com/tax-help/marketplace). Si no se recaudan impuestos, aquí no se muestra ningún valor. El vendedor debe determinar si se han recaudado algunos impuestos para cada factura, ya que el vendedor es responsable de la recaudación de impuestos.  | 
| transaction\$1type\$1code | El tipo de transacción. Los valores posibles son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-tax-item.html) Las transacciones de reembolso tienen el mismo ID de partida que sus transacciones avanzadas originales. | 
| product\$1id | Una clave externa para el producto.Se puede usar para unirse a la fuente de datos `Product` en el campo `product_id`. | 
| product\$1tax\$1code | Código estándar que identifica las propiedades fiscales de un producto. Los vendedores eligen las propiedades al crear o modificar el producto. | 
| invoice\$1date | La fecha en que se creó la factura.  | 
| taxed\$1customer\$1account\$1id | Una clave externa de la entidad de cuenta que está gravada.Se puede usar para unirse a la fuente de datos `Account` en el campo `account_id`. | 
| taxed\$1customer\$1country | El código de país ISO 3166 alpha 2 de la dirección utilizada para el cálculo de impuestos.  | 
| taxed\$1customer\$1state\$1or\$1region | Estado, región o provincia que se utiliza para el cálculo de impuestos. | 
| taxed\$1customer\$1city | La ciudad utilizada para el cálculo de impuestos. | 
| taxed\$1customer\$1postal\$1code | El código postal utilizado para el cálculo de impuestos. | 
| tax\$1location\$1code\$1taxed\$1jurisdiction | Geocodificación Vertex asociada a la ubicación de los impuestos.  | 
| tax\$1type\$1code | El tipo de impuesto que se aplica a la transacción. Los valores posibles son None, Sales y SellerUse. | 
| jurisdiction\$1level | El nivel jurisdiccional de la dirección que se utiliza para la ubicación fiscal. Los valores posibles son State, County, City y District. | 
| taxed\$1jurisdiction | El nombre de la jurisdicción fiscal.  | 
| display\$1price\$1taxability\$1type | Si el precio que ven los compradores incluye o no los impuestos. Todas AWS Marketplace las ofertas no incluyen impuestos.  | 
| taxable\$1amount | El importe de la transacción que es gravable, en este nivel jurisdiccional. | 
| nontaxable\$1amount | El importe de la transacción que no es gravable, en este nivel jurisdiccional. | 
| tax\$1jurisdiction\$1rate | El tipo impositivo que se aplica en este nivel jurisdiccional. | 
| tax\$1amount | El importe del impuesto que se cobra en este nivel jurisdiccional. | 
| tax\$1currency | El código de divisa ISO 4217 alpha 3 para los importes anteriores. | 
| tax\$1calculation\$1reason\$1code | Si la transacción está sujeta o no a gravamen, está exenta o si es de tipo cero, por nivel jurisdiccional. | 
| date\$1used\$1for\$1tax\$1calculation | La fecha que se utiliza para el cálculo de impuestos en la transacción. | 
| customer\$1exemption\$1certificate\$1id | El ID de certificado de exención. | 
| customer\$1exemption\$1certificate\$1id\$1domain | La ubicación donde se almacena el certificado en los sistemas de Amazon.  | 
| customer\$1exemption\$1certificate\$1level | El nivel jurisdiccional que presentó la exención. | 
| customer\$1exemption\$1code | El código que especifica la exención; por ejemplo, RESALE. | 
| customer\$1exemption\$1domain | Es el sistema de Amazon que se utiliza para capturar la información de exención del cliente, si está disponible. | 
| transaction\$1reference\$1id | Un identificador que le permite hacer referencias cruzadas a datos de los siguientes informes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/data-feed-tax-item.html)  | 
| legal\$1amount | El importe del impuesto en la moneda legal del impuesto que hay que pagar. | 
| legal\$1currency | La moneda legal para el impuesto que hay que pagar. | 
| tax\$1invoice\$1id | El identificador de la factura fiscal de la línea tributaria en los casos de doble facturación. Este campo será nulo en los escenarios de facturación unificada. | 
| tax\$1invoice\$1date | La fecha de la factura fiscal. Este campo será nulo en los escenarios de facturación unificada. | 

**nota**  
A partir del 5 de agosto de 2021, los impuestos sobre AWS Marketplace las ventas de Marketplace Facilitator internacionales se anotarán en el feed de datos de las partidas tributarias. Esto significa que, a partir del 5 de agosto de 2021, se espera que todos los AWS\$1TAX\$1SHARE registros de SELLER\$1TAX\$1SHARE del feed de datos del evento de facturación tengan un registro correspondiente en el feed de datos de la partida fiscal.

## Ejemplo de fuente de datos de elementos de impuestos
<a name="data-feed-tax-item-sample-data"></a>

A continuación, se muestra un ejemplo de la fuente de datos de elementos de impuestos. En la fuente de datos, esta información se presenta en una sola tabla. Para facilitar la lectura, los datos se muestran aquí en varias tablas y no aparecen todas las columnas. 


| tax\$1item\$1id | invoice\$1id | line\$1item\$1id | customer\$1bill\$1id | 
| --- | --- | --- | --- | 
| 6p2ni6tu041xagvhbyanbgxl3xameha16txjoav\$10001 | 781216640 | 71000000000000000000 | 2210000000000000000 | 
| 6p2ni6tu041xagvhbyanbgxl3xameha16txjoav\$10002 | 781216640 | 53000000000000000000 | 2210000000000000000 | 
| flr4jobxjzww8czdsrq4noue2uxd56j39wxw0k7\$10001 | 250816266 | 76400000000000000000 | 5720000000000000000 | 
| gfkjjobxjzw56jgkrsrqgjtk52uxd56j39wgj567d\$10002 | 280336288 | 76400000000000000000 | 5724390000000000000 | 
| wwk1qpvb8ran3geiw8e3mp6dgs2qj7wpkuwhgk1\$10001 | 451431024 | 99300000000000000000 | 1230000000000000000 | 
| wwk1qpvb8ran3geiw8e3mp6dgs2qj7wpkuwhgk1\$10002 | 451431024 | 99300000000000000000 | 3120000000000000000 | 
| fnohdid8kwgqq9lvii2k30spn3ftgwihbe8h75x\$10001 | 229987654 | 92100000000000000000 | 6390000000000000000 | 




| tax\$1liable\$1party | transaction\$1type\$1code | product\$1id | product\$1tax\$1code | invoice\$1date | 
| --- | --- | --- | --- | --- | 
| Vendedor | AWS | prod-o4grxfafcxxxx | AWSMP\$1SOFTWARE\$1RA | 2018-12-31T00:00:00Z | 
| Vendedor | AWS | prod-o4grxfafcxxxx | AWSMP\$1SOFTWARE\$1RA | 2018-12-31T00:00:00Z | 
| Vendedor | AWS | prod-t3grxfafcxxxy | AWS\$1REMOTE\$1ACCESS\$1SOFTWARE | 2018-08-31T00:00:00Z | 
| Vendedor | REFUND | prod-t3grxfafcxxxy | AWS\$1REMOTE\$1ACCESS\$1SOFTWARE | 2018-08-31T00:00:00Z | 
| Vendedor | AWS | prod-x8faxxfafcxxy | AWS\$1REMOTE\$1ACCESS\$1SOFTWARE | 2018-08-31T00:00:00Z | 
| Vendedor | TAXONLYREFUND | prod-x8faxxfafcxxy | AWS\$1REMOTE\$1ACCESS\$1SOFTWARE | 2018-05-31T00:00:00Z | 
| AWS | AWS | prod-wghj8xfafrhgj | AWS\$1REMOTE\$1ACCESS\$1SOFTWARE | 2019-07-31T00:00:00Z | 




| taxed\$1customer\$1account\$1id | taxed\$1customer\$1country | taxed\$1customer\$1state\$1or\$1region | taxed\$1customer\$1city | taxed\$1customer\$1postal\$1code | 
| --- | --- | --- | --- | --- | 
| VIeGA2T9J3MUXiOH9WC8LSND XRiOCm5 XXCg GCGUree | EE. UU. | GA | MILTON | 48573-4839 | 
| VIeGA2T9J3mUXiOH9WC8LSNd xRiOCm5 XXCg GCGUree | EE. UU. | GA | MILTON | 48573-4839 | 
| 7nyo5jw PLyX81vx9ji04 o1ff8biqi88w8 TRo eEwTur | EE. UU. | NC | DURHAM | 27517-4834 | 
| 7nyo5jw TRo eEwTur PLyx81vx9ji04 o1ff8biqi88w8 | EE. UU. | NC | DURHAM | 27517-4834 | 
| 7nyo5jw TRo eEwTur PLyx81vx9ji04 o1ff8biqi88w8 | EE. UU. | TX | NOT APPLICABLE | 75844-1235 | 
| 7nyo5jw TRo eEwTur PLyx81vx9ji04 o1ff8biqi88w8 | EE. UU. | TX | HOUSTON | 75844-1235 | 
| 192a0421313e41f069b52962ed7babf716291b688 | EE. UU. | CT | NEW HAVEN | 06002-2948 | 




| tax\$1location\$1code\$1taxed\$1jurisdiction | tax\$1type\$1code | jurisdiction\$1level | taxed\$1jurisdiction | display\$1price\$1taxability\$1type | taxable\$1amount | nontaxable\$1amount | 
| --- | --- | --- | --- | --- | --- | --- | 
| 460473664 | Ventas | Estado | GA | Exclusivo | 100 | 0 | 
| 66301164 | Ventas | County | FULTON | Exclusivo | 0 | 100 | 
| 692938178 | SellerUse | Estado | NC | Exclusivo | 58.1 | 523.8 | 
| 692938178 | SellerUse | Estado | NC | Exclusivo | -58.1 | 523.8 | 
| 356794387 | Ventas | Estado | TX | Exclusivo | 1105.14 | 0 | 
| 528887443 | Ventas | Ciudad | HOUSTON | Exclusivo | -36 | 0 | 
| 171248162 | Ventas | Estado | CT | Exclusivo | 0 | 114.55 | 




| tax\$1jurisdication\$1rate | tax\$1amount | tax\$1currency | tax\$1calculation\$1reason\$1code | date\$1used\$1for\$1tax\$1calculation | 
| --- | --- | --- | --- | --- | 
| 0.206 | 20.6 | USD | Gravable | 2018-10-31T00:00:00Z | 
| 0 | 0 | USD | NonTaxable | 2018-10-31T00:00:00Z | 
| 0.1 | 5.8 | USD | Gravable | 2018-07-31T00:00:00Z | 
| 0.1 | -5.8 | USD | Gravable | 2018-07-31T00:00:00Z | 
| 0.06 | 66.3 | USD | Gravable | 2018-07-31T00:00:00Z | 
| 0.01 | -0.36 | USD | NonTaxable | 2018-07-31T00:00:00Z | 
| 0 | 0 | USD | Exento | 2019-06-30T00:00:00Z | 



# Informes complementarios
<a name="supplementary-reports"></a>

AWS Marketplace entrega informes complementarios a través de las [Fuentes de datos de entrega de vendedores en AWS Marketplace](data-feed-service.md) cuentas Amazon S3 propiedad del vendedor que están conectadas al ID de cuenta de AWS Marketplace vendedor asociado a los AWS Marketplace listados de vendedores. Para obtener más información, consulte [Creación de un bucket de destino en la Guía del usuario de Amazon Simple Storage Service](https://docs.aws.amazon.com/marketplace/latest/userguide/data-feed-service.html#data-feed-accessing). 

Los informes complementarios se publican todos los días a las 16:00 UTC si hubo nuevos suscriptores el día anterior. Estos informes cubren el día anterior, desde las 13:59 UTC hasta las 16:01 UTC del día siguiente.

## Informe detallado del acuerdo
<a name="agreement-details-report"></a>

El informe de detalles del acuerdo le ayuda a brindar asistencia a los clientes que están disfrutando de una prueba gratuita de software como servicio (SaaS). El informe incluye detalles del acuerdo, como el nombre del suscriptor, el ID del suscriptor, el ID de la oferta, el inicio y la fecha de finalización del acuerdo. 

Solo recibe este informe si la información pertinente está disponible. Si no recibe este informe cuando cree que debería haberlo recibido, póngase en contacto con el equipo de [operaciones de vendedores de AWS Marketplace](https://aws.amazon.com/marketplace/management/contact-us/).

Puedes acceder a este informe a través del bucket de Amazon S3 asociado al ID de la cuenta de AWS Marketplace vendedor.

En la siguiente tabla se muestran los nombres y descripciones de las columnas del informe de detalles del acuerdo.


**Datos del informe de prueba gratuita de contratos de SaaS**  

| Name | Description (Descripción) | 
| --- | --- | 
| vendor\$1display\$1name | El nombre del proveedor que vendió el producto. | 
| vendor\$1aws\$1account\$1id | La identificación asociada al proveedor que vendió el producto. | 
| subscriber\$1aws\$1account\$1id | La identificación asociada al producto Cuenta de AWS que está suscrito. | 
| customer\$1id | El identificador único del producto de software. | 
| product\$1title | El título del producto. | 
| offer\$1id | El identificador de la oferta que firmó el comprador. | 
| offer\$1visibility | Indicación de si la oferta es una oferta de contrato público, privado o empresarial. | 
| reseller\$1name | El nombre del distribuidor del socio del canal. | 
| reseller\$1aws\$1account\$1id | El identificador único del distribuidor del socio del canal. | 
| agreement\$1id | Una referencia de fuente de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| agreement\$1acceptance\$1date | Fecha en que se aceptó el acuerdo. | 
| agreement\$1start\$1date | La fecha de inicio del acuerdo. | 
| agreement\$1end\$1date | La fecha de finalización del acuerdo. Para suscripciones metered/pay y productos de uso inmediato, se establece en el 1 de enero de 9999. | 
| is\$1free\$1trial\$1offer | Un indicador que señala si la oferta o el acuerdo es una oferta de prueba gratuita. | 
| is\$1upgraded\$1after\$1free\$1trial | Un indicador que señala si el acuerdo se ha convertido en un contrato de pago. | 
| total\$1contract\$1value | El valor total del contrato. | 

# Paneles de vendedores
<a name="dashboards"></a>

AWS Marketplace proporciona cuadros de mando impulsados por [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) con tablas, gráficos e información que le ayudan a acceder a los datos financieros, de ventas y de marketing y a analizarlos. Los paneles para vendedores incluyen:

**[Paneles de control para operaciones financieras](finance-operations.md)**
+ [Panel de ingresos facturados](billed-revenue-dashboard.md): proporciona información sobre los ingresos facturados para fines de contabilidad y otros informes financieros.
+ [Panel de abonos y pagos](collections-disbursement-dashboard.md)— Proporciona información sobre los fondos AWS recaudados y desembolsados en sus cuentas bancarias desde el desembolso anterior.
+ [Panel de impuestos](taxation-dashboard.md): proporciona información sobre los impuestos de las transacciones de los vendedores.

**[Paneles de control para operaciones de ventas](sales-operations.md)**
+ [Panel de acuerdos y renovaciones](agreements-renewals-dashboard.md): proporciona información sobre acuerdos y renovaciones en un plazo de 24 horas a partir de la firma de un acuerdo en AWS Marketplace.
+ [Panel de uso](usage-dashboard.md): proporciona visualizaciones y datos detallados a los clientes que utilizan SaaS y productos basados en el uso de servidores.
+ [Paneles de control de marketing](marketing-dashboards.md): proporciona varios paneles para ayudarle a realizar un seguimiento de sus datos de marketing.

**[Paneles de control de marketing](marketing-dashboards.md)**
+ [Panel de acuerdos con clientes](customer-agreements-dashboard.md): proporciona datos sobre los acuerdos y los clientes que se suscriben a sus productos.
+ [Panel de rendimiento de publicaciones](listing-performance-dashboard.md)— Proporciona datos sobre el tráfico y el comportamiento de los usuarios en tus anuncios. AWS Marketplace 
+ [Búsqueda del panel de rendimiento](search-performance-dashboard.md)— Proporciona datos sobre las palabras clave que se aplican a los AWS Marketplace anuncios.

Los paneles están disponibles para AWS Marketplace los vendedores que dispongan de los permisos adecuados.

## Acceso a paneles
<a name="reports-accessing"></a>

De forma predeterminada, los administradores AWS Marketplace del sistema de las cuentas de vendedor tienen acceso a todos los paneles de control de la pestaña Estadísticas del. AWS Marketplace Management Portal Los administradores del sistema pueden crear una política AWS Identity and Access Management (IAM) para proporcionar acceso a paneles específicos a otros usuarios de la empresa vendedora.

**nota**  
En septiembre de 2023, dejaremos de permitir el acceso a los paneles de control de vendedores mediante permisos de IAM anteriores. Actualice sus permisos de IAM con el nuevo formato de nombre de recurso de Amazon (ARN) en los ejemplos de código que aparecen a continuación.

Para obtener información acerca de la creación de políticas, consulte [Crear políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html).

### Política de paneles
<a name="dashboard-policy"></a>

Use una de las siguientes políticas para proporcionar acceso a algunos o a todos los paneles.

El siguiente ejemplo proporciona acceso a los AWS Marketplace recursos actuales y futuros, incluidos los paneles y los informes. Utiliza todas las fuentes de datos actuales y futuras:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "aws-marketplace:GetSellerDashboard"
            ],
            "Resource": [
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/*"
            ]
        }
    ]
}
```

------

También puede proporcionar acceso a uno o más paneles si incluye sus paneles. ARNs En el siguiente ejemplo se muestra cómo proporcionar el acceso a todos los paneles:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "aws-marketplace:GetSellerDashboard"
            ],
            "Resource": [
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/BillingEvent_V1/Dashboard/BilledRevenue_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/BillingEvent_V1/Dashboard/CollectionsAndDisbursements_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/Agreement_V1/Dashboard/AgreementsAndRenewals_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/Usage_V1/Dashboard/Usage_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/TaxItem_V1/Dashboard/Tax_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/Marketing_V1/Dashboard/CustomerAgreements_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/Marketing_V1/Dashboard/ListingPerformance_V1",
                "arn:aws:aws-marketplace::111122223333:AWSMarketplace/ReportingData/Marketing_V1/Dashboard/SearchPerformance_V1"
            ]
        }
    ]
}
```

------

Para eliminar el acceso a un panel, elimínelo de la sección `Resource` de la política.

**nota**  
*Para obtener información sobre la creación de políticas AWS Identity and Access Management (de IAM), consulte [Creación de políticas de IAM en la AWS Identity and Access Management Guía](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) del usuario.*

# Paneles de control para operaciones financieras
<a name="finance-operations"></a>

AWS Marketplace proporciona varios paneles para ayudarle a realizar un seguimiento de sus datos financieros.

**Topics**
+ [Panel de ingresos facturados](billed-revenue-dashboard.md)
+ [Panel de abonos y pagos](collections-disbursement-dashboard.md)
+ [Panel de impuestos](taxation-dashboard.md)

# Panel de ingresos facturados
<a name="billed-revenue-dashboard"></a>

El panel de ingresos facturados proporciona información sobre todas las ventas facturadas en AWS Marketplace. Se espera que este informe ahorre tiempo y está disponible aproximadamente 45 días antes que el anterior [informe de ingresos facturados mensuales](https://docs.aws.amazon.com/marketplace/latest/userguide/monthly-billed-revenue-report.html). El informe anterior se publica el día 15 de cada mes, lo que retrasa la visibilidad de las facturas del mes anterior.

Para abrir este panel, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) seleccione **Conocimientos**, **Operaciones financieras** y, a continuación, elija la pestaña **Ingresos facturados**.

**Topics**
+ [Actualizar la frecuencia del panel de ingresos facturados](#publication-schedule)
+ [Sección 1: Controles](#billed-revenue-dashboard-controls)
+ [Sección 2: filtros](#section-2-invoice-date-range)
+ [Sección 3: métricas clave](#section-3-metrics)
+ [Sección 4: Tendencias](#section-3-metrics)
+ [Sección 5: Desgloses](#section-4-breakdowns)
+ [Sección 6: Datos detallados](#section-5-new-product-subscribers)

## Actualizar la frecuencia del panel de ingresos facturados
<a name="publication-schedule"></a>

Los paneles se actualizan a diario a medianoche (hora UTC). Si se crea una factura el 10 de mayo *antes de* medianoche (hora UTC), la actualización del 11 de mayo mostrará la factura. Si se crea una factura el 10 de mayo *después de* medianoche (hora UTC), la actualización del 12 de mayo mostrará la factura. Si los últimos datos de facturación o abonos recibidos de los sistemas anteriores se retrasan, es posible que los últimos datos se reflejen en los paneles de control con un retraso de 1 a 2 días.

Si no ve la factura de un cliente esperado, utilice el siguiente procedimiento antes de ponerse en contacto con su contacto de desarrollo AWS Marketplace empresarial.

**Para solucionar problemas de facturas de clientes que no aparecen en el panel de ingresos facturados**

1. Comprueba que el cliente ha aceptado la oferta mediante una o varias de las siguientes herramientas:
   + [Notificación de AWS Marketplace eventos](https://docs.aws.amazon.com/marketplace/latest/userguide/notifications.html)
   + [AWS Marketplace Management Portal pestaña de acuerdos](https://docs.aws.amazon.com/marketplace/latest/userguide/private-offers-upgrades-and-renewals.html#private-offers-upgrades-and-renewals-process)

1. (Para ofertas privadas) Tras confirmar que el cliente ha aceptado la oferta, revise el calendario de facturas y los importes de la oferta:
   + Para ver ofertas privadas, consulta la pestaña AWS Marketplace Management Portal **Ofertas**.
   + Para ver las ofertas privadas de los AWS Marketplace Management Portal **socios de canal, consulta la pestaña Socios** para ver un calendario de pagos personalizado dentro de la oportunidad de asociación.

1. Considere si la transacción utiliza un [modelo de precios por uso](https://docs.aws.amazon.com/marketplace/latest/userguide/pricing.html#usage-pricing), en el que a los clientes se les factura el segundo y tercer día de cada mes por el uso del mes anterior.

## Sección 1: Controles
<a name="billed-revenue-dashboard-controls"></a>

Esta sección del panel proporciona filtros para ajustar los datos del panel de ingresos facturados. Por ejemplo, puedes seleccionar un filtro en un campo de [las notificaciones de AWS Marketplace eventos para](https://docs.aws.amazon.com/marketplace/latest/userguide/notifications.html) confirmar la facturación de un ID de cuenta de cliente específico, el nombre de la empresa suscriptora o el ID de la oferta. También puede agregar un filtro a un análisis, como un filtro en el intervalo de fechas que desee incluir en cualquier elemento visual. Los filtros seleccionados en los controles actualizan los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados.

Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario*.

### Descripción de los controles
<a name="control-descriptions"></a>


| Nombre del control | Description (Descripción) | 
| --- | --- | 
|  Cuenta de AWS ID de suscriptor | El ID de cuenta a la que está suscrito el producto. | 
| Nombre de la empresa del suscriptor  | El nombre de cuenta a la que está suscrito el producto. | 
| Título del producto | El título del producto.  | 
| ID de oferta | El identificador de la oferta que firmó el comprador. | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| AWS vendedor registrado | Un identificador de la entidad empresarial que facilitó la transacción. Los valores posibles son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/billed-revenue-dashboard.html) | 
| ID del pagador Cuenta de AWS  | El ID de la cuenta en la que se facturan los cargos. | 
| Nombre de la empresa del pagador | El nombre de la empresa de la cuenta en la que se facturan los cargos. | 
| Empresa del distribuidor |  El nombre de la empresa de la cuenta del distribuidor autorizada a vender un producto de un fabricante de software.  | 
| ID de distribuidor Cuenta de AWS  | El ID de la cuenta que compró un producto o servicio al por mayor a un ISV para revenderlo a un cliente. | 
| ID de autorización de reventa | El identificador único de una oportunidad registrada. | 
| Nombre de la autorización de reventa | El nombre único de una oportunidad registrada. | 
| País del suscriptor | El código de país de dos caracteres asociado a la cuenta a la que está suscrito el producto. | 
| Estado o región del suscriptor | El estado o la región de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| ID de referencia de la transacción | Un identificador único para la transacción que le ayuda a correlacionar las transacciones entre los informes AWS Marketplace anteriores. | 

## Sección 2: filtros
<a name="section-2-invoice-date-range"></a>

Esta sección del panel proporciona filtros para ajustar los registros en función de la divisa de la oferta y del intervalo de fechas de la factura. Puede usar el rango de fechas de la factura para seleccionar si la fecha de facturación es anterior o posterior a una fecha específica o si está dentro de un intervalo de fechas. Los filtros seleccionados actualizan los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados. El intervalo de fechas de facturación predeterminado está configurado para extraer datos de los últimos seis meses.

## Sección 3: métricas clave
<a name="section-3-metrics"></a>

Esta sección del panel muestra un indicador clave de rendimiento (KPI) para visualizar una comparación de las principales cifras de ingresos facturados con los filtros seleccionados. Se muestra un KPI para los ingresos brutos, los reembolsos brutos, las tarifas de publicación, los costos al por mayor (si corresponde) y los ingresos netos del vendedor en el intervalo de fechas de facturación y en la divisa especificados. Puede actualizar los criterios de filtro para ver las métricas de distintas divisas y fechas.

## Sección 4: Tendencias
<a name="section-3-metrics"></a>

Esta sección del panel proporciona las tendencias de los ingresos facturados para un intervalo de fechas específico. Puede ver las tendencias mediante una agregación de fechas específica (por ejemplo, día month-over-month quarter-over-quarter, o) year-over-year para obtener información sobre los ingresos facturados. La información sobre las tendencias de los ingresos facturados está disponible a nivel agregado o por tipo de visibilidad de la oferta: 
+ **Tendencias de facturación**: proporciona un resumen de los ingresos brutos, los ingresos netos del vendedor, los costes al por mayor (si procede) y los reembolsos a lo largo del tiempo para el intervalo de fechas seleccionado en el filtro de agregación de fechas. 
+ **Tendencia de facturación por visibilidad de la oferta**: proporciona un resumen del número de ofertas y los ingresos brutos por tipo de visibilidad de la oferta a lo largo del tiempo, en [ofertas privadas](https://docs.aws.amazon.com/marketplace/latest/userguide/private-offers-overview.html), ofertas públicas (o de autoservicio) y programas empresariales.

## Sección 5: Desgloses
<a name="section-4-breakdowns"></a>

Esta sección del panel de control le proporciona las principales métricas sobre su empresa en relación con los suscriptores, el vendedor registrado, la ubicación geográfica de los suscriptores y el título del producto. Puede filtrar por ingresos brutos, número de pagadores, número de suscriptores, reembolso bruto, tarifa de publicación, ingresos netos del vendedor y coste al por mayor.

## Sección 6: Datos detallados
<a name="section-5-new-product-subscribers"></a>

En esta sección del panel se muestran todas las ventas facturadas, incluido el importe total que se AWS factura a los clientes por el uso de tus productos por hora, año o mes. AWS factura a los clientes utilizando las tres frecuencias siguientes:
+ Fecha de aceptación de la suscripción (facturación por adelantado)
+ Calendario de pagos personalizado (ofertas privadas creadas por un programador de pagos flexible)
+ Uso medido el segundo y tercer día del mes para el uso del mes anterior

**nota**  
Es posible que las facturas creadas antes del 1 de abril de 2021 no tengan un identificador de acuerdo, un identificador de oferta, un identificador de suscriptor Cuenta de AWS o el nombre de la empresa suscriptora asociados.

Los cargos a los clientes se muestran en esta sección de datos detallados 24 horas después de que se haya facturado al cliente. Por ejemplo, si a un cliente se le cobró el 3 de noviembre, el panel de control informa de esta factura el 4 de noviembre. Para obtener más información sobre cómo exportar y descargar datos de una tabla rápida, consulte [Exportación de datos de elementos visuales](https://docs.aws.amazon.com/quicksight/latest/user/exporting-data.html) en la *Guía rápida del usuario*.

### Descripciones de datos detallados
<a name="billed-revenue-dashboard-granular-data"></a>


| Columna | Description (Descripción) | 
| --- | --- | 
| Fecha de la factura | La fecha en que se facturó al cliente la suscripción del producto. | 
| Fecha de vencimiento del pago | La fecha de vencimiento del pago en el formato de YYYY-MM-DD. | 
| Condiciones de pago | Las condiciones de pago de AWS la factura del cliente. | 
| ID de la factura | El AWS identificador asignado a la AWS factura en la que se facturaron los cargos. | 
| ID de factura de la tarifa de publicación | Cuando una AWS Marketplace suscripción se tramita a través de entidades jurídicas de AWS EMEA SARL, Japón o Australia (vendedora registrada), el operador de la venta debe cobrar al vendedor un impuesto sobre el valor añadido (IVA) sobre la tarifa de publicación del vendedor y recibir una factura que cumpla con los requisitos fiscales. En el caso de las transacciones aplicables, el ID de la factura correspondiente al IVA aplicado a la tarifa de publicación es diferente del ID de la factura de suscripción del software o del producto. Las transacciones de AWS, Inc. tienen un valor de “Missing\$1listing\$1fee\$1invoice\$1id” porque el identificador de la factura de la tarifa de publicación no es aplicable.  | 
| ID de la factura de venta al por mayor | El AWS identificador asignado a la factura impagable que representa una venta entre ISV y Channel Partner en el marco de una oferta privada de Channel Partner (CPPO). Para las ofertas públicas y las ofertas privadas de Marketplace (MPOs), este campo será «No aplicable». | 
| ID de factura emitida por el vendedor | Una factura emitida por el vendedor a AWS. | 
| Variante de factura emitida por el vendedor | El tipo de factura que corresponde a la columna invoice\$1id. Los valores posibles son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/billed-revenue-dashboard.html) | 
| Nombre de la empresa del suscriptor | El nombre de cuenta a la que está suscrito el producto. | 
| ID de suscriptor Cuenta de AWS  | El ID de cuenta a la que está suscrito el producto. | 
| Dominio de correo electrónico del suscriptor | El dominio de correo electrónico asociado a la cuenta que se suscribió al producto. Por ejemplo, si la dirección de correo electrónico es liu-jie@ejemplo.com, la entrada es ejemplo.com. | 
| Ciudad del suscriptor | La ciudad de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Estado o región del suscriptor | El estado de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| País del suscriptor | El país de la dirección de facturación asociado a la cuenta suscrita al producto.  | 
| Código postal del suscriptor | La dirección postal de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Título del producto | El título del producto. | 
| Nombre de la oferta | El nombre definido por el vendedor de la oferta. | 
| ID de oferta | El identificador de la oferta que firmó el comprador.  | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto.  | 
| Fecha de inicio del acuerdo | La fecha en la que comienza la suscripción del producto del cliente, con el formato de MM-DD-YYYY. Esta fecha podría ser diferente a la fecha de aceptación si se trata de un acuerdo con fecha futura. | 
| Fecha de aceptación del acuerdo | La fecha en la que el cliente se suscribió al producto, en el formato MM-DD-YYYY. | 
| Fecha de finalización del acuerdo | La fecha de caducidad del contrato, con el formato de. MM-DD-YYYY Para las pay-as-you-go suscripciones o contabilizadas, esta fecha se establece en el 1 de enero de 9999. | 
| Tipos de términos del acuerdo | Los tipos de términos asociados y aceptados por el aceptante durante la creación del acuerdo. | 
| Fecha de finalización del periodo de uso | La fecha de finalización del periodo de uso del producto. | 
| Fecha de inicio del período de uso | La fecha de inicio del periodo de uso del producto. | 
| Estado del abono | Un estado asociado a una factura para confirmar que no se AWS ha desembolsado ningún fondo, parcial o total, a tu cuenta bancaria. Los estados posibles son: Abonado, Abonado parcialmente, Con error o No abonado.  | 
| Fecha de abono | La fecha en que AWS se inició el desembolso al banco del vendedor. | 
| Número de referencia del abono | En el caso de los desembolsos, el número de referencia del desembolso se genera al crear cada solicitud de desembolso. AWS El número de referencia de desembolso se puede utilizar para correlacionar las notificaciones e informes de depósito proporcionados por el banco del vendedor con las facturas de los informes. AWS Marketplace  | 
| ID de seguimiento bancario del abono | En el caso de abonos, el banco asigna el ID de seguimiento. El identificador de seguimiento del banco de desembolso se puede utilizar para correlacionar las notificaciones e informes de depósito proporcionados por el banco del vendedor con las facturas en los informes. AWS Marketplace  | 
| Ingresos brutos | El importe que se factura al cliente por el uso o las cuotas mensuales del producto. | 
| Reembolsos brutos | El importe total del coste de suscripción reembolsado a los clientes si se procesaron reembolsos durante el periodo de cobertura de los datos.  | 
| Cuota de publicación | El importe de la AWS Marketplace tarifa que se deducirá del importe facturado. | 
| Devolución de la cuota de publicación | La parte de la AWS Marketplace tarifa reembolsada si se procesó algún reembolso durante el período de cobertura de datos. | 
| Porcentaje de la cuota de publicación | El porcentaje de AWS Marketplace comisión que se deducirá del importe facturado. | 
| Recaudación tributaria del vendedor | Importe total del impuesto sobre las ventas y el uso de EE. UU. facturado para esta transacción. | 
| Reembolso de la recaudación tributaria del vendedor | El importe total del impuesto sobre las ventas y el uso en EE. UU. reembolsado para esta transacción si se procesó un reembolso. | 
| AWS cuota de impuestos | Importe total del impuesto sobre las ventas y el uso de EE. UU. facturado para esta transacción en nombre del vendedor.  | 
| AWS devolución de cuotas de impuestos | El importe total del impuesto sobre las ventas y el uso en EE. UU. reembolsado para esta transacción si se procesó un reembolso, cuando dichos impuestos se hayan recaudado en nombre del vendedor. | 
| Coste al por mayor | Solo para ofertas privadas de socios de canal. El coste de los productos para un distribuidor. Por ejemplo, lo que un distribuidor paga a un fabricante cuando vende un producto de un fabricante. El coste al por mayor es el precio de venta multiplicado por el porcentaje de descuento.  | 
| Reembolso de los costes al por mayor | Solo para ofertas privadas de socios de canal. El costo reembolsado de los productos de un distribuidor. | 
| Cuota de impuestos a los vendedores mayoristas | El impuesto sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Reembolso de la recaudación tributaria del vendedor mayorista | El reembolso de impuestos sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Recaudación tributaria a otros vendedores al por mayor | El impuesto sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Este campo se rellena cuando el otro vendedor implicado en la transacción es responsable. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Reembolso de recaudación tributaria a otros vendedores al por mayor | El reembolso de impuestos sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Este campo se rellena cuando el otro vendedor implicado en la transacción es responsable. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Participación fiscal mayorista AWS  | El impuesto sobre la venta entre ISV y Channel Partner en una oferta privada de Channel Partner (CPPO) AWS está sujeto a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Reembolso de acciones tributarias mayoristas AWS  | La devolución del impuesto sobre la venta entre ISV y Channel Partner en una oferta privada de Channel Partner (CPPO), cuando AWS esté sujeta a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Ingresos netos del vendedor | El importe total facturado por la transacción, excluido las AWS Marketplace comisiones, los reembolsos y los impuestos sobre las ventas y el uso de EE. UU. | 
| Ingresos netos recaudados | El importe total que AWS ha cobrado correctamente del comprador en relación con esta transacción. | 
| Ingresos netos no cobrados | El importe total que AWS aún no ha cobrado al comprador por esta transacción. | 
| Fecha de la última recogida | La fecha y hora más recientes en las que AWS cobró cualquier pago del comprador por esta transacción. | 
| Currency (Divisa) | La moneda de la transacción. Por ejemplo, si la transacción se realiza en dólares estadounidenses, la entrada es USD. | 
| ID de referencia de la transacción | Un identificador único que representa la transacción y que puede utilizar para correlacionar las transacciones de AWS Marketplace los distintos informes. | 
| AWS vendedor registrado |  Un identificador de la entidad empresarial que facilitó la transacción. Los valores posibles son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/billed-revenue-dashboard.html)  | 
| ID de autorización de reventa |  El identificador único de una oportunidad registrada.  | 
| Nombre de la autorización de reventa | El nombre único de una oportunidad registrada. | 
| Descripción de la autorización de reventa | La descripción definida por el ISV para una oportunidad registrada. | 
| Nombre de la empresa de reventa | El nombre de la cuenta que compró un producto o servicio a un precio al por mayor a un ISV para revenderlo a un cliente. | 
| ID del pagador Cuenta de AWS  | El identificador de la cuenta que compró un producto o servicio a un precio mayorista a un ISV para revenderlo a un cliente.  | 
| Dominio de correo electrónico del pagador |  El dominio de correo electrónico que está asociado a la cuenta en la que se facturan los cargos. Por ejemplo, si la dirección de correo electrónico es liu-jie@ejemplo.com, la entrada es ejemplo.com.  | 
| Ciudad del pagador | La ciudad de la dirección facturación que está asociada a la cuenta en la que se facturan los cargos. | 
| Estado o región del pagador | El estado de la dirección facturación que está asociado a la cuenta en la que se facturan los cargos. | 
| País del pagador | El código de país de dos caracteres que está asociado a la cuenta en la que se facturan los cargos. | 
| Código postal del pagador |  El código postal de facturación que está asociado a la cuenta en la que se facturan los cargos.  | 
| ID de la cuenta de ISV | El identificador del propietario del producto o servicio. | 
| Nombre de la empresa de ISV | El nombre comercial del propietario del producto o servicio. | 
| ID de producto |  El identificador único fácil de recordar del producto de software.  | 
| Ingresos netos abonados |  Importe total del impuesto sobre las ventas abonado al vendedor para la transacción. Si el importe no es igual a los “ingresos netos del vendedor”, se trata de un pago parcial.  | 
| Ingresos netos no abonados |  El importe total de la transacción no abonada al vendedor. Si el importe es distinto de cero, el cliente adeuda el saldo restante.  | 

# Panel de abonos y pagos
<a name="collections-disbursement-dashboard"></a>

El panel de cargos y abonos proporciona información sobre los fondos que abonó en sus cuentas bancarias. También proporciona una lista de todas las facturas en las que se ha enviado un abono para un pago parcial o total o en las que se ha producido un abono fallido. La lista no incluye las facturas en las que no se haya efectuado un abono. Para revisar las facturas no abonadas, use el panel de **Ingresos facturados.**

Los abonos pueden incluir los pagos de los clientes o el reembolso de una suscripción a su producto y algunos impuestos cargados o reembolsados al cliente. Los reembolsos aparecen como importes negativos, ya que el dinero se devuelve a su cliente una vez que autorice el reembolso.

El panel de cargos y abonos proporciona un acceso más rápido a los abonos de los clientes. Podrá ahorrar aproximadamente 4 días en comparación con el [informe de abonos](https://docs.aws.amazon.com/marketplace/latest/userguide/monthly-disbursement-report.html) anterior, que se creaba 5 días después del envío del abono.

**nota**  
Los clientes tienen condiciones de pago diferentes AWS, por lo que es posible que algunos fondos de las categorías de edad no cobradas no los adeude el cliente.

El panel de cargos y abonos proporciona información para los procesos operativos y financieros. El panel se actualiza a diario. Para obtener más información, consulte los siguientes temas.

Para abrir este panel, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/) seleccione **Conocimientos**, **Operaciones financieras** y, a continuación, seleccione la pestaña **Cargos y abonos**.

**Topics**
+ [Actualice la frecuencia del panel de cargos y abonos](#publication-schedule)
+ [Sección 1: Controles](#collections-disbursement-dashboard-controls)
+ [Sección 2: filtros](#section-2-select-date-range)
+ [Sección 3: métricas clave](#section-3-metrics-collections)
+ [Sección 4: Tendencias](#section-4-trends-collections)
+ [Sección 5: Desgloses](#section-5-breakdowns)
+ [Sección 6: Datos detallados](#section-6-granular-data)

## Actualice la frecuencia del panel de cargos y abonos
<a name="publication-schedule"></a>

El panel de cargos y abonos se actualiza únicamente los días hábiles de Norteamérica. Puede esperar ver las facturas abonadas en un plazo de un día a partir de la recepción del depósito en su banco.

## Sección 1: Controles
<a name="collections-disbursement-dashboard-controls"></a>

Esta sección del panel proporciona filtros para ajustar los datos del panel. Por ejemplo, puedes seleccionar un filtro en un campo de [las notificaciones de AWS Marketplace eventos para](https://docs.aws.amazon.com/marketplace/latest/userguide/notifications.html) confirmar el desembolso de un ID de cuenta de cliente específico, el nombre de la empresa suscriptora o el ID de la oferta. También puede filtrar por estado de abono para ver todas las facturas que se le hayan pagado o las facturas abiertas o impagadas. Puede agregar un filtro a un análisis, como un filtro en el intervalo de fechas que desee incluir en cualquier elemento visual. Los filtros seleccionados en los controles actualizan los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados.

Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la Guía *rápida del usuario*.

### Descripción de los controles
<a name="control-descriptions-collections"></a>


| Nombre del control | Description (Descripción) | 
| --- | --- | 
|  Cuenta de AWS ID de suscriptor | El ID de cuenta a la que está suscrito el producto. | 
| Nombre de la empresa del suscriptor  | El nombre de cuenta a la que está suscrito el producto. | 
| Título del producto | El título del producto.  | 
| ID de oferta | El identificador de la oferta que firmó el comprador. | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| AWS vendedor registrado | Un identificador de la entidad empresarial que facilitó la transacción. Los valores posibles son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/collections-disbursement-dashboard.html) | 
| Estado del abono | Un estado asociado a una factura para confirmar que no se AWS ha desembolsado ningún fondo, parcial o total, en tu cuenta bancaria. Los estados posibles son: Abonado, Abonado parcialmente, Con error o No abonado. | 
| ID del pagador Cuenta de AWS  | El ID de la cuenta en la que se facturan los cargos. | 
| Nombre de la empresa del pagador | El nombre de la empresa de la cuenta en la que se facturan los cargos. | 
| Empresa del distribuidor |  El nombre de la empresa de la cuenta del distribuidor autorizada a vender un producto de un fabricante de software.  | 
| ID de distribuidor Cuenta de AWS  | El ID de la cuenta que compró un producto o servicio al por mayor a un ISV para revenderlo a un cliente. | 
| ID de autorización de reventa | El identificador único de una oportunidad registrada. | 
| Nombre de la autorización de reventa | El nombre único de una oportunidad registrada. | 
| País del suscriptor | El código de país de dos caracteres asociado a la cuenta a la que está suscrito el producto. | 
| Estado o región del suscriptor | El estado o la región de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| ID de referencia de la transacción | Un identificador único para la transacción que le ayuda a correlacionar las transacciones entre los informes AWS Marketplace anteriores. | 
| ID de seguimiento bancario del abono | En el caso de abonos, el banco asigna el ID de seguimiento. El identificador de seguimiento del banco puede correlacionar las notificaciones e informes de depósito proporcionados por el banco del vendedor con las facturas de los informes de AWS Marketplace . | 

## Sección 2: filtros
<a name="section-2-select-date-range"></a>

Esta sección del panel proporciona filtros para ajustar los registros en función de la divisa de la oferta y dos dimensiones de fecha diferentes y de si el valor del campo de fecha es anterior o posterior a una fecha específica o dentro de un intervalo de fechas. Las dimensiones de fecha son la fecha de vencimiento del pago o la fecha del último abono. La fecha de abono limita los resultados a las facturas abonadas dentro del intervalo de fechas especificado. La fecha de vencimiento del pago incluye las facturas con fechas de vencimiento dentro del intervalo especificado, independientemente de la fecha de abono. El filtro de categorías de fechas actualiza los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados. La categoría de fecha predeterminada es la fecha del último abono y extrae los datos de los últimos seis meses.

## Sección 3: métricas clave
<a name="section-3-metrics-collections"></a>

Esta sección del panel muestra un indicador clave de rendimiento (KPI) para visualizar una comparación entre las cifras de ingresos abonados y no abonados. Se muestra un KPI para los ingresos brutos, los ingresos netos, los costos al por mayor (si corresponde), el importe abonado y el importe no abonado para el criterio de filtro especificado.

## Sección 4: Tendencias
<a name="section-4-trends-collections"></a>

Esta sección del panel proporciona una vista de las tendencias de abonos y vencimientos en el intervalo de fechas especificado. Puede ver las tendencias mediante una agregación de fechas específica, como por día, mes, trimestre o año, para obtener información sobre el estado de sus AWS Marketplace colecciones. Las vistas de tendencias incluyen lo siguiente:
+ **Tendencias de los abonos**: proporciona una instantánea del número medio de días que se tarda en abonar y asociar los ingresos netos. La tendencia mide el número de días entre la fecha de la factura y la fecha de abono para informar sobre la eficiencia de los cargos. Puede seleccionar un intervalo de fechas en el filtro de agregación de fechas.
+ **Antigüedad de los pagos abonados**: proporciona una visión general de los ingresos netos y un recuento de las facturas abonadas, clasificadas según buckets de cuentas por cobrar con antigüedad estándar (por ejemplo, pendientes de pago, de 1 a 30 días y de 31 a 60 días). La tendencia mide los días transcurridos entre la fecha de vencimiento del pago y la fecha de abono para indicar si el abono se realizó de acuerdo con las condiciones de pago del cliente.
+ **Antigüedad de los pagos no abonados**: proporciona un resumen de los ingresos netos y el recuento de las facturas pendientes e impagadas, organizadas por periodos vencidos (por ejemplo, no vencidos, de 1 a 30 días y de 31 a 60 días). Los fondos no abonados pueden incluir importes que todavía no hayan vencido. La tendencia mide los días entre la fecha actual y la fecha de vencimiento del pago para mostrar las cuentas por cobrar entrantes.

## Sección 5: Desgloses
<a name="section-5-breakdowns"></a>

Esta sección del panel ofrece una vista de las cuentas por cobrar por identificador de oferta, título del producto, nombre de la empresa pagadora, nombre de la empresa suscriptora, nombre del distribuidor (si participan en ofertas privadas de socios del canal), zona geográfica del pagador y zona geográfica del suscriptor. Utilice los desgloses para comparar las cuentas por cobrar abonadas con las cuentas por cobrar no abonadas de cada categoría.

## Sección 6: Datos detallados
<a name="section-6-granular-data"></a>

Esta sección del panel muestra todos los abonos y los fondos no cobrados por producto, cliente y detalles de la oferta.

**nota**  
Es posible que las facturas creadas antes del 1 de abril de 2021 no tengan un identificador de acuerdo, un identificador de oferta, un identificador de suscriptor Cuenta de AWS o el nombre de la empresa suscriptora asociados.

Para obtener información sobre cómo exportar y descargar datos de una tabla rápida, consulte [Exportación de datos de elementos visuales](https://docs.aws.amazon.com/quicksight/latest/user/exporting-data.html) en la *Guía rápida del usuario*.

### Descripciones de datos detallados
<a name="collections-dashboard-granular-data"></a>


| Columna | Description (Descripción) | 
| --- | --- | 
| Fecha de la factura | La fecha en que se facturó al cliente la suscripción del producto. | 
| Fecha de vencimiento del pago | La fecha de vencimiento del pago en el formato de YYYY-MM-DD. | 
| Condiciones de pago | Las condiciones de pago de AWS la factura del cliente. | 
| ID de la factura | El AWS identificador asignado a la AWS factura en la que se facturaron los cargos.  | 
| ID de factura de la tarifa de publicación |  Cuando una AWS Marketplace suscripción se tramita a través de entidades legales de AWS EMEA SARL, Japón o Australia (vendedora registrada), el operador del mercado de la venta (por ejemplo, AWS EMEA SARL) debe cobrarle al vendedor un IVA sobre la tarifa de publicación del vendedor. En el caso de las transacciones aplicables, el ID de la factura correspondiente al IVA aplicado a la tarifa de publicación es diferente del ID de la factura de suscripción del software o del producto.  | 
| ID de la factura de venta al por mayor |  El AWS identificador asignado a la factura impagable que representa una venta entre ISV y Channel Partner en el marco de una oferta privada de Channel Partner (CPPO). Para las ofertas públicas y las ofertas privadas de Marketplace (MPOs), este campo será «No aplicable».  | 
| ID de factura emitida por el vendedor | Una factura emitida por el vendedor a AWS. | 
| Variante de factura emitida por el vendedor | El tipo de factura que corresponde a la columna invoice\$1id. Los valores posibles son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/collections-disbursement-dashboard.html) | 
| Nombre de la empresa del suscriptor | El nombre de cuenta a la que está suscrito el producto. | 
| ID de suscriptor Cuenta de AWS  | El ID de cuenta a la que está suscrito el producto. | 
| Dominio de correo electrónico del suscriptor | El dominio de correo electrónico asociado a la cuenta que se suscribió al producto. Por ejemplo, si la dirección de correo electrónico es liu-jie@ejemplo.com, la entrada es ejemplo.com. | 
| Ciudad del suscriptor | La ciudad de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Estado o región del suscriptor | El estado de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| País del suscriptor | El país de la dirección de facturación asociado a la cuenta suscrita al producto.  | 
| Código postal del suscriptor | La dirección postal de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Título del producto | El título del producto. | 
| Nombre de la oferta | El nombre definido por el vendedor de la oferta. | 
| ID de oferta | El identificador de la oferta que firmó el comprador.  | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto.  | 
| Fecha de inicio del acuerdo | La fecha en que comienza la suscripción del producto del cliente, con el formato. MM-DD-YYYY Esta fecha podría ser diferente a la fecha de aceptación si se trata de un acuerdo con fecha futura. | 
| Fecha de finalización del acuerdo | La fecha de caducidad del contrato, con el formato de. MM-DD-YYYY Para las pay-as-you-go suscripciones o contabilizadas, esta fecha se establece en el 1 de enero de 9999. | 
|  |  | 
| Fecha de aceptación del acuerdo | La fecha en la que el cliente se suscribió al producto, en el formato MM-DD-YYYY. | 
| Fecha de finalización del periodo de uso | La fecha de finalización del periodo de uso del producto. | 
| Fecha de inicio del período de uso | La fecha de inicio del periodo de uso del producto. | 
| Estado del abono | Un estado asociado a una factura para confirmar que se AWS han recaudado y desembolsado fondos en tus cuentas bancarias desde el desembolso anterior. Se han cargado y abonado los fondos abonados para la factura asociada. Los fondos no abonados de la factura asociada no se han cargado ni abonado.  | 
| Fecha de abono | La fecha en que AWS se inició el desembolso al banco del vendedor. | 
| ID de seguimiento bancario del abono | En el caso de abonos, el banco asigna el ID de seguimiento. El identificador de seguimiento del banco se puede utilizar para correlacionar las notificaciones e informes de depósito proporcionados por el banco del vendedor con las facturas en los informes. AWS Marketplace  | 
| Ingresos brutos | El importe que se factura al cliente por el uso o las cuotas mensuales del producto. | 
| Reembolsos brutos | El importe total del coste de suscripción reembolsado a los clientes si se procesaron reembolsos durante el periodo de cobertura de los datos.  | 
| Cuota de publicación | El importe de la AWS Marketplace tarifa que se deducirá del importe facturado. | 
| Devolución de la cuota de publicación | La parte de la AWS Marketplace tarifa reembolsada si se procesó algún reembolso durante el período de cobertura de datos. | 
| Porcentaje de la cuota de publicación | El porcentaje de AWS Marketplace comisión que se deducirá del importe facturado. | 
| Recaudación tributaria del vendedor | Importe total del impuesto sobre las ventas y el uso de EE. UU. facturado para esta transacción. | 
| Reembolso de la recaudación tributaria del vendedor | El importe total del impuesto sobre las ventas y el uso en EE. UU. reembolsado para esta transacción si se procesó un reembolso. | 
| AWS impuestos (tarifa de cotización de acciones) |  AWS Mientras que, como operador del mercado, está obligado a cobrar y recaudar el IVA a su nombre sobre las ventas realizadas por los vendedores. Este importe se corresponderá con el importe del IVA cargado a tu cuenta de AWS Marketplace vendedor. | 
| AWS reembolso de impuestos compartidos (tarifa de publicación) |  AWS Mientras que, como operador del mercado, está obligado a reembolsar el IVA a su nombre sobre las ventas realizadas por los vendedores. Este importe se corresponderá con el importe del IVA reembolsado a tu cuenta de AWS Marketplace vendedor.  | 
| Coste al por mayor | Solo para ofertas privadas de socios de canal. El coste de los productos para un distribuidor. Por ejemplo, lo que un distribuidor paga a un fabricante cuando vende un producto de un fabricante. El coste al por mayor es el precio de venta multiplicado por el porcentaje de descuento. | 
| Reembolso de los costes al por mayor | Solo para ofertas privadas de socios de canal. El costo reembolsado de los productos de un distribuidor. | 
| Cuota de impuestos a los vendedores mayoristas | El impuesto sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Reembolso de la recaudación tributaria del vendedor mayorista | El reembolso de impuestos sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Recaudación tributaria a otros vendedores al por mayor | El impuesto sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Este campo se rellena cuando el otro vendedor implicado en la transacción es responsable. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Reembolso de recaudación tributaria a otros vendedores al por mayor | El reembolso de impuestos sobre la venta entre ISV y el socio de canal en una oferta privada del socio de canal (CPPO) en la que el vendedor está sujeto a impuestos. Este campo se rellena cuando el otro vendedor implicado en la transacción es responsable. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Participación fiscal mayorista AWS  | El impuesto sobre la venta entre ISV y Channel Partner en una oferta privada de Channel Partner (CPPO) AWS está sujeto a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Reembolso de acciones tributarias mayoristas AWS  | La devolución del impuesto sobre la venta entre ISV y Channel Partner en una oferta privada de Channel Partner (CPPO), cuando AWS esté sujeta a impuestos. Para las ofertas públicas y las ofertas privadas de Marketplace (MPPOs), este campo será «No aplicable». | 
| Ingresos netos del vendedor | El importe total facturado por la transacción, excluido las AWS Marketplace comisiones, los reembolsos y los impuestos sobre las ventas y el uso de EE. UU. | 
| Currency (Divisa) | La moneda de la transacción. Por ejemplo, si la transacción se realiza en dólares estadounidenses, la entrada es USD. | 
| ID de referencia de la transacción | Un identificador único que representa la transacción y que puede utilizar para correlacionar las transacciones de los distintos AWS Marketplace informes. | 
| AWS vendedor registrado |  Un identificador de la entidad empresarial que facilitó la transacción. Los valores posibles son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/collections-disbursement-dashboard.html)  | 
| ID de autorización de reventa |  El identificador único de una oportunidad registrada.  | 
| Nombre de la autorización de reventa | El nombre único de una oportunidad registrada. | 
| Descripción de la autorización de reventa | La descripción definida por el ISV para una oportunidad registrada. | 
| Nombre de la empresa del distribuidor | El nombre de la cuenta que compró un producto o servicio a un precio al por mayor a un ISV para revenderlo a un cliente. | 
| ID de distribuidor Cuenta de AWS  | El identificador de la cuenta que compró un producto o servicio a un precio al por mayor a un ISV para revendérselo a un cliente.  | 
| Nombre de la empresa del pagador | El nombre de la cuenta en la que se facturan los cargos. | 
| ID de pagador Cuenta de AWS  | El ID de la cuenta en la que se facturan los cargos. | 
| Dominio de correo electrónico del pagador |  El dominio de correo electrónico que está asociado a la cuenta en la que se facturan los cargos. Por ejemplo, si la dirección de correo electrónico es liu-jie@ejemplo.com, la entrada es ejemplo.com.  | 
| Ciudad del pagador | La ciudad de la dirección facturación que está asociada a la cuenta en la que se facturan los cargos. | 
| Estado o región del pagador | El estado de la dirección facturación que está asociado a la cuenta en la que se facturan los cargos. | 
| País del pagador | El código de país de dos caracteres que está asociado a la cuenta en la que se facturan los cargos. | 
| Código postal del pagador |  El código postal de facturación que está asociado a la cuenta en la que se facturan los cargos.  | 
| ID de la cuenta de ISV | El identificador del propietario del producto o servicio. | 
| Nombre de la empresa de ISV | El nombre comercial del propietario del producto o servicio. | 
| ID de producto |  El identificador único del producto de software.  | 
| Estado del abono | Un estado asociado a una factura para confirmar que no se AWS ha desembolsado ningún fondo, parcial o total, en tu cuenta bancaria. Los estados posibles son: Abonado, Abonado parcialmente, Con error o No abonado.  | 
| Ingresos netos abonados | Importe total del impuesto sobre las ventas abonado al vendedor para la transacción. Si el importe no es igual a los “ingresos netos del vendedor”, se trata de un pago parcial. | 
| Ingresos netos no abonados | El importe total de la transacción no abonada al vendedor. Si el importe es distinto de cero, el cliente adeuda el saldo restante. | 
| Periodo de abono | Las categorías que describen las cuentas por cobrar varían en las que se cargaron los fondos (por ejemplo, las no vencidas, de 1 a 30 días y de 31 a 60 días). | 

# Panel de impuestos
<a name="taxation-dashboard"></a>

El panel de impuestos proporciona visualización y datos detallados sobre los impuestos estadounidenses e internacionales de las transacciones en AWS Marketplace.

Para abrir este panel, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/), seleccione **Información**, **Marketing** y, a continuación, la pestaña **Rendimiento de publicación**.

**Topics**
+ [Frecuencia de actualización del panel de impuestos](#publication-schedule)
+ [Sección 1: Controles](#billed-revenue-dashboard-controls)
+ [Sección 2: filtros de fechas](#section-2-invoice-date-range)
+ [Sección 3: métricas](#section-3-metrics)
+ [Sección 4: tendencias de impuestos](#section-3-metrics)
+ [Sección 5: Desgloses](#section-4-breakdowns)
+ [Sección 6: Datos detallados](#section-5-new-product-subscribers)
+ [Códigos de exención estadounidenses](#us-exemption-code-key)
+ [Códigos de exención de la UE](#eu-exemption-codes)

## Frecuencia de actualización del panel de impuestos
<a name="publication-schedule"></a>

Los paneles se actualizan a diario. Si los últimos datos de transacciones recibidos de los sistemas anteriores se retrasan, es posible que los últimos datos se reflejen en los paneles de control con un retraso de 1 a 2 días.

## Sección 1: Controles
<a name="billed-revenue-dashboard-controls"></a>

Esta sección del panel proporciona filtros para ajustar los datos de impuestos. También puede agregar un filtro a un análisis, como un filtro en el intervalo de fechas que desee incluir en cualquier elemento visual. Los filtros seleccionados en los controles actualizan los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados.

Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario*.

### Descripción de los controles
<a name="control-descriptions"></a>


| Nombre del control | Description (Descripción) | 
| --- | --- | 
| ID de la factura  | El AWS identificador asignado a los cargos facturados al cliente. | 
| ID de cliente sujeto a impuestos Cuenta de AWS  | El AWS ID de la cuenta a la que se gravaron los impuestos por la suscripción del producto. | 
| AWS vendedor registrado | Un identificador de la entidad empresarial que facilitó la transacción. | 
| País del cliente sujeto a impuestos | El código de país de dos caracteres asociado al cliente sujeto a impuestos | 
| Estado o región del cliente sujeto a impuestos | El estado o la región de la dirección de facturación asociada al cliente sujeto a impuestos. | 
| Ciudad del cliente sujeto a impuestos | La ciudad de la dirección de facturación asociada al cliente sujeto a impuestos | 
| Gravable | Transacciones de origen que son imponibles, exentas de impuestos y devoluciones de impuestos. | 
| Parte sujeta a impuestos |  `AWS` o `Seller`. Si el vendedor es la parte sujeta a impuestos, se recaudan los impuestos. Si AWS es la parte obligada a pagar impuestos, el impuesto sobre las ventas es recaudado y remitido por AWS. Para obtener más información, consulte la [AWS Marketplace Tax Help for Sellers](https://aws.amazon.com/tax-help/marketplace-sellers/). Si no se recaudan impuestos, aquí no se muestra ningún valor. El vendedor debe determinar si se han recaudado algunos impuestos para cada factura, ya que el vendedor es responsable de la recaudación de impuestos.  | 
| Tipo de impuesto | El tipo de impuesto que se aplica a la transacción. Los valores posibles son None, Sales, SellerUse, Tax registration type, VAT (impuesto sobre el valor añadido), CNPJ, IGST y CT. | 

## Sección 2: filtros de fechas
<a name="section-2-invoice-date-range"></a>

Esta sección del panel proporciona filtros para ajustar los registros en función de las fechas de las facturas en un intervalo de fechas especificado. El filtro seleccionado dentro de las fechas de la factura actualiza los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados. Por ejemplo, si selecciona el filtro de fecha `Past 30 days`, todas las secciones reflejarán los datos asociados a las facturas gravadas en los últimos 30 días. 

## Sección 3: métricas
<a name="section-3-metrics"></a>

Esta sección del panel muestra los indicadores clave de rendimiento (KPI) para visualizar las métricas relacionadas con los impuestos, incluida la base imponible, la cantidad no imponible, el importe de los impuestos, el número de facturas gravadas y el número total de transacciones. Puede actualizar el intervalo de fechas actualizando el filtro de fechas en la sección **Filtros**. 

## Sección 4: tendencias de impuestos
<a name="section-3-metrics"></a>

Esta sección del panel proporciona tendencias de impuestos para un intervalo de fechas específico. Puede ver las tendencias mediante una agregación de fechas específica (por ejemplo, diaria, month-over-month quarter-over-quarter, o) year-over-year para obtener información sobre los impuestos. Se dispone de la siguiente información sobre las tendencias fiscales: 
+ **Tendencias fiscales: importes**: proporciona una instantánea de los importes imponibles y tributarios del periodo de tiempo seleccionado por fecha de factura.
+ **Tendencias fiscales: número de facturas**: proporciona una instantánea del número de facturas del período de tiempo seleccionado por fecha de factura.

## Sección 5: Desgloses
<a name="section-4-breakdowns"></a>

Esta sección del panel le proporciona las métricas fiscales de su empresa en función del ID fiscal, el tipo de impuesto, el título del producto y la ubicación geográfica del cliente.

## Sección 6: Datos detallados
<a name="section-5-new-product-subscribers"></a>

En esta sección del panel, se muestran los datos fiscales detallados de las transacciones de su organización en AWS Marketplace.

### Descripciones de datos detallados
<a name="billed-revenue-dashboard-granular-data"></a>


| Columna | Description (Descripción) | 
| --- | --- | 
| ID de la factura | El AWS identificador asignado a la factura en la que se AWS facturaron los cargos. Puede ser una factura comercial del comprador, una factura mayorista del vendedor o una factura de la cuota de publicación del vendedor. | 
| ID de factura de la tarifa de publicación | El AWS identificador asignado a la factura en la que se facturaron al vendedor las tarifas de publicación y el IVA. Aplicable ISVs únicamente a. | 
| ID de la partida | Un identificador único de una partida. Las transacciones de reembolso tienen el mismo ID de partida que sus transacciones de impuestos avanzadas. | 
| ID de factura de cliente | ID de factura de cliente | 
| ID de la factura fiscal | El identificador de la factura fiscal de la línea tributaria en los casos de doble facturación. Este campo será nulo en los escenarios de facturación unificada. | 
| Fecha de la factura fiscal | La fecha de la factura fiscal. Este campo será nulo en los escenarios de facturación unificada. | 
| Parte sujeta a impuestos  |  `AWS` o `Seller`. Si el vendedor es la parte sujeta a impuestos, se recaudan los impuestos. Si AWS es la parte obligada a pagar impuestos, el impuesto sobre las ventas es recaudado y remitido por AWS. Para obtener más información, consulte la [AWS Marketplace Tax Help for Sellers](https://aws.amazon.com/tax-help/marketplace-sellers/). Si no se recaudan impuestos, aquí no se muestra ningún valor. El vendedor debe determinar si se han recaudado algunos impuestos para cada factura, ya que el vendedor es responsable de la recaudación de impuestos.  | 
| Código de tipo de transacción | El tipo de código de la transacción. Entre los valores se encuentran:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/taxation-dashboard.html)Las transacciones de reembolso tienen el mismo ID de partida que sus transacciones avanzadas originales. | 
| ID de producto | El identificador único del producto de software. | 
| Título del producto | El nombre del producto comprado. | 
| Código de impuesto del producto | Código estándar que identifica las propiedades fiscales de un producto. Puede elegir las propiedades al crear o modificar el producto. | 
| Fecha de la factura | La fecha en que se facturó y se gravó al cliente la suscripción del producto. | 
| ID de cliente sujeto a impuestos Cuenta de AWS  | El Cuenta de AWS identificador del cliente sujeto a impuestos. | 
| País del cliente sujeto a impuestos | El código de país de dos caracteres asociado al cliente sujeto a impuestos. | 
| Estado o región del cliente sujeto a impuestos | El estado o la región de la dirección de facturación asociada al cliente sujeto a impuestos. | 
| Ciudad del cliente sujeto a impuestos | La ciudad de la dirección de facturación asociada al cliente sujeto a impuestos. | 
| Código postal del cliente sujeto a impuestos | El código postal utilizado para el cálculo de impuestos. | 
| Tipo de impuesto | El tipo de impuesto que se aplica a la transacción. Los valores posibles son None, Sales y SellerUse, Tax registration type, VAT, CNPJ, IGST, CT. | 
| Nivel jurisdiccional | El nivel jurisdiccional de la dirección que se utiliza para la ubicación fiscal. Los valores posibles son State, County, City y District. | 
| Jurisdicción fiscal | El nombre de la jurisdicción fiscal. | 
| Mostrar el tipo de gravamen del precio | Tipo de gravamen del precio que se muestra a los clientes. Todas las AWS Marketplace ofertas son exclusivas. | 
| Tasa de jurisdicción fiscal | El tipo impositivo que se aplica en el nivel jurisdiccional. | 
| Importe del impuesto | El impuesto que se cobra en el nivel jurisdiccional. | 
| Currency (Divisa) | La divisa del impuesto cobrado. Por ejemplo, si la transacción se realiza en dólares estadounidenses, la entrada es USD. | 
| Importe legal de los impuestos | El importe del impuesto que se muestra en la divisa legal que se cobra en la jurisdicción. | 
| Divisa fiscal legal | La divisa que se muestra en la divisa legal del impuesto cobrado. | 
| Código de motivo de cálculo de impuestos | Si la transacción está sujeta o no a gravamen, está exenta o si es de tipo cero, por nivel jurisdiccional. | 
| Fecha utilizada para calcular el impuesto | La fecha que se utiliza para el cálculo de impuestos en la transacción. | 
| ID de certificado de exención del cliente | El ID de certificado de exención. | 
| Dominio de ID de certificado de exención del cliente | El lugar donde se almacena el certificado el los sistemas de Amazon. | 
| Nivel de certificado de exención del cliente | El nivel jurisdiccional que presentó la exención. | 
| Código de exención del cliente | El código que especifica la exención. Por ejemplo, RESALE. | 
| ID de referencia de la transacción | Un identificador único para la transacción que le ayuda a correlacionar las transacciones entre AWS Marketplace los informes. | 
| AWS vendedor registrado | Un identificador de la entidad empresarial que facilitó la transacción. | 
| ID de la factura del comprador | El AWS identificador asignado a la AWS factura en la que se cobró se facturó a un comprador. Los vendedores pueden asociar su factura mayorista o la factura de la cuota de publicación a la cuota de compra correspondiente. | 

**nota**  
Los importes totales de los impuestos y los gastos totales de los compradores se han trasladado a los campos **Cuota tributaria de AWS ** e **Ingresos brutos** del [Panel de ingresos facturados](https://docs.aws.amazon.com/marketplace/latest/userguide/billed-revenue-dashboard.html).

## Códigos de exención estadounidenses
<a name="us-exemption-code-key"></a>


| Código de excepción | Description (Descripción) | 
| --- | --- | 
| 501C | organizations | 
| AP | Producción agrícola | 
| CO | Organización benéfica | 
| DIRECT | Permiso de pago directo | 
| DISTSBT | Distributor | 
| DP | Naciones Unidas/Diplomático | 
| DV | Veterano discapacitado | 
| EDI | Institución educativa | 
| FG | Gobierno federal | 
| HCP | Proveedor de servicios sanitarios | 
| HO | Hospital (sin fines de lucro o estatal) | 
| INSUR | Seguros | 
| IPM | IPM | 
| LB | Library | 
| MPU | Exención de múltiples puntos de uso; exención digital Products/Software  | 
| N/D | Nativo estadounidense  | 
| NAI | Persona nativa estadounidense | 
| NP | Organización sin fines de lucro | 
| NPR | Organización religiosa sin fines de lucro | 
| OT | Otro | 
| RESALE | Distribuidor | 
| SBE | Exención para pequeñas empresas | 
| SLG | Gobierno estatal/local | 

## Códigos de exención de la UE
<a name="eu-exemption-codes"></a>


| Código de excepción | Description (Descripción) | 
| --- | --- | 
| SpecialOrg | Organizaciones exentas del pago del IVA. | 
| SpecialZone | Un área exenta de impuestos. | 
| SplitPayment | El comprador paga el IVA indicado en la factura directamente a la autoridad tributaria. | 

# Paneles de control para operaciones de ventas
<a name="sales-operations"></a>

AWS Marketplace proporciona varios paneles para ayudarle a realizar un seguimiento de sus datos de ventas.

**Topics**
+ [Panel de acuerdos y renovaciones](agreements-renewals-dashboard.md)
+ [Panel de uso](usage-dashboard.md)

# Panel de acuerdos y renovaciones
<a name="agreements-renewals-dashboard"></a>

Este panel proporciona información sobre acuerdos y renovaciones en un plazo de 24 horas a partir de la firma de un acuerdo en AWS Marketplace. Este panel puede ayudarle a hacer un seguimiento de las suscripciones que vencen.

Para abrir el panel, abre la pestaña Estadísticas y AWS Marketplace Management Portal, **a** continuación, selecciona **Operaciones de ventas**.

**Topics**
+ [Sección 1: Controles](#agreements-renewals-dashboard-controls)
+ [Sección 2: Seleccionar la categoría de fecha](#agreements-renewals-dashboard-select-date-category)
+ [Sección 3: Métricas](#agreements-renewals-dashboard-metrics)
+ [Sección 4: Tendencias de suscripciones](#agreements-renewals-dashboard-subscription-trends)
+ [Sección 5: Desgloses](#agreements-renewals-dashboard-breakdowns)
+ [Sección 6: Datos detallados](#agreements-renewals-dashboard-granular-data)

## Sección 1: Controles
<a name="agreements-renewals-dashboard-controls"></a>

Esta sección del panel proporciona filtros para ajustar los datos del panel de acuerdos y renovaciones. Puede seleccionar de entre los siguientes filtros.

**nota**  
Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario*.

### Descripción de los controles
<a name="agreements-renewals-dashboard-controls-descriptions"></a>


| Nombre del control | Description (Descripción) | 
| --- | --- | 
|  Cuenta de AWS ID de suscriptor | El ID de cuenta a la que está suscrito el producto. | 
| Nombre de la empresa del suscriptor | El nombre de cuenta a la que está suscrito el producto. | 
| ID de oferta | El identificador de la oferta que firmó el comprador. | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| Indicador CPPO |  Un yes/no indicador que indica si se llegó a un acuerdo utilizando una oferta privada de un socio de canal. En caso afirmativo, el vendedor del registro es el socio del canal. En caso negativo, el vendedor del registro es el fabricante del software (proveedor de software independiente).  | 
| ID de AWS cuenta ISV |  La cuenta del propietario del producto o del servicio.  | 
| Nombre de la empresa de ISV |  El nombre comercial del propietario del producto o servicio.  | 
| ID del producto heredado | El identificador heredado único del producto de software. | 
| Título del producto | El título del producto. | 
| ID de autorización de reventa |  El ID de la autorización de reventa proporcionada por el ISV al socio de canal.  | 
| Nombre de la autorización de reventa | El nombre de la autorización de reventa proporcionada por el ISV al socio de canal. | 
| ID de distribuidor Cuenta de AWS  | El ID de la cuenta que compró un producto o servicio al por mayor a un ISV para revenderlo a un cliente. | 
| Nombre de la empresa del distribuidor | El nombre comercial de la cuenta del distribuidor autorizada a vender un producto de un fabricante de software. | 
| País del suscriptor | El código de país de dos caracteres asociado a la cuenta a la que está suscrito el producto. | 
| Estado o región del suscriptor | El estado de la dirección de facturación asociado a la cuenta de AWS suscrita al producto. | 
| Ciudad del suscriptor | La ciudad de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 

## Sección 2: Seleccionar la categoría de fecha
<a name="agreements-renewals-dashboard-select-date-category"></a>

Esta sección del panel proporciona filtros para refinar los registros en función de la fecha de finalización del acuerdo, el período de finalización del acuerdo o la fecha de inicio del acuerdo para un rango de fechas específico. El filtro seleccionado dentro de Seleccionar categoría de fecha actualiza los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados.

Para obtener información sobre los acuerdos firmados recientemente, puede filtrar por fecha de inicio del acuerdo. Si le interesa obtener información sobre las renovaciones de los acuerdos, puede filtrarlos por la fecha de finalización del acuerdo.

## Sección 3: Métricas
<a name="agreements-renewals-dashboard-metrics"></a>

Esta sección del panel muestra un indicador clave de rendimiento (KPI) para visualizar una comparación de los principales datos del acuerdo. Se muestra un KPI para el número de acuerdos activos y el número de acuerdos finalizados. Puede actualizar el intervalo de fechas actualizando los criterios de fechas en el campo Seleccionar categoría de fecha.

## Sección 4: Tendencias de suscripciones
<a name="agreements-renewals-dashboard-subscription-trends"></a>

Esta sección del panel proporciona las tendencias de las suscripciones para un intervalo de fechas específico. Puede ver las tendencias mediante una agregación de fechas específica (por ejemplo, diaria,, month-over-month quarter-over-quarter, o) year-over-year para obtener información sobre los acuerdos. La información sobre las tendencias de los acuerdos y las renovaciones está disponible de forma agregada.
+ **Tendencias de suscripción**: proporciona una instantánea del número de acuerdos activos y el número de acuerdos finalizados en función del filtro de agregación de fechas y el filtro de categoría de fechas seleccionados. Para ver las tendencias de suscripción de las fechas de inicio de los acuerdos, puede seleccionar la **Fecha de inicio del acuerdo** en el filtro **Seleccionar categoría de fecha**. Para ver las tendencias de suscripción de las fechas de fin de los acuerdos, puede seleccionar la **Fecha de fin del acuerdo** en el filtro **Seleccionar categoría de fecha**. 
+ **Desgloses de las renovaciones**: proporciona un resumen de las renovaciones que han finalizado o están a punto de finalizar en un número específico de días. Puede ver los desgloses de renovaciones de varios períodos de tiempo, como los acuerdos que finalizaron hace entre uno y 30 días, entre 31 y 60 días o hace más de 60 días. También puede filtrar los acuerdos que estén a punto de finalizar en un plazo de cero a 30 días, de 31 a 60 días, etc. 

## Sección 5: Desgloses
<a name="agreements-renewals-dashboard-breakdowns"></a>

Esta sección del panel de control te proporciona métricas de tu empresa, desglosadas por nombres de empresas, ISVs tanto para suscriptores activos como para distribuidores. Puedes ver el número de acuerdos IDs, el acuerdo finalizado, la oferta IDs IDs, el acuerdo IDs renovado y los suscriptores.

## Sección 6: Datos detallados
<a name="agreements-renewals-dashboard-granular-data"></a>

Esta sección del panel muestra datos detallados sobre los acuerdos, las ofertas, los productos, los proponentes del acuerdo, los suscriptores, las autorizaciones de reventa, los revendedores y. ISVs 

**nota**  
*Para obtener más información sobre cómo exportar y descargar datos de una tabla rápida, consulte [Exportación de datos de elementos visuales en la Guía rápida del](https://docs.aws.amazon.com/quicksight/latest/user/exporting-data.html) usuario.*

### Descripciones de datos detallados
<a name="agreements-renewals-dashboard-granular-data-descriptions"></a>


| Columna | Description (Descripción) | 
| --- | --- | 
| Nombre de la empresa del suscriptor | El nombre de la empresa del suscriptor. | 
| ID de AWS cuenta de suscriptor | El ID de cuenta a la que está suscrito el producto. | 
| Dominio de correo electrónico del suscriptor | El dominio de correo electrónico asociado a la cuenta que se suscribió al producto. Por ejemplo, si la dirección de correo electrónico es liu-jie@ejemplo.com, la entrada es ejemplo.com. | 
| País del suscriptor | El país de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| Estado o región del suscriptor | El estado de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| Ciudad del suscriptor | La ciudad de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Código postal del suscriptor | La dirección postal de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Título del producto | El título del producto. | 
| ID de producto | El identificador único del producto de software. | 
| ID del producto heredado | El identificador heredado único del producto de software. | 
| Nombre de oferta | El nombre definido por el vendedor de la oferta. | 
| ID de oferta | El identificador de la oferta que firmó el comprador. | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| Fecha de inicio del acuerdo | La fecha en la que comienza la suscripción del producto del cliente, con el formato de MM-DD-YYYY. Esta fecha podría ser diferente a la fecha de aceptación si se trata de un acuerdo con fecha futura. | 
| Fecha de aceptación del acuerdo | La fecha en la que el cliente se suscribió al producto, en el formato MM-DD-YYYY. | 
| Fecha de finalización del acuerdo | La fecha de caducidad del contrato, con el formato de. MM-DD-YYYY Para las pay-as-you-go suscripciones o contabilizadas, esta fecha se establece en el 1 de enero de 9999. | 
| Status | El estado actual del acuerdo. Entre los estados admitidos se incluyen los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/agreements-renewals-dashboard.html)  | 
| Tipos de términos del acuerdo |  Los tipos de términos asociados y aceptados por el aceptante durante la creación del acuerdo. | 
| Valor estimado del acuerdo | El costo estimado del acuerdo, también conocido como “Valor total del contrato” o “Importe de la compra”. Esto se aplica a los siguientes tipos de productos SaaS, servicios profesionales y servidores, así como a los tipos de precios anuales o por contrato. | 
| Código de divisa | La divisa del precio de la oferta asociada al costo estimado del acuerdo. | 
| Nombre de la empresa del distribuidor | El nombre de la cuenta que compró un producto o servicio a un precio al por mayor a un ISV para revenderlo a un cliente. | 
| ID de cuenta de distribuidor AWS  | El identificador de la cuenta que compró un producto o servicio a un precio mayorista a un ISV para revenderlo a un cliente. | 
| ID de autorización de reventa | El identificador único de una oportunidad registrada. | 
| Nombre de la autorización de reventa | El nombre único de una oportunidad registrada. | 
| Descripción de la autorización de reventa | La descripción definida por el ISV para una oportunidad registrada. | 
| Indicador CPPO | Campo calculado en Quick. | 
| Intención del acuerdo | Se rellena si el acuerdo actual era una renovación o mejora de un acuerdo anterior que aparezca en la columna agreement\$1id anterior. Los valores posibles son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/agreements-renewals-dashboard.html) | 
| ID del acuerdo anterior | Referencia del acuerdo si este se renovó o actualizó. | 
| ID del acuerdo siguiente | ID de acuerdo del siguiente acuerdo si el actual se renovó o actualizó. | 
| ID de oferta anterior | ID de la oferta asociada a los acuerdos anteriores si el actual se renovó o actualizó. | 
| ID de oferta siguiente | ID de la oferta asociada al acuerdo siguiente si el actual se renovó o actualizó. | 
| Fecha(s) de aceptación del siguiente ID de acuerdo | La fecha en la que el comprador aceptó el siguiente acuerdo.  | 
| ID de AWS cuenta del proponente | El identificador del propietario del producto o servicio. | 
| Nombre de la empresa del proponente | El nombre comercial del propietario del producto o servicio. | 
| ID de cuenta ISV AWS  | El AWS identificador del vendedor. | 
| Nombre de la empresa de ISV | El nombre comercial del vendedor. | 
| El acuerdo finaliza (en días) | Campo calculado en QuickSight. El número de días que faltan para que el acuerdo finalice a partir de hoy. | 
| Período de finalización del acuerdo | Campo calculado en Quick. El período de tiempo dentro del cual finalizará el acuerdo.  | 

# Panel de uso
<a name="usage-dashboard"></a>

El panel de uso proporciona visualizaciones y datos detallados para los clientes que utilizan SaaS y productos basados en el uso del servidor. AWS Marketplace Los vendedores pueden usar este panel para realizar un seguimiento del consumo de los clientes en todos los productos basados en el uso y tomar decisiones sobre el soporte del producto, los precios, la conversión de ofertas públicas a ofertas privadas y la descontinuación de los productos. El panel proporciona datos de los últimos 6 meses, lo que constituye una ventana continua.

Para abrir el panel, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/), elija **Información**, **Operaciones de ventas** y, después, la pestaña **Uso**. 

**nota**  
Este panel muestra el uso de todas las claves de dimensión especificadas en el momento de creación de la oferta. Por ejemplo, en el caso de los productos de Imagen de máquina de Amazon (AMI), las claves de dimensión son tipos de instancia y todos los tipos de instancias especificados en la oferta se mostrarán en este panel, incluso si tienen un precio de 0 USD. Para ver el uso del producto en una dimensión que no se especificó en el momento de crear la oferta, considere volver a publicar el producto para incluir la dimensión que necesita.

**Nota importante sobre las ofertas privadas distintas del USD**  
El panel de uso muestra todos los datos de uso de la oferta privada en USD, independientemente de la moneda original de la oferta (JPY, EUR, GBP, etc.). Este es el comportamiento previsto, ya que los informes de costo y uso (CUR) de AWS actualmente solo muestran los precios en USD. Si ha creado ofertas privadas en divisas distintas del USD, tenga en cuenta lo siguiente:  
Todas las métricas y estimaciones de uso del panel de control se mostrarán en USD
Los importes en USD que se muestran se convierten a partir de la divisa de la oferta original
Tus facturas y desembolsos reales reflejarán la moneda original de tu oferta privada
Para una conciliación financiera precisa, consulta tus facturas en lugar de basarte únicamente en las estimaciones del panel de uso

**Topics**
+ [Frecuencia de actualización del panel de uso](#usage-publication-schedule)
+ [Sección 1: Controles](#usage-dashboard-controls)
+ [Sección 2: filtros](#section-2-invoice-date-range)
+ [Sección 3: métricas](#section-3-metrics)
+ [Sección 4: Tendencias](#section-3-metrics)
+ [Sección 5: Desgloses](#section-4-breakdowns)
+ [Sección 6: Datos detallados](#section-5-new-product-subscribers)

## Frecuencia de actualización del panel de uso
<a name="usage-publication-schedule"></a>

Los paneles se actualizan a diario a las 16:00 PST (medianoche, hora UTC). Tenga en cuenta que los datos de uso se reciben de fuentes de datos originales y pueden sufrir retrasos. Puede consultar la fecha de uso y la fecha del informe de uso para ver con más claridad cuándo se produjo el uso en comparación con cuando se informó en el panel. 

## Sección 1: Controles
<a name="usage-dashboard-controls"></a>

Esta sección del panel proporciona filtros para ajustar los datos de uso. Por ejemplo, puede seleccionar de entre los siguientes filtros.

**nota**  
Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario*.

### Descripción de los controles
<a name="usage-control-descriptions"></a>


| Nombre del control | Description (Descripción) | 
| --- | --- | 
| Nombre de empresa de usuario final | El nombre de la cuenta que ha utilizado el producto. | 
|  Cuenta de AWS ID de usuario final | El ID de la cuenta que ha utilizado el producto. | 
| País de usuario final | El código de país de dos caracteres asociado a la cuenta que ha utilizado el producto. | 
| Título del producto | El título del producto. | 
| Código de producto | El código de producto de concesión de derechos existente utilizado para medir el producto. Este valor también se utiliza para unir datos con un informe o para hacer referencia a lo que se proporciona en el Servicio de medición de AWS Marketplace . | 
| ID de oferta | El identificador de la oferta que firmó el comprador. | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| Clave de dimensión | El tipo de recurso asociado al uso del producto. Las claves de dimensión se aplican a los productos SaaS y basados en el uso de servidores. | 
| Nombre de la empresa del suscriptor | El nombre de cuenta a la que está suscrito el producto. | 
|  Cuenta de AWS ID de suscriptor | El ID de cuenta a la que está suscrito el producto. | 
| País del suscriptor | El código de país de dos caracteres asociado a la cuenta a la que está suscrito el producto. | 
| Nombre de la empresa del distribuidor | El nombre de la cuenta del distribuidor autorizado a vender un producto de un fabricante. | 
| ID de distribuidor Cuenta de AWS  | El ID de la cuenta que compró un producto o servicio al por mayor a un ISV para revenderlo a un cliente. | 
| ID de autorización de reventa | El ID de la cuenta que compró un producto o servicio al por mayor a un ISV para revenderlo a un cliente. | 
| Indicador CPPO | Un yes/no indicador que indica si se llegó a un acuerdo utilizando una oferta privada de un socio de canal. En caso afirmativo, el vendedor del registro es el socio del canal. En caso negativo, el vendedor del registro es el fabricante del producto (proveedor de software independiente). | 

## Sección 2: filtros
<a name="section-2-invoice-date-range"></a>

Esta sección del panel proporciona filtros para ajustar los registros en función a los datos de uso. Los valores seleccionados en estos filtros actualizan los datos que se muestran en las secciones de métricas, tendencias, desgloses y datos detallados. La selección predeterminada es extraer datos de los últimos 6 meses de uso.

## Sección 3: métricas
<a name="section-3-metrics"></a>

Esta sección del panel muestra un indicador clave de rendimiento (KPI) para visualizar las métricas relacionadas con el consumo: unidades de uso estimadas, clientes con consumo y productos con uso. Puede actualizar el intervalo de fechas actualizando los criterios de fechas de uso en la sección de filtros. Tenga en cuenta que las métricas clave muestran datos de todos los tipos de unidades.

## Sección 4: Tendencias
<a name="section-3-metrics"></a>

Esta sección del panel proporciona tendencias de uso para un intervalo de fechas específico. Puede ver las tendencias mediante una agregación de fechas específica, por ejemplo, diaria month-over-month, quarter-over-quarter, o year-over-year para obtener información sobre el uso. También puede seleccionar un tipo de unidad de uso para ver sus tendencias de uso de forma gráfica.

## Sección 5: Desgloses
<a name="section-4-breakdowns"></a>

Esta sección del panel te proporciona métricas de uso estimadas para tu empresa, desglosadas por nombres de empresas, títulos de productos, claves de dimensión y ofertas IDs para el tipo de unidad seleccionado. También puede seleccionar el número de entradas que desea ver.

## Sección 6: Datos detallados
<a name="section-5-new-product-subscribers"></a>

Esta sección del panel muestra datos detallados sobre el uso, las ofertas, el producto, el suscriptor, el pagador, el usuario final, las autorizaciones de reventa, los distribuidores y los proveedores de software independientes (). ISVs Tenga en cuenta que la tabla de datos detallados muestra datos de todos los tipos de unidades.

Los ingresos deben considerarse estimados hasta que se finalice la facturación a fin de mes. Las facturas basadas en uso se presentan a los compradores el segundo o tercer día del mes siguiente correspondientes al consumo del mes anterior (por ejemplo, a los clientes con mediciones de uso comprendidas entre el 1 y el 30 de noviembre se les presentará una factura por uso el 2 o el 3 de diciembre). El uso medido puede llegar a este panel varios días después de la fecha de uso real, por lo que la fecha de uso y las fechas de uso declaradas pueden ser diferentes. Esto significa que es posible que tengas que visitar el panel todos los días durante el mes para up-to-date hacer un seguimiento del mes en curso. Para obtener información fidedigna sobre facturación a clientes, consulte el [Panel de ingresos facturados](https://docs.aws.amazon.com/marketplace/latest/userguide/billed-revenue-dashboard.html) en la pestaña **Operaciones financieras**.

**nota**  
Para obtener más información sobre el filtrado, consulte [Exportación de datos de elementos visuales](https://docs.aws.amazon.com/quicksight/latest/user/exporting-data.html) en la *Guía rápida del usuario*.

### Descripciones de datos detallados
<a name="billed-revenue-dashboard-granular-data"></a>


| Columna | Description (Descripción) | 
| --- | --- | 
| Fecha de uso | La fecha de consumo del producto por parte del cliente. | 
| Fecha de informe de uso | La fecha en que aparece el consumo del producto por parte del cliente en el panel de información. | 
| Nombre de empresa de usuario final | El nombre de la cuenta que ha utilizado el producto. | 
| ID de AWS cuenta de usuario final | El ID de la cuenta que ha utilizado el producto. | 
| Dominio de correo electrónico para usuario final | El dominio de correo electrónico asociado a la cuenta que ha utilizado el producto. Por ejemplo, si la dirección de correo electrónico es abc@example.com, la entrada es example.com. | 
| Ciudad de usuario final | La ciudad asociada a la cuenta que ha utilizado el producto. | 
| Estado o región del usuario final | El estado o región asociada a la cuenta que ha utilizado el producto. | 
| País de usuario final | El código de país de dos caracteres asociado a la cuenta que ha utilizado el producto. | 
| Código postal de usuario final | El código postal de la dirección de facturación asociada a la cuenta que ha utilizado el producto. | 
| Título del producto | El título del producto. | 
| ID del producto heredado | El identificador heredado único del producto. | 
| ID de producto | El identificador único sencillo del producto. | 
| Código de producto | El código de producto de concesión de derechos existente utilizado para medir el producto. Este valor también se utiliza para unir datos con un informe o para hacer referencia a lo que se proporciona en AWS Marketplace Metering Service. | 
| ID de oferta | El identificador de la oferta que firmó el comprador. | 
| Nombre de oferta | El nombre definido por el vendedor de la oferta. | 
| Visibilidad de la oferta | Indica si la oferta es una oferta de contrato público, privado o empresarial. | 
| ID del conjunto de ofertas | El identificador del conjunto de ofertas asociado a la oferta. | 
| ID del acuerdo | Una referencia de origen de datos de acuerdo única para el acuerdo firmado entre un proponente y un aceptante para empezar a utilizar un producto. | 
| Fecha de aceptación del acuerdo | La fecha y hora en UTC cuando el cliente se suscribió al producto. | 
| Fecha de inicio del acuerdo | La fecha y hora en UTC de inicio de la suscripción al producto del cliente. Esta fecha podría ser diferente a la fecha de aceptación si se trata de un acuerdo con fecha futura. | 
| Fecha de finalización del acuerdo | Fecha en UTC en la que vence el contrato. En el caso de pay-as-you-go las suscripciones o con contador, esta fecha está fijada para el 1 de enero de 9999 a las 12:00 a. m. | 
| Tipos de términos del contrato | Los tipos de términos asociados y aceptados por el aceptante durante la creación del acuerdo. | 
| Clave de dimensión | El tipo de recurso asociado al uso del producto. Las claves de dimensión se aplican a los productos SaaS y basados en el uso de servidores. | 
| Region | La región en la que el comprador implementó instancias de Amazon EC2. | 
| Utilización estimada | La cantidad de uso registrada para el producto. | 
| Tipos de unidad de uso | El tipo de unidad para el que se registra el uso. | 
| Tasa de uso por unidad | La tasa de uso por unidad. | 
| Descripción del artículo de carga | La descripción del cargo. | 
| Ingresos estimados | Los ingresos del uso del producto. Los ingresos deben considerarse estimados hasta que se finalice la facturación a fin de mes. Las facturas basadas en uso se presentan a los compradores el segundo o tercer día del mes siguiente correspondientes al consumo del mes anterior. | 
| Currency (Divisa) | La moneda de la transacción. Por ejemplo, si la transacción se realiza en dólares estadounidenses, la entrada es USD. | 
| Nombre de la empresa del suscriptor | El nombre de cuenta a la que está suscrito el producto. | 
|  Cuenta de AWS ID de suscriptor | El ID de cuenta a la que está suscrito el producto. | 
| Dominio de correo electrónico del suscriptor | El dominio de correo electrónico asociado a la cuenta que se suscribió al producto. Por ejemplo, si la dirección de correo electrónico es abc@example.com, la entrada es example.com. | 
| Ciudad del suscriptor | La ciudad de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Estado o región del suscriptor | El estado de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| País del suscriptor | El país de la dirección de facturación asociado a la cuenta suscrita al producto. | 
| Código postal del suscriptor | La dirección postal de la dirección de facturación asociada a la cuenta a la que está suscrito el producto. | 
| Nombre de la empresa del pagador | El nombre de la cuenta que ha pagado el producto. | 
| ID de pagador Cuenta de AWS  | El ID de la cuenta que ha pagado el producto. | 
| Dominio de correo electrónico del pagador | El dominio de correo electrónico asociado a la cuenta que ha pagado el producto. Por ejemplo, si la dirección de correo electrónico es abc@example.com, la entrada es example.com. | 
| Ciudad del pagador | La ciudad de la dirección de facturación asociada a la cuenta a la que ha pagado el producto. | 
| Estado o región del pagador | El estado de la dirección de facturación asociada a la cuenta a la que ha pagado el producto. | 
| País del pagador | El país de la dirección de facturación asociada a la cuenta a la que ha pagado el producto. | 
| Código postal del pagador | El código postal de la dirección de facturación asociada a la cuenta que ha pagado el producto. | 
| Nombre de la empresa del distribuidor | El nombre de la cuenta que compró un producto o servicio a un precio al por mayor a un ISV para revenderlo a un cliente. | 
| ID de distribuidor Cuenta de AWS  | El identificador de la cuenta que compró un producto o servicio a un precio mayorista a un ISV para revenderlo a un cliente. | 
| ID de autorización de reventa | El identificador único de una oportunidad de reventa registrada. | 
| Nombre de la autorización de reventa | El nombre único de una oportunidad de reventa registrada. | 
| Descripción de la autorización de reventa | La descripción de una oportunidad de reventa registrada. | 
| Indicador CPPO | Un yes/no indicador que indica si se llegó a un acuerdo utilizando una oferta privada de un socio de canal. En caso afirmativo, el vendedor del registro es el socio del canal. En caso negativo, el vendedor del registro es el fabricante del producto (ISV). | 
| Nombre de la empresa de ISV | El nombre del propietario del producto o servicio. | 
| ID DE ISV Cuenta de AWS  |  El identificador del propietario del producto o servicio. | 

# Paneles de control de marketing
<a name="marketing-dashboards"></a>

AWS Marketplace proporciona varios paneles para ayudarle a realizar un seguimiento de sus datos de marketing.

**Topics**
+ [Panel de acuerdos con clientes](customer-agreements-dashboard.md)
+ [Panel de rendimiento de publicaciones](listing-performance-dashboard.md)
+ [Búsqueda del panel de rendimiento](search-performance-dashboard.md)
+ [Cómo entender la compra con AWS paneles](buy-with-aws-dashboard.md)

# Panel de acuerdos con clientes
<a name="customer-agreements-dashboard"></a>

El panel de acuerdos con clientes proporciona una descripción general de los acuerdos y los clientes que se suscriben a tus productos en AWS Marketplace. El panel proporciona datos sobre tus acuerdos nuevos y activos, además de las tendencias y los perfiles de los clientes.

**nota**  
Para desbloquear este panel, debe inscribirse en el programa [AWS Marketplace Seller Prime](https://pages.awscloud.com/aws-marketplace-seller-prime.html).
Para abrir este panel, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/), seleccione **Información**, **Marketing** y, a continuación, elija la pestaña **Acuerdos con clientes**.

Para obtener más información sobre el uso de los AWS Marketplace paneles[Paneles de vendedores](dashboards.md), consulte la sección anterior.

**Topics**
+ [Sección 1: Filtros](#customer-agreements-filters)
+ [Sección 2: Análisis profundo del filtro de fechas](#customer-agreements-date-deep-dive)
+ [Sección 3: Acuerdos de oferta pública y privada](#customer-agreements-public-private-agreements)
+ [Sección 4: Métricas de los clientes](#section-5-customer-metrics)

## Sección 1: Filtros
<a name="customer-agreements-filters"></a>

Puede utilizar los siguientes filtros para limitar los datos de los acuerdos. 


|  Nombre del control  |  Description (Descripción)  | 
| --- | --- | 
|  Título del producto  |  El título del producto.  | 
|  Filtro de fecha  |  Incluye datos de los últimos 30, 60 y 90 días, de los últimos 12 meses (TTM) y del año hasta la fecha (YTD). Elija personalizado para definir fechas de inicio y de finalización específicas.  | 
|  Sector de cliente  |  El sector que AWS define a un cliente que ha suscrito un producto de un vendedor.  | 
|  Segmento de cliente  |  El segmento que AWS define a un cliente que ha suscrito un producto de un vendedor. Los segmentos de clientes incluyen: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/marketplace/latest/userguide/customer-agreements-dashboard.html)  | 

Para obtener más información sobre el filtrado, consulta [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario de Amazon*.

## Sección 2: Análisis profundo del filtro de fechas
<a name="customer-agreements-date-deep-dive"></a>

Este filtro de fechas se aplica a todas las métricas de los paneles de acuerdos con clientes.  

Por ejemplo, cuando utilizas el valor de year-to-date filtro predeterminado, aparecen las siguientes métricas:


|  Métrica  |  Description (Descripción)  | 
| --- | --- | 
|  Recuento de acuerdos de oferta pública  |  Número de acuerdos con oferta pública y visibilidad de la oferta que han tenido al menos 1 día activo en el año hasta la fecha.  | 
|  Recuento de acuerdos de oferta privada  |  Número de acuerdos con oferta privada y visibilidad de la oferta que han tenido al menos 1 día activo en el año hasta la fecha.  | 
|  Recuento de nuevos acuerdos de oferta pública  |  Número de acuerdos con oferta pública y visibilidad de la oferta que tienen fecha de aceptación en el año hasta la fecha.  | 
|  Recuento de nuevos acuerdos de oferta privada  |  Número de acuerdos con oferta privada y visibilidad de la oferta que tienen fecha de aceptación en el año hasta la fecha.  | 
|  Clientes activos  |  Número de clientes únicos, identificados como ID de cuenta de AWS de suscriptor, que tienen al menos un acuerdo activo en el año hasta la fecha. El acuerdo activo se define como un acuerdo con al menos un día activo durante el periodo de tiempo.  | 
|  Nuevos clientes de pago  |  Número de clientes individuales, identificados como ID de cuenta de AWS de suscriptor, que tienen su primer mes de facturación en el año hasta la fecha.  | 

## Sección 3: Acuerdos de oferta pública y privada
<a name="customer-agreements-public-private-agreements"></a>

Esta sección del panel muestra un resumen de los acuerdos. Los indicadores clave de rendimiento (KPIs) incluyen el número de acuerdos de oferta pública, el número de acuerdos de oferta privada, el número de nuevos acuerdos de oferta pública y el número de nuevos acuerdos de oferta privada. Puede ver los year-over-year period-over-period cambios en el volumen y el porcentaje. Puede actualizar el intervalo de fechas actualizando el filtro de fechas en la sección de filtros. 

 Un *acuerdo* es un contrato firmado entre el proponente (el propietario del producto o servicio) y una persona que acepta (el cliente) para empezar a utilizar un producto. 

**nota**  
Las métricas de los nuevos acuerdos incluyen acuerdos activos, vencidos, cancelados y rescindidos.

 En la siguiente tabla, se muestran y describen los estados de los acuerdos. 


|  Status  |  Description (Descripción)  | 
| --- | --- | 
|  Activo  |  Algunos o todos los términos del acuerdo están en vigor.  | 
|  Vencido  |  El acuerdo ha finalizado en la fecha de finalización previamente acordada.  | 
|  Cancelado  |  La persona que acepta decide finalizar el acuerdo antes de su fecha de finalización.  | 
|  Rescindido  |  El acuerdo ha finalizado antes de la fecha de finalización previamente acordada debido a un evento de rescisión iniciado por AWS, como un impago.  | 
|  Renovado  |  El acuerdo se ha renovado con un nuevo acuerdo que utiliza funciones como la renovación automática.  | 
|  Sustituido  |  El acuerdo se ha sustituido por una oferta de sustitución.  | 

## Sección 4: Métricas de los clientes
<a name="section-5-customer-metrics"></a>

Esta sección del panel proporciona las tendencias de los clientes en un intervalo de fechas específico. KPIsincluye el número de clientes activos y el número de nuevos clientes que pagan.
+ **Tendencia mensual**: proporciona una vista mensual del número de clientes activos y del número de nuevos clientes de pago en función del filtro activo en el gráfico. 
+ **Métricas de clientes**: proporciona datos sobre la cantidad de clientes activos y la cantidad de nuevos clientes de pago, en función del filtro de métricas elegido. Puede seleccionar un segmento de clientes o un sector para comprender cómo contribuye cada segmento o sector de clientes a la métrica total.

**nota**  
Los acuerdos tienen un estado determinado. Para obtener información sobre los estados, consulte la [tabla de la sección anterior](#customer-agreements-public-private-agreements).

En la siguiente tabla, se enumeran y describen las métricas.


|  Métricas  |  Description (Descripción)  | 
| --- | --- | 
|  Acuerdos de oferta pública  | El número de acuerdos identificados como acuerdos IDs con visibilidad de oferta pública; la duración del acuerdo tiene al menos un día de coincidencia con el intervalo de fechas seleccionado; la duración se identifica entre la fecha de inicio y la fecha de finalización del acuerdo. | 
|  Acuerdos de oferta privada  | El número de acuerdos identificados como acuerdos IDs con visibilidad de oferta privada; la duración del acuerdo debe superponerse al menos un día con el intervalo de fechas seleccionado; la duración se identifica entre la fecha de inicio y la fecha de finalización del acuerdo.  | 
|  Nuevos acuerdos de oferta pública  | El número de acuerdos identificados como ID de acuerdo con visibilidad de oferta pública; la fecha de aceptación del acuerdo se encuentra dentro del intervalo de fechas seleccionado.  | 
|  Nuevos acuerdos de oferta privada  |  El número de acuerdos identificados como acuerdos IDs con visibilidad de oferta privada; la fecha de aceptación del acuerdo se encuentra dentro del intervalo de fechas seleccionado.  | 
|  Clientes activos  | El número de clientes identificados como suscriptores AWS cuenta IDs con al menos 1 acuerdo activo; la duración del acuerdo coincide con al menos un día con el intervalo de fechas seleccionado  | 
| Nuevos clientes de pago  |  El número de clientes identificados como AWS cuentas de suscriptor IDs que tienen su primer mes de facturación dentro del intervalo de fechas seleccionado.  | 

 Para obtener más información sobre los acuerdos y los ingresos, consulte [Panel de acuerdos y renovaciones](agreements-renewals-dashboard.md) y [Panel de ingresos facturados](billed-revenue-dashboard.md), ambos en esta sección. 

# Panel de rendimiento de publicaciones
<a name="listing-performance-dashboard"></a>

El panel de rendimiento de las publicaciones proporciona una descripción general y datos detallados de las publicaciones de AWS Marketplace. El panel proporciona datos sobre los volúmenes de tráfico y los pasos que siguen los clientes para suscribirse a sus productos. El panel también proporciona un desglose detallado del tráfico por canales de marketing.

**nota**  
Para desbloquear este panel, debe inscribirse en el programa [AWS Marketplace Seller Prime](https://pages.awscloud.com/aws-marketplace-seller-prime.html).
Para abrir este panel, inicie sesión en [AWS Marketplace Management Portal](https://aws.amazon.com/marketplace/management/), seleccione **Información**, **Marketing** y, a continuación, la pestaña **Rendimiento de publicación**.

Para obtener más información sobre el uso de los AWS Marketplace paneles[Paneles de vendedores](dashboards.md), consulta la sección anterior.

**Topics**
+ [Sección 1: Filtros](#listing-section-1-filters)
+ [Sección 2: Análisis profundo del filtro de fechas](#date-filter-deep-dive)
+ [Sección 3: Métricas resumidas](#listing-summary-metrics)
+ [Sección 4: Tendencia mensual y conversión por embudos](#monthly-trend-funnel)
+ [Sección 5: Tendencia del tráfico por canal](#traffic-trend-by-channel)
+ [Sección 6: Métricas mensuales de tráfico y acuerdos](#monthly-traffic-agreement)
+ [Sección 7: Fuentes de tráfico web para visitantes únicos](#traffic-sources-unique-visitors)
+ [Sección 8: Desglose de las fuentes de tráfico web](#traffic-source-breakdown)

## Sección 1: Filtros
<a name="listing-section-1-filters"></a>

Puede utilizar los siguientes filtros para limitar los datos.


|  Nombre del control  |  Description (Descripción)  | 
| --- | --- | 
|  Título del producto  |  El título del producto.  | 
|  Fecha  |  Incluye los últimos 30, 60 y 90 días, los últimos 12 meses (TTM) y el año hasta la fecha (YTD). Puede elegir personalizado para definir una fecha de inicio y de finalización específica.  | 

Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario*.

## Sección 2: Análisis profundo del filtro de fechas
<a name="date-filter-deep-dive"></a>

 Este filtro de fechas se aplica a todas las métricas de los paneles de rendimiento de las publicaciones.  

 Por ejemplo, cuando utilizas el valor de year-to-date filtro predeterminado, aparecen las siguientes métricas: 


|  Métrica  |  Description (Descripción)  | 
| --- | --- | 
|  Visitantes únicos  |  Número de personas únicas que han visitado páginas de AWS Marketplace anuncios en lo que va de año.  | 
|  Nuevos acuerdos de oferta pública  |  Número de acuerdos con oferta pública y visibilidad de la oferta que han tenido al menos 1 día activo en el año hasta la fecha.  | 
|  Nuevos visitantes únicos  |  Número de personas únicas que han visitado las páginas de AWS Marketplace anuncios por primera vez en la actualidad.  | 
|  Visitantes recurrentes únicos  |  Número de personas únicas que han visitado páginas de AWS Marketplace anuncios y que ya las habían visitado antes del comienzo del año seleccionado y que las habían vuelto a visitar en la actualidad.  | 

## Sección 3: Métricas resumidas
<a name="listing-summary-metrics"></a>

Esta sección del panel muestra una visualización resumida de los acuerdos de tráfico y ofertas públicas. Los indicadores clave de rendimiento (KPIs) incluyen el número de visitantes únicos, el número de nuevos acuerdos de oferta pública, el número de nuevos visitantes únicos y el número de visitantes únicos que regresan. Puede ver los period-over-period cambios en el year-over-year volumen y el porcentaje. Puede actualizar el intervalo de fechas actualizando los criterios de fechas en el campo de fecha de la sección de filtro. 


|  Métricas  |  Description (Descripción)  | 
| --- | --- | 
|  Visitantes únicos  |  Número de personas únicas que han visitado las páginas AWS Marketplace de anuncios.  | 
|  Acuerdo  |  Un contrato firmado entre el proponente (el propietario del producto o servicio) y una persona que acepta (el cliente) para empezar a utilizar un producto.  | 
|  Nuevos acuerdos de oferta pública  |  Número de acuerdos con oferta pública como visibilidad de la oferta que tienen una fecha de aceptación dentro del intervalo de fechas seleccionado. Incluye el estado activo, vencido, cancelado o rescindido. | 
|  Estado  | Activo: algunos o todos los términos del acuerdo están en vigor. Vencido: el acuerdo ha finalizado en la fecha de finalización previamente acordada. Cancelado: la persona que acepta decide finalizar el acuerdo antes de su fecha de finalización. Rescindido: el acuerdo finalizó antes de la fecha de finalización previamente acordada debido a un evento de rescisión iniciado por AWS, como un impago. Renovado: el acuerdo se ha renovado con un nuevo acuerdo que utiliza funciones como la renovación automática. Sustituido: el acuerdo se ha sustituido por una oferta de sustitución.  | 

## Sección 4: Tendencia mensual y conversión por embudos
<a name="monthly-trend-funnel"></a>

Esta sección del panel proporciona tendencias de tráfico y acuerdos en un intervalo de fechas específico. Los indicadores clave de rendimiento incluyen el número de visitantes únicos y el número de nuevos acuerdos, haciendo referencia a los nuevos acuerdos de oferta pública. **Visitante único por mes:** proporciona una vista mensual del número de visitantes únicos. El total de visitantes únicos mensuales puede ser superior al total de visitantes únicos de la sección de métricas resumidas, ya que un visitante único puede visitarlo varios meses. **Nuevos acuerdos por mes:** proporciona una vista mensual del número de nuevos acuerdos de oferta pública. **Conversión por embudo:** proporciona la vista step-by-step de conversión. Incluye la página de la publicación, la página de compras, la página de configuración y la página de tramitación. Puede seleccionar visitantes únicos, vistas de páginas y cuentas únicas tal y como aparecen en las barras. Al pasar el ratón por encima de cada barra, puede ver el porcentaje de conversión definido como el valor de la barra actual como porcentaje de la barra anterior. 


|  Métricas  |  Description (Descripción)  | 
| --- | --- | 
|  Visitantes únicos  |  Número de personas únicas que han visitado las páginas de AWS Marketplace anuncios.  | 
|  Vistas de la página  |  Número de visitas a una página de anuncios de AWS Marketplace.  | 
|  Cuentas únicas  |  Número de ID de AWS cuenta único asociado a un visitante. Esta métrica solo es aplicable después de que un visitante se autentique.  | 

## Sección 5: Tendencia del tráfico por canal
<a name="traffic-trend-by-channel"></a>

Esta sección del panel proporciona un análisis profundo de la tendencia del tráfico mensual. Puede seleccionar visitantes únicos y vistas de páginas como las que muestran las barras. Puede seleccionar uno o varios canales en el filtro de canales para ver la tendencia mensual de los canales seleccionados. 

## Sección 6: Métricas mensuales de tráfico y acuerdos
<a name="monthly-traffic-agreement"></a>

Esta sección del panel proporciona una vista mensual de los visitantes únicos, nuevos acuerdos, tasa de conversión y total de acuerdos. La tasa de conversión se define como los nuevos acuerdos divididos por visitantes únicos durante cada mes. 

Los datos de la tabla representan un mes completo, incluso si selecciona un intervalo de fechas de un mes parcial. Por ejemplo, si filtra los datos para mostrar el periodo comprendido entre el 15 de enero de 2024 y el 15 de marzo de 2024, la tabla seguirá incluyendo los datos mensuales completos del 1 de enero de 2024 al 31 de marzo de 2024. 

Los datos de la tabla se ordenan por **mes** y el mes más reciente se muestra primero. Puede ordenar la tabla por cualquiera de las columnas disponibles haciendo clic en el encabezado de la columna correspondiente, con la opción de ordenar los datos en orden ascendente o descendente. 

## Sección 7: Fuentes de tráfico web para visitantes únicos
<a name="traffic-sources-unique-visitors"></a>

Esta sección del panel proporciona información detallada sobre los visitantes únicos por orígenes de marketing. Las categorías incluyen el descubrimiento de productos orgánicos por parte del vendedor, las campañas de marketing dirigidas por los vendedores, el descubrimiento de AWS productos orgánicos y las campañas dirigidas por AWS. Esas categorías se identifican mediante los códigos de seguimiento asociados al visitante o a la visita.


|  Origen de tráfico  |  Description (Descripción)  | 
| --- | --- | 
|  Descubrimiento orgánico de vendedor  | Visitantes únicos que llegan a sus publicaciones a través de llamadas a la acción y puntos de descubrimiento en el sitio web o mediante notificaciones integradas en la aplicación.  | 
|  Campañas de marketing dirigidas por el vendedor  | Visitantes únicos que llegan a sus publicaciones a través de los canales promocionales o de publicidad de pago.  | 
|  AWS descubrimiento orgánico  | Visitantes únicos que llegan a tus anuncios a través de AWS canales, como el tráfico orgánico del AWS sitio web, la búsqueda en AWS consolas y la búsqueda en AWS Marketplace.  | 
|  AWS campañas de marketing  | Visitantes únicos que llegan a sus publicaciones a través de campañas y promociones de pago dirigidas por AWS.  | 

## Sección 8: Desglose de las fuentes de tráfico web
<a name="traffic-source-breakdown"></a>

La tabla de desglose de los orígenes del tráfico web proporciona un desglose detallado de las actividades de marketing que generan el tráfico.
+ **Fuente de tráfico**: incluye dos categorías principales: AWS dirigida por el vendedor y dirigida por el vendedor.
+ **Tipo de tráfico**: incluye el descubrimiento orgánico del vendedor, las campañas de marketing dirigidas por el vendedor, el descubrimiento AWS orgánico y las campañas de marketing dirigidas por el vendedor. AWS
+ **Canal**: incluye las diversas tácticas de marketing: que son visualización de pago, búsqueda de pago, redes sociales de pago, correo electrónico, orgánico, enlaces externos de tráfico del sitio interno y otras.
+ **Publicador**: hace referencia a la entidad en la que se publica la campaña, incluidas Facebook, Google LinkedIn AWS, las dirigidas por el vendedor y otras.
+ **Promoción**: hace referencia a la campaña específica para la que se ha generado un código de seguimiento específico. Un ejemplo puede ser `psm_linked_post_free-trial-global-ver-a`.


|  Métricas  |  Description (Descripción)  | 
| --- | --- | 
|  Acuerdos atribuidos  |  Total de acuerdos aportados por las visitas de cada promoción.  | 
|  Tasa de conversión  |  Los acuerdos atribuidos divididos por visitantes únicos de cada promoción.  | 

# Búsqueda del panel de rendimiento
<a name="search-performance-dashboard"></a>

El panel **de rendimiento de búsqueda** proporciona métricas sobre el rendimiento de tus AWS Marketplace anuncios en la experiencia de AWS Marketplace búsqueda. Se utiliza el panel de control para mejorar la visibilidad y el rendimiento de sus anuncios. El panel de control registra el número de impresiones, los clics y el porcentaje de clics. También hace un seguimiento de las principales palabras clave que proporciona y que utilizan los clientes, y ofrece sugerencias de palabras clave basadas en las búsquedas habituales de los estos últimos.

La información del panel de control puede ayudarle a perfilar mejor sus listados de productos para mejorar la visibilidad, hacer coincidir sus palabras clave con las preferencias de los clientes y atraer más tráfico cualificado a su empresa AWS Marketplace.  

Para abrir el panel de control, abre el portal AWS Marketplace de administración y ve a la **pestaña** Estadísticas.

Para obtener más información acerca del uso del panel, consulte [Paneles de vendedores](dashboards.md), que aparece anteriormente en esta sección.

## Sección 1: acceso al panel
<a name="search-performace-access"></a>

 Para desbloquear este panel, debe ser miembro del [programa Seller Prime de AWS Marketplace](https://pages.awscloud.com/aws-marketplace-seller-prime.html). 

Tras inscribirte en el programa Seller Prime, los administradores del sistema de las cuentas de vendedor pueden utilizar la pestaña Estadísticas **del** panel de rendimiento de **búsqueda AWS Marketplace Management Portal para iniciar el panel de rendimiento** de búsquedas.

Los administradores del sistema también pueden crear una política AWS Identity and Access Management (IAM) para proporcionar acceso a paneles específicos a otros usuarios de la empresa vendedora. 

**nota**  
 A partir de septiembre de 2023, dejaremos de permitir el acceso a los paneles de control de vendedores mediante permisos de IAM anteriores. Para actualizar sus permisos de IAM, utilice el formato de Nombre de recurso de Amazon (ARN) mostrado en los siguientes ejemplos. 

 Para obtener más información acerca de la creación de políticas, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *AWS Identity and Access Management Guía del usuario*. 

### Uso de políticas para controlar el acceso
<a name="search-performance-access-policies"></a>

Use una de las siguientes políticas para proporcionar acceso al panel de rendimiento de publicaciones.

El siguiente ejemplo proporciona acceso a todos los AWS Marketplace recursos actuales y futuros, incluidos los paneles y los informes, independientemente de las fuentes de datos actuales o futuras.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
    "Effect": "Allow",
    "Action": [
    "aws-marketplace:GetSellerDashboard"
    ],
    "Resource": "arn:aws:aws-marketplace:us-east-1:111122223333:AWSMarketplace/*"
    }
    ]
    }
```

------

El siguiente ejemplo proporciona acceso al panel **Rendimiento de búsqueda** al incluir su ARN.  

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
    "Effect": "Allow",
    "Action": [
    "aws-marketplace:GetSellerDashboard"
    ],
    "Resource": "arn:aws:aws-marketplace:us-east-1:111122223333:AWSMarketplace/ReportingData/Marketing_V1/Dashboard/SearchPerformance_V1"
    }
    ]
    }
```

------

## Sección 2: filtros
<a name="search-perf-filters"></a>

 En esta sección del panel se proporcionan los siguientes filtros. Úselos para ajustar los datos. 


| Nombre del control | Description (Descripción) | 
| --- | --- | 
| Título del producto |  El título del producto. Este filtro afecta a las impresiones, los clics, el porcentaje de clics y las recomendaciones de **palabras clave de búsqueda de AWS Marketplace **. No afecta a la tabla de **palabras clave más buscadas por categoría de producto.**  | 
| Filtro de fecha |  Puede filtrar los últimos 30, 60 y 90 días, los últimos 12 meses (TTM) y el año hasta la fecha (YTD). Puede elegir **personalizado** para definir una fecha de inicio y de finalización específica. Este filtro afecta a las impresiones, los clics y la tasa de clics. No afecta a las **recomendaciones de palabras clave búsqueda de AWS Marketplace ** ni a las tablas de **palabras clave más buscadas por categoría de producto**.  | 

 Para obtener más información sobre el filtrado, consulte [Filtrar datos en Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html), en la *Guía del QuickSight usuario de Amazon*. 

## Sección 3: rendimiento AWS Marketplace de búsqueda
<a name="search-performance"></a>

En esta sección del panel de control se muestran los indicadores clave de rendimiento (KPIs) sobre la visibilidad y el rendimiento de tus AWS Marketplace anuncios. El panel indica KPIs el número de impresiones, el número de clics y el porcentaje de clics. 

 Puedes ver year-over-year o period-over-period cambiar el volumen y el porcentaje. También puede cambiar los intervalos de fechas. 


| Métrica | Description (Descripción) | 
| --- | --- | 
| Impresiones | El número de veces que sus anuncios aparecen en los 20 primeros resultados de búsqueda de AWS Marketplace. | 
| Clics | El número de veces que los usuarios hacen clic en tus anuncios desde los resultados AWS Marketplace de búsqueda. | 
| Tasa de clics (CTR) | La relación entre el número de clics y el número de impresiones. Una medida de comprobar la eficacia de sus publicaciones a la hora de captar clientes a partir de los resultados de búsqueda. | 

## Sección 4: tendencia mensual de impresiones, clics y porcentaje de clics
<a name="impressions-click-throughs"></a>

 Esta sección del panel proporciona tendencias mensuales para un intervalo de fechas específico. Indica KPIs el número de impresiones, el número de clics y el porcentaje de clics. 

## Sección 5: recomendaciones de palabras clave de búsqueda para AWS Marketplace
<a name="keyword-recommendations"></a>

 Esta sección del panel incluye una tabla en la que se muestran sus palabras clave actuales, además de las palabras clave recomendadas para cada uno de sus publicaciones. 


| Nombres de columnas | Description (Descripción) | 
| --- | --- | 
| Título del producto | El título del producto. El enlace le lleva a la página de descripción general del producto en el AWS Marketplace Management Portal, donde puede gestionar y editar sus listados. | 
| Palabras clave actuales | Las palabras clave que proporcionó en la sección Actualizar la información del producto del portal de AWS Marketplace administración.  | 
| Palabras clave con mejor rendimiento | Las palabras clave que aparecen en las cinco principales búsquedas de su producto por parte de los clientes.  | 
| Palabras clave recomendadas de AWS | Las palabras clave que más utilizan los clientes cuando buscan productos similares. | 
| Porcentaje de aumento de tráfico estimado | El aumento de tráfico potencial si adopta las palabras clave recomendadas. No se ve afectado por el filtro de fechas. | 

**nota**  
Si bien las palabras clave son importantes, otros factores pueden afectar a los resultados de búsqueda.  
Optimización de las publicaciones   
 Optimiza otras partes de sus publicaciones, como las descripciones cortas y largas. 
Considere la posibilidad de ofrecer características tales como versiones de prueba gratuitas para mejorar el atractivo de su publicación. 
Hacer coincidir las palabras clave con las publicaciones y los clientes objetivo  
En la medida de lo posible, haga coincidir las publicaciones con las palabras clave que utilice con frecuencia.
Use solo las palabras clave relevantes para sus productos y características. De lo contrario, sus publicaciones podrían aparecer en un mayor número de búsquedas, pero menos usuarios los elegirán. 
Descripción de las variaciones de palabras clave  
Recuerde que términos similares, como “git” y “gitops”, pueden tratarse como el mismo término de búsqueda.
Evalúe la relevancia de cualquier variación y ajuste las palabras clave en consecuencia.
Actualización de palabras clave  
En el AWS Marketplace Management Portal, abra el menú **Productos** y seleccione una categoría de productos.
Seleccione el enlace a su producto, seleccione la pestaña **Información del producto** y navegue hasta la página **Proporcionar la información del producto**. 
Desplázate hacia abajo hasta la sección de **AWS Marketplace visibilidad**, busca **palabras clave para los resultados de AWS Marketplace búsqueda** y ajusta tus palabras clave. 

## Sección 6: palabras clave más buscadas por categoría de producto
<a name="top-keywords-by-product-category"></a>

Las cinco palabras clave más buscadas por los clientes en cada categoría de productos para productos similares al suyo. Los demás filtros de productos y fechas de este panel no afectan a estos datos.

# Cómo entender la compra con AWS paneles
<a name="buy-with-aws-dashboard"></a>

El AWS panel **Comprar con compra** ofrece una visión general del tráfico web, las interacciones y los acuerdos creados por los clientes que eligen tus AWS call-to-action botones **Comprar con** y visitan tu página **Comprar con AWS compras activada**. AWS Marketplace

Para obtener información acerca del acceso al panel, consulte los [Paneles de vendedores](dashboards.md) que aparecen anteriormente en esta guía.

**Topics**
+ [Sección 1: Filtros](#buy-with-aws-filters)
+ [Sección 2: métricas resumidas](#buy-with-aws-summary-metrics)
+ [Sección 3: total de clics y datos de tendencias para visualizaciones de páginas y el total de acuerdos](#buy-with-aws-clicks-views)
+ [Sección 4: tasa de abandono de página de inicio de sesión de AWS](#buy-with-aws-drop-off-rate)
+ [Sección 5: Interacción en la página de compra con AWS adquisición](#buy-with-aws-engagements)
+ [Sección 6: Datos de tendencias para las métricas de participación en la página Comprar con AWS compras](#buy-with-aws-procurement-page-trends)

## Sección 1: Filtros
<a name="buy-with-aws-filters"></a>

 En esta sección se proporcionan los siguientes filtros de datos: 


|  Nombre del filtro  |  Description (Descripción)  | 
| --- | --- | 
| Título del producto | El título del producto.  | 
| ID del producto | Los identificadores únicos para los productos de software. | 
| Filtro de fecha | Filtra por los últimos 30, 60 o 90 días, por los últimos 12 meses o por el año hasta la fecha. Seleccione Personalizado para introducir otras fechas de inicio y finalización.  | 

Para obtener más información sobre el filtrado, consulte [Filtrar datos en Quick](https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html) en la *Guía rápida del usuario*. 

## Sección 2: métricas resumidas
<a name="buy-with-aws-summary-metrics"></a>

En esta sección se muestra información sobre los AWS call-to-action botones **Comprar con** y la página **Comprar con AWS** compras.

En la siguiente tabla, se muestran y describen las métricas. Para actualizar el intervalo de fechas, cambie los criterios de fechas en la sección de **filtros**.


|  Métrica  |  Description (Descripción)  | 
| --- | --- | 
| Número total de clics en los botones  | El número total de clics en los call-to-action botones, como Comprar con AWS, del sitio web del vendedor.  | 
| Número de visitas a la AWS página con compras  | El número total de visitas a la página Comprar con AWS. Incluidas las visitas repetidas. | 
| Total de acuerdos de Comprar con AWS página  | El número total de acuerdos creados en la página Comprar con AWS.   | 

## Sección 3: total de clics y datos de tendencias para visualizaciones de páginas y el total de acuerdos
<a name="buy-with-aws-clicks-views"></a>

Esta sección proporciona tendencias mensuales o semanales para un intervalo de fechas específico. En la siguiente tabla se enumeran y describen KPIs:


| Métrica | Description (Descripción) | 
| --- | --- | 
| **Número total de clics en los botones** | El total de clics en los call-to-action botones del sitio web del vendedor. | 
| **Vistas de la página** | El número total de visitas a la página **Comprar con AWS**. Utilice la lista **Mostrar datos por** para elegir entre vistas mensuales y semanales. | 
| **Total de acuerdos** | El total de acuerdos creados en la página **Comprar con AWS**. Utilice la lista **Mostrar datos por** para elegir entre vistas mensuales y semanales. | 

## Sección 4: tasa de abandono de página de inicio de sesión de AWS
<a name="buy-with-aws-drop-off-rate"></a>

En esta sección se muestra la tasa de abandono de la página de inicio de AWS sesión. La tasa es la proporción entre los usuarios que iniciaron sesión y crearon acuerdos y el número de usuarios que solo iniciaron sesión. Use la lista **Mostrar datos por** para filtrar por semana o mes.

## Sección 5: Interacción en la página de compra con AWS adquisición
<a name="buy-with-aws-engagements"></a>

Esta sección proporciona un resumen de las métricas y de las tendencias para un intervalo de fechas específico. En la siguiente tabla, se muestran y describen las métricas. Usa el campo de fecha de la sección de filtro para actualizar el intervalo de fechas.


| Métrica | Description (Descripción) | 
| --- | --- | 
| Número total de visitantes únicos | El número total de usuarios únicos de la página de compras. | 
| Bounce rate (Tasa de rebotes) | La proporción de usuarios que inician sesión y se van después de ver una página del sitio con respecto a los que visitan más de una página. | 
| Tiempo medio de permanencia de los usuarios en minutos | El tiempo transcurrido entre el momento en que el usuario inició sesión y el momento en que salió de la página. | 

## Sección 6: Datos de tendencias para las métricas de participación en la página Comprar con AWS compras
<a name="buy-with-aws-procurement-page-trends"></a>

Los gráficos muestran las tendencias mensuales o semanales de las métricas de la [sección 5](#buy-with-aws-engagements). Use la lista **Mostrar datos por** para elegir entre vistas mensuales y semanales.  