Ir para conteúdo
  • 0

Ajuda com categorias


Rodrigo Jorrin

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos

Boa noite, @Rodrigo Jorrin;

Criei um script para identificar e criar níveis de hierarquia baseado nos caracteres que o texto da coluna inicia. Percebi que a quantidade de espaços no inicio determina o nível da hierarquia da categoria.

No final a tabela ficaria nesse formato:

image.png.008050632e79beab8d63e571e7ac341e.png

 

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XZPdjqMwDIVfJer1SJSEkHBpgks9goRJoBpNNe//GusAaXf3pmr9l8/nuM/nZcboECKBGDHCdPm4dLpRjb38fjwv4p2d6GujATivlDX19cgLh/GBn5A4Xlvb2faM99hzdRJfG/oVc1oaqdWZjXiLlN/jXJU2FwSMG3iIbsE8ScrG1P8TJHT5eV1rrbpz0IS0okAxYKQHDGHnUNp25aUZVvJAOa61VOYMg7sHFyZYc49wYV4mFDDRzLQQM602RQMxU1q3CGKJYRBLlUIfccaUYWojbZnpJnSpgp+MlKoxxGETcVemqZuuELvgE2t2KFbrV/y1AX8Ta2DuXYlr3Zh357AD7ltKqXQxoafkAh1xY3RbOhJMIwzk70dHY66vlSAlSLzKwp8OpiGIXMLOtu3bWTyEY8zrq3MIbrezNU3RuA9zHzxxfX5FtbYutYQrruRCqli7sDGh8JC13Od28rVblpbTTOx/gt/PUB8vLjzW0QMPkquyrTrXvoe4Ug52rTKF5Ra3lc9uwnFjizyyCYcHf1fx8bFT7D458sR0LO24s+vGyLfcI07nTWlrdFNu7t2Hc7+tFYWRnd796qzV8oXCJeLG1XlIJUY+92MNY22RGR58K4k+yTPRgvSdf/Il7jhtIztdLnYv3LjuX7KajahL0Tlg5v9LcjwQv8MqyEES54bKsqq/fwA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Setor = _t, #"Venda R$" = _t]),
    ChangedType = Table.TransformColumnTypes(Source, {{"Setor", type text}, {"Venda R$", type number}}),
    CountConsecutiveCharacters = (text as text, character as text) =>
        let
            length = Text.Length(text),
            countUntil = List.FirstN(
                List.Generate(
                    () => 0, each _ < length, each _ + 1, each Text.Start(text, _) = Text.Repeat(character, _)
                ),
                each _ = true
            ),
            result = List.Count(countUntil) - 1
        in
            result,
    DefineLevel = Table.AddColumn(ChangedType, "Level", each CountConsecutiveCharacters([Setor], " "), Int64.Type),
    AddLevelColumns = (table as table, currentLevel as number, maxLevel as number, character as text) =>
        let
            newColumn = "Level " & Text.From(currentLevel),
            updatedTable = Table.AddColumn(
                table,
                newColumn,
                each
                    if [Level] = currentLevel - 1 then
                        if currentLevel = 1 then
                            [Setor]
                        else
                            Text.AfterDelimiter([Setor], character, currentLevel - 2)
                    else
                        null,
                type text
            ),
            result =
                if currentLevel = maxLevel then
                    updatedTable
                else
                    @AddLevelColumns(updatedTable, currentLevel + 1, maxLevel, character)
        in
            result,
    MaxLevel = List.Max(DefineLevel[Level]) + 1,
    AddedLevels = AddLevelColumns(DefineLevel, 1, MaxLevel, " "),
    LevelColumns = List.Transform({1..MaxLevel -1}, each "Level " & Text.From(_)),
    FilledDown = Table.FillDown(AddedLevels, LevelColumns),
    RemoveEmpty = Table.SelectRows(FilledDown, each Record.Field(_, "Level " & Text.From(MaxLevel)) <> null),
    SelectColumns = Table.SelectColumns(RemoveEmpty, List.Transform({1..MaxLevel}, each "Level " & Text.From(_)) & {"Venda R$"})
in
    SelectColumns

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Tabela de vendas precisa só puxar o id do produto para identificação de hierarquia de produto, aí você interliga com uma tabela dimensão de produto. Ou vai ter fazer uma solução complicada de M. Não carregue info de produto para a tabela fato, este trabalho é da dimensão.

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...