Sorry, edited the above so it works. It looks like you have to declare the columns first if you are pushing just Tuples instead of NamedTuples.
You don’t have to use DataFrames, but its a convenient thing to do, plus you said in your post you are interested in “creating a dataset”.
You can do the same process by initializing an arrray of Any with 3 columns an 0 rows.
julia> df = Array{Any}(undef, 0, 3)
julia> for p in Iterators.product(x, y, z)
global df # because i'm working in REPL I need to declare global in the loop
df = vcat(df, permutedims(collect(p)))
end