weekstart – função de script e gráfico
Esta função retorna um valor correspondente ao carimbo de data/hora com o primeiro milissegundo do primeiro dia da semana do calendário que contém a date. O formato de saída padrão é o DateFormat definido no script.
Sintaxe:
WeekStart(date [, period_no[, first_week_day]])
Tipo de dados de retorno: dual
A função weekstart() determina em qual semana a data cai. Em seguida, ela retorna um carimbo de data/hora, em formato de data, para o primeiro milissegundo daquela semana. O primeiro dia da semana é determinado pela variável de ambiente FirstWeekDay. No entanto, isso pode ser substituído pelo argumento first_week_day na função weekstart().
Argumento | Descrição |
---|---|
date | A data ou o carimbo de data/hora a ser avaliado. |
period_no | shift é um inteiro, em que o valor 0 indica a semana que contém a date. Os valores negativos no deslocamento indicam semanas precedentes e os valores positivos indicam semanas subsequentes. |
first_week_day |
Especifica o dia no qual inicia a semana. Se omitido, o valor da variável FirstWeekDay é usado. Os valores possíveis first_week_day são 0 para segunda-feira, 1 para terça, 2 para quarta-feira, 3 para quinta-feira, 4 para sexta-feira, 5 para sábado e 6 para domingo. Para obter mais informações sobre a variável de sistema, consulte FirstWeekDay. |
Quando usar
A função weekstart() é comumente usada como parte de uma expressão quando o usuário deseja que o cálculo use a fração da semana decorrida até o momento. Por exemplo, ela pode ser usada se um usuário deseja calcular o total de salários ganhos pelos funcionários na semana até o momento.
Exemplo | Resultado |
---|---|
weekstart('01/12/2013') | Retorna 01/07/2013. |
weekstart('01/12/2013', -1 ) | Retorna 11/31/2012. |
weekstart('01/12/2013', 0, 1) | Retorna 01/08/2013. |
Configurações regionais
A menos que especificado de outra forma, os exemplos neste tópico usam o seguinte formato de data: MM/DD/AAAA. O formato de data é especificado na instrução SET DateFormat no seu script de carregamento de dados. A formatação de data padrão pode ser diferente no seu sistema devido às suas configurações regionais e outros fatores. Você pode alterar os formatos nos exemplos abaixo para atender às suas necessidades. Ou pode alterar os formatos no seu script de carregamento para corresponder a esses exemplos.
As configurações regionais padrão nos aplicativos são baseadas nas configurações regionais do sistema do computador ou servidor em que o Qlik Sense está instalado. Se o servidor Qlik Sense que você está acessando estiver definido como Suécia, o Editor de carregamento de dados usará as configurações regionais suecas para datas, horas e moedas. Essas configurações de formato regional não estão relacionadas ao idioma exibido na interface do usuário do Qlik Sense. O Qlik Sense será exibido no mesmo idioma do navegador que você está usando.
Exemplo 1: Sem argumentos adicionais
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém:
-
Um conjunto de dados contendo um conjunto de transações para 2022, que é carregado em uma tabela chamada Transactions.
-
O campo de data fornecido no formato da variável de sistema DateFormat (MM/DD/AAAA).
-
A criação de um campo, start_of_week, que retorna um carimbo de data/hora para o início da semana em que as transações ocorreram.
Script de carregamento
SET FirstWeekDay=6;
Transactions:
Load
*,
weekstart(date) as start_of_week,
timestamp(weekstart(date)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
O campo start_of_week é criado na instrução de carregamento anterior usando a função weekstart() e transmitindo o campo de data como o argumento da função.
A função weekstart() identifica inicialmente em qual semana o valor da data se enquadra, retornando um carimbo de data/hora para o primeiro milissegundo dessa semana.
A transação 8191 ocorreu em 5 de fevereiro. A variável de sistema FirstWeekDay define o primeiro dia da semana como domingo. A função weekstart() identifica que o primeiro domingo antes de 5 de fevereiro (e, portanto, o início da semana) foi em 30 de janeiro. Portanto, o valor start_of_week dessa transação retorna o primeiro milissegundo desse dia, que é 30 de janeiro às 12:00:00.
Exemplo 2: period_no
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém:
-
O mesmo conjunto de dados e cenário do primeiro exemplo.
-
A criação de um campo previous_week_start, que retorna o carimbo de data/hora do início do trimestre antes da transação.
Script de carregamento
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,-1) as previous_week_start,
timestamp(weekstart(date,-1)) as previous_week_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
date
-
previous_week_start
-
previous_week_start_timestamp
date | previous_week_start | previous_week_start_timestamp |
---|---|---|
1/7/2022 | 12/26/2021 | 12/26/2021 12:00:00 AM |
1/19/2022 | 01/09/2022 | 1/9/2022 12:00:00 AM |
2/5/2022 | 01/23/2022 | 1/23/2022 12:00:00 AM |
2/28/2022 | 02/20/2022 | 2/20/2022 12:00:00 AM |
3/16/2022 | 03/06/2022 | 3/6/2022 12:00:00 AM |
4/1/2022 | 03/20/2022 | 3/20/2022 12:00:00 AM |
5/7/2022 | 04/24/2022 | 4/24/2022 12:00:00 AM |
5/16/2022 | 05/08/2022 | 5/8/2022 12:00:00 AM |
6/15/2022 | 06/05/2022 | 6/5/2022 12:00:00 AM |
6/26/2022 | 06/19/2022 | 6/19/2022 12:00:00 AM |
7/9/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/22/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/23/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/27/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
8/2/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/8/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/19/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
9/26/2022 | 09/18/2022 | 9/18/2022 12:00:00 AM |
10/14/2022 | 10/02/2022 | 10/2/2022 12:00:00 AM |
10/29/2022 | 10/16/2022 | 10/16/2022 12:00:00 AM |
Nesse caso, como um period_no de -1 foi usado como o argumento de deslocamento na função weekstart(), a função primeiro identifica a semana em que as transações ocorrem. Em seguida, ela procura uma semana antes e identifica o primeiro milissegundo daquela semana.
A transação 8196 ocorreu em 15 de junho. A função weekstart() identifica que a semana começa em 12 de junho. Portanto, a semana anterior começou em 5 de junho às 12h; esse é o valor retornado para o campo previous_week_start.
Exemplo 3: first_week_day
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém o mesmo conjunto de dados e cenário do primeiro exemplo. No entanto, neste exemplo, precisamos definir terça-feira como o primeiro dia da semana de trabalho.
Script de carregamento
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,0,1) as start_of_week,
timestamp(weekstart(date,0,1)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/04/2022 | 1/4/2022 12:00:00 AM |
1/19/2022 | 01/18/2022 | 1/18/2022 12:00:00 AM |
2/5/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
2/28/2022 | 02/22/2022 | 2/22/2022 12:00:00 AM |
3/16/2022 | 03/15/2022 | 3/15/2022 12:00:00 AM |
4/1/2022 | 03/29/2022 | 3/29/2022 12:00:00 AM |
5/7/2022 | 05/03/2022 | 5/3/2022 12:00:00 AM |
5/16/2022 | 05/10/2022 | 5/10/2022 12:00:00 AM |
6/15/2022 | 06/14/2022 | 6/14/2022 12:00:00 AM |
6/26/2022 | 06/21/2022 | 6/21/2022 12:00:00 AM |
7/9/2022 | 07/05/2022 | 7/5/2022 12:00:00 AM |
7/22/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/23/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/27/2022 | 07/26/2022 | 7/26/2022 12:00:00 AM |
8/2/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/8/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/19/2022 | 08/16/2022 | 8/16/2022 12:00:00 AM |
9/26/2022 | 09/20/2022 | 9/20/2022 12:00:00 AM |
10/14/2022 | 10/11/2022 | 10/11/2022 12:00:00 AM |
10/29/2022 | 10/25/2022 | 10/25/2022 12:00:00 AM |
Nesse caso, como o argumento first_week_date de 1 é usado na função weekstart(), ele define o primeiro dia da semana como terça-feira.
A transação 8191 ocorreu em 5 de fevereiro. A função weekstart() identifica que a primeira terça-feira antes dessa data (e, portanto, o início da semana e o valor retornado) foi 1º de fevereiro às 12h.
Exemplo 4: Exemplo de objeto de gráfico
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém o mesmo conjunto de dados e cenário do primeiro exemplo.
No entanto, neste exemplo, o conjunto de dados inalterado é carregado no aplicativo. O cálculo que retorna um carimbo de data/hora para o início da semana em que as transações ocorreram é criado como uma medida em um objeto de gráfico do aplicativo.
Script de carregamento
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão: date.
Para calcular o início da semana em que uma transação ocorre, adicione as seguintes medidas:
-
=weekstart(date)
-
=timestamp(weekstart(date))
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
A medida start_of_week é criada no objeto de gráfico usando a função weekstart() e transmitindo o campo date como o argumento da função.
A função weekstart() identifica inicialmente em qual semana o valor da data se enquadra, retornando um carimbo de data/hora para o primeiro milissegundo dessa semana.
A transação 8191 ocorreu em 5 de fevereiro. A variável de sistema FirstWeekDay define o primeiro dia da semana como domingo. A função weekstart() identifica que o primeiro domingo antes de 5 de fevereiro (e, portanto, o início da semana) foi 30 de janeiro. Portanto, o valor start_of_week dessa transação retorna o primeiro milissegundo desse dia, que é 30 de janeiro às 12h00.
Exemplo 5: Cenário
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém:
-
Um conjunto de dados que é carregado em uma tabela denominada Payroll.
-
Dados que consistem em IDs de funcionários, nomes de funcionários e o salário diário ganho por cada funcionário.
Os funcionários começam a trabalhar na segunda-feira e trabalham seis dias por semana. A variável de sistema FirstWeekDay não deve ser modificada.
O usuário final gostaria de um objeto de gráfico que exiba, por ID do funcionário e nome do funcionário, os salários ganhos na semana atual.
Script de carregamento
Payroll:
Load
*
Inline
[
employee_id,employee_name,day_rate
182,Mark, $150
183,Deryck, $125
184,Dexter, $125
185,Sydney,$270
186,Agatha,$128
];
Resultados
Faça o seguinte:
-
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
employee_id
-
employee_name
-
-
Em seguida, crie uma medida para calcular os salários ganhos na semana até o momento:
=if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6)
-
Defina o Formato numérico da medida como Dinheiro.
employee_id | employee_name | =if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6) |
---|---|---|
182 | Mark | $600.00 |
183 | Deryck | $500.00 |
184 | Dexter | $500.00 |
185 | Sydney | $1080.00 |
186 | Agatha | $512.00 |
A função weekstart(), ao usar a data de hoje como primeiro argumento e 0 como terceiro argumento, define segunda-feira como o primeiro dia da semana e retorna a data de início da semana atual. Ao subtrair esse resultado da data atual, a expressão retorna o número de dias decorridos até o momento nesta semana.
A condição então avalia se houve mais de seis dias nesta semana. Nesse caso, o day_rate do funcionário é multiplicado por 6 dias. Caso contrário, o day_rate é multiplicado pelo número de dias que ocorreram até o momento nesta semana.