Folhas de cálculo dinâmicas em bases de dados

A equipa do BigQuery desenvolveu a capacidade de tratar uma folha de cálculo do Google Sheets como uma tabela numa base de dados. Isto significa que pode juntar uma tabela do BigQuery com mil milhões de linhas a uma tabela de mapeamento com 100 linhas que introduz numa folha de cálculo numa única consulta.

Esta funcionalidade permite-lhe configurar modelos de dados, criar um pipeline de dados para dados ad hoc ou comparar números atualizados com os seus objetivos e projeções mais recentes.

Exemplo

Por exemplo, pode querer modelar nomes de utilizador no Looker que foram recolhidos através de um formulário Google.

Para recolher e modelar as informações no Looker, siga estes passos:

  1. Com o Google Forms, recolha os dados numa folha de cálculo do Google Sheets. Cada envio adiciona uma linha à página.
  2. Partilhe a folha de cálculo com a conta de serviço que usa para se ligar ao Looker ou conceda acesso aos utilizadores com um link (apenas para visualização).
  3. Certifique-se de que a API Drive e a API Sheets estão ativadas para o seu projeto.
  4. Crie uma tabela a partir da interface do BigQuery que obtém o respetivo conteúdo da folha de cálculo.
  5. No seu projeto do Looker, gere um modelo de dados que associe a tabela da folha de cálculo a outros dados do utilizador que já possa ter recolhido, como as localizações dos utilizadores. Também pode usar SQL para normalizar os nomes provenientes da base de dados. Os dados podem ser colocados em cache no BigQuery para evitar uma carga pesada na folha de cálculo.

Segue-se um exemplo do possível aspeto do LookML resultante:

explore: names_sheet {
  persist_for: "60 seconds"

  join: names_facts {
    sql_on: ${names_sheet.normalized_name} = ${names_facts.normalized_name} ;;
    sql_where: ${names_facts.city} ;;
    relationship: one_to_one
  }

  view_name: names_sheet {
    derived_table: {
      persist_for: "2 minutes"
      sql:
        SELECT row_number() OVER() as id, name, UPPER(CASE WHEN REGEXP_MATCH(name, r'\,')
          THEN REGEXP_EXTRACT(name, r', (\w+)')
          ELSE REGEXP_EXTRACT(name, r'^(\w+)')
          END
          ) as normalized_name FROM namesheet.names ;;
    }

    dimension: id {
      type: number
    }

    dimension: name {
      order_by_field: id    # keep the rows in the original order
    }

    dimension: normalized_name {
    }

    measure: count {
      type: count
      drill_fields: [id, name, names_facts.city]
    }

    measure: count_from_new_york_city {
      type: count
      filters: [names_facts.city: "New York City"]
    }

    measure: percentage_from_new_york_city {
      type: number
      sql: ${count_from_new_york_city}/${count} ;;
      value_format_name: percent_2
    }

    measure: average_age_median {
      type: average
      sql: ${names_facts.age_median} ;;
      value_format: "0000"
    }
  }
}

A partir deste modelo, pode criar explorações com os seus dados e criar aparências e painéis de controlo que mostram métricas sobre todos os nomes de utilizador que recolheu do Google Forms e introduziu na folha de cálculo do Google Sheets, bem como outras informações sobre cada utilizador individual.