



let
Fonte = fx_API_query("CadUsuario/GetAllUsers", api_key),
#"/CadUsuario/GetAllUsers Expandido" = Table.ExpandRecordColumn(Fonte, "CadUsuario/GetAllUsers", {"nomeUsuario", "dataInicio", "situacao", "tipoUsuario", "email", "telefone", "id"}, {"nomeUsuario", "dataInicio", "situacao", "tipoUsuario", "email", "telefone", "id"}),
#"Duplicatas Removidas" = Table.Distinct(#"/CadUsuario/GetAllUsers Expandido", {"id"}),
#"Tipo Alterado" = Table.TransformColumnTypes(#"Duplicatas Removidas",{{"nomeUsuario", type text}, {"dataInicio", type datetime}, {"situacao", type logical}, {"tipoUsuario", type text}, {"email", type text}, {"telefone", type any}, {"id", Int64.Type}}),
#"Data Inserida" = Table.AddColumn(#"Tipo Alterado", "Data", each DateTime.Date([dataInicio]), type date)
in
#"Data Inserida"let
// --- Parâmetros ---------------------------------------------------------
EndpointPath = "CadUsuario/GetAllUsers",
// --- 1) Consulta a API ---------------------------------------------------
FonteAPI = fx_API_query(EndpointPath, api_key),
// --- 2) Expande os campos do registro retornado -------------------------
UsuariosExpandido =
Table.ExpandRecordColumn(
FonteAPI,
EndpointPath,
{"nomeUsuario", "dataInicio", "situacao", "tipoUsuario", "email", "telefone", "id"},
{"NomeUsuario", "DataInicio", "Situacao", "TipoUsuario", "Email", "Telefone", "Id"}
),
// --- 3) Remove possíveis duplicidades pelo Id ---------------------------
UsuariosUnicos = Table.Distinct(UsuariosExpandido, {"Id"}),
// --- 4) Ajusta tipos de dados -------------------------------------------
TiposConvertidos =
Table.TransformColumnTypes(
UsuariosUnicos,
{
{"NomeUsuario", type text},
{"DataInicio", type datetime},
{"Situacao", type logical},
{"TipoUsuario", type text},
{"Email", type text},
{"Telefone", type any},
{"Id", Int64.Type}
}
),
// --- 5) Cria coluna Data (apenas a parte da data) -----------------------
UsuariosComData =
Table.AddColumn(
TiposConvertidos,
"Data",
each DateTime.Date([DataInicio]),
type date
)
in
UsuariosComDataTable.SelectColumns(Source, {"Pedido", "Cliente", "Valor"})let
// Parâmetros
UTCOffsetHoras = -3, // ajuste de fuso (ex.: Brasília = UTC-3)
ETLOffsetHoras = -6, // atraso/adiantamento para refletir janelas de ETL
// 1. Captura o timestamp em UTC
HoraUTC = DateTimeZone.FixedUtcNow(),
// 2. Converte para o fuso desejado
HoraComFuso = DateTimeZone.SwitchZone(HoraUTC, UTCOffsetHoras),
// 3. Remove o componente de fuso para obter um DateTime puro
HoraSemZona = DateTimeZone.RemoveZone(HoraComFuso),
// 4. Aplica o offset de ETL
HoraFinal = HoraSemZona + #duration(0, ETLOffsetHoras, 0, 0),
// 5. Gera uma tabela de uma linha só, com a coluna “AtualizadoEm”
Fonte = #table(
{"AtualizadoEm"},
{ { HoraFinal } }
),
// 6. Define o tipo correto da coluna
FonteTyped = Table.TransformColumnTypes(
Fonte,
{ {"AtualizadoEm", type datetime} }
)
in
FonteTyped FixedUtcNow() garante que o serviço e o Desktop usam o mesmo relógio. SwitchZone + RemoveZone ajustam o fuso sem perder rastreabilidade.#duration com ETLOffsetHoras atrasa ou adianta o timestamp conforme suas janelas de dataflows dependentes.Data/Hora de atualização = SELECTEDVALUE('MetaRefresh'[AtualizadoEm])
dd/MM/yyyy HH:mm) e posicione o cartão em um local visível, como rodapé ou canto superior.d_Calendario é a tabela de datas principal do modelo, criada com CALENDAR + ADDCOLUMNS, cobrindo um período contínuo e completo com colunas úteis como Ano, Mês, Trimestre, Dia da Semana e chaves de ordenação.CALENDARAUTO, oferecendo mais controle, previsibilidade e performance, além de estar pronta para ser marcada como Date Table. Isso garante:É a base ideal para qualquer modelo com análise temporal no Power BI.
d_Calendario =
VAR _datamin = MIN( TabelaFato[colunaData] ) //substituir pela coluna de data da tabela fato principal
VAR _datamax = MAX( TabelaFato[colunaData] ) //substituir pela coluna de data da tabela fato principal
VAR _start = DATE( YEAR( _datamin ), 1, 1 )
VAR _end = DATE( YEAR( _datamax ), 12, 31 )
VAR _calendar = CALENDAR( _start, _end )
VAR _add = ADDCOLUMNS( _calendar ,
"Ano", DATE(YEAR([Date]), 1 , 1 ),
"Ano Número", YEAR([Date]) ,
"Mês Texto", FORMAT([Date],"mmm-yy"),
"Class-Mes", YEAR([Date])*100 + MONTH([Date]),
"Mês", EOMONTH([Date], -1) + 1,
"Semestre", IF(MONTH([Date]) <= 6, DATE(YEAR([Date]), 1, 1), DATE(YEAR([Date]), 7, 1)),
"Trimestre", DATE(YEAR([Date]), ((QUARTER([Date]) - 1) * 3) + 1, 1),
"Dia da Semana" , WEEKDAY([Date]),
"Dia da Semana Texto" ,
SWITCH(
WEEKDAY([Date]),
1, "Domingo",
2, "Segunda",
3, "Terça",
4, "Quarta",
5, "Quinta",
6, "Sexta",
7, "Sábado",
BLANK()
),
"Dia Número", DAY([Date])
)
RETURN
_addd_Calendario_Especial é uma dimensão de datas “auxiliar”, criada para complementar a d_Calendario principal. Enquanto a d_Calendario garante granularidade diária e colunas clássicas (Ano, Mês, Trimestre etc.), a d_Calendario_Especial agrupa essas mesmas datas em períodos relativos prontos para uso – como “Hoje”, “Últimos 30 Dias”, “Mês Anterior”, “Ano até Agora (YTD)” e “Últimos 12 Meses”.Period identificando a qual janela ela pertence, você pode:Period ou Sigla) e deixá-los multi-selecionáveis – permitindo comparar, por exemplo, YTD x PY1 ou “Mês Atual” x “Mês Anterior” sem escrever nenhuma medida adicional.d_Calendario.d_Calendario_Especial; sua medida de vendas, receita ou KPIs já calculará o subtotal correto porque a tabela carrega todas as datas correspondentes ao período escolhido.TODAY(), garantindo que “Últimos 7 Dias” ou “Ano até Agora” mudem diariamente sem manutenção manual. Como os limites (start/end) são sincronizados com a d_Calendario, todos os dias do modelo permanecem cobertos e coerentes.

Em resumo: ad_Calendario_Especialcoloca na mão do analista um painel de filtros prontos, tornando análises comparativas e rolling windows muito mais rápidas, legíveis e fáceis de manter – especialmente quando diferentes usuários precisam ver várias janelas de tempo lado a lado no mesmo relatório.
d_Calendario_Especial =
VAR _incio = MIN(d_Calendario[Date])
VAR _fim = MAX(d_Calendario[Date] )
VAR _datetable = CALENDAR ( _incio, _fim )
VAR _today = TODAY()
VAR _month = MONTH(_today)
VAR _day = day(_today)
VAR _year = YEAR(_today)
VAR _lastyear1 = YEAR(_today)-1
VAR _lastyear2 = YEAR(_today)-2
VAR _thismonthstart = DATE(_year,_month,1)
VAR _thismonthend = EOMONTH(DATE(_year, _month, 1),0)
VAR _thisyearstart = DATE(_year,1,1)
VAR _thisyearend = DATE(_year,12,31)
VAR _lastyearstart1= DATE(_lastyear1,1,1)
VAR _lastyearend1= DATE(_lastyear1,12,31)
VAR _lastyearstart2= DATE(_lastyear2,1,1)
VAR _lastyearend2= DATE(_lastyear2,12,31)
VAR _lastmonthstart = EDATE(_thismonthstart,-1)
VAR _lastmonthend = _thismonthstart-1
VAR _thisquarterstart = DATE(YEAR(_today),SWITCH(true,_month>9,10,_month>6,7,_month>3,4,1),1)
VAR _last12month = EDATE(_thismonthstart,-12)
RETURN
UNION(
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today ),"Period","Hoje", "Sigla", "HJ" ,"Order",1),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -1 ),"Period","Ontem", "Sigla", "LD1" ,"Order",2),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -7 && [Date] <= _today ),"Period","Últimos 7 Dias", "Sigla", "LD7" ,"Order",3),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -15 && [Date] <= _today ),"Period","Últimos 15 Dias", "Sigla", "LD15" ,"Order",4),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -30 && [Date] <= _today ),"Period","Últimos 30 Dias", "Sigla", "LD30" ,"Order",5),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -60 && [Date] <= _today ),"Period","Últimos 60 Dias", "Sigla", "LD60" ,"Order",6),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -90 && [Date] <= _today ),"Period","Últimos 90 Dias", "Sigla", "LD90" ,"Order",7),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -180 && [Date] <= _today ),"Period","Últimos 180 Dias", "Sigla", "LD180" ,"Order",8),
ADDCOLUMNS(FILTER(_datetable,[Date] >= _today -360 && [Date] <= _today ),"Period","Últimos 360 Dias", "Sigla", "LD360" ,"Order",9),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _lastmonthstart && [Date] <= _lastmonthend ),"Period","Mês Anterior", "Sigla", "LM" ,"Order",1),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _lastmonthstart && [Date] <= _lastmonthend ),"Period","Mês Anterior", "Sigla", "LM" ,"Order",1),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _thismonthstart && [Date] <= _thismonthend ),"Period","Mês Atual", "Sigla", "CM", "Order",2),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _thisyearstart && [Date] <= _thismonthend ) ,"Period","Ano até Agora", "Sigla", "YTD", "Order",3),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _thisyearstart && [Date]<= _thisyearend ),"Period","Ano até Final", "Sigla","FY", "Order",4),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _last12month && [Date] <= _thismonthend ) ,"Period","Últimos 12 meses", "Sigla","LM12", "Order",5),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _lastyearstart1 && [Date] <= _lastyearend1),"Period","Ano Anterior 1", "Sigla","PY1", "Order",6),
ADDCOLUMNS(FILTER(_datetable,[Date]>= _lastyearstart2 && [Date] <= _lastyearend2),"Period","Ano Anterior 2", "Sigla", "PY2", "Order",7),
ADDCOLUMNS(_datetable, "Period", "Todos", "Sigla","TDS" , "Order", 10)
)Verbo + Objeto ou Métrica (Contexto)Total VendasQtd Clientes ÚnicosTicket Médio (Mês)SomaAcumulada_Vendas, VariacaoMensal_YoY.Total Vendas em vez de TotalVendas.Vendas Acumuladas (Ano)Margem Bruta (%)Qtd Leads (Segmento Enterprise)(Aux) tudo que serve de cálculo intermediário e não deve aparecer em visuais.(Aux) Cor Dinâmica Venda Líquida(Aux) Fator de Conversão
Lucro % =
VAR _Vendas = [Total Vendas]
VAR _Custos = [Total Custos]
VAR _return = DIVIDE(_Vendas - _Custos, _Vendas)
RETURN _return// Calcula clientes ativos (aqueles sem data de cancelamento até hoje)
Clientes Ativos =
CALCULATE(
DISTINCTCOUNT(Clientes[ClienteID]);
FILTER(Clientes; Clientes[DataCancelamento] = BLANK() || Clientes[DataCancelamento] > TODAY())
)